{"id":11958,"date":"2026-08-25T23:21:30","date_gmt":"2026-08-25T23:21:30","guid":{"rendered":"https:\/\/madeiraonwheels.pt\/transfers\/details\/"},"modified":"2026-09-29T16:24:22","modified_gmt":"2026-09-29T16:24:22","slug":"details","status":"publish","type":"page","link":"https:\/\/madeiraonwheels.pt\/pt\/transfers\/details\/","title":{"rendered":"Detalhes da reserva"},"content":{"rendered":"        <header class=\"mow-flow-header font-sans\" data-no-translation>\n        <a href=\"https:\/\/madeiraonwheels.pt\/pt\/transfers\/\" class=\"mow-flow-logo\" aria-label=\"Madeira on Wheels\">\n                            <img decoding=\"async\" src=\"https:\/\/madeiraonwheels.pt\/wp-content\/uploads\/2023\/07\/madeira-on-wheels-logo-dark.svg\" alt=\"Madeira on Wheels\">\n                    <\/a>\n        <ol class=\"mow-flow-stepper\" aria-label=\"Progresso da reserva\">\n                            <li class=\"mow-flow-stepper__step is-done\">\n                    <span class=\"mow-flow-stepper__dot\">1<\/span>\n                    <span class=\"mow-flow-stepper__label\">Viagem<\/span>\n                <\/li>\n                <li class=\"mow-flow-stepper__line\" aria-hidden=\"true\"><\/li>                            <li class=\"mow-flow-stepper__step is-active\" aria-current=\"step\">\n                    <span class=\"mow-flow-stepper__dot\">2<\/span>\n                    <span class=\"mow-flow-stepper__label\">Detalhes<\/span>\n                <\/li>\n                <li class=\"mow-flow-stepper__line\" aria-hidden=\"true\"><\/li>                            <li class=\"mow-flow-stepper__step\">\n                    <span class=\"mow-flow-stepper__dot\">3<\/span>\n                    <span class=\"mow-flow-stepper__label\">Pagamento<\/span>\n                <\/li>\n                                    <\/ol>\n    <\/header>\n    \n    <div class=\"mow-flow-grid font-sans text-slate-800\" x-data=\"mowDetailsApp()\" data-no-translation>\n        <input type=\"text\" x-model=\"hpCheck\" style=\"display:none !important;\" tabindex=\"-1\" autocomplete=\"off\">\n\n            <div class=\"mow-flow-trustbar\">\n        <div class=\"mow-flow-trustbar__item\">\n            <span class=\"mow-flow-trustbar__icon\"><i class=\"ph ph-airplane-tilt\"><\/i><\/span>\n            <div><strong>Acompanhamento do voo<\/strong><span>Acompanhamos a chegada do seu voo, sem custos adicionais em caso de atraso<\/span><\/div>\n        <\/div>\n        <div class=\"mow-flow-trustbar__item\">\n            <span class=\"mow-flow-trustbar__icon\"><i class=\"ph ph-handshake\"><\/i><\/span>\n            <div><strong>Rece\u00e7\u00e3o no aeroporto<\/strong><span>O motorista espera por si na zona de chegadas com uma placa com o seu nome<\/span><\/div>\n        <\/div>\n        <div class=\"mow-flow-trustbar__item\">\n            <span class=\"mow-flow-trustbar__icon\"><i class=\"ph ph-shield-check\"><\/i><\/span>\n            <div><strong><span class=\"mow-license-title--desktop\">Operador tur\u00edstico licenciado<\/span><span class=\"mow-license-title--mobile\">Operador licenciado<\/span><\/strong><span>Empresa de anima\u00e7\u00e3o tur\u00edstica registada, RNAVT n.\u00ba 11543<\/span><\/div>\n        <\/div>\n    <\/div>\n    \n            <div class=\"mow-order-summary__card mow-details-trip\" role=\"region\" aria-label=\"Viagem\">\n                <div class=\"mow-order-summary__photo\"><img loading=\"lazy\" class=\"mow-order-summary__img\" src=\"https:\/\/madeiraonwheels.pt\/wp-content\/plugins\/mow-transfer-core\/assets\/summary\/madeira-on-wheels-beira-mar-1000.webp\" srcset=\"https:\/\/madeiraonwheels.pt\/wp-content\/plugins\/mow-transfer-core\/assets\/summary\/madeira-on-wheels-beira-mar-640.webp 640w, https:\/\/madeiraonwheels.pt\/wp-content\/plugins\/mow-transfer-core\/assets\/summary\/madeira-on-wheels-beira-mar-1000.webp 1000w, https:\/\/madeiraonwheels.pt\/wp-content\/plugins\/mow-transfer-core\/assets\/summary\/madeira-on-wheels-beira-mar-1774.webp 1774w\" sizes=\"auto, (max-width: 767px) 100vw, (max-width: 1023px) 92vw, 560px\" width=\"1000\" height=\"500\" alt=\"\" loading=\"lazy\" decoding=\"async\" \/>                    <span class=\"mow-order-summary__badge\" x-text=\"draft ? draft.destinationQuery : ''\"><\/span>\n                <\/div>\n                <div class=\"mow-order-summary__body\">\n                    <div class=\"mow-order-summary__datetime\">\n                        <span class=\"mow-order-summary__date\"><i class=\"ph ph-calendar-blank\" aria-hidden=\"true\"><\/i><span x-text=\"draft ? window.mowBookingDateLabel(draft.date, T) : ''\"><\/span><\/span>\n                        <span class=\"mow-order-summary__time\"><i class=\"ph ph-clock\" aria-hidden=\"true\"><\/i><span x-text=\"draft ? draft.time : ''\"><\/span><\/span>\n                        <button type=\"button\" @click=\"openTripModal()\" class=\"mow-order-summary__edit-link\"><i class=\"ph ph-pencil-simple\" aria-hidden=\"true\"><\/i><span>Editar viagem<\/span><\/button>\n                    <\/div>\n                    <div x-show=\"wantsReturn\" x-cloak class=\"mow-order-summary__datetime\">\n                        <span class=\"mow-order-summary__date\"><i class=\"ph ph-arrow-u-down-left\" aria-hidden=\"true\"><\/i><span x-text=\"draft ? window.mowBookingDateLabel(draft.returnDate, T) : ''\"><\/span><\/span>\n                        <span class=\"mow-order-summary__time\"><i class=\"ph ph-clock\" aria-hidden=\"true\"><\/i><span x-text=\"draft ? draft.returnTime : ''\"><\/span><\/span>\n                    <\/div>\n\n                    <div class=\"mow-route-box relative\">\n                        <div class=\"mow-route-rail\">\n                            <span class=\"mow-route-dot mow-route-dot--from\"><i :class=\"draft ? routeIcon(draft.pickup, draft.pickupType, 'airport') : 'ph ph-map-pin'\"><\/i><\/span>\n                            <span class=\"mow-route-line\"><\/span>\n                            <span class=\"mow-route-dot mow-route-dot--to\"><i :class=\"draft ? routeIcon(draft.destinationQuery, draft.destinationType) : 'ph ph-map-pin'\"><\/i><\/span>\n                        <\/div>\n                        <div class=\"mow-route-fields\">\n                            <div>\n                                <label class=\"block text-[10px] font-extrabold uppercase text-slate-400\">De (local de recolha)<\/label>\n                                <p class=\"mow-route-input\" x-text=\"draft ? draft.pickup : ''\"><\/p>\n                            <\/div>\n                            <div class=\"mow-route-divider\"><\/div>\n                            <div>\n                                <label class=\"block text-[10px] font-extrabold uppercase text-slate-400\">Para (hotel, alojamento ou localidade)<\/label>\n                                <p class=\"mow-route-input\" x-text=\"draft ? draft.destinationQuery : ''\"><\/p>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"mow-order-summary__meta\">\n                        <span><i class=\"ph ph-car-simple\"><\/i> <span x-text=\"vehicle === 'minivan' ? T.summary_vehicle_minivan : T.summary_vehicle_standard\"><\/span><\/span>\n                        <span><i class=\"ph ph-users\"><\/i> <span x-text=\"draft ? draft.passengers : ''\"><\/span><\/span>\n                        <span><i class=\"ph ph-suitcase\"><\/i> <span x-text=\"draft ? draft.luggage : ''\"><\/span><\/span>\n                    <\/div>\n\n                    <div class=\"mow-order-summary__total\">\n                        <div>\n                            <div class=\"mow-order-summary__total-label\">Pre\u00e7o total<\/div>\n                            <div class=\"mow-order-summary__total-note\" x-text=\"totalNote\">Taxas e portagens inclu\u00eddas<\/div>\n                        <\/div>\n                        <div class=\"mow-order-summary__total-value\" x-text=\"totalLabel\"><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n        <div class=\"mow-flow-content\">\n            <div class=\"mow-flow-main\">\n\n            <section class=\"mow-details-card\" aria-labelledby=\"mow-details-title\">\n                <div class=\"mow-details-card__head\">\n                    <span class=\"mow-details-card__eyebrow\">Detalhes da reserva<\/span>\n                    <h1 id=\"mow-details-title\">Dados dos passageiros<\/h1>\n                    <p>Indique quem vai viajar para prepararmos o motorista e o comprovativo da reserva.<\/p>\n                <\/div>\n\n                <div class=\"mow-details-form\">\n                    <div class=\"mow-field\">\n                        <label for=\"mow-customer-name\">Nome completo<\/label>\n                        <span class=\"mow-field__control\"><i class=\"ph ph-user\"><\/i><input id=\"mow-customer-name\" type=\"text\" x-model=\"customer.name\" autocomplete=\"name\" autocapitalize=\"words\" required aria-required=\"true\" @input=\"clearError('name')\" @blur=\"if (customer.name.trim()) validateField('name')\" :aria-invalid=\"errors.name ? 'true' : 'false'\" aria-describedby=\"mow-err-name\" :class=\"errors.name ? 'mow-input-error' : ''\" placeholder=\"Nome do passageiro principal\"><\/span>\n                        <p class=\"mow-field__error\" id=\"mow-err-name\" role=\"alert\" x-show=\"errors.name\" x-cloak><i class=\"ph ph-warning-circle\" aria-hidden=\"true\"><\/i><span x-text=\"errors.name\"><\/span><\/p>\n                    <\/div>\n\n                    <div class=\"mow-details-form__grid\">\n                        <div class=\"mow-field\">\n                            <label for=\"mow-customer-email\">E-mail (para envio do comprovativo)<\/label>\n                            <span class=\"mow-field__control\"><i class=\"ph ph-envelope-simple\"><\/i><input id=\"mow-customer-email\" type=\"email\" x-model=\"customer.email\" autocomplete=\"email\" inputmode=\"email\" autocapitalize=\"none\" spellcheck=\"false\" required aria-required=\"true\" @input=\"clearError('email')\" @blur=\"if (customer.email.trim()) validateField('email')\" :aria-invalid=\"errors.email ? 'true' : 'false'\" aria-describedby=\"mow-err-email\" :class=\"errors.email ? 'mow-input-error' : ''\" placeholder=\"exemplo@email.com\"><\/span>\n                            <p class=\"mow-field__error\" id=\"mow-err-email\" role=\"alert\" x-show=\"errors.email\" x-cloak><i class=\"ph ph-warning-circle\" aria-hidden=\"true\"><\/i><span x-text=\"errors.email\"><\/span><\/p>\n                        <\/div>\n                        <div class=\"mow-field\">\n                            <label for=\"mow-customer-phone\">Telem\u00f3vel \/ WhatsApp<\/label>\n                            <span class=\"mow-field__control\"><i class=\"ph ph-whatsapp-logo\"><\/i><input id=\"mow-customer-phone\" type=\"tel\" x-model=\"customer.phone\" autocomplete=\"tel\" inputmode=\"tel\" required aria-required=\"true\" @input=\"clearError('phone')\" @blur=\"if (customer.phone.trim()) validateField('phone')\" :aria-invalid=\"errors.phone ? 'true' : 'false'\" aria-describedby=\"mow-err-phone\" :class=\"errors.phone ? 'mow-input-error' : ''\" placeholder=\"+351 912 345 678\"><\/span>\n                            <p class=\"mow-field__error\" id=\"mow-err-phone\" role=\"alert\" x-show=\"errors.phone\" x-cloak><i class=\"ph ph-warning-circle\" aria-hidden=\"true\"><\/i><span x-text=\"errors.phone\"><\/span><\/p>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"mow-field\">\n                        <label for=\"mow-flight-number\">N\u00famero do voo (para acompanhamento) <span class=\"mow-field__optional\">(Opcional)<\/span><\/label>\n                        <span class=\"mow-field__control\"><i class=\"ph ph-airplane-tilt\"><\/i><input id=\"mow-flight-number\" type=\"text\" x-model=\"customer.flight\" placeholder=\"Ex.: TP 1682 \/ EZY 8541\"><\/span>\n                        <p class=\"mow-field__help\">Acompanhamos a chegada do seu voo em tempo real, sem custos adicionais por atrasos ou desvios.<\/p>\n                    <\/div>\n\n                    <label class=\"mow-option-row\">\n                        <span><i class=\"ph ph-baby\"><\/i><b>Viaja com crian\u00e7as?<\/b><\/span>\n                        <span class=\"relative\">\n                            <input type=\"checkbox\" x-model=\"hasChildSeats\"\n                                   @change=\"if (!hasChildSeats) { babySeats = 0; boosterSeats = 0; }\"\n                                   class=\"mow-switch-input\">\n                            <span class=\"mow-switch-track\"><span class=\"mow-switch-thumb\"><\/span><\/span>\n                        <\/span>\n                    <\/label>\n\n                    <div x-show=\"hasChildSeats\" x-transition class=\"mow-option-panel\" x-cloak>\n                        <span class=\"mow-option-panel__title\">Cadeiras para crian\u00e7as (gratuitas)<\/span>\n                        <div class=\"mow-option-panel__grid\">\n                            <div class=\"mow-mini-counter\">\n                                <span>Cadeira para beb\u00e9 (0\u20134 anos)<\/span>\n                                <div>\n                                    <button type=\"button\" aria-label=\"Diminuir Cadeira para beb\u00e9 (0\u20134 anos)\" @click=\"if(babySeats > 0) babySeats--\">\u2212<\/button>\n                                    <strong x-text=\"babySeats\"><\/strong>\n                                    <button type=\"button\" aria-label=\"Aumentar Cadeira para beb\u00e9 (0\u20134 anos)\" @click=\"if(babySeats < 4) babySeats++\">+<\/button>\n                                <\/div>\n                            <\/div>\n                            <div class=\"mow-mini-counter\">\n                                <span>Assento elevat\u00f3rio (4\u201312 anos)<\/span>\n                                <div>\n                                    <button type=\"button\" aria-label=\"Diminuir Assento elevat\u00f3rio (4\u201312 anos)\" @click=\"if(boosterSeats > 0) boosterSeats--\">\u2212<\/button>\n                                    <strong x-text=\"boosterSeats\"><\/strong>\n                                    <button type=\"button\" aria-label=\"Aumentar Assento elevat\u00f3rio (4\u201312 anos)\" @click=\"if(boosterSeats < 4) boosterSeats++\">+<\/button>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <label class=\"mow-option-row\">\n                        <span><i class=\"ph ph-note-pencil\"><\/i><b>Adicionar notas para o motorista<\/b><\/span>\n                        <span class=\"relative\">\n                            <input type=\"checkbox\" x-model=\"hasNotes\" class=\"mow-switch-input\">\n                            <span class=\"mow-switch-track\"><span class=\"mow-switch-thumb\"><\/span><\/span>\n                        <\/span>\n                    <\/label>\n\n                    <div x-show=\"hasNotes\" x-transition class=\"mow-option-panel\" x-cloak>\n                        <textarea x-model=\"driverNotes\" placeholder=\"Bagagem volumosa, cadeira de rodas, etc.\" rows=\"3\" class=\"mow-flow-textarea\"><\/textarea>\n                        <label class=\"mow-check-row\">\n                            <input type=\"checkbox\" x-model=\"bulkyLuggage\">\n                            <span>Bagagem volumosa<\/span>\n                        <\/label>\n                        <label class=\"mow-check-row\">\n                            <input type=\"checkbox\" x-model=\"wheelchairNeeded\">\n                            <span>Ve\u00edculo adaptado para cadeira de rodas<\/span>\n                        <\/label>\n                    <\/div>\n\n                    <label class=\"mow-check-row mow-check-row--consent\">\n                        <input type=\"checkbox\" x-model=\"agreeUpdates\">\n                        <span>Aceito receber atualiza\u00e7\u00f5es por e-mail e SMS<\/span>\n                    <\/label>\n\n                    <button type=\"button\" @click=\"submitBooking()\" :disabled=\"isSubmitting || nonceLoading\"\n                            :aria-busy=\"isSubmitting || nonceLoading ? 'true' : 'false'\"\n                            class=\"mow-flow-primary\">\n                        <span x-text=\"T.btn_continue\"><\/span>\n                        <i class=\"ph ph-arrow-right\"><\/i>\n                    <\/button>\n                <\/div>\n            <\/section>\n            <\/div>\n\n        <aside class=\"mow-order-summary\">\n                <div class=\"mow-order-summary__route-card\" x-data=\"{ mapLoaded: false, mapFailed: false }\"\n         x-effect=\"quote.map; mapLoaded = false; mapFailed = false\">\n        <div class=\"mow-order-summary__route-label\">Percurso<\/div>\n        <div class=\"mow-route-map\" x-show=\"!mapFailed && (quote.status === 'loading' || (quote.status === 'ok' && quote.map))\" x-cloak>\n            <img fetchpriority=\"high\" x-bind:src=\"quote.map || null\" alt=\"Mapa com o local de recolha (A) e o destino (B)\" width=\"400\" height=\"200\"\n                 x-show=\"mapLoaded && quote.status === 'ok'\" x-cloak @load=\"mapLoaded = true\" @error=\"mapFailed = true\">\n        <\/div>\n        <div class=\"mow-order-summary__route-foot\">\n            <span class=\"mow-order-summary__route-value\" x-text=\"routeText\"><\/span>\n            <span class=\"mow-order-summary__route-note\">Estimativa<\/span>\n        <\/div>\n    <\/div>\n    \n            <div class=\"mow-flow-trustlist\">\n                <div class=\"mow-flow-trustlist__title\">Inclu\u00eddo em todos os transfers<\/div>\n                <div class=\"mow-flow-trustlist__row\"><b>&#10003;<\/b> Cancelamento gratuito at\u00e9 24 horas antes da recolha<\/div>\n                <div class=\"mow-flow-trustlist__row\"><b>&#10003;<\/b> Motorista \u00e0 sua espera na zona de chegadas com uma placa com o seu nome<\/div>\n                <div class=\"mow-flow-trustlist__row\"><b>&#10003;<\/b> 60 minutos de espera ap\u00f3s a aterragem inclu\u00eddos<\/div>\n            <\/div>\n        <\/aside>\n        <\/div>\n            <div class=\"mow-modal-overlay\" x-show=\"showTripModal\" x-cloak x-transition.opacity\n         @keydown.escape.window=\"closeTripModal()\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mow-trip-modal-title\">\n        <div class=\"mow-modal-panel mow-modal-panel--trip\" @click.outside=\"closeTripModal()\">\n            <div class=\"mow-modal-header\">\n                <div>\n                    <span class=\"mow-modal-eyebrow\">Viagem<\/span>\n                    <h2 id=\"mow-trip-modal-title\">Editar transfer<\/h2>\n                <\/div>\n                <button type=\"button\" @click=\"closeTripModal()\" class=\"mow-modal-close\" aria-label=\"Close\"><i class=\"ph ph-x\"><\/i><\/button>\n            <\/div>\n            <div class=\"mow-modal-body\" @click.outside=\"closeTripPanels()\">\n                <div class=\"mow-trip-toggle mow-trip-toggle--modal\">\n                    <button type=\"button\" @click=\"setEditorTripType('oneway')\" class=\"mow-trip-toggle__btn\" :class=\"tripForm.tripType === 'oneway' ? 'is-active' : ''\">S\u00f3 ida<\/button>\n                    <button type=\"button\" @click=\"setEditorTripType('return')\" class=\"mow-trip-toggle__btn\" :class=\"tripForm.tripType === 'return' ? 'is-active' : ''\">Ida e Volta<\/button>\n                <\/div>\n\n                <div class=\"mow-route-box mow-route-box--editor\">\n                    <div class=\"mow-route-rail\">\n                        <span class=\"mow-route-dot mow-route-dot--from\"><i :class=\"routeIcon(tripForm.pickupQuery, tripPickupSearch.type(tripForm.pickupQuery))\"><\/i><\/span>\n                        <span class=\"mow-route-line\"><\/span>\n                        <span class=\"mow-route-dot mow-route-dot--to\"><i :class=\"routeIcon(tripForm.destinationQuery, tripDestSearch.type(tripForm.destinationQuery))\"><\/i><\/span>\n                    <\/div>\n                    <div class=\"mow-route-fields\">\n                        <div class=\"relative\">\n                            <label>De (local de recolha)<\/label>\n                            <input type=\"text\" x-model=\"tripForm.pickupQuery\" @focus=\"closeTripPanels(); tripForm.pickupOpen = true; tripForm.pickupActive = -1\" @input=\"tripForm.pickupOpen = true; tripForm.pickupActive = -1; tripGeoMsg = ''\"\n                                   @keydown=\"tripComboKeydown($event, 'pickup')\"\n                                   :aria-invalid=\"tripErrors.pickup ? 'true' : 'false'\" aria-required=\"true\"\n                                   role=\"combobox\" aria-autocomplete=\"list\" aria-controls=\"mow-trip-pickup-list\"\n                                   :aria-expanded=\"tripForm.pickupOpen && filteredTripPickups.length > 0 ? 'true' : 'false'\"\n                                   :aria-activedescendant=\"tripForm.pickupOpen && tripForm.pickupActive >= 0 ? 'mow-trip-pickup-opt-' + tripForm.pickupActive : null\"\n                                   aria-label=\"De (local de recolha)\" class=\"mow-route-input mow-route-input--locate\">\n                            <button type=\"button\" class=\"mow-locate-btn\" @click=\"useMyLocationTrip()\" :disabled=\"tripLocating\" :class=\"tripLocating ? 'is-loading' : ''\"\n                                    :aria-label=\"tripLocating ? T.geo_locating : T.geo_btn\" :title=\"T.geo_btn\"><svg class=\"mow-locate-btn__icon\" viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><circle cx=\"12\" cy=\"12\" r=\"7.4\"\/><path d=\"M12 1.8v3M12 19.2v3M1.8 12h3M19.2 12h3\"\/><\/svg><\/button>\n                            <p class=\"mow-field__error mow-field__error--geo\" role=\"alert\" x-show=\"tripGeoMsg\" x-cloak><span x-text=\"tripGeoMsg\"><\/span><\/p>\n                            <div x-show=\"tripForm.pickupOpen && filteredTripPickups.length\" id=\"mow-trip-pickup-list\" role=\"listbox\" class=\"mow-place-results\" x-cloak>\n                                <template x-for=\"(item, idx) in filteredTripPickups\" :key=\"'trip-pickup-' + idx + '-' + item.name\">\n                                    <button type=\"button\" tabindex=\"-1\" @click=\"selectTripPickup(item)\" role=\"option\" :id=\"'mow-trip-pickup-opt-' + idx\" :aria-selected=\"idx === tripForm.pickupActive ? 'true' : 'false'\" class=\"mow-place-result\">\n                                        <i :class=\"mowPlaceIcon(item.type)\"><\/i><span><b x-text=\"item.name\"><\/b><small x-text=\"item.address\"><\/small><\/span>\n                                    <\/button>\n                                <\/template>\n                            <\/div>\n                        <\/div>\n                        <div class=\"mow-route-divider\"><\/div>\n                        <div class=\"relative\">\n                            <label>Para (hotel, alojamento ou localidade)<\/label>\n                            <input type=\"text\" x-model=\"tripForm.destinationQuery\" @focus=\"closeTripPanels(); tripForm.destinationOpen = true; tripForm.destinationActive = -1\" @input=\"tripForm.destinationOpen = true; tripForm.destinationActive = -1\"\n                                   @keydown=\"tripComboKeydown($event, 'destination')\"\n                                   :aria-invalid=\"tripErrors.destination ? 'true' : 'false'\" aria-required=\"true\"\n                                   role=\"combobox\" aria-autocomplete=\"list\" aria-controls=\"mow-trip-dest-list\"\n                                   :aria-expanded=\"tripForm.destinationOpen && filteredTripDestinations.length > 0 ? 'true' : 'false'\"\n                                   :aria-activedescendant=\"tripForm.destinationOpen && tripForm.destinationActive >= 0 ? 'mow-trip-dest-opt-' + tripForm.destinationActive : null\"\n                                   aria-label=\"Para (hotel, alojamento ou localidade)\" class=\"mow-route-input\">\n                            <div x-show=\"tripForm.destinationOpen && filteredTripDestinations.length\" id=\"mow-trip-dest-list\" role=\"listbox\" class=\"mow-place-results\" x-cloak>\n                                <template x-for=\"(item, idx) in filteredTripDestinations\" :key=\"'trip-dest-' + idx + '-' + item.name\">\n                                    <button type=\"button\" tabindex=\"-1\" @click=\"selectTripDestination(item)\" role=\"option\" :id=\"'mow-trip-dest-opt-' + idx\" :aria-selected=\"idx === tripForm.destinationActive ? 'true' : 'false'\" class=\"mow-place-result\">\n                                        <i :class=\"mowPlaceIcon(item.type)\"><\/i><span><b x-text=\"item.name\"><\/b><small x-text=\"item.address\"><\/small><\/span>\n                                    <\/button>\n                                <\/template>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                <p class=\"mow-field__error\" role=\"alert\" x-show=\"tripErrors.pickup\" x-cloak><i class=\"ph ph-warning-circle\" aria-hidden=\"true\"><\/i><span x-text=\"tripErrors.pickup\"><\/span><\/p>\n                <p class=\"mow-field__error\" role=\"alert\" x-show=\"tripErrors.destination\" x-cloak><i class=\"ph ph-warning-circle\" aria-hidden=\"true\"><\/i><span x-text=\"tripErrors.destination\"><\/span><\/p>\n\n                <div class=\"mow-modal-dates\">\n                    <div class=\"mow-field mow-dt-anchor\">\n                        <label>Data e hora de partida<\/label>\n                        <button type=\"button\" @click=\"tripCal.openPicker($el)\" @keydown.escape=\"tripCal.dismiss($event)\" aria-haspopup=\"dialog\" :aria-expanded=\"tripCal.open ? 'true' : 'false'\" :aria-invalid=\"tripErrors.date ? 'true' : 'false'\" aria-required=\"true\" class=\"mow-dt-trigger\"><span x-text=\"tripCal.label(T)\"><\/span><i class=\"ph ph-calendar-blank\"><\/i><\/button>\n                        <p class=\"mow-field__error\" role=\"alert\" x-show=\"tripErrors.date\" x-cloak><i class=\"ph ph-warning-circle\" aria-hidden=\"true\"><\/i><span x-text=\"tripErrors.date\"><\/span><\/p>\n                        <div x-show=\"tripCal.open\" x-cloak class=\"mow-dt-panel\" role=\"dialog\" tabindex=\"-1\" aria-label=\"Data e hora de partida\" @keydown.escape=\"tripCal.dismiss($event)\">\n                            <div class=\"mow-dt-nav\"><button type=\"button\" @click=\"tripCal.shiftMonth(-1)\" class=\"mow-dt-nav-btn\"><i class=\"ph ph-caret-left\"><\/i><\/button><span class=\"mow-dt-nav-label\" x-text=\"T.dt_months[tripCal.viewMonth] + ' ' + tripCal.viewYear\"><\/span><button type=\"button\" @click=\"tripCal.shiftMonth(1)\" class=\"mow-dt-nav-btn\"><i class=\"ph ph-caret-right\"><\/i><\/button><\/div>\n                            <div class=\"mow-dt-grid\"><template x-for=\"wd in T.dt_weekdays_header\" :key=\"'trip-wd-' + wd\"><span class=\"mow-dt-weekday\" x-text=\"wd\"><\/span><\/template><template x-for=\"(cell, idx) in tripCal.days()\" :key=\"'trip-day-' + idx\"><button type=\"button\" :disabled=\"!cell || cell.disabled\" @click=\"tripCal.selectDay(cell)\" class=\"mow-dt-day\" :class=\"{ 'mow-dt-day--selected': cell && cell.isSelected, 'mow-dt-day--today': cell && cell.isToday && !cell.isSelected, 'mow-dt-day--disabled': !cell || cell.disabled, 'mow-dt-day--empty': !cell }\" x-text=\"cell ? cell.day : ''\"><\/button><\/template><\/div>\n                            <div class=\"mow-dt-time-row\"><span class=\"mow-dt-time-label\" x-text=\"T.dt_time_label\"><\/span><div class=\"mow-dt-time-selects\"><select x-model=\"tripCal.hour\" class=\"mow-dt-select\"><template x-for=\"h in hourOptions\" :key=\"'trip-h-' + h\"><option :value=\"h\" x-text=\"h\"><\/option><\/template><\/select><span>:<\/span><select x-model=\"tripCal.minute\" class=\"mow-dt-select\"><template x-for=\"m in minuteOptions\" :key=\"'trip-m-' + m\"><option :value=\"m\" x-text=\"m\"><\/option><\/template><\/select><\/div><\/div>\n                            <button type=\"button\" @click=\"tripCal.confirm()\" :disabled=\"!tripCal.selectedKey\" class=\"mow-dt-confirm\" x-text=\"T.dt_confirm\"><\/button>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"mow-field mow-dt-anchor\" x-show=\"tripForm.tripType === 'return'\" x-cloak>\n                        <label>Data e hora de regresso<\/label>\n                        <button type=\"button\" @click=\"tripReturnCal.openPicker($el)\" @keydown.escape=\"tripReturnCal.dismiss($event)\" aria-haspopup=\"dialog\" :aria-expanded=\"tripReturnCal.open ? 'true' : 'false'\" :aria-invalid=\"tripErrors.returnDate ? 'true' : 'false'\" aria-required=\"true\" class=\"mow-dt-trigger\"><span x-text=\"tripReturnCal.label(T)\"><\/span><i class=\"ph ph-arrow-u-down-left\"><\/i><\/button>\n                        <p class=\"mow-field__error\" role=\"alert\" x-show=\"tripErrors.returnDate\" x-cloak><i class=\"ph ph-warning-circle\" aria-hidden=\"true\"><\/i><span x-text=\"tripErrors.returnDate\"><\/span><\/p>\n                        <div x-show=\"tripReturnCal.open\" x-cloak class=\"mow-dt-panel\" role=\"dialog\" tabindex=\"-1\" aria-label=\"Data e hora de regresso\" @keydown.escape=\"tripReturnCal.dismiss($event)\">\n                            <div class=\"mow-dt-nav\"><button type=\"button\" @click=\"tripReturnCal.shiftMonth(-1)\" class=\"mow-dt-nav-btn\"><i class=\"ph ph-caret-left\"><\/i><\/button><span class=\"mow-dt-nav-label\" x-text=\"T.dt_months[tripReturnCal.viewMonth] + ' ' + tripReturnCal.viewYear\"><\/span><button type=\"button\" @click=\"tripReturnCal.shiftMonth(1)\" class=\"mow-dt-nav-btn\"><i class=\"ph ph-caret-right\"><\/i><\/button><\/div>\n                            <div class=\"mow-dt-grid\"><template x-for=\"wd in T.dt_weekdays_header\" :key=\"'trip-ret-wd-' + wd\"><span class=\"mow-dt-weekday\" x-text=\"wd\"><\/span><\/template><template x-for=\"(cell, idx) in tripReturnCal.days()\" :key=\"'trip-ret-day-' + idx\"><button type=\"button\" :disabled=\"!cell || cell.disabled\" @click=\"tripReturnCal.selectDay(cell)\" class=\"mow-dt-day\" :class=\"{ 'mow-dt-day--selected': cell && cell.isSelected, 'mow-dt-day--today': cell && cell.isToday && !cell.isSelected, 'mow-dt-day--disabled': !cell || cell.disabled, 'mow-dt-day--empty': !cell }\" x-text=\"cell ? cell.day : ''\"><\/button><\/template><\/div>\n                            <div class=\"mow-dt-time-row\"><span class=\"mow-dt-time-label\" x-text=\"T.dt_time_label\"><\/span><div class=\"mow-dt-time-selects\"><select x-model=\"tripReturnCal.hour\" class=\"mow-dt-select\"><template x-for=\"h in hourOptions\" :key=\"'trip-ret-h-' + h\"><option :value=\"h\" x-text=\"h\"><\/option><\/template><\/select><span>:<\/span><select x-model=\"tripReturnCal.minute\" class=\"mow-dt-select\"><template x-for=\"m in minuteOptions\" :key=\"'trip-ret-m-' + m\"><option :value=\"m\" x-text=\"m\"><\/option><\/template><\/select><\/div><\/div>\n                            <button type=\"button\" @click=\"tripReturnCal.confirm()\" :disabled=\"!tripReturnCal.selectedKey\" class=\"mow-dt-confirm\" x-text=\"T.dt_confirm\"><\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"mow-counter-grid\">\n                    <div><label class=\"mow-counter__label\">Passageiros<\/label><div class=\"mow-counter__control\"><button type=\"button\" aria-label=\"Diminuir Passageiros\" @click=\"if(tripForm.passengers > 1) tripForm.passengers--\" class=\"mow-counter__button\">\u2212<\/button><strong class=\"mow-counter__value\" x-text=\"tripForm.passengers\"><\/strong><button type=\"button\" aria-label=\"Aumentar Passageiros\" @click=\"if(tripForm.passengers < 8) tripForm.passengers++\" class=\"mow-counter__button\">+<\/button><\/div><\/div>\n                    <div><label class=\"mow-counter__label\">Malas grandes<\/label><div class=\"mow-counter__control\"><button type=\"button\" aria-label=\"Diminuir Malas grandes\" @click=\"if(tripForm.luggage > 0) tripForm.luggage--\" class=\"mow-counter__button\">\u2212<\/button><strong class=\"mow-counter__value\" x-text=\"tripForm.luggage\"><\/strong><button type=\"button\" aria-label=\"Aumentar Malas grandes\" @click=\"if(tripForm.luggage < 8) tripForm.luggage++\" class=\"mow-counter__button\">+<\/button><\/div><\/div>\n                <\/div>\n            <\/div>\n            <div class=\"mow-modal-footer\"><button type=\"button\" @click=\"saveTrip()\" :disabled=\"tripSaving || nonceLoading\" class=\"mow-modal-save\"><span>Guardar altera\u00e7\u00f5es<\/span><i class=\"ph ph-check\"><\/i><\/button><\/div>\n        <\/div>\n    <\/div>\n        <\/div>\n\n    <script>\n    function mowMoney(n) { return \/^pt\/i.test(document.documentElement.lang) ? n + ' \u20ac' : '\u20ac' + n; }\n    const MOW_T_DETAILS_pt = {\"label_pickup\":\"De (local de recolha)\",\"placeholder_pickup\":\"Aeroporto da Madeira (FNC)\",\"label_destination\":\"Para (hotel, alojamento ou localidade)\",\"placeholder_destination\":\"Ex.: Savoy Palace, Pestana Carlton, Funchal...\",\"label_date_out\":\"Data e hora de partida\",\"urgent_alert\":\"A menos de 1 hora? Reserva online fechada.\",\"urgent_link\":\"Pe\\u00e7a informa\\u00e7\\u00f5es pelo WhatsApp\",\"urgent_wa_text\":\"Ol\\u00e1, preciso de um transfer urgente\",\"label_date_return\":\"Data e hora de regresso\",\"trip_oneway\":\"S\\u00f3 ida\",\"trip_return\":\"Ida e Volta\",\"dt_placeholder\":\"Selecionar data e hora\",\"dt_placeholder_return\":\"Selecionar data e hora de volta\",\"dt_time_label\":\"Hora de recolha\",\"dt_confirm\":\"Confirmar\",\"dt_weekdays\":[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"S\\u00e1b\"],\"dt_weekdays_header\":[\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"S\\u00e1b\",\"Dom\"],\"dt_months\":[\"Jan\",\"Fev\",\"Mar\",\"Abr\",\"Mai\",\"Jun\",\"Jul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dez\"],\"form_title\":\"Planeie o seu transfer\",\"form_progress_label\":\"Progresso da reserva\",\"form_step_trip\":\"Viagem\",\"form_step_details\":\"Detalhes\",\"details_title\":\"Dados dos passageiros\",\"details_intro\":\"Indique quem vai viajar para prepararmos o motorista e o comprovativo da reserva.\",\"label_passengers\":\"Passageiros\",\"label_luggage\":\"Malas grandes\",\"decrease\":\"Diminuir\",\"increase\":\"Aumentar\",\"vehicle_note_standard\":\"Ve\\u00edculo ligeiro atribu\\u00eddo ao seu grupo\",\"vehicle_note_minivan\":\"Minivan necess\\u00e1ria para o seu grupo\",\"child_seats_title\":\"Cadeiras para crian\\u00e7as (gratuitas)\",\"child_seats_toggle\":\"Viaja com crian\\u00e7as?\",\"baby_seat_label\":\"Cadeira para beb\\u00e9 (0\\u20134 anos)\",\"booster_seat_label\":\"Assento elevat\\u00f3rio (4\\u201312 anos)\",\"btn_continue\":\"Continuar\",\"step3_title\":\"Detalhes da reserva\",\"label_fullname\":\"Nome completo\",\"placeholder_fullname\":\"Nome do passageiro principal\",\"label_email\":\"E-mail (para envio do comprovativo)\",\"placeholder_email\":\"exemplo@email.com\",\"label_phone\":\"Telem\\u00f3vel \\\/ WhatsApp\",\"label_flight\":\"N\\u00famero do voo (para acompanhamento)\",\"placeholder_flight\":\"Ex.: TP 1682 \\\/ EZY 8541\",\"flight_note\":\"Acompanhamos a chegada do seu voo em tempo real, sem custos adicionais por atrasos ou desvios.\",\"label_notes_toggle\":\"Adicionar notas para o motorista\",\"placeholder_notes\":\"Bagagem volumosa, cadeira de rodas, etc.\",\"label_bulky_luggage\":\"Bagagem volumosa\",\"label_wheelchair\":\"Ve\\u00edculo adaptado para cadeira de rodas\",\"label_agree_updates\":\"Aceito receber atualiza\\u00e7\\u00f5es por e-mail e SMS\",\"return_upsell_title\":\"Adicionar transfer de regresso?\",\"btn_skip_step\":\"Saltar este passo\",\"btn_save_continue\":\"Guardar e continuar\",\"btn_back\":\"Voltar\",\"destination_default\":\"Destino personalizado\",\"error_processing\":\"N\\u00e3o foi poss\\u00edvel processar a reserva. Verifique os dados e tente novamente.\",\"error_communication\":\"Erro de comunica\\u00e7\\u00e3o com o servidor.\",\"flow_step_transfers\":\"Transfers\",\"flow_step_payment\":\"Pagamento\",\"summary_vehicle_standard\":\"Ve\\u00edculo ligeiro\",\"summary_vehicle_minivan\":\"Minivan\",\"summary_total\":\"Pre\\u00e7o total\",\"summary_taxes_included\":\"Taxas e portagens inclu\\u00eddas\",\"fare_on_request\":\"Pre\\u00e7o confirmado pela nossa equipa\",\"fare_unresolved\":\"Escolha uma morada v\\u00e1lida da lista.\",\"fare_unresolved_pickup\":\"Escolha uma morada da lista ou use o bot\\u00e3o de localiza\\u00e7\\u00e3o.\",\"fare_unavailable\":\"N\\u00e3o conseguimos calcular este pre\\u00e7o online.\",\"fare_whatsapp\":\"Fale connosco no WhatsApp\",\"fare_night_note\":\"Inclui tarifa noturna (+20 %, 21h00\\u201306h00)\",\"fare_estimate_note\":\"Pre\\u00e7o estimado\",\"fare_fixed_note\":\"Pre\\u00e7o fixo\",\"fare_calculating\":\"A calcular o pre\\u00e7o\",\"fare_roundtrip_note\":\"ida e volta\",\"error_same_endpoint\":\"A recolha e o destino s\\u00e3o o mesmo local.\",\"error_same_place_choose\":\"A recolha e o destino n\\u00e3o podem ser o mesmo local. Escolha um local diferente.\",\"err_destination\":\"Indique o destino da viagem.\",\"err_date\":\"Selecione a data e a hora do transfer.\",\"err_return_date\":\"Selecione a data e a hora do regresso.\",\"err_pickup\":\"Indique o local de recolha.\",\"geo_btn\":\"Usar a minha localiza\\u00e7\\u00e3o atual\",\"geo_locating\":\"A obter a sua localiza\\u00e7\\u00e3o\\u2026\",\"geo_denied\":\"O acesso \\u00e0 localiza\\u00e7\\u00e3o est\\u00e1 bloqueado. Permita-o nas defini\\u00e7\\u00f5es do navegador ou escreva o local de recolha.\",\"geo_unavailable\":\"N\\u00e3o foi poss\\u00edvel obter a sua localiza\\u00e7\\u00e3o. Escreva o local de recolha.\",\"geo_imprecise\":\"A localiza\\u00e7\\u00e3o n\\u00e3o est\\u00e1 suficientemente precisa. Escreva a morada de recolha ou escolha-a na lista.\",\"geo_outside\":\"Parece estar fora da Madeira. Escreva o local onde o devemos ir buscar.\",\"err_name\":\"Indique o primeiro e o \\u00faltimo nome.\",\"err_email\":\"Indique um endere\\u00e7o de e-mail v\\u00e1lido.\",\"err_phone\":\"Indique um n\\u00famero de telefone v\\u00e1lido.\",\"err_date_past\":\"A data e a hora escolhidas j\\u00e1 passaram. Escolha uma data e hora futuras.\",\"err_return_before\":\"O regresso tem de ser depois da ida.\",\"label_optional\":\"Opcional\",\"summary_route_title\":\"Percurso\",\"summary_route_estimate_note\":\"Estimativa\",\"summary_route_map_alt\":\"Mapa com o local de recolha (A) e o destino (B)\",\"summary_guarantee_title\":\"Inclu\\u00eddo em todos os transfers\",\"summary_guarantee_1\":\"Cancelamento gratuito at\\u00e9 24 horas antes da recolha\",\"summary_guarantee_2\":\"Motorista \\u00e0 sua espera na zona de chegadas com uma placa com o seu nome\",\"summary_guarantee_3\":\"60 minutos de espera ap\\u00f3s a aterragem inclu\\u00eddos\",\"btn_edit\":\"Editar\",\"btn_edit_trip\":\"Editar viagem\",\"btn_save\":\"Guardar altera\\u00e7\\u00f5es\",\"checkout_your_details\":\"Os seus dados\",\"checkout_detail_name\":\"Nome\",\"checkout_detail_phone\":\"Telefone\",\"checkout_detail_email\":\"E-mail\",\"modal_transfer_title\":\"Editar transfer\"};\n    function mowDetailsApp() {\n        return window.mowWithTripSearch({\n            T: MOW_T_DETAILS_pt,\n            draft: null,\n            hpCheck: '',\n            customer: { name: '', email: '', phone: '', flight: '' },\n            errors: {},\n            hasChildSeats: false,\n            babySeats: 0,\n            boosterSeats: 0,\n            hasNotes: false,\n            driverNotes: '',\n            bulkyLuggage: false,\n            wheelchairNeeded: false,\n            agreeUpdates: false,\n            isSubmitting: false,\n            nonce: '',\n            nonceFailed: false,\n            ajaxUrl: \"https:\\\/\\\/madeiraonwheels.pt\\\/wp-admin\\\/admin-ajax.php\",\n            routeUrl: \"https:\\\/\\\/madeiraonwheels.pt\\\/pt\\\/transfers\\\/\",\n            madeiraPlaces: [{\"name\":\"Aeroporto da Madeira (FNC)\",\"address\":\"Aeroporto Internacional Cristiano Ronaldo, 9100-105 Santa Cruz\",\"zone\":\"santacruz\",\"type\":\"airport\",\"keywords\":[\"aeroporto\",\"fnc\",\"cristiano ronaldo\",\"chegadas\",\"airport\"]},{\"name\":\"Santa Cruz\",\"address\":\"Santa Cruz, Madeira\",\"zone\":\"santacruz\",\"type\":\"city\",\"keywords\":[\"Santa Cruz\"]},{\"name\":\"Cani\\u00e7o\",\"address\":\"Cani\\u00e7o, Madeira\",\"zone\":\"canico\",\"type\":\"city\",\"keywords\":[\"Cani\\u00e7o\"]},{\"name\":\"Machico\",\"address\":\"Machico, Madeira\",\"zone\":\"machico\",\"type\":\"city\",\"keywords\":[\"Machico\"]},{\"name\":\"Porto da Cruz\",\"address\":\"Porto da Cruz, Madeira\",\"zone\":\"portodacruz\",\"type\":\"city\",\"keywords\":[\"Porto da Cruz\"]},{\"name\":\"Cani\\u00e7al\",\"address\":\"Cani\\u00e7al, Madeira\",\"zone\":\"canical\",\"type\":\"city\",\"keywords\":[\"Cani\\u00e7al\"]},{\"name\":\"Funchal\",\"address\":\"Funchal, Madeira\",\"zone\":\"funchal\",\"type\":\"city\",\"keywords\":[\"Funchal\"]},{\"name\":\"C\\u00e2mara de Lobos\",\"address\":\"C\\u00e2mara de Lobos, Madeira\",\"zone\":\"camaradelobos\",\"type\":\"city\",\"keywords\":[\"C\\u00e2mara de Lobos\"]},{\"name\":\"Ribeira Brava\",\"address\":\"Ribeira Brava, Madeira\",\"zone\":\"ribeirabrava\",\"type\":\"city\",\"keywords\":[\"Ribeira Brava\"]},{\"name\":\"Santana\",\"address\":\"Santana, Madeira\",\"zone\":\"santana\",\"type\":\"city\",\"keywords\":[\"Santana\"]},{\"name\":\"Ponta do Sol\",\"address\":\"Ponta do Sol, Madeira\",\"zone\":\"pontadosol\",\"type\":\"city\",\"keywords\":[\"Ponta do Sol\"]},{\"name\":\"Calheta\",\"address\":\"Calheta, Madeira\",\"zone\":\"calheta\",\"type\":\"city\",\"keywords\":[\"Calheta\"]},{\"name\":\"S\\u00e3o Vicente\",\"address\":\"S\\u00e3o Vicente, Madeira\",\"zone\":\"saovicente\",\"type\":\"city\",\"keywords\":[\"S\\u00e3o Vicente\"]},{\"name\":\"Seixal\",\"address\":\"Seixal, Madeira\",\"zone\":\"seixal\",\"type\":\"city\",\"keywords\":[\"Seixal\"]},{\"name\":\"Porto Moniz\",\"address\":\"Porto Moniz, Madeira\",\"zone\":\"portomoniz\",\"type\":\"city\",\"keywords\":[\"Porto Moniz\"]},{\"name\":\"Porto do Funchal \\\/ Terminal de Cruzeiros\",\"address\":\"Av. S\\u00e1 Carneiro, 9000-017 Funchal\",\"zone\":\"funchal\",\"type\":\"port\",\"keywords\":[\"porto\",\"cruzeiros\",\"terminal\",\"cais\",\"port\"]},{\"name\":\"Pico do Arieiro (Nascer do Sol \\\/ In\\u00edcio Trilho PR1)\",\"address\":\"Estrada do Pico do Arieiro, 9230 Santana\",\"zone\":\"santana\",\"type\":\"trail\",\"trail_key\":\"pico-arieiro\",\"keywords\":[\"pico do arieiro\",\"arieiro\",\"pr1\",\"sunrise\",\"nascer do sol\",\"pico ruivo\",\"pr 1\"]},{\"name\":\"Achada do Teixeira (Fim do Trilho PR1 \\\/ Vereda do Pico Ruivo PR1.2)\",\"address\":\"Estrada da Achada do Teixeira, 9230 Santana\",\"zone\":\"santana\",\"type\":\"trail\",\"trail_key\":\"achada-teixeira\",\"keywords\":[\"achada do teixeira\",\"pico ruivo\",\"pr1.2\",\"pr 1.2\",\"fim do trilho\",\"santana\"]},{\"name\":\"Raba\\u00e7al (Levada das 25 Fontes \\\/ Levada do Risco - PR6)\",\"address\":\"ER110, Pa\\u00fal da Serra, 9370 Calheta\",\"zone\":\"calheta\",\"type\":\"trail\",\"trail_key\":\"rabacal-25-fontes\",\"keywords\":[\"25 fontes\",\"rabacal\",\"raba\\u00e7al\",\"levada do risco\",\"pr6\",\"pr 6\",\"paul da serra\"]},{\"name\":\"Posto Florestal do Fanal (Floresta Laurissilva \\\/ \\u00c1rvores Centen\\u00e1rias)\",\"address\":\"Posto Florestal do Fanal, Pa\\u00fal da Serra, 9270 Porto Moniz\",\"zone\":\"portomoniz\",\"type\":\"trail\",\"trail_key\":\"fanal\",\"keywords\":[\"fanal\",\"floresta do fanal\",\"posto florestal do fanal\",\"laurissilva\",\"tis\",\"nevoeiro\"]},{\"name\":\"Parque Florestal das Queimadas (Levada do Caldeir\\u00e3o Verde - PR9)\",\"address\":\"Estrada das Queimadas, 9230 Santana\",\"zone\":\"santana\",\"type\":\"trail\",\"trail_key\":\"caldeirao-verde\",\"keywords\":[\"caldeirao verde\",\"caldeir\\u00e3o verde\",\"queimadas\",\"pr9\",\"pr 9\",\"santana\"]},{\"name\":\"Ribeiro Frio (Miradouro dos Balc\\u00f5es \\\/ Levada do Furado - PR11\\\/PR10)\",\"address\":\"Estrada Regional 103, Ribeiro Frio, 9230 Santana\",\"zone\":\"santana\",\"type\":\"trail\",\"keywords\":[\"ribeiro frio\",\"balcoes\",\"balc\\u00f5es\",\"pr11\",\"pr10\",\"parque natural do ribeiro frio\"]},{\"name\":\"Levada dos Tornos (Monte \\\/ Camacha \\\/ Ribeiro Frio)\",\"address\":\"Caminho dos Tornos, 9050 Funchal \\\/ Santana\",\"zone\":\"funchal\",\"type\":\"trail\",\"keywords\":[\"levada dos tornos\",\"tornos\",\"monte\",\"camacha\"]},{\"name\":\"Levada do Rei (PR18 - S\\u00e3o Jorge)\",\"address\":\"ETAR de S\\u00e3o Jorge, 9230-140 S\\u00e3o Jorge, Santana\",\"zone\":\"santana\",\"type\":\"trail\",\"trail_key\":\"levada-rei\",\"keywords\":[\"levada do rei\",\"pr18\",\"pr 18\",\"sao jorge\",\"santana\"]},{\"name\":\"Levada da Rocha Vermelha (Raba\\u00e7al \\\/ Calheta)\",\"address\":\"Pa\\u00fal da Serra, 9370 Calheta\",\"zone\":\"calheta\",\"type\":\"trail\",\"trail_key\":\"rocha-vermelha\",\"keywords\":[\"rocha vermelha\",\"levada da rocha vermelha\",\"rabacal\",\"calheta\"]},{\"name\":\"Levada do Moinho \\\/ Levada Nova (Cascata da Ponta do Sol)\",\"address\":\"Lombada da Ponta do Sol, 9360 Ponta do Sol\",\"zone\":\"pontadosol\",\"type\":\"trail\",\"keywords\":[\"levada do moinho\",\"levada nova\",\"lombada\",\"cascata\",\"ponta do sol\"]},{\"name\":\"Ponta de S\\u00e3o Louren\\u00e7o (In\\u00edcio da Vereda PR8)\",\"address\":\"Ba\\u00eda d'Abra, Estrada da Ponta de S\\u00e3o Louren\\u00e7o, 9200 Cani\\u00e7al\",\"zone\":\"canical\",\"type\":\"trail\",\"keywords\":[\"sao lourenco\",\"s\\u00e3o louren\\u00e7o\",\"pr8\",\"pr 8\",\"cani\\u00e7al\",\"baia d abra\"]},{\"name\":\"Po\\u00e7o dos Chefes (Curral das Freiras)\",\"address\":\"Caminho das Voltas, 9030 Curral das Freiras\",\"zone\":\"curral\",\"type\":\"spot\",\"keywords\":[\"poco dos chefes\",\"po\\u00e7o dos chefes\",\"curral das freiras\",\"rio\"]},{\"name\":\"Curral das Freiras \\\/ Miradouro da Eira do Serrado\",\"address\":\"Parque de estacionamento da Eira do Serrado, Estrada da Eira do Serrado, Funchal\",\"zone\":\"curral\",\"type\":\"spot\",\"keywords\":[\"curral das freiras\",\"eira do serrado\",\"valley of the nuns\",\"vale das freiras\"]},{\"name\":\"Piscinas Naturais do Porto Moniz (Lava Vulc\\u00e2nica)\",\"address\":\"Pra\\u00e7a do Lyra, 9270-151 Porto Moniz\",\"zone\":\"portomoniz\",\"type\":\"spot\",\"keywords\":[\"piscinas naturais\",\"porto moniz\",\"piscinas vulcanicas\",\"piscinas naturais do porto moniz\"]},{\"name\":\"Miradouro do Cabo Gir\\u00e3o (Passarela de Vidro \\\/ Skywalk)\",\"address\":\"Estrada do Cabo Gir\\u00e3o, 9300-351 C\\u00e2mara de Lobos\",\"zone\":\"camaradelobos\",\"type\":\"spot\",\"keywords\":[\"cabo girao\",\"cabo gir\\u00e3o\",\"skywalk\",\"faja dos padres\",\"vidro\"]},{\"name\":\"HPB Cabo Gir\\u00e3o (Village Cabo Gir\\u00e3o)\",\"address\":\"Estrada 1 de Julho 2, 9300-081 C\\u00e2mara de Lobos\",\"zone\":\"camaradelobos\",\"type\":\"hotel\",\"keywords\":[\"hpb\",\"hpb cabo girao\",\"hpb cabo gir\\u00e3o\",\"village cabo girao\",\"village cabo gir\\u00e3o\",\"encosta cabo girao\",\"encosta cabo gir\\u00e3o\",\"hpb village\",\"hpb properties\",\"1 de julho\"],\"in_text\":[\"hpb\",\"village cabo girao\",\"encosta cabo girao\"]},{\"name\":\"Miradouro do Guindaste (Passarela de Vidro no Faial)\",\"address\":\"Caminho do Guindaste, Faial, 9230 Santana\",\"zone\":\"santana\",\"type\":\"spot\",\"keywords\":[\"guindaste\",\"miradouro do guindaste\",\"faial\",\"passarela de vidro\",\"sunrise\"]},{\"name\":\"Cascata dos Anjos (Cascata na Estrada)\",\"address\":\"Estrada da Quebrada, 9360 Ponta do Sol (ponto de acesso mais pr\\u00f3ximo)\",\"zone\":\"pontadosol\",\"type\":\"spot\",\"keywords\":[\"cascata dos anjos\",\"cascata\",\"ponta do sol\",\"lavagem de carro\"]},{\"name\":\"Telef\\u00e9rico das Achadas da Cruz (Faj\\u00e3 da Quebrada Nova)\",\"address\":\"Caminho do Telef\\u00e9rico, Achadas da Cruz, 9270 Porto Moniz\",\"zone\":\"portomoniz\",\"type\":\"spot\",\"keywords\":[\"achadas da cruz\",\"teleferico achadas\",\"faja\",\"porto moniz\"]},{\"name\":\"Praia do Porto do Seixal (Areia Preta & Piscinas Naturais)\",\"address\":\"Frente Mar\\u00edtima do Seixal, 9270-130 Seixal\",\"zone\":\"seixal\",\"type\":\"spot\",\"keywords\":[\"seixal\",\"praia de areia preta\",\"piscinas do seixal\",\"veu da noiva\"]},{\"name\":\"Miradouro do V\\u00e9u da Noiva\",\"address\":\"Antiga ER101, Seixal, 9270 Seixal\",\"zone\":\"seixal\",\"type\":\"spot\",\"keywords\":[\"veu da noiva\",\"v\\u00e9u da noiva\",\"cascata seixal\"]},{\"name\":\"Grutas e Centro de Vulcanismo de S\\u00e3o Vicente\",\"address\":\"S\\u00edtio do P\\u00e9 do Passo, 9240-039 S\\u00e3o Vicente\",\"zone\":\"saovicente\",\"type\":\"spot\",\"keywords\":[\"grutas de sao vicente\",\"vulcanismo\",\"grutas\"]},{\"name\":\"Jardim Bot\\u00e2nico da Madeira\",\"address\":\"Caminho do Meio, Quinta do Bom Sucesso, 9064-512 Funchal\",\"zone\":\"funchal\",\"type\":\"spot\",\"keywords\":[\"jardim botanico\",\"botanical garden\",\"quinta do bom sucesso\"]},{\"name\":\"Monte Palace Madeira \\\/ Jardim Tropical\",\"address\":\"Caminho do Monte 174, 9050-288 Funchal\",\"zone\":\"funchal\",\"type\":\"spot\",\"keywords\":[\"monte palace\",\"jardim tropical\",\"monte\",\"carros de cesto\",\"toboggan\"]},{\"name\":\"Telef\\u00e9rico do Funchal (Esta\\u00e7\\u00e3o Almirante Reis)\",\"address\":\"Av. do Mar e das Comunidades Madeirenses, 9060-194 Funchal\",\"zone\":\"funchal\",\"type\":\"spot\",\"keywords\":[\"teleferico\",\"monte\",\"zona velha\"]},{\"name\":\"Mercado dos Lavradores \\\/ Rua de Santa Maria (Zona Velha)\",\"address\":\"Rua Brigadeiro Oudinot \\\/ Rua de Santa Maria, 9060-190 Funchal\",\"zone\":\"funchal\",\"type\":\"spot\",\"keywords\":[\"mercado dos lavradores\",\"rua de santa maria\",\"zona velha\",\"portas pintadas\"]},{\"name\":\"Funchal (Centro da Cidade \\\/ S\\u00e9)\",\"address\":\"Avenida Arriaga \\\/ Rua do Aljube, 9000-060 Funchal\",\"zone\":\"funchal\",\"type\":\"city\",\"keywords\":[\"funchal centro\",\"s\\u00e9\",\"baixa\",\"marina do funchal\"]},{\"name\":\"Funchal (Zona Hoteleira do Lido)\",\"address\":\"Estrada Monumental \\\/ Rua Gorgulho, 9004-530 Funchal\",\"zone\":\"funchal\",\"type\":\"city\",\"keywords\":[\"lido\",\"zona hoteleira\",\"monumental\"]},{\"name\":\"Savoy Palace Hotel\",\"address\":\"Avenida do Infante 25, 9004-542 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"savoy palace\",\"savoy\",\"infante\"]},{\"name\":\"Royal Savoy Resort\",\"address\":\"Rua Carvalho Ara\\u00fajo 56, 9000-022 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"royal savoy\",\"savoy\"]},{\"name\":\"NEXT by Savoy Signature\",\"address\":\"Rua Carvalho Ara\\u00fajo 8, 9000-022 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"next\",\"hotel next\",\"savoy next\"]},{\"name\":\"Belmond Reid's Palace\",\"address\":\"Estrada Monumental 139, 9000-098 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"reids palace\",\"belmond\",\"reid\",\"reids\"]},{\"name\":\"The Cliff Bay Hotel\",\"address\":\"Estrada Monumental 147, 9004-532 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"cliff bay\",\"les suites\",\"portobay\"]},{\"name\":\"Les Suites at The Cliff Bay\",\"address\":\"Estrada Monumental 145, 9004-532 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"les suites\",\"cliff bay\",\"portobay\"]},{\"name\":\"Pestana Carlton Madeira Ocean Resort\",\"address\":\"Estrada Monumental 282, 9004-531 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"pestana carlton\",\"carlton madeira\"]},{\"name\":\"Pestana Casino Park Ocean & Spa\",\"address\":\"Rua Imperatriz D. Am\\u00e9lia, 9004-513 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"casino park\",\"pestana casino\",\"casino da madeira\"]},{\"name\":\"Pestana Grand Ocean Luxury Resort\",\"address\":\"Rua Ponta da Cruz 23, 9000-103 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"pestana grand\",\"ponta da cruz\"]},{\"name\":\"Pestana Promenade Ocean Resort\",\"address\":\"Rua Simpl\\u00edcio dos Passos Gouveia 31, 9004-576 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"pestana promenade\",\"promenade\"]},{\"name\":\"Pestana CR7 Funchal\",\"address\":\"Pra\\u00e7a do Mar, Av. S\\u00e1 Carneiro, 9000-017 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"cr7\",\"pestana cr7\",\"cristiano ronaldo\",\"pra\\u00e7a do mar\"]},{\"name\":\"Pestana Royal All Inclusive\",\"address\":\"Estrada Monumental 275, 9000-250 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"pestana royal\",\"all inclusive\"]},{\"name\":\"Vidamar Resorts Madeira\",\"address\":\"Estrada Monumental 175-177, 9000-100 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"vidamar\",\"vida mar\",\"resort\"]},{\"name\":\"Enotel Lido All Inclusive\",\"address\":\"Rua Simpl\\u00edcio dos Passos Gouveia 29, 9004-576 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"enotel lido\",\"enotel\",\"lido\"]},{\"name\":\"Meli\\u00e1 Madeira Mare Resort & Spa\",\"address\":\"Rua Simpl\\u00edcio dos Passos Gouveia 21, 9004-565 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"melia\",\"melia madeira mare\",\"madeira mare\"]},{\"name\":\"Castanheiro Boutique Hotel\",\"address\":\"Rua do Castanheiro 31, 9000-081 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"castanheiro\",\"boutique hotel\",\"funchal centro\"]},{\"name\":\"Quinta da Casa Branca\",\"address\":\"Rua da Casa Branca 7, 9000-088 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"quinta da casa branca\",\"casa branca\"]},{\"name\":\"Quinta Jardins do Lago\",\"address\":\"Rua Dr. Jo\\u00e3o Lemos Gomes 29, 9000-208 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"jardins do lago\",\"quinta jardins\"]},{\"name\":\"Hotel Porto Santa Maria (PortoBay)\",\"address\":\"Avenida do Mar e das Comunidades Madeirenses 50, 9060-190 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"porto santa maria\",\"zona velha\",\"portobay\"]},{\"name\":\"Hotel Ba\\u00eda Azul\",\"address\":\"Estrada Monumental 427, 9004-539 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"baia azul\",\"ba\\u00eda azul\"]},{\"name\":\"Hotel Alto Lido\",\"address\":\"Estrada Monumental 316, 9004-528 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"alto lido\",\"lido\"]},{\"name\":\"Golden Residence Hotel\",\"address\":\"Rua do Cabrestante 25, 9000-105 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"golden residence\",\"praia formosa\"]},{\"name\":\"Allegro Madeira Adults Only\",\"address\":\"Rua do Gorgulho 1, S\\u00e3o Martinho, 9004-504 Funchal\",\"zone\":\"funchal\",\"type\":\"hotel\",\"keywords\":[\"allegro\",\"allegro madeira\",\"barcelo\"]},{\"name\":\"Cani\\u00e7o de Baixo (Zona Hoteleira \\\/ Reis Magos)\",\"address\":\"Praia dos Reis Magos, 9125-024 Cani\\u00e7o\",\"zone\":\"canico\",\"type\":\"city\",\"keywords\":[\"cani\\u00e7o\",\"canico de baixo\",\"reis magos\",\"garajau\"]},{\"name\":\"Hotel Riu Madeira\",\"address\":\"Praia dos Reis Magos, 9125-024 Cani\\u00e7o de Baixo\",\"zone\":\"canico\",\"type\":\"hotel\",\"keywords\":[\"riu\",\"riu madeira\",\"riu palace\"]},{\"name\":\"Sentido Galosol Resort\",\"address\":\"Rua Padre Sauria, 9125-031 Cani\\u00e7o de Baixo\",\"zone\":\"canico\",\"type\":\"hotel\",\"keywords\":[\"galosol\",\"sentido galosol\",\"galo resort\"]},{\"name\":\"Sentido Galomar Adults Only\",\"address\":\"Ponta da Oliveira, 9125-031 Cani\\u00e7o\",\"zone\":\"canico\",\"type\":\"hotel\",\"keywords\":[\"galomar\",\"sentido galomar\",\"galo resort\"]},{\"name\":\"Quinta Splendida Wellness & Botanical Garden\",\"address\":\"Estrada Ponta da Oliveira 11, 9125-001 Cani\\u00e7o\",\"zone\":\"canico\",\"type\":\"hotel\",\"keywords\":[\"quinta splendida\",\"splendida\"]},{\"name\":\"Four Views Oasis Hotel\",\"address\":\"Praia dos Reis Magos, 9125-024 Cani\\u00e7o de Baixo\",\"zone\":\"canico\",\"type\":\"hotel\",\"keywords\":[\"four views\",\"four views oasis\",\"oasis\"]},{\"name\":\"Cristo Rei da Ponta do Garajau\",\"address\":\"Estrada do Cristo Rei, 9125-058 Cani\\u00e7o\",\"zone\":\"canico\",\"type\":\"spot\",\"keywords\":[\"cristo rei\",\"garajau\",\"miradouro\"]},{\"name\":\"Vila Gal\\u00e9 Santa Cruz\",\"address\":\"Rua de S\\u00e3o Fernando 5, 9100-173 Santa Cruz\",\"zone\":\"santacruz\",\"type\":\"hotel\",\"keywords\":[\"vila gale\",\"vila gale santa cruz\"]},{\"name\":\"Hotel Albatroz Beach & Yacht Club\",\"address\":\"S\\u00edtio da Quinta, 9100-105 Santa Cruz\",\"zone\":\"santacruz\",\"type\":\"hotel\",\"keywords\":[\"albatroz\",\"albatroz beach\",\"yacht club\"]},{\"name\":\"Santa Cruz (Centro \\\/ Pra\\u00e7a da Igreja)\",\"address\":\"Rua da Praia, 9100-154 Santa Cruz\",\"zone\":\"santacruz\",\"type\":\"city\",\"keywords\":[\"santa cruz\",\"vila de santa cruz\",\"praia das palmeiras\"]},{\"name\":\"Dom Pedro Madeira Hotel\",\"address\":\"Estrada de S\\u00e3o Roque, 9200-126 Machico\",\"zone\":\"machico\",\"type\":\"hotel\",\"keywords\":[\"dom pedro\",\"dom pedro machico\",\"baia de machico\"]},{\"name\":\"Machico (Praia de Areia Amarela \\\/ Centro)\",\"address\":\"Avenida Dr. Manuel Greg\\u00f3rio Pestana J\\u00fanior, 9200-101 Machico\",\"zone\":\"machico\",\"type\":\"city\",\"keywords\":[\"machico\",\"praia de machico\",\"areia amarela\"]},{\"name\":\"Quinta do Lorde Resort & Marina\",\"address\":\"Marina da Quinta Grande, 9200-044 Cani\\u00e7al\",\"zone\":\"canical\",\"type\":\"hotel\",\"alias_of\":\"Hyatt Ziva Madeira\",\"keywords\":[\"quinta do lorde\",\"hyatt ziva\",\"marina do canical\",\"resort canical\"]},{\"name\":\"Hyatt Ziva Madeira\",\"address\":\"Marina da Quinta Grande, 9200-044 Cani\\u00e7al\",\"zone\":\"canical\",\"type\":\"hotel\",\"keywords\":[\"hyatt ziva\",\"ziva\",\"hyatt\",\"quinta do lorde\",\"marina do canical\"]},{\"name\":\"Cani\\u00e7al (Vila Piscat\\u00f3ria \\\/ Museu da Baleia)\",\"address\":\"Rua Garcia Moniz 1, 9200-031 Cani\\u00e7al\",\"zone\":\"canical\",\"type\":\"city\",\"keywords\":[\"canical\",\"museu da baleia\",\"porto do canical\"]},{\"name\":\"Hotel Costa Linda\",\"address\":\"Praia da Alagoa, 9225-050 Porto da Cruz\",\"zone\":\"portodacruz\",\"type\":\"hotel\",\"keywords\":[\"costa linda\",\"praia da alagoa\",\"surf porto da cruz\"]},{\"name\":\"Engenhos do Norte \\\/ Porto da Cruz\",\"address\":\"Rua do Cais 6, 9225-050 Porto da Cruz\",\"zone\":\"portodacruz\",\"type\":\"spot\",\"keywords\":[\"engenho\",\"porto da cruz\",\"destilaria\",\"rum da madeira\"]},{\"name\":\"Pestana Churchill Bay\",\"address\":\"Rua Nossa Senhora da Concei\\u00e7\\u00e3o, 9300-115 C\\u00e2mara de Lobos\",\"zone\":\"camaradelobos\",\"type\":\"hotel\",\"keywords\":[\"churchill bay\",\"pestana churchill\",\"camara de lobos\"]},{\"name\":\"Quinta da Saraiva\",\"address\":\"Caminho do Foro 6, 9300-057 C\\u00e2mara de Lobos\",\"zone\":\"camaradelobos\",\"type\":\"hotel\",\"keywords\":[\"quinta da saraiva\",\"saraiva\"]},{\"name\":\"Hotel Do Campo\",\"address\":\"Estrada Banda d'Al\\u00e9m 25, 9350-232 Ribeira Brava\",\"zone\":\"ribeirabrava\",\"type\":\"hotel\",\"keywords\":[\"hotel do campo\",\"ribeira brava\"]},{\"name\":\"Dazkarizeh73 Exotic Park Hotel\",\"address\":\"Caminho do Barreiro 32, 9350-103 Ribeira Brava\",\"zone\":\"ribeirabrava\",\"type\":\"hotel\",\"keywords\":[\"dazkarizeh\",\"exotic park\"]},{\"name\":\"Ribeira Brava (Vila \\\/ Marginal)\",\"address\":\"Avenida Engenheiro Duarte Pacheco, 9350-203 Ribeira Brava\",\"zone\":\"ribeirabrava\",\"type\":\"city\",\"keywords\":[\"ribeira brava\",\"centro\",\"frente mar\"]},{\"name\":\"Estalagem da Ponta do Sol\",\"address\":\"Quinta da Rochinha, 9360-121 Ponta do Sol\",\"zone\":\"pontadosol\",\"type\":\"hotel\",\"keywords\":[\"estalagem ponta do sol\",\"digital nomads\",\"rochinha\"]},{\"name\":\"1905 Zino's Palace\",\"address\":\"VE3 10, Ponta do Sol\",\"zone\":\"pontadosol\",\"type\":\"hotel\",\"keywords\":[\"zinos palace\",\"palacete dos zinos\",\"canhas\"]},{\"name\":\"Enotel Sunset Bay\",\"address\":\"Avenida 1\\u00ba de Maio, 9360-209 Ponta do Sol\",\"zone\":\"pontadosol\",\"type\":\"hotel\",\"keywords\":[\"enotel sunset bay\",\"sunset bay\"]},{\"name\":\"Saccharum Hedonist Design Resort\",\"address\":\"Rua Serra de \\u00c1gua 1, 9370-087 Arco da Calheta\",\"zone\":\"calheta\",\"type\":\"hotel\",\"keywords\":[\"saccharum\",\"savoy saccharum\",\"arco da calheta\"]},{\"name\":\"Calheta Beach Resort (Savoy Signature)\",\"address\":\"Avenida D. Manuel I, 9370-135 Vila da Calheta\",\"zone\":\"calheta\",\"type\":\"hotel\",\"keywords\":[\"calheta beach\",\"savoy calheta\",\"praia da calheta\"]},{\"name\":\"Socalco Nature Hotel\",\"address\":\"Caminho do Lombo do Sal\\u00e3o 13, 9370-141 Calheta\",\"zone\":\"calheta\",\"type\":\"hotel\",\"keywords\":[\"socalco\",\"nature hotel\",\"chef octavio freitas\"]},{\"name\":\"Casas da Levada (Alojamento de Charme)\",\"address\":\"Rua do Til 18, 9370-621 Prazeres, Calheta\",\"zone\":\"calheta\",\"type\":\"hotel\",\"keywords\":[\"casas da levada\",\"prazeres\",\"calheta\"]},{\"name\":\"Paul do Mar \\\/ Jardim do Mar\",\"address\":\"Avenida dos Pescadores, 9370-525 Paul do Mar\",\"zone\":\"calheta\",\"type\":\"city\",\"keywords\":[\"paul do mar\",\"jardim do mar\",\"maktub\",\"surf calheta\"]},{\"name\":\"Quinta do Fur\\u00e3o Hotel & Restaurante\",\"address\":\"Estrada da Quinta do Fur\\u00e3o 6, 9230-082 Santana\",\"zone\":\"santana\",\"type\":\"hotel\",\"keywords\":[\"quinta do furao\",\"fur\\u00e3o\",\"santana\",\"casas de santana\"]},{\"name\":\"Hotel O Colmo\",\"address\":\"Avenida Manuel Marques Trindade 42, 9230-116 Santana\",\"zone\":\"santana\",\"type\":\"hotel\",\"keywords\":[\"o colmo\",\"colmo\",\"santana centro\"]},{\"name\":\"Estalagem do Mar\",\"address\":\"Jancal do Passo, 9240-221 S\\u00e3o Vicente\",\"zone\":\"saovicente\",\"type\":\"hotel\",\"keywords\":[\"estalagem do mar\",\"sao vicente\",\"norte\"]},{\"name\":\"Solar da Bica\",\"address\":\"S\\u00edtio dos Cardais, 9240-106 S\\u00e3o Vicente\",\"zone\":\"saovicente\",\"type\":\"hotel\",\"keywords\":[\"solar da bica\",\"turismo rural\"]},{\"name\":\"Aqua Natura Madeira Hotel\",\"address\":\"Rotunda da Piscina 3, 9270-156 Porto Moniz\",\"zone\":\"portomoniz\",\"type\":\"hotel\",\"keywords\":[\"aqua natura\",\"aqua natura madeira\",\"piscinas naturais\"]},{\"name\":\"Aqua Natura Bay Hotel\",\"address\":\"Rua do Forte de S\\u00e3o Jo\\u00e3o Baptista 7, 9270-095 Porto Moniz\",\"zone\":\"portomoniz\",\"type\":\"hotel\",\"keywords\":[\"aqua natura bay\",\"porto moniz bay\"]},{\"name\":\"Hotel Moniz Sol\",\"address\":\"Rua do Forte de S\\u00e3o Jo\\u00e3o Baptista 7, 9270-095 Porto Moniz\",\"zone\":\"portomoniz\",\"type\":\"hotel\",\"alias_of\":\"Aqua Natura Bay Hotel\",\"keywords\":[\"moniz sol\",\"hotel moniz\"]}],\n            lang: \"pt\",\n            \/\/ Pre\u00e7o e km\/min v\u00eam do servidor (mow_quote); aqui n\u00e3o h\u00e1 tabela.\n            quote: window.mowMakeQuote(\"https:\\\/\\\/madeiraonwheels.pt\\\/wp-admin\\\/admin-ajax.php\"),\n            showTripModal: false,\n            tripSaving: false,\n            tripForm: { tripType: 'oneway', pickupQuery: '', destinationQuery: '', pickupOpen: false, pickupActive: -1, destinationOpen: false, destinationActive: -1, passengers: 1, luggage: 0 },\n            tripCal: window.mowMakeDatePicker({ id: 'details-trip' }),\n            tripReturnCal: window.mowMakeDatePicker({ id: 'details-return', placeholderKey: 'dt_placeholder_return' }),\n            hourOptions: Array.from({ length: 24 }, (_, i) => String(i).padStart(2, '0')),\n            minuteOptions: ['00', '10', '20', '30', '40', '50'],\n\n            \/\/ O regresso passou para o hero (toggle One Way \/ Return), por isso\n            \/\/ aqui ja so se le o que o rascunho traz.\n            get wantsReturn() {\n                return !!(this.draft && this.draft.wantsReturn && this.draft.returnDate);\n            },\n\n            init() {\n                this.initTripSearch();\n                const raw = localStorage.getItem('mow_booking_draft');\n                if (!raw) { window.location.href = this.routeUrl; return; }\n                try {\n                    this.draft = JSON.parse(raw);\n                } catch (e) {\n                    localStorage.removeItem('mow_booking_draft');\n                    window.location.href = this.routeUrl;\n                    return;\n                }\n                \/\/ Rascunho v\u00e1lido por 2h \u2014 ao fim desse tempo o pre\u00e7o\/disponibilidade\n                \/\/ j\u00e1 n\u00e3o s\u00e3o de confiar, mais vale recome\u00e7ar do que reservar com dados velhos.\n                const MOW_DRAFT_TTL_MS = 2 * 60 * 60 * 1000;\n                const isExpired = !this.draft || !this.draft.savedAt || (Date.now() - this.draft.savedAt) > MOW_DRAFT_TTL_MS;\n                \/\/ Rascunho incompleto (sem destino, data ou hora) n\u00e3o segue: volta ao passo 1.\n                if (!this.draft || !this.draft.destinationQuery || !this.draft.date || !this.draft.time || isExpired) {\n                    localStorage.removeItem('mow_booking_draft');\n                    window.location.href = this.routeUrl;\n                    return;\n                }\n\n                this.refreshQuote(0);\n\n                \/\/ Nonce buscado \u00e0 parte (n\u00e3o embutido no HTML cacheado), ver mow_get_booking_nonce.\n                \/\/ init() \u00e9 chamado pelo Alpine sozinho \u2014 sem x-init=\"init()\" no\n                \/\/ markup, sen\u00e3o corria duas vezes e pedia o nonce duas vezes.\n                this.loadNonce().catch(() => {});\n            },\n\n            \/\/ O bot\u00e3o fica desativado at\u00e9 o nonce chegar. Se o pedido falhar, o\n            \/\/ bot\u00e3o volta a ativar e withNonce() tenta de novo no clique, em vez\n            \/\/ de enviar um pedido sem nonce que o servidor recusa com 403.\n            loadNonce() {\n                return window.mowFetchBookingNonce(this.ajaxUrl)\n                    .then(nonce => { this.nonce = nonce; this.nonceFailed = false; return nonce; })\n                    .catch(err => { this.nonceFailed = true; throw err; });\n            },\n            withNonce() {\n                return this.nonce ? Promise.resolve(this.nonce) : this.loadNonce();\n            },\n            get nonceLoading() {\n                return !this.nonce && !this.nonceFailed;\n            },\n\n            get vehicle() {\n                if (!this.draft) return 'standard';\n                return (this.draft.passengers >= 4 || this.draft.luggage >= 4) ? 'minivan' : 'standard';\n            },\n\n            \/\/ Pr\u00e9-visualiza\u00e7\u00e3o vinda do servidor (mow_quote), a mesma fun\u00e7\u00e3o que\n            \/\/ cobra em mow_handle_ajax_build_transfer_cart. Enquanto o pedido n\u00e3o\n            \/\/ volta usa a estimativa que o hero deixou no rascunho, se existir.\n            refreshQuote(delay) {\n                if (!this.draft) return;\n                this.quote.request({\n                    pickup: this.draft.pickup,\n                    destination: this.draft.destinationQuery,\n                    pickupCoords: window.mowStoredCoords(this.draft.pickupLat, this.draft.pickupLon),\n                    destinationCoords: window.mowStoredCoords(this.draft.destLat, this.draft.destLon),\n                    passengers: this.draft.passengers,\n                    luggage: this.draft.luggage,\n                    time: this.draft.time,\n                    returnTime: this.draft.returnDate && this.draft.returnTime ? this.draft.returnTime : ''\n                }, delay);\n            },\n\n            get currentFare() {\n                if (this.quote.status === 'ok' && !this.quote.bookable) return null;\n                if (this.quote.status === 'ok') return { price: this.quote.price, priceRet: this.quote.priceRet, night: this.quote.night, nightRet: this.quote.nightRet, approx: this.quote.approx };\n                if (this.quote.status === 'loading' && this.draft && this.draft.estimate && this.draft.estimate.price > 0) return this.draft.estimate;\n                return null;\n            },\n\n            \/\/ O regresso \u00e9 a mesma rota ao contr\u00e1rio, ao mesmo pre\u00e7o da ida.\n            get totalPrice() {\n                const fare = this.currentFare;\n                return fare ? fare.price + (this.wantsReturn ? (fare.priceRet != null ? fare.priceRet : fare.price) : 0) : null;\n            },\n            get totalLabel() {\n                const fare = this.currentFare;\n                return fare ? (fare.approx ? '~' : '') + mowMoney(this.totalPrice) : '\u2014';\n            },\n            get totalNote() {\n                const fare = this.currentFare;\n                if (!fare && this.quote.status === 'ok') return this.quote.reason === 'unresolved_location' ? ((this.quote.unresolved || []).indexOf('pickup') !== -1 ? this.T.fare_unresolved_pickup : this.T.fare_unresolved) : this.T.fare_unavailable;\n                const base = fare && fare.approx ? this.T.fare_estimate_note : this.T.summary_taxes_included;\n                return fare && (fare.night || (this.wantsReturn && fare.nightRet)) ? this.T.fare_night_note + ' \u00b7 ' + base : base;\n            },\n\n            \/\/ km\/min por estrada entre os centros das zonas (matriz local);\n            \/\/ fica \"\u2014\" quando a viagem \u00e9 dentro da mesma zona.\n            get routeText() {\n                if (this.quote.status !== 'ok' || !this.quote.km) return '\u2014';\n                return '~' + this.quote.km + ' km \u00b7 ~' + this.quote.min + ' min';\n            },\n\n            mowPlaceIcon(type) {\n                return window.mowPlaceIcon(type);\n            },\n            routeIcon(text, selectedType, fallback) {\n                return window.mowPlaceIcon(window.mowPlaceType(this.madeiraPlaces, text, selectedType, fallback));\n            },\n\n            \/\/ Escrever o mesmo local \u00e0 m\u00e3o nos dois campos (o servidor tamb\u00e9m recusa).\n            get tripSame() {\n                \/\/ Tamb\u00e9m aliases do mesmo local (ex.: nome antigo e nome atual de um hotel).\n                return window.mowSameEndpoint(this.tripForm.pickupQuery, this.tripForm.destinationQuery, false);\n            },\n            get canSaveTrip() {\n                return !!(this.tripForm.pickupQuery.trim() && this.tripForm.destinationQuery.trim() && this.tripCal.selectedKey && (this.tripForm.tripType === 'oneway' || this.tripReturnCal.selectedKey));\n            },\n\n            makeTripCalendar(id, placeholderKey, date, time) {\n                const parts = (time || '12:00').split(':');\n                const cal = window.mowMakeDatePicker({ id, placeholderKey, hour: parts[0] || '12', minute: parts[1] || '00' });\n                cal.selectedKey = date || '';\n                cal.onBeforeOpen = () => this.closeTripPanels(id);\n                return cal;\n            },\n            openTripModal() {\n                if (!this.draft) return;\n                this.tripForm = {\n                    tripType: this.wantsReturn ? 'return' : 'oneway',\n                    pickupQuery: this.draft.pickup || '',\n                    destinationQuery: this.draft.destinationQuery || '',\n                    pickupOpen: false,\n                    pickupActive: -1,\n                    destinationOpen: false,\n                    destinationActive: -1,\n                    passengers: Number(this.draft.passengers) || 1,\n                    luggage: Number(this.draft.luggage) || 0\n                };\n                this.seedTripSearch(this.draft.pickup, this.draft.pickupLat, this.draft.pickupLon, this.draft.destinationQuery, this.draft.destLat, this.draft.destLon, this.draft.pickupType, this.draft.destinationType);\n                this.tripCal = this.makeTripCalendar('details-trip', 'dt_placeholder', this.draft.date, this.draft.time);\n                this.tripReturnCal = this.makeTripCalendar('details-return', 'dt_placeholder_return', this.draft.returnDate, this.draft.returnTime);\n                this.tripReturnCal.minKey = () => this.tripCal.selectedKey || null;\n                this.tripErrors = {};\n                this.showTripModal = true;\n            },\n            closeTripModal() {\n                this.closeTripPanels();\n                this.showTripModal = false;\n            },\n            closeTripPanels(except) {\n                this.tripForm.pickupOpen = false;\n                this.tripForm.destinationOpen = false;\n                if (except !== 'details-trip') this.tripCal.close();\n                if (except !== 'details-return') this.tripReturnCal.close();\n            },\n            setEditorTripType(type) {\n                this.tripForm.tripType = type;\n                this.closeTripPanels();\n                if (type === 'oneway') this.tripReturnCal.selectedKey = '';\n            },\n            tripComboKeydown(event, kind) {\n                const pickup = kind === 'pickup';\n                window.mowComboKeydown(event, this.tripForm, kind,\n                    pickup ? this.filteredTripPickups : this.filteredTripDestinations,\n                    item => pickup ? this.selectTripPickup(item) : this.selectTripDestination(item),\n                    pickup ? 'mow-trip-pickup-list' : 'mow-trip-dest-list');\n            },\n            saveTrip() {\n                \/\/ Campos obrigat\u00f3rios em falta: mensagem junto a cada um e foco no primeiro.\n                if (!this.validateTrip()) {\n                    window.mowFocusFirstError(document.querySelector('.mow-modal-panel--trip'));\n                    \/\/ O foco no campo abriria a lista de sugest\u00f5es por cima dos outros erros: s\u00f3 abre ao escrever.\n                    setTimeout(() => { this.tripForm.pickupOpen = false; this.tripForm.destinationOpen = false; }, 150);\n                    return;\n                }\n                if (this.tripSame) {\n                    window.mowNotice(this.T.error_same_place_choose, this.T.btn_ok);\n                    return;\n                }\n                \/\/ Local do Google acabado de escolher: espera pelas coordenadas (uns 300 ms) antes de gravar.\n                if (this.tripPickupSearch.isPending() || this.tripDestSearch.isPending()) {\n                    setTimeout(() => this.saveTrip(), 200);\n                    return;\n                }\n                this.tripSaving = true;\n                const wantsReturn = this.tripForm.tripType === 'return';\n                const pc = this.tripCoords('pickup');\n                const dc = this.tripCoords('destination');\n                Object.assign(this.draft, {\n                    pickup: this.tripForm.pickupQuery.trim(),\n                    destinationQuery: this.tripForm.destinationQuery.trim(),\n                    pickupType: window.mowPlaceType(this.madeiraPlaces, this.tripForm.pickupQuery, this.tripPickupSearch.type(this.tripForm.pickupQuery), 'airport'),\n                    destinationType: window.mowPlaceType(this.madeiraPlaces, this.tripForm.destinationQuery, this.tripDestSearch.type(this.tripForm.destinationQuery)),\n                    \/\/ A estimativa do hero j\u00e1 n\u00e3o vale para esta rota.\n                    estimate: null,\n                    pickupLat: pc ? pc.lat : '', pickupLon: pc ? pc.lon : '',\n                    destLat: dc ? dc.lat : '', destLon: dc ? dc.lon : '',\n                    date: this.tripCal.selectedKey,\n                    time: this.tripCal.hour + ':' + this.tripCal.minute,\n                    dateTimeLabel: this.tripCal.label(this.T),\n                    passengers: this.tripForm.passengers,\n                    luggage: this.tripForm.luggage,\n                    wantsReturn,\n                    returnDate: wantsReturn ? this.tripReturnCal.selectedKey : '',\n                    returnTime: wantsReturn ? this.tripReturnCal.hour + ':' + this.tripReturnCal.minute : '',\n                    returnDateTimeLabel: wantsReturn ? this.tripReturnCal.label(this.T) : '',\n                    returnPickup: wantsReturn ? this.tripForm.destinationQuery.trim() : '',\n                    returnDestination: wantsReturn ? this.tripForm.pickupQuery.trim() : '',\n                    savedAt: Date.now()\n                });\n                localStorage.setItem('mow_booking_draft', JSON.stringify(this.draft));\n                this.tripSaving = false;\n                this.closeTripModal();\n                this.refreshQuote(0);\n            },\n\n            \/\/ Um campo de cada vez (ao sair do campo) ou todos (ao continuar); vazio tamb\u00e9m \u00e9 erro.\n            fieldError(field) {\n                const v = this.customer[field] || '';\n                if (field === 'name') return window.mowValid.name(v) ? '' : this.T.err_name;\n                if (field === 'email') return window.mowValid.email(v) ? '' : this.T.err_email;\n                if (field === 'phone') return window.mowValid.phone(v) ? '' : this.T.err_phone;\n                return '';\n            },\n            setError(field, message) {\n                this.errors = Object.assign({}, this.errors, { [field]: message });\n            },\n            clearError(field) {\n                if (!this.errors[field]) return;\n                const next = Object.assign({}, this.errors);\n                delete next[field];\n                this.errors = next;\n            },\n            validateField(field) {\n                const message = this.fieldError(field);\n                if (message) this.setError(field, message); else this.clearError(field);\n                return !message;\n            },\n\n            submitBooking() {\n                this.errors = {};\n                if (this.quote.status === 'error' && this.quote.code === 'same_endpoint') {\n                    window.mowNotice(this.T.error_same_place_choose, this.T.btn_ok);\n                    return;\n                }\n                const found = {};\n                ['name', 'email', 'phone'].forEach(f => { const m = this.fieldError(f); if (m) found[f] = m; });\n                this.errors = found;\n                if (Object.keys(found).length) {\n                    window.mowFocusFirstError(this.$root || document);\n                    return;\n                }\n\n                const withReturn = this.wantsReturn;\n                this.isSubmitting = true;\n\n                const formData = new FormData();\n                formData.append('action', 'mow_build_transfer_cart');\n                formData.append('mow_hp_check', this.hpCheck);\n                formData.append('pickup', this.draft.pickup);\n                formData.append('destination', this.draft.destinationQuery);\n                formData.append('pickup_type', this.draft.pickupType || '');\n                formData.append('destination_type', this.draft.destinationType || '');\n                formData.append('lang', this.lang);\n                const pc = window.mowStoredCoords(this.draft.pickupLat, this.draft.pickupLon);\n                const dc = window.mowStoredCoords(this.draft.destLat, this.draft.destLon);\n                if (pc) { formData.append('pickup_lat', pc.lat); formData.append('pickup_lon', pc.lon); }\n                if (dc) { formData.append('destination_lat', dc.lat); formData.append('destination_lon', dc.lon); }\n                formData.append('date', this.draft.date);\n                formData.append('time', this.draft.time);\n                formData.append('passengers', this.draft.passengers);\n                formData.append('luggage', this.draft.luggage);\n                formData.append('baby_seats', this.babySeats);\n                formData.append('booster_seats', this.boosterSeats);\n                formData.append('name', this.customer.name);\n                formData.append('email', this.customer.email);\n                formData.append('phone', this.customer.phone);\n                formData.append('flight_num', this.customer.flight);\n                formData.append('driver_notes', this.hasNotes ? this.driverNotes : '');\n                formData.append('bulky_luggage', this.hasNotes && this.bulkyLuggage ? '1' : '0');\n                formData.append('wheelchair_needed', this.hasNotes && this.wheelchairNeeded ? '1' : '0');\n                formData.append('agree_updates', this.agreeUpdates ? '1' : '0');\n                formData.append('has_return', withReturn ? '1' : '0');\n                if (withReturn) {\n                    formData.append('return_date', this.draft.returnDate);\n                    formData.append('return_time', this.draft.returnTime);\n                    formData.append('return_pickup', this.draft.returnPickup || this.draft.destinationQuery);\n                    formData.append('return_destination', this.draft.returnDestination || this.draft.pickup);\n                }\n\n                this.withNonce()\n                    .then(nonce => {\n                        formData.append('security', nonce);\n                        return fetch(this.ajaxUrl, { method: 'POST', body: formData });\n                    })\n                    .then(res => res.json())\n                    .then(data => {\n                        if (data.success && data.data.redirect_url) {\n                            localStorage.removeItem('mow_booking_draft');\n                            window.location.href = data.data.redirect_url;\n                        } else {\n                            this.isSubmitting = false;\n                            \/\/ O servidor repete as valida\u00e7\u00f5es: um erro de campo aparece junto ao campo.\n                            const code = data && data.data && data.data.code;\n                            const fieldOf = { invalid_name: 'name', invalid_email: 'email', invalid_phone: 'phone' };\n                            if (fieldOf[code]) {\n                                this.setError(fieldOf[code], this.T['err_' + fieldOf[code]]);\n                                window.mowFocusFirstError(this.$root || document);\n                            } else if (code === 'past_date') {\n                                window.mowNotice(this.T.err_date_past, this.T.btn_ok);\n                            } else if (code === 'invalid_date' || code === 'invalid_time') {\n                                window.mowNotice(this.T.err_date, this.T.btn_ok);\n                            } else if (code === 'invalid_return') {\n                                window.mowNotice(this.T.err_return_date, this.T.btn_ok);\n                            } else if (code === 'missing_destination') {\n                                window.mowNotice(this.T.err_destination, this.T.btn_ok);\n                            } else if (data && data.data && data.data.message && ['too_soon', 'invalid_capacity', 'invalid_return_route', 'confirmation_sent', 'rate_limited', 'cart_error'].includes(code)) {\n                                window.mowNotice(data.data.message, this.T.btn_ok);\n                            } else {\n                                window.mowNotice(this.T.error_processing, this.T.btn_ok);\n                            }\n                        }\n                    })\n                    .catch(() => {\n                        this.isSubmitting = false;\n                        window.mowNotice(this.T.error_communication, this.T.btn_ok);\n                    });\n            }\n        }, \"https:\\\/\\\/madeiraonwheels.pt\\\/wp-admin\\\/admin-ajax.php\", \"pt\");\n    }\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2210,"featured_media":0,"parent":11929,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-11958","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/madeiraonwheels.pt\/pt\/wp-json\/wp\/v2\/pages\/11958","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/madeiraonwheels.pt\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/madeiraonwheels.pt\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/madeiraonwheels.pt\/pt\/wp-json\/wp\/v2\/users\/2210"}],"replies":[{"embeddable":true,"href":"https:\/\/madeiraonwheels.pt\/pt\/wp-json\/wp\/v2\/comments?post=11958"}],"version-history":[{"count":1,"href":"https:\/\/madeiraonwheels.pt\/pt\/wp-json\/wp\/v2\/pages\/11958\/revisions"}],"predecessor-version":[{"id":12217,"href":"https:\/\/madeiraonwheels.pt\/pt\/wp-json\/wp\/v2\/pages\/11958\/revisions\/12217"}],"up":[{"embeddable":true,"href":"https:\/\/madeiraonwheels.pt\/pt\/wp-json\/wp\/v2\/pages\/11929"}],"wp:attachment":[{"href":"https:\/\/madeiraonwheels.pt\/pt\/wp-json\/wp\/v2\/media?parent=11958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}