{"id":45501,"date":"2026-04-23T10:20:53","date_gmt":"2026-04-23T08:20:53","guid":{"rendered":"https:\/\/www.europe-hotels.org\/jet-popup\/mobile-pt\/"},"modified":"2026-05-13T16:27:46","modified_gmt":"2026-05-13T14:27:46","slug":"mobile-pt","status":"publish","type":"jet-popup","link":"https:\/\/www.europe-hotels.org\/pt\/jet-popup\/mobile-pt\/","title":{"rendered":"Mobile PT"},"content":{"rendered":"\t\t<div data-elementor-type=\"jet-popup\" data-elementor-id=\"45501\" class=\"elementor elementor-45501\" data-elementor-post-type=\"jet-popup\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bf68fad e-con-full elementor-hidden-desktop elementor-hidden-laptop e-flex e-con e-parent\" data-id=\"bf68fad\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\" data-no-translation=\"\">\n\t\t\t\t<div class=\"elementor-element elementor-element-18504d2 elementor-widget elementor-widget-image\" data-id=\"18504d2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"400\" height=\"87\" src=\"https:\/\/www.europe-hotels.org\/wp-content\/uploads\/2019\/09\/LOGO_EUROPE_CORPORATE.png\" class=\"attachment-large size-large wp-image-2690\" alt=\"\" srcset=\"https:\/\/www.europe-hotels.org\/wp-content\/uploads\/2019\/09\/LOGO_EUROPE_CORPORATE.png 400w, https:\/\/www.europe-hotels.org\/wp-content\/uploads\/2019\/09\/LOGO_EUROPE_CORPORATE-300x65.png 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d4aacee elementor-widget elementor-widget-html\" data-id=\"d4aacee\" data-element_type=\"widget\" data-e-type=\"widget\" data-no-translation=\"\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n  \/* ====== EUROPE HOTELS \u2013 MOBILE\/TABLET ====== *\/\n  #beWidgetPTRes,\n  #beWidgetPTRes * {\n    box-sizing: border-box;\n    font-family: inherit;\n  }\n\n  \/* Reset seguro para botones\/inputs dentro del widget *\/\n  #beWidgetPTRes button,\n  #beWidgetPTRes input,\n  #beWidgetPTRes select {\n    font: inherit;\n  }\n\n  #beWidgetPTRes button {\n    -webkit-appearance: none;\n    appearance: none;\n  }\n\n  #beWidgetPTRes {\n    --brand: #001D7E;\n    --brand-600: #2b3b6a;\n    --text: #3a3a3a;\n    --border: #e6e6e7;\n    --muted: #f5f6f8;\n    --ring: #eaf0ff;\n    --shadow: 0 10px 35px rgba(0, 0, 0, .12);\n    font-size: 16px;\n    line-height: 1.4;\n    color: var(--text);\n  }\n\n  \/* ===== SVG: fuerzo color aunque traigan fill\/stroke inline ===== *\/\n  #beWidgetPTRes svg {\n    display: block;\n    color: var(--brand);\n  }\n\n  \/* Todo hijo que tenga fill\/stroke inline lo forzamos a currentColor *\/\n  #beWidgetPTRes svg *,\n  #beWidgetPTRes svg [fill],\n  #beWidgetPTRes svg [stroke] {\n    fill: currentColor !important;\n    stroke: currentColor !important;\n  }\n\n  \/* ===== Barra ===== *\/\n  #beWidgetPTRes .be-floating-bar {\n    display: grid !important;\n    grid-template-columns: 1fr;\n    row-gap: 12px;\n    background: #fff;\n    border-radius: 14px;\n    padding: 12px;\n    width: 100%;\n    box-shadow: var(--shadow);\n  }\n\n  #beWidgetPTRes .be-seg {\n    display: flex !important;\n    align-items: center;\n    gap: .6rem;\n    background: #fff;\n    border: 1px solid #fff;\n    border-radius: 12px;\n    padding: 10px 12px;\n    cursor: pointer;\n    min-height: 52px;\n  }\n\n  \/* Tama\u00f1o unificado de iconos en la barra *\/\n  #beWidgetPTRes .be-seg svg {\n    width: 22px;\n    height: 22px;\n    flex: 0 0 22px;\n    overflow: visible;\n  }\n\n  #beWidgetPTRes .be-value {\n    font-weight: 500;\n    color: var(--brand);\n    line-height: 1.15;\n  }\n\n  #beWidgetPTRes .be-cta {\n    background: var(--brand);\n    color: #fff;\n    border: none;\n    border-radius: 12px;\n    font-weight: 700;\n    padding: 1rem;\n    cursor: pointer;\n    width: 100%;\n  }\n\n  #beWidgetPTRes .be-cta:hover {\n    filter: brightness(.96);\n  }\n\n  #beWidgetPTRes .be-promo {\n    width: 100%;\n    border: none;\n    outline: none;\n    font-weight: 600;\n    color: var(--brand);\n    background: transparent;\n  }\n\n  \/* ===== Backdrop \/ Modales ===== *\/\n  #beWidgetPTRes .be-modal-backdrop {\n    position: fixed;\n    inset: 0;\n    background: rgba(22, 22, 22, .52);\n    opacity: 0;\n    visibility: hidden;\n    z-index: 99998;\n    pointer-events: none;\n  }\n\n  #beWidgetPTRes .be-modal-backdrop.open {\n    opacity: 1;\n    visibility: visible;\n    pointer-events: auto;\n  }\n\n  #beWidgetPTRes .be-modal {\n    position: fixed;\n    left: 50%;\n    top: 50%;\n    transform: translate(-50%, -50%);\n    background: #fff;\n    border-radius: 14px;\n    box-shadow: 0 30px 80px rgba(0, 0, 0, .22);\n    width: min(640px, 96vw);\n    max-height: 90vh;\n    color: var(--text);\n    opacity: 0;\n    visibility: hidden;\n    z-index: 99999;\n    overflow: hidden;\n  }\n\n  #beWidgetPTRes .be-modal.open {\n    opacity: 1;\n    visibility: visible;\n  }\n\n  #beWidgetPTRes .be-body {\n    padding: 18px 20px;\n    max-height: calc(90vh - 64px);\n    overflow: auto;\n  }\n\n  #beWidgetPTRes .be-ft {\n    padding: 16px 20px;\n    display: flex;\n    justify-content: flex-end;\n    gap: 10px;\n  }\n\n  #beWidgetPTRes .be-btn {\n    border: 1px solid var(--border);\n    background: #fff;\n    border-radius: 10px;\n    padding: .65rem 1rem;\n    cursor: pointer;\n  }\n\n  #beWidgetPTRes .be-btn-primary {\n    background: var(--brand);\n    color: #fff;\n    border-color: var(--brand);\n  }\n\n  \/* Tama\u00f1os modales *\/\n  #beWidgetPTRes #beModalHotelPTRes {\n    width: min(420px, 94vw);\n  }\n\n  #beWidgetPTRes #beModalFechasPTRes {\n    width: min(540px, 96vw);\n  }\n\n  #beWidgetPTRes #beModalPaxPTRes {\n    width: min(560px, 94vw);\n  }\n\n  \/* ===== Calendario ===== *\/\n  #beWidgetPTRes .cal-wrap {\n    display: grid;\n    grid-template-columns: 1fr !important;\n    gap: 12px;\n  }\n\n  #beWidgetPTRes .cal-nav {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 14px;\n  }\n\n  #beWidgetPTRes .cal-arrow {\n    width: 36px;\n    height: 36px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    border: 1px solid #fff;\n    border-radius: 100px;\n    background: #fff;\n    cursor: pointer;\n  }\n\n  #beWidgetPTRes .cal-arrow:hover {\n    background: var(--border);\n  }\n\n  #beWidgetPTRes .cal-month {\n    border-radius: 12px;\n    padding: 12px;\n  }\n\n  #beWidgetPTRes .cal-title {\n    font-weight: 800;\n    color: var(--brand);\n    text-align: center;\n    margin: 6px 0 10px;\n  }\n\n  #beWidgetPTRes .cal-grid {\n    display: grid;\n    grid-template-columns: repeat(7, 1fr);\n    gap: 6px;\n  }\n\n  #beWidgetPTRes .cal-dow {\n    font-size: .8rem;\n    text-align: center;\n    color: #7a7f86;\n    padding: 6px 0;\n  }\n\n  #beWidgetPTRes .cal-day {\n    text-align: center;\n    padding: 10px;\n    border: 1px solid white;\n    border-radius: 5px;\n    cursor: pointer;\n    background: #fff;\n  }\n\n  #beWidgetPTRes .cal-day:hover {\n    background: var(--brand);\n    color: #fff;\n  }\n\n  #beWidgetPTRes .cal-day.muted {\n    color: #b9bfc8;\n    background: #fafafa;\n    cursor: default;\n  }\n\n  #beWidgetPTRes .cal-day.disabled {\n    opacity: .45;\n    cursor: not-allowed;\n  }\n\n  #beWidgetPTRes .cal-day.start,\n  #beWidgetPTRes .cal-day.end {\n    background: var(--brand);\n    color: #fff;\n    border-color: var(--brand);\n    font-weight: 800;\n  }\n\n  #beWidgetPTRes .cal-day.in-range {\n    background: var(--ring);\n    border-color: #dfe7ff;\n  }\n\n  \/* ===== Ocupaci\u00f3n ===== *\/\n  #beWidgetPTRes .occ-room {\n    border-radius: 12px;\n    margin: 14px 0;\n    overflow: hidden;\n  }\n\n  #beWidgetPTRes .occ-head {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    width: 100%;\n    background: #fff;\n    padding: 16px 14px;\n    border: none;\n  }\n\n  #beWidgetPTRes .occ-head svg {\n    width: 22px;\n    height: 22px;\n    flex: 0 0 22px;\n  }\n\n  #beWidgetPTRes .occ-title {\n    font-weight: 700;\n    color: var(--brand);\n    font-size: 1.05rem;\n    text-align: left;\n  }\n\n  #beWidgetPTRes .occ-body {\n    padding: 18px 16px;\n    background: #fff;\n  }\n\n  #beWidgetPTRes .occ-row {\n    display: grid;\n    grid-template-columns: 1fr auto;\n    align-items: center;\n    padding: 14px 0;\n    gap: 12px;\n  }\n\n  #beWidgetPTRes .occ-label {\n    font-weight: 800;\n    color: var(--brand);\n    letter-spacing: .5px;\n    text-transform: uppercase;\n  }\n\n  \/* Stepper *\/\n  #beWidgetPTRes .stepper {\n    display: inline-grid;\n    grid-template-columns: 36px 56px 36px;\n    align-items: center;\n    border: 1px solid var(--brand);\n    border-radius: 8px;\n    overflow: hidden;\n  }\n\n  #beWidgetPTRes .st-btn {\n    all: unset;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 36px;\n    height: 40px;\n    background: var(--brand);\n    color: #fff;\n    font-weight: 700;\n    cursor: pointer;\n  }\n\n  #beWidgetPTRes .st-value {\n    all: unset;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 56px;\n    height: 40px;\n    background: #fff;\n    color: #333;\n    font-weight: 700;\n    border-left: 1px solid #e2e2e6;\n    border-right: 1px solid #e2e2e6;\n    font-variant-numeric: tabular-nums;\n  }\n\n  #beWidgetPTRes .st-btn:disabled {\n    opacity: .45;\n    cursor: not-allowed;\n  }\n\n  \/* Pill edad (matching desktop) *\/\n  #beWidgetPTRes .age-pill {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 8px;\n    border: 2px solid var(--brand);\n    color: var(--brand);\n    border-radius: 999px;\n    padding: 10px 16px;\n    min-width: 132px;\n    font-weight: 600;\n    background: #fff;\n  }\n\n  #beWidgetPTRes .age-select {\n    appearance: none;\n    border: none;\n    background: transparent;\n    color: inherit;\n    font: inherit;\n    cursor: pointer;\n    outline: none;\n    padding: 0;\n    line-height: 1;\n    min-width: 60px;\n    text-align: center;\n  }\n\n  \/* Eliminar *\/\n  #beWidgetPTRes .occ-del {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    color: var(--brand);\n    cursor: pointer;\n    margin-top: 6px;\n  }\n\n  #beWidgetPTRes .occ-del:hover {\n    color: #6d7179;\n  }\n\n  \/* Adicionar quarto *\/\n  #beWidgetPTRes #beAddRoomPTRes {\n    width: 100%;\n    background: #fff !important;\n    border: 2px solid #cfd6e5 !important;\n    color: var(--brand) !important;\n    font-weight: 700;\n    padding: 14px 16px !important;\n    border-radius: 12px !important;\n  }\n\n  #beWidgetPTRes #beAddRoomPTRes:hover {\n    background: #f7fbff !important;\n    border-color: #b9c6ea !important;\n  }\n\n  #beWidgetPTRes #beAddRoomPTRes:disabled {\n    opacity: .5;\n    cursor: not-allowed;\n  }\n\n  \/* ===== Lista de hoteles ===== *\/\n  #beWidgetPTRes .be-list {\n    max-height: 380px;\n    overflow: auto;\n    padding: 4px 6px;\n  }\n\n  #beWidgetPTRes .be-group {\n    padding: 10px 8px 6px;\n    font-size: 1rem;\n    font-weight: 800;\n    color: var(--brand);\n    letter-spacing: .3px;\n  }\n\n  #beWidgetPTRes .be-item {\n    display: flex;\n    align-items: center;\n    gap: .6rem;\n    padding: 10px 10px;\n    border-radius: 10px;\n    cursor: pointer;\n    color: #1b2a6d;\n  }\n\n  #beWidgetPTRes .be-item:hover {\n    background: #f7faff;\n  }\n\n  \/* Iconos alineados y tama\u00f1o consistente en lista *\/\n  #beWidgetPTRes .be-item svg {\n    width: 20px;\n    height: 20px;\n    flex: 0 0 20px;\n    color: var(--brand);\n  }\n\n  \/* Elementor\/JetPopup wrapper *\/\n  .elementor-popup-modal .elementor-container,\n  .jet-popup .elementor-container {\n    min-height: 100vh !important;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 20px;\n    padding-bottom: max(20px, env(safe-area-inset-bottom));\n    overflow: visible !important;\n  }\n\n  \/* Breakpoints *\/\n  @media (max-width:480px) {\n    #beWidgetPTRes {\n      font-size: 15px;\n    }\n\n    #beWidgetPTRes #beModalPaxPTRes {\n      width: 94vw;\n    }\n\n    #beWidgetPTRes .occ-row {\n      grid-template-columns: 1fr;\n      gap: 10px;\n      padding: 10px 0;\n    }\n\n    #beWidgetPTRes .stepper {\n      justify-self: start;\n    }\n  }\n\n  @media (max-width:768px) {\n    #beWidgetPTRes #beModalPaxPTRes {\n      width: 96vw;\n    }\n\n    #beWidgetPTRes .be-body {\n      max-height: calc(92vh - 64px);\n    }\n  }\n<\/style>\n\n<div id=\"beWidgetPTRes\">\n  <div id=\"beBarPTRes\" class=\"be-floating-bar\" data-endpoint=\"https:\/\/booking.europe-hotels.org\/BookingEngine\/Landing\"\n    data-portal=\"1501\" data-language=\"8\">\n\n    <!-- Hotel -->\n    <button class=\"be-seg\" id=\"segHotelPTRes\" type=\"button\" aria-haspopup=\"dialog\">\n      <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"15.75\" height=\"20.945\" viewBox=\"0 0 15.75 20.945\">\n        <path\n          d=\"M11.156-10.5A3.28,3.28,0,0,1,7.875-7.219,3.28,3.28,0,0,1,4.594-10.5a3.28,3.28,0,0,1,3.281-3.281A3.28,3.28,0,0,1,11.156-10.5ZM7.875-8.531A1.969,1.969,0,0,0,9.844-10.5a1.969,1.969,0,0,0-1.969-1.969A1.969,1.969,0,0,0,5.906-10.5,1.969,1.969,0,0,0,7.875-8.531ZM15.75-10.5c0,3.585-4.8,9.967-6.9,12.6A1.239,1.239,0,0,1,6.9,2.1C4.762-.533,0-6.915,0-10.5a7.875,7.875,0,0,1,7.875-7.875A7.876,7.876,0,0,1,15.75-10.5ZM7.875-17.062A6.561,6.561,0,0,0,1.312-10.5a7.2,7.2,0,0,0,.679,2.6A25.408,25.408,0,0,0,3.779-4.532a61.342,61.342,0,0,0,4.1,5.746,61.622,61.622,0,0,0,4.1-5.746A25.513,25.513,0,0,0,13.757-7.9a7.148,7.148,0,0,0,.681-2.6A6.561,6.561,0,0,0,7.875-17.062Z\"\n          transform=\"translate(0 18.375)\" \/>\n      <\/svg>\n      <div class=\"be-mono\"><span id=\"beHotelLabelPTRes\" class=\"be-value\">Europe Hotels<\/span><\/div>\n    <\/button>\n\n    <!-- Fechas -->\n    <button class=\"be-seg\" id=\"segFechasPTRes\" type=\"button\" aria-haspopup=\"dialog\">\n      <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 32 32\" aria-hidden=\"true\">\n        <path\n          d=\"M29.333 8c0-2.208-1.792-4-4-4h-18.667c-2.208 0-4 1.792-4 4v18.667c0 2.208 1.792 4 4 4h18.667c2.208 0 4-1.792 4-4v-18.667zM26.667 8v18.667c0 0.736-0.597 1.333-1.333 1.333 0 0-18.667 0-18.667 0-0.736 0-1.333-0.597-1.333-1.333 0 0 0-18.667 0-18.667 0-0.736 0.597-1.333 1.333-1.333 0 0 18.667 0 18.667 0 0.736 0 1.333 0.597 1.333 1.333z\" \/>\n        <path\n          d=\"M20 2.667v5.333c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-5.333c0-0.736-0.597-1.333-1.333-1.333s-1.333 0.597-1.333 1.333z\" \/>\n        <path\n          d=\"M9.333 2.667v5.333c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-5.333c0-0.736-0.597-1.333-1.333-1.333s-1.333 0.597-1.333 1.333z\" \/>\n        <path\n          d=\"M4 14.667h24c0.736 0 1.333-0.597 1.333-1.333s-0.597-1.333-1.333-1.333h-24c-0.736 0-1.333 0.597-1.333 1.333s0.597 1.333 1.333 1.333z\" \/>\n      <\/svg>\n      <div class=\"be-mono\"><span id=\"beDatesLabelPTRes\" class=\"be-value\">Selecione datas<\/span><\/div>\n    <\/button>\n\n    <!-- Ocupaci\u00f3n -->\n    <button class=\"be-seg\" id=\"segPaxPTRes\" type=\"button\" aria-haspopup=\"dialog\">\n      <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n        <path d=\"M12 12c2.67 0 8 1.34 8 4v3H4v-3c0-2.66 5.33-4 8-4zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8z\" \/>\n      <\/svg>\n      <div class=\"be-mono\"><span id=\"bePaxLabelPTRes\" class=\"be-value\">2 Adultos<\/span><\/div>\n    <\/button>\n\n    <!-- Promo -->\n    <div class=\"be-seg input promo\">\n      <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"25.015\" height=\"25\" viewBox=\"0 0 25.015 25\">\n        <g id=\"icon-promo-group-ptres\" data-name=\"Grupo 545\" transform=\"translate(-31 -2393.627)\">\n          <path id=\"icon-promo-1-ptres\" data-name=\"icon-promo-1\"\n            d=\"M-58.362-346a2.828,2.828,0,0,1-2.019-.831l-7.9-7.9a2.832,2.832,0,0,1,0-4.038l10.57-10.57A6.3,6.3,0,0,1-53.73-371h6.77a2.89,2.89,0,0,1,2.85,2.85v6.77a6.3,6.3,0,0,1-1.663,3.979l-10.57,10.57a2.828,2.828,0,0,1-2.019.831Zm4.632-23.219a4.673,4.673,0,0,0-2.732,1.128l-10.57,10.57a1.039,1.039,0,0,0,0,1.485l7.9,7.9a1.039,1.039,0,0,0,1.485,0l10.57-10.57a4.52,4.52,0,0,0,1.128-2.732v-6.77a1.064,1.064,0,0,0-1.069-1.069h-6.71Z\"\n            transform=\"translate(100.125 2764.627)\"><\/path>\n          <path id=\"icon-promo-2-ptres\" data-name=\"icon-promo-2\"\n            d=\"M-41.574-358.248a3.332,3.332,0,0,1-3.326-3.326,3.332,3.332,0,0,1,3.326-3.326,3.332,3.332,0,0,1,3.326,3.326,3.332,3.332,0,0,1-3.326,3.326Zm0-5.073a1.756,1.756,0,0,0-1.748,1.747,1.756,1.756,0,0,0,1.748,1.748,1.756,1.756,0,0,0,1.748-1.748,1.756,1.756,0,0,0-1.748-1.747Z\"\n            transform=\"translate(89.647 2763.144)\"><\/path>\n        <\/g>\n      <\/svg>\n      <div class=\"be-mono\" style=\"width:100%\">\n        <input id=\"bePromoPTRes\" type=\"text\" class=\"be-promo\" placeholder=\"C\u00f3digo promocional\">\n      <\/div>\n    <\/div>\n\n    <button id=\"beReservarPTRes\" class=\"be-cta\" type=\"button\">RESERVAR<\/button>\n  <\/div>\n\n  <!-- Backdrop + Modales -->\n  <div id=\"beBackdropPTRes\" class=\"be-modal-backdrop\"><\/div>\n\n  <!-- Hoteles -->\n  <div id=\"beModalHotelPTRes\" class=\"be-modal\" role=\"dialog\" aria-modal=\"true\">\n    <div class=\"be-body\">\n      <div class=\"be-list\" id=\"beHotelListPTRes\">\n        <div class=\"be-group\">TENERIFE | ESPANHA<\/div>\n        <div class=\"be-item\" data-id=\"76\">\n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20.244 18\">\n            <path\n              d=\"M20.06-7.172a.536.536,0,0,1,.018.795.5.5,0,0,1-.763.018L18-7.52V-.562A2.812,2.812,0,0,1,15.188,2.25H5.063A2.812,2.812,0,0,1,2.25-.562V-7.52L.935-6.36a.537.537,0,0,1-.794-.018.561.561,0,0,1,.05-.795l9.562-8.437a.564.564,0,0,1,.745,0Zm-15,8.3h2.25V-4.5A1.124,1.124,0,0,1,8.438-5.625h3.375A1.124,1.124,0,0,1,12.938-4.5V1.125h2.25A1.688,1.688,0,0,0,16.875-.562V-8.483l-6.75-5.954L3.375-8.483V-.562A1.688,1.688,0,0,0,5.063,1.125Zm3.375,0h3.375V-4.5H8.438Z\"\n              transform=\"translate(0 15.75)\" \/>\n          <\/svg>\n          <span>Villa Cort\u00e9s*****<\/span>\n        <\/div>\n        <div class=\"be-item\" data-id=\"75\">\n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20.244 18\">\n            <path\n              d=\"M20.06-7.172a.536.536,0,0,1,.018.795.5.5,0,0,1-.763.018L18-7.52V-.562A2.812,2.812,0,0,1,15.188,2.25H5.063A2.812,2.812,0,0,1,2.25-.562V-7.52L.935-6.36a.537.537,0,0,1-.794-.018.561.561,0,0,1,.05-.795l9.562-8.437a.564.564,0,0,1,.745,0Zm-15,8.3h2.25V-4.5A1.124,1.124,0,0,1,8.438-5.625h3.375A1.124,1.124,0,0,1,12.938-4.5V1.125h2.25A1.688,1.688,0,0,0,16.875-.562V-8.483l-6.75-5.954L3.375-8.483V-.562A1.688,1.688,0,0,0,5.063,1.125Zm3.375,0h3.375V-4.5H8.438Z\"\n              transform=\"translate(0 15.75)\" \/>\n          <\/svg>\n          <span>Park Club Europe***<\/span>\n        <\/div>\n        <div class=\"be-item\" data-id=\"481\">\n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20.244 18\">\n            <path\n              d=\"M20.06-7.172a.536.536,0,0,1,.018.795.5.5,0,0,1-.763.018L18-7.52V-.562A2.812,2.812,0,0,1,15.188,2.25H5.063A2.812,2.812,0,0,1,2.25-.562V-7.52L.935-6.36a.537.537,0,0,1-.794-.018.561.561,0,0,1,.05-.795l9.562-8.437a.564.564,0,0,1,.745,0Zm-15,8.3h2.25V-4.5A1.124,1.124,0,0,1,8.438-5.625h3.375A1.124,1.124,0,0,1,12.938-4.5V1.125h2.25A1.688,1.688,0,0,0,16.875-.562V-8.483l-6.75-5.954L3.375-8.483V-.562A1.688,1.688,0,0,0,5.063,1.125Zm3.375,0h3.375V-4.5H8.438Z\"\n              transform=\"translate(0 15.75)\" \/>\n          <\/svg>\n          <span>Apartamentos Arcade<\/span>\n        <\/div>\n\n        <div class=\"be-group\">MALLORCA | ESPANHA<\/div>\n        <div class=\"be-item\" data-id=\"74\">\n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20.244 18\">\n            <path\n              d=\"M20.06-7.172a.536.536,0,0,1,.018.795.5.5,0,0,1-.763.018L18-7.52V-.562A2.812,2.812,0,0,1,15.188,2.25H5.063A2.812,2.812,0,0,1,2.25-.562V-7.52L.935-6.36a.537.537,0,0,1-.794-.018.561.561,0,0,1,.05-.795l9.562-8.437a.564.564,0,0,1,.745,0Zm-15,8.3h2.25V-4.5A1.124,1.124,0,0,1,8.438-5.625h3.375A1.124,1.124,0,0,1,12.938-4.5V1.125h2.25A1.688,1.688,0,0,0,16.875-.562V-8.483l-6.75-5.954L3.375-8.483V-.562A1.688,1.688,0,0,0,5.063,1.125Zm3.375,0h3.375V-4.5H8.438Z\"\n              transform=\"translate(0 15.75)\" \/>\n          <\/svg>\n          <span>Playa Marina****<\/span>\n        <\/div>\n\n        <div class=\"be-group\">LISBOA | PORTUGAL<\/div>\n        <div class=\"be-item\" data-id=\"452\">\n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20.244 18\">\n            <path\n              d=\"M20.06-7.172a.536.536,0,0,1,.018.795.5.5,0,0,1-.763.018L18-7.52V-.562A2.812,2.812,0,0,1,15.188,2.25H5.063A2.812,2.812,0,0,1,2.25-.562V-7.52L.935-6.36a.537.537,0,0,1-.794-.018.561.561,0,0,1,.05-.795l9.562-8.437a.564.564,0,0,1,.745,0Zm-15,8.3h2.25V-4.5A1.124,1.124,0,0,1,8.438-5.625h3.375A1.124,1.124,0,0,1,12.938-4.5V1.125h2.25A1.688,1.688,0,0,0,16.875-.562V-8.483l-6.75-5.954L3.375-8.483V-.562A1.688,1.688,0,0,0,5.063,1.125Zm3.375,0h3.375V-4.5H8.438Z\"\n              transform=\"translate(0 15.75)\" \/>\n          <\/svg>\n          <span>Europe Lisboa Boutique Hotel\u200b<\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Fechas -->\n  <div id=\"beModalFechasPTRes\" class=\"be-modal\" role=\"dialog\" aria-modal=\"true\">\n    <div class=\"be-body\">\n      <div class=\"cal-nav\">\n        <button id=\"calPrevPTRes\" class=\"cal-arrow\" type=\"button\" aria-label=\"M\u00eas anterior\">\u2039<\/button>\n        <button id=\"calNextPTRes\" class=\"cal-arrow\" type=\"button\" aria-label=\"M\u00eas seguinte\">\u203a<\/button>\n      <\/div>\n      <div id=\"calWrapPTRes\" class=\"cal-wrap\"><\/div>\n      <input id=\"beCheckinPTRes\" type=\"hidden\" \/>\n      <input id=\"beCheckoutPTRes\" type=\"hidden\" \/>\n    <\/div>\n    <div class=\"be-ft\">\n      <button id=\"calClearPTRes\" class=\"be-btn\" type=\"button\">Limpar<\/button>\n      <button class=\"be-btn be-btn-primary\" data-close=\"beModalFechasPTRes\" type=\"button\">OK<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- Ocupaci\u00f3n -->\n  <div id=\"beModalPaxPTRes\" class=\"be-modal\" role=\"dialog\" aria-modal=\"true\">\n    <div class=\"be-body\" id=\"beRoomsWrapPTRes\"><\/div>\n    <div class=\"be-ft\">\n      <button id=\"beAddRoomPTRes\" class=\"be-btn\" type=\"button\">+ Adicionar quarto<\/button>\n      <button class=\"be-btn be-btn-primary\" data-close=\"beModalPaxPTRes\" type=\"button\">OK<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n  (function () {\n    document.addEventListener('DOMContentLoaded', function () {\n      const root = document.getElementById('beWidgetPTRes'); if (!root) return;\n      const $ = (sel, ctx = root) => ctx.querySelector(sel);\n      const $$ = (sel, ctx = root) => Array.from(ctx.querySelectorAll(sel));\n\n      const bar = $('#beBarPTRes');\n      const endpoint = bar?.dataset.endpoint || '';\n      const portal = bar?.dataset.portal || '1501';\n      const language = bar?.dataset.language || '8';\n\n      const labels = {\n        hotel: $('#beHotelLabelPTRes'),\n        dates: $('#beDatesLabelPTRes'),\n        pax: $('#bePaxLabelPTRes')\n      };\n\n      \/* === MODALES === *\/\n      const backdrop = $('#beBackdropPTRes');\n      const modals = $$('.be-modal');\n      const anyOpen = () => modals.some(m => m.classList.contains('open'));\n      const openModal = id => { backdrop.classList.add('open'); $('#' + id)?.classList.add('open'); };\n      const closeModal = id => { $('#' + id)?.classList.remove('open'); if (!anyOpen()) backdrop.classList.remove('open'); };\n\n      $('#segHotelPTRes')?.addEventListener('click', () => openModal('beModalHotelPTRes'));\n      $('#segFechasPTRes')?.addEventListener('click', () => { centerOnCheckin(); openModal('beModalFechasPTRes'); renderCalendar(); });\n      $('#segPaxPTRes')?.addEventListener('click', () => openModal('beModalPaxPTRes'));\n\n      backdrop.addEventListener('click', () => {\n        ['beModalHotelPTRes', 'beModalFechasPTRes', 'beModalPaxPTRes'].forEach(id => $('#' + id)?.classList.remove('open'));\n        backdrop.classList.remove('open');\n      });\n      $$('[data-close]').forEach(b => b.addEventListener('click', e => closeModal(e.currentTarget.getAttribute('data-close'))));\n\n      \/* === HOTELES === *\/\n      let selectedHotel = '';\n      \/* ===== Autoselecci\u00f3n de hotel por URL (robusto) ===== *\/\n      const HOTEL_MAP = [\n        { id: \"76\", label: \"Villa Cort\u00e9s*****\", patterns: [\"\/villa-cortes\", \"\/hoteles\/villa-cortes\"] },\n        { id: \"74\", label: \"Playa Marina****\", patterns: [\"\/playa-marina\", \"\/hoteles\/playa-marina\"] },\n        { id: \"75\", label: \"Park Club Europe***\", patterns: [\"\/park-club\", \"\/hoteles\/park-club\"] },\n        { id: \"452\", label: \"Europe Lisboa Boutique Hotel\u200b\", patterns: [\"\/europe-lisboa-boutique-hotel\"] },\n        { id: \"481\", label: \"Apartamentos Arcade\", patterns: [\"\/apartamentos\"] },\n      ];\n\n      function autoSelectHotelFromURL() {\n        try {\n          const path = (location.pathname || \"\").toLowerCase();\n\n          \/\/ Coincidencia flexible: exacto, empieza por patr\u00f3n o contiene patr\u00f3n seguido de \"\/\"\n          const match = HOTEL_MAP.find(h =>\n            h.patterns.some(p =>\n              path === p || path.startsWith(p + \"\/\") || path.includes(p + \"\/\")\n            )\n          );\n\n          if (!match) return; \/\/ no estamos en p\u00e1gina de hotel\n\n          \/\/ Asigna hotel\n          selectedHotel = match.id;\n\n          \/\/ Actualiza etiqueta si existe\n          if (labels && labels.hotel) labels.hotel.textContent = match.label;\n\n          \/\/ Solo adultos (ajusta si cambia la pol\u00edtica)\n          if (typeof setOnlyAdultsMode === \"function\") {\n            setOnlyAdultsMode(selectedHotel === \"74\");\n          }\n        } catch (err) {\n          console.error(\"AutoSelectHotel error:\", err);\n        }\n      }\n\n      \/\/ Ejecuta al cargar\n      autoSelectHotelFromURL();\n      $('#beHotelListPTRes')?.addEventListener('click', e => {\n        const item = e.target.closest('.be-item'); if (!item) return;\n        selectedHotel = item.dataset.id || '';\n        if (labels.hotel) labels.hotel.textContent = item.textContent.trim();\n        closeModal('beModalHotelPTRes');\n      });\n\n      \/* === FECHAS === *\/\n      const toISO = (y, m, d) => new Date(Date.UTC(y, m, d)).toISOString().slice(0, 10);\n      const fromISO = (iso) => { const [y, m, d] = iso.split('-').map(Number); return new Date(Date.UTC(y, m - 1, d)); };\n      const todayISO = () => { const n = new Date(); return toISO(n.getUTCFullYear(), n.getUTCMonth(), n.getUTCDate()); };\n      const addDaysISO = (iso, n) => { const d = fromISO(iso); d.setUTCDate(d.getUTCDate() + n); return toISO(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()); };\n      const toDDMMYYYY = (iso) => { const [y, m, d] = iso.split('-'); return `${d}-${m}-${y}`; };\n      const monthLabelPT = (y, m) =>\n        ['janeiro', 'fevereiro', 'mar\u00e7o', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro'][m] + ' ' + y;\n      const dowPT = ['se', 'te', 'qa', 'qi', 'se', 'sa', 'do'];\n      \/* === Reglas de calendario por hotel (versi\u00f3n responsive) ===\n         452 (Europe Lisboa Boutique hOTEL): inactivo desde 2025-11-01 en adelante\n         74 (Playa Marina): cerrado del 19-10-2025 al 13-05-2026 (ambos inclusive)\n      *\/\n      const CAL_RULES = {\n        '452': { \/\/ Europe Lisboa Boutique Hotel\u200b\n              minBookable: '2026-07-10',\n          maxBookable: '2027-04-30' \/\/ \u00faltimo d\u00eda permitido\n        },\n        '74': {  \/\/ Playa Marina\n          blackout: [\n            { start: '2025-10-19', end: '2026-05-13' }\n          ]\n        }\n      };\n      \/\/ === Comparadores de fechas ISO (YYYY-MM-DD) ===\n      function cmpISO(a, b) { return fromISO(a) - fromISO(b); }\n      function ltISO(a, b) { return cmpISO(a, b) < 0; }\n      function lteISO(a, b) { return cmpISO(a, b) <= 0; }\n      function gtISO(a, b) { return cmpISO(a, b) > 0; }\n      function gteISO(a, b) { return cmpISO(a, b) >= 0; }\n      function inRangeISO(x, a, b) { return (gteISO(x, a) && lteISO(x, b)); }\n\n      \/\/ === Decide si una fecha debe estar deshabilitada ===\n      function shouldDisableDate(iso) {\n        if (ltISO(iso, todayISO())) return true; \/\/ no permitir fechas pasadas\n\n        const rules = CAL_RULES[selectedHotel];\n        if (!rules) return false;\n\n        \/\/ m\u00e1ximo reservable (Europe Lisboa Boutique hOTEL)\n        if (rules.maxBookable && gtISO(iso, rules.maxBookable)) return true;\n\n        \/\/ rangos de blackout (Playa Marina)\n        if (Array.isArray(rules.blackout)) {\n          for (const r of rules.blackout) {\n            if (inRangeISO(iso, r.start, r.end)) return true;\n          }\n        }\n\n        return false;\n      }\n\n      const ciInput = $('#beCheckinPTRes');\n      const coInput = $('#beCheckoutPTRes');\n      if (ciInput && coInput) { ciInput.value = todayISO(); coInput.value = addDaysISO(ciInput.value, 1); }\n      function updateDatesLabel() {\n        if (!labels.dates || !ciInput || !coInput) return;\n        if (ciInput.value && coInput.value) labels.dates.textContent = `${ciInput.value.split('-').reverse().join('\/')} - ${coInput.value.split('-').reverse().join('\/')}`;\n        else if (ciInput.value) labels.dates.textContent = `${ciInput.value.split('-').reverse().join('\/')} - \u2014`;\n        else labels.dates.textContent = 'Selecione datas';\n      }\n\n      let baseYear, baseMonth;\n      function centerOnCheckin() {\n        const targetISO = (ciInput?.value) || todayISO();\n        const d = fromISO(targetISO);\n        baseYear = d.getUTCFullYear();\n        baseMonth = d.getUTCMonth();\n      }\n      function monthStart(y, m) { return new Date(Date.UTC(y, m, 1)); }\n      function daysInMonth(y, m) { return new Date(Date.UTC(y, m + 1, 0)).getUTCDate(); }\n      const calWrap = $('#calWrapPTRes'), calPrev = $('#calPrevPTRes'), calNext = $('#calNextPTRes');\n\n      const isBefore = (a, b) => fromISO(a) < fromISO(b);\n      const isSame = (a, b) => a === b;\n\n      function paintCell(cell) {\n        const iso = cell.dataset.iso, ci = ciInput.value, co = coInput.value;\n        if (!ci && !co) return;\n        if (ci && !co) { if (isSame(iso, ci)) cell.classList.add('start'); return; }\n        if (ci && co) {\n          if (isSame(iso, ci)) cell.classList.add('start');\n          else if (isSame(iso, co)) cell.classList.add('end');\n          else if (isBefore(ci, iso) && isBefore(iso, co)) cell.classList.add('in-range');\n        }\n      }\n\n      function renderCalendar() {\n        if (!calWrap) return;\n        calWrap.innerHTML = '';\n        const y = baseYear, m = baseMonth;\n        const box = document.createElement('div'); box.className = 'cal-month';\n        const title = document.createElement('div'); title.className = 'cal-title'; title.textContent = monthLabelPT(y, m).toUpperCase();\n        const grid = document.createElement('div'); grid.className = 'cal-grid';\n        dowPT.forEach(d => { const el = document.createElement('div'); el.className = 'cal-dow'; el.textContent = d; grid.appendChild(el); });\n\n        let start = monthStart(y, m).getUTCDay(); if (start === 0) start = 7;\n        const lead = start - 1;\n        for (let i = 0; i < lead; i++) { const dummy = document.createElement('div'); dummy.className = 'cal-day muted'; grid.appendChild(dummy); }\n\n        const total = daysInMonth(y, m); const t = todayISO();\n        for (let d = 1; d <= total; d++) {\n          const cell = document.createElement('button'); cell.type = 'button'; cell.className = 'cal-day'; cell.textContent = d;\n          const iso = toISO(y, m, d); cell.dataset.iso = iso;\n          if (shouldDisableDate(iso)) {\n            cell.classList.add('disabled');\n            cell.disabled = true;\n          }\n          paintCell(cell);\n          cell.addEventListener('click', () => {\n            if (!ciInput.value || (ciInput.value && coInput.value)) { ciInput.value = iso; coInput.value = ''; }\n            else { if (!isBefore(ciInput.value, iso)) ciInput.value = iso; else coInput.value = iso; }\n            updateDatesLabel(); renderCalendar();\n          });\n          grid.appendChild(cell);\n        }\n        box.appendChild(title); box.appendChild(grid); calWrap.appendChild(box);\n      }\n      calPrev?.addEventListener('click', () => { if (baseMonth === 0) { baseMonth = 11; baseYear--; } else baseMonth--; renderCalendar(); });\n      calNext?.addEventListener('click', () => { if (baseMonth === 11) { baseMonth = 0; baseYear++; } else baseMonth++; renderCalendar(); });\n      $('#calClearPTRes')?.addEventListener('click', () => { if (ciInput) ciInput.value = ''; if (coInput) coInput.value = ''; updateDatesLabel(); renderCalendar(); });\n\n      centerOnCheckin(); renderCalendar(); updateDatesLabel();\n\n      \/* === OCUPACI\u00d3N === *\/\n      const roomsWrap = $('#beRoomsWrapPTRes');\n      let rooms = [];\n      const MAX_ROOMS = 5;\n\n      function updatePaxLabel() {\n        if (!labels.pax) return;\n        const ta = rooms.reduce((a, r) => a + r.adults, 0);\n        const tc = rooms.reduce((a, r) => a + r.children, 0);\n        labels.pax.textContent = `${ta} Adulto${ta !== 1 ? 's' : ''}${tc ? ` \u00b7 ${tc} Crian\u00e7a${tc !== 1 ? 's' : ''}` : ''}`;\n      }\n\n      function addRoom(ad = 2, ch = 0) {\n        if (rooms.length >= MAX_ROOMS) return;\n        rooms.push({ adults: ad, children: ch, ages: Array.from({ length: ch }, () => 8), open: true });\n        renderRooms();\n      }\n      function removeRoom(i) {\n        rooms.splice(i, 1);\n        if (rooms.length === 0) addRoom(); else renderRooms();\n      }\n\n      function agesRowHTML(r, idx) {\n        if (!r.children) return '';\n        let rows = '';\n        for (let i = 0; i < r.children; i++) {\n          const current = r.ages[i] ?? 8;\n          let opts = '';\n          for (let a = 0; a <= 11; a++) {\n            const label = a === 1 ? `${a} ano` : `${a} anos`;\n            opts += `<option value=\"${a}\" ${a === current ? 'selected' : ''}>${label}<\/option>`;\n          }\n          rows += `\n          <div class=\"occ-row\">\n            <div class=\"occ-label\">Idade da crian\u00e7a ${i + 1}<\/div>\n            <label class=\"age-pill\"><select class=\"age-select\" data-age=\"${idx}\" data-k=\"${i}\">${opts}<\/select><\/label>\n          <\/div>`;\n        }\n        return rows;\n      }\n\n      function roomHeaderHTML(idx) {\n        return `\n        <button class=\"occ-head\" type=\"button\" data-toggle=\"${idx}\">\n          <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\"><path d=\"M21 10V7a2 2 0 0 0-2-2H5C3.9 5 3 5.9 3 7v3h18zm0 2H3v7h2v-3h14v3h2v-7zM5 7h14v1H5V7z\"\/><\/svg>\n          <div class=\"occ-title\">Quarto ${idx + 1}<\/div>\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" style=\"margin-left:auto\"><path d=\"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z\"\/><\/svg>\n        <\/button>\n        <div class=\"occ-sep\"><\/div>`;\n      }\n\n      function renderRooms() {\n        if (!roomsWrap) return;\n        roomsWrap.innerHTML = '';\n        rooms.forEach((r, idx) => {\n          const el = document.createElement('div');\n          el.className = 'occ-room' + (r.open ? ' open' : '');\n          el.innerHTML = `\n          ${roomHeaderHTML(idx)}\n          <div class=\"occ-body\" style=\"${r.open ? 'display:block' : 'display:none'}\">\n            <div class=\"occ-row\">\n              <div class=\"occ-label\">Adultos<\/div>\n              <div class=\"stepper\">\n                <button class=\"st-btn\" data-ad=\"-1\" data-i=\"${idx}\" type=\"button\">-<\/button>\n                <div class=\"st-value\" id=\"ad-${idx}-ptres\">${r.adults}<\/div>\n                <button class=\"st-btn\" data-ad=\"+1\" data-i=\"${idx}\" type=\"button\">+<\/button>\n              <\/div>\n            <\/div>\n            <div class=\"occ-row\">\n              <div class=\"occ-label\">Crian\u00e7as<\/div>\n              <div class=\"stepper\">\n                <button class=\"st-btn\" data-ch=\"-1\" data-i=\"${idx}\" type=\"button\">-<\/button>\n                <div class=\"st-value\" id=\"ch-${idx}-ptres\">${r.children}<\/div>\n                <button class=\"st-btn\" data-ch=\"+1\" data-i=\"${idx}\" type=\"button\">+<\/button>\n              <\/div>\n            <\/div>\n            ${agesRowHTML(r, idx)}\n            <div class=\"occ-del\" data-del=\"${idx}\"><svg class=\"trash\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M9 3h6v2h5v2H4V5h5V3zm1 6h2v9h-2V9zm4 0h2v9h-2V9z\"\/><\/svg>\n          <span>Eliminar<\/span><\/div>\n          <\/div>`;\n          roomsWrap.appendChild(el);\n        });\n\n        \/\/ Toggle acorde\u00f3n\n        roomsWrap.querySelectorAll('[data-toggle]').forEach(btn => {\n          btn.addEventListener('click', () => {\n            const i = +btn.getAttribute('data-toggle');\n            rooms[i].open = !rooms[i].open;\n            renderRooms();\n          });\n        });\n\n        \/\/ Acciones\n        roomsWrap.querySelectorAll('[data-del]').forEach(b => b.addEventListener('click', () => removeRoom(+b.dataset.del)));\n        roomsWrap.querySelectorAll('[data-ad]').forEach(b => b.addEventListener('click', () => {\n          const i = +b.dataset.i, d = b.dataset.ad === '+1' ? 1 : -1;\n          rooms[i].adults = Math.max(1, Math.min(4, rooms[i].adults + d));\n          renderRooms();\n        }));\n        roomsWrap.querySelectorAll('[data-ch]').forEach(b => b.addEventListener('click', () => {\n          const i = +b.dataset.i, d = b.dataset.ch === '+1' ? 1 : -1;\n          rooms[i].children = Math.max(0, Math.min(3, rooms[i].children + d));\n          rooms[i].ages = rooms[i].ages.slice(0, rooms[i].children);\n          while (rooms[i].ages.length < rooms[i].children) rooms[i].ages.push(8);\n          renderRooms();\n        }));\n        roomsWrap.querySelectorAll('.age-select').forEach(sel => sel.addEventListener('change', e => {\n          const i = +e.target.getAttribute('data-age'); const k = +e.target.getAttribute('data-k');\n          rooms[i].ages[k] = parseInt(e.target.value, 10);\n        }));\n\n        updatePaxLabel();\n        const addBtn = $('#beAddRoomPTRes');\n        if (addBtn) {\n          addBtn.disabled = rooms.length >= MAX_ROOMS;\n          addBtn.textContent = rooms.length >= MAX_ROOMS ? 'Limite de 5 quartos' : '+ Adicionar quarto';\n        }\n      }\n\n      $('#beAddRoomPTRes')?.addEventListener('click', () => addRoom(2, 0));\n      addRoom(2, 0);\n      autoSelectHotelFromURL();\n      \/* === RESERVAR === *\/\n      $('#beReservarPTRes')?.addEventListener('click', () => {\n        \/\/ Evitar reservas con fechas bloqueadas\n        if (ciInput?.value && shouldDisableDate(ciInput.value)) { openModal('beModalFechasPTRes'); return; }\n        if (coInput?.value && shouldDisableDate(coInput.value)) { openModal('beModalFechasPTRes'); return; }\n        if (!ciInput?.value || !coInput?.value || !isBefore(ciInput.value, coInput.value)) { openModal('beModalFechasPTRes'); return; }\n        const occupation = rooms.map(r => {\n          const ages = []; for (let i = 0; i < r.adults; i++) ages.push(30);\n          for (let k = 0; k < r.children; k++) { let v = r.ages[k] ?? 0; if (v < 0) v = 0; if (v > 11) v = 11; ages.push(v); }\n          return ages.join(',');\n        }).join(';');\n\n        const params = new URLSearchParams({\n          'Request.Language': language,\n          'Request.PortalCodeOPR': portal,\n          'Request.HotelCodeOPR': selectedHotel,\n          'Request.CheckinDate': toDDMMYYYY(ciInput.value),\n          'Request.CheckoutDate': toDDMMYYYY(coInput.value),\n          'Request.Occupation': occupation,\n          'Request.PromotionalCode': ($('#bePromoPTRes')?.value || '').trim()\n        });\n        if (endpoint) window.location.href = `${endpoint}?${params.toString()}`;\n      });\n    });\n  })();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"author":12,"template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jet_sm_ready_style":"","_jet_sm_style":"","_jet_sm_controls_values":"","_jet_sm_fonts_collection":"","_jet_sm_fonts_links":"","_styles":{"container_width":"800px","container_custom_height":false,"container_height":"","container_hor_position":"center","container_ver_position":"center","content_ver_position":"flex-start","container_bg_color":"#fff","container_bg":{"type":"classic","color":"#fff","bg_image_id":"","bg_image_url":"","bg_position":"center center","bg_repeat":"no-repeat","bg_size":"auto","gradient":"linear-gradient(160deg, rgba(85,85,85,0.8477984943977591) 0%, rgba(0,0,0,0.8505996148459384) 100%)"},"container_hor_padding":"20px","container_ver_padding":"20px","container_hor_margin":"0px","container_ver_margin":"0px","container_border":"0px solid #fff","container_border_color":"#fff","container_border_style":"solid","container_border_width":"1px","container_border_radius":"0px","container_box_shadow":"none","overlay_bg_color":"#0000007D","overlay_bg":{"type":"classic","color":"#0000007D","bg_image_id":"","bg_image_url":"","bg_position":"center center","bg_repeat":"no-repeat","bg_size":"auto","gradient":"linear-gradient(160deg, rgba(85,85,85,0.8477984943977591) 0%, rgba(0,0,0,0.8505996148459384) 100%)"},"close_button_icon_color":"#fff","close_button_icon_size":"16px","close_button_bg_color":"#000","close_button_size":"32px","close_button_border":"1px solid #000","close_button_border_radius":"0px","close_button_translate_x":"0px","close_button_translate_y":"0px","z_index":"999"},"_settings":{"jet_popup_type":"default","jet_popup_animation":"fade","jet_popup_animation_custom_duration":"no","jet_popup_animation_in_duration":0,"jet_popup_animation_out_duration":0,"jet_popup_open_trigger":"attach","jet_popup_on_close_event":"none","jet_popup_scroll_to_anchor":"","jet_popup_page_load_delay":1,"jet_popup_close_after_form_delay":"","jet_popup_user_inactivity_time":1,"jet_popup_scrolled_to_value":10,"jet_popup_on_date_value":"2026-06-13 16:27","jet_popup_on_time_start_value":"","jet_popup_weekdays":"","jet_popup_on_week_time_start_value":"","jet_popup_on_week_time_end_value":"","jet_popup_on_time_end_value":"","jet_popup_start_date_and_time":"2026-06-13 16:27","jet_popup_end_date_and_time":"2026-06-13 16:27","jet_popup_custom_selector":".custom","jet_popup_automatically_close":"","jet_popup_close_after_form_submit":"no","jet_popup_prevent_scrolling":"no","jet_popup_show_once":"no","jet_popup_show_again_delay":"none","jet_popup_use_ajax":"no","jet_popup_force_ajax":"no","jet_role_condition":[],"use_close_button":"yes","close_button_icon":{"value":"","library":""},"selected_close_button_icon":{"value":"","library":""},"use_overlay":"yes","close_on_overlay_click":"yes","use_content_cache":true}},"class_list":["post-45501","jet-popup","type-jet-popup","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mobile PT - Europe-Hotels<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.europe-hotels.org\/pt\/jet-popup\/mobile-pt\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mobile PT - Europe-Hotels\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.europe-hotels.org\/pt\/jet-popup\/mobile-pt\/\" \/>\n<meta property=\"og:site_name\" content=\"Europe-Hotels\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-13T14:27:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.europe-hotels.org\/wp-content\/uploads\/2019\/09\/LOGO_EUROPE_CORPORATE.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/jet-popup\\\/mobile-pt\\\/\",\"url\":\"https:\\\/\\\/www.europe-hotels.org\\\/jet-popup\\\/mobile-pt\\\/\",\"name\":\"Mobile PT - Europe-Hotels\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/jet-popup\\\/mobile-pt\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/jet-popup\\\/mobile-pt\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.europe-hotels.org\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/LOGO_EUROPE_CORPORATE.png\",\"datePublished\":\"2026-04-23T08:20:53+00:00\",\"dateModified\":\"2026-05-13T14:27:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/jet-popup\\\/mobile-pt\\\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.europe-hotels.org\\\/jet-popup\\\/mobile-pt\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/jet-popup\\\/mobile-pt\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.europe-hotels.org\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/LOGO_EUROPE_CORPORATE.png\",\"contentUrl\":\"https:\\\/\\\/www.europe-hotels.org\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/LOGO_EUROPE_CORPORATE.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/jet-popup\\\/mobile-pt\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/www.europe-hotels.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mobile PT\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/#website\",\"url\":\"https:\\\/\\\/www.europe-hotels.org\\\/\",\"name\":\"Europe-Hotels\",\"description\":\"Europe Hotels\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.europe-hotels.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/#organization\",\"name\":\"Europe-Hotels\",\"url\":\"https:\\\/\\\/www.europe-hotels.org\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.europe-hotels.org\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/LOGO_EUROPE_CORPORATE-300x65-1.png\",\"contentUrl\":\"https:\\\/\\\/www.europe-hotels.org\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/LOGO_EUROPE_CORPORATE-300x65-1.png\",\"width\":300,\"height\":65,\"caption\":\"Europe-Hotels\"},\"image\":{\"@id\":\"https:\\\/\\\/www.europe-hotels.org\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mobile PT - Europe-Hotels","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.europe-hotels.org\/pt\/jet-popup\/mobile-pt\/","og_locale":"pt_PT","og_type":"article","og_title":"Mobile PT - Europe-Hotels","og_url":"https:\/\/www.europe-hotels.org\/pt\/jet-popup\/mobile-pt\/","og_site_name":"Europe-Hotels","article_modified_time":"2026-05-13T14:27:46+00:00","og_image":[{"url":"https:\/\/www.europe-hotels.org\/wp-content\/uploads\/2019\/09\/LOGO_EUROPE_CORPORATE.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.europe-hotels.org\/jet-popup\/mobile-pt\/","url":"https:\/\/www.europe-hotels.org\/jet-popup\/mobile-pt\/","name":"Mobile PT - Europe-Hotels","isPartOf":{"@id":"https:\/\/www.europe-hotels.org\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.europe-hotels.org\/jet-popup\/mobile-pt\/#primaryimage"},"image":{"@id":"https:\/\/www.europe-hotels.org\/jet-popup\/mobile-pt\/#primaryimage"},"thumbnailUrl":"https:\/\/www.europe-hotels.org\/wp-content\/uploads\/2019\/09\/LOGO_EUROPE_CORPORATE.png","datePublished":"2026-04-23T08:20:53+00:00","dateModified":"2026-05-13T14:27:46+00:00","breadcrumb":{"@id":"https:\/\/www.europe-hotels.org\/jet-popup\/mobile-pt\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.europe-hotels.org\/jet-popup\/mobile-pt\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/www.europe-hotels.org\/jet-popup\/mobile-pt\/#primaryimage","url":"https:\/\/www.europe-hotels.org\/wp-content\/uploads\/2019\/09\/LOGO_EUROPE_CORPORATE.png","contentUrl":"https:\/\/www.europe-hotels.org\/wp-content\/uploads\/2019\/09\/LOGO_EUROPE_CORPORATE.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.europe-hotels.org\/jet-popup\/mobile-pt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.europe-hotels.org\/"},{"@type":"ListItem","position":2,"name":"Mobile PT"}]},{"@type":"WebSite","@id":"https:\/\/www.europe-hotels.org\/#website","url":"https:\/\/www.europe-hotels.org\/","name":"Europe-Hotels","description":"Europe Hotels","publisher":{"@id":"https:\/\/www.europe-hotels.org\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.europe-hotels.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/www.europe-hotels.org\/#organization","name":"Europe-Hotels","url":"https:\/\/www.europe-hotels.org\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/www.europe-hotels.org\/#\/schema\/logo\/image\/","url":"https:\/\/www.europe-hotels.org\/wp-content\/uploads\/2023\/11\/LOGO_EUROPE_CORPORATE-300x65-1.png","contentUrl":"https:\/\/www.europe-hotels.org\/wp-content\/uploads\/2023\/11\/LOGO_EUROPE_CORPORATE-300x65-1.png","width":300,"height":65,"caption":"Europe-Hotels"},"image":{"@id":"https:\/\/www.europe-hotels.org\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.europe-hotels.org\/pt\/wp-json\/wp\/v2\/jet-popup\/45501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.europe-hotels.org\/pt\/wp-json\/wp\/v2\/jet-popup"}],"about":[{"href":"https:\/\/www.europe-hotels.org\/pt\/wp-json\/wp\/v2\/types\/jet-popup"}],"author":[{"embeddable":true,"href":"https:\/\/www.europe-hotels.org\/pt\/wp-json\/wp\/v2\/users\/12"}],"version-history":[{"count":11,"href":"https:\/\/www.europe-hotels.org\/pt\/wp-json\/wp\/v2\/jet-popup\/45501\/revisions"}],"predecessor-version":[{"id":45605,"href":"https:\/\/www.europe-hotels.org\/pt\/wp-json\/wp\/v2\/jet-popup\/45501\/revisions\/45605"}],"wp:attachment":[{"href":"https:\/\/www.europe-hotels.org\/pt\/wp-json\/wp\/v2\/media?parent=45501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}