{"id":988178,"date":"2025-08-09T12:10:21","date_gmt":"2025-08-09T12:10:21","guid":{"rendered":"https:\/\/downtownlaundryporto.com\/?page_id=988178"},"modified":"2026-03-27T11:25:58","modified_gmt":"2026-03-27T11:25:58","slug":"luggage-storage-porto","status":"publish","type":"page","link":"https:\/\/downtownlaundryporto.com\/pt\/services\/luggage-storage-porto\/","title":{"rendered":"Luggage Storage &#8211; Porto"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"988178\" class=\"elementor elementor-988178\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-af6a46e e-con-full e-flex e-con e-parent\" data-id=\"af6a46e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-0f41f69 e-flex e-con-boxed e-con e-child\" data-id=\"0f41f69\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c871036 elementor-hidden-desktop elementor-hidden-tablet elementor-widget elementor-widget-image\" data-id=\"c871036\" 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 fetchpriority=\"high\" decoding=\"async\" width=\"844\" height=\"1024\" src=\"https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-vertical-844x1024.png\" class=\"attachment-large size-large wp-image-988495\" alt=\"\" srcset=\"https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-vertical-844x1024.png 844w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-vertical-247x300.png 247w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-vertical-768x931.png 768w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-vertical-10x12.png 10w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-vertical.png 1260w\" sizes=\"(max-width: 844px) 100vw, 844px\" \/>\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-65c82c6 elementor-hidden-mobile elementor-widget elementor-widget-image\" data-id=\"65c82c6\" 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=\"1024\" height=\"576\" src=\"https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-1024x576.png\" class=\"attachment-large size-large wp-image-988499\" alt=\"\" srcset=\"https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-1024x576.png 1024w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-300x169.png 300w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-768x432.png 768w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-1536x864.png 1536w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-2048x1152.png 2048w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-horario-atualizado-18x10.png 18w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\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-8f08e19 elementor-widget elementor-widget-html\" data-id=\"8f08e19\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<form id=\"bag-form\" action=\"\/wp-admin\/admin-post.php?action=submit_reservation\" method=\"post\" class=\"bag-form\">\r\n  <div class=\"bag-cards\">\r\n\r\n    <!-- Card Pequeno -->\r\n    <div class=\"bag-card\" data-price=\"3.50\" data-key=\"pequeno\">\r\n      <img decoding=\"async\" class=\"bag-img\" src=\"https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/luggage_opcao_2_mala_pequena_b.png\" alt=\"Pequeno\"\/>\r\n      <div class=\"bag-content\">\r\n        <h3>Small \/ Pequeno<\/h3>\r\n        <p class=\"bag-sub-eng\">Handbags, travel bags and small cabin bags<\/p>\r\n\t\t<p class=\"bag-sub\">Bolsas, sacos de viagem e malas pequenas de cabine<\/p>\r\n        <p class=\"bag-price\">3,50 \u20ac \/ dia<\/p>\r\n\r\n        <div class=\"qty\">\r\n          <button type=\"button\" class=\"qty-btn\" data-action=\"decrease\" data-target=\"qty-pequeno\">\u2212<\/button>\r\n          <input type=\"number\" name=\"qty_pequeno\" id=\"qty-pequeno\" value=\"0\" min=\"0\" readonly>\r\n          <button type=\"button\" class=\"qty-btn\" data-action=\"increase\" data-target=\"qty-pequeno\">+<\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Card Normal -->\r\n    <div class=\"bag-card\" data-price=\"6.00\" data-key=\"normal\">\r\n      <img decoding=\"async\" class=\"bag-img\" src=\"https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/luggage_opcao_1_mala_grande.jpg\" alt=\"Normal\"\/>\r\n      <div class=\"bag-content\">\r\n        <h3>Normal<\/h3>\r\n        <p class=\"bag-sub-eng\">Large suitcases<\/p>\r\n\t\t<p class=\"bag-sub\">Malas grandes<\/p>\r\n        <p class=\"bag-price\">6,00 \u20ac \/ dia<\/p>\r\n\r\n        <div class=\"qty\">\r\n          <button type=\"button\" class=\"qty-btn\" data-action=\"decrease\" data-target=\"qty-normal\">\u2212<\/button>\r\n          <input type=\"number\" name=\"qty_normal\" id=\"qty-normal\" value=\"0\" min=\"0\" readonly>\r\n          <button type=\"button\" class=\"qty-btn\" data-action=\"increase\" data-target=\"qty-normal\">+<\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Card Irregular -->\r\n    <div class=\"bag-card\" data-price=\"7.50\" data-key=\"irregular\">\r\n      <img decoding=\"async\" class=\"bag-img\" src=\"https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/luggage_opcao_3_irregulares.png\" alt=\"Irregular\"\/>\r\n      <div class=\"bag-content\">\r\n        <h3>Irregular size \/ Tamanho irregular<\/h3>\r\n\t\t<p class=\"bag-sub-eng\">Boards, bikes, large bags...<\/p>\r\n        <p class=\"bag-sub\">Pranchas, bicicletas, sacos grandes...<\/p>\r\n        <p class=\"bag-price\">7,50 \u20ac \/ dia<\/p>\r\n\r\n        <div class=\"qty\">\r\n          <button type=\"button\" class=\"qty-btn\" data-action=\"decrease\" data-target=\"qty-irregular\">\u2212<\/button>\r\n          <input type=\"number\" name=\"qty_irregular\" id=\"qty-irregular\" value=\"0\" min=\"0\" readonly>\r\n          <button type=\"button\" class=\"qty-btn\" data-action=\"increase\" data-target=\"qty-irregular\">+<\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n  <!-- Datas -->\r\n  <div class=\"dates-row\">\r\n    <label>Data in\u00edcio\r\n      <input type=\"date\" id=\"start-date\" name=\"start_date\" required>\r\n    <\/label>\r\n    <label>Data fim\r\n      <input type=\"date\" id=\"end-date\" name=\"end_date\" required>\r\n    <\/label>\r\n    <p class=\"days-note\">Dias: <span id=\"days-count\">1<\/span><\/p>\r\n  <\/div>\r\n\r\n  <!-- Total e hidden fields -->\r\n  <div class=\"summary\">\r\n    <p>Total: <strong id=\"total-display\">0,00 \u20ac<\/strong><\/p>\r\n    <input type=\"hidden\" name=\"total_amount\" id=\"total-amount\" value=\"0.00\">\r\n  <\/div>\r\n\r\n  <!-- A\u00e7\u00e3o: enviar ou avan\u00e7ar para pagamento\r\n  <div class=\"actions\">\r\n    <button type=\"submit\" class=\"btn send\">Reservar por WhatsApp<\/button>\r\n  <\/div>\r\n   -->\r\n  \r\n<\/form>\r\n\r\n<style>\r\n\/* CSS b\u00e1sico para estilo parecido com a imagem *\/\r\n.bag-form { max-width: 820px; margin: 20px auto; font-family: Arial, sans-serif; color:#222; }\r\n.bag-cards { display: grid; gap:20px; }\r\n@media(min-width:700px){ .bag-cards { grid-template-columns: 1fr; } } \/* cada card empilhado - podes criar 3 linhas como na imagem *\/\r\n\r\n.bag-card { display:flex; gap:18px; background:#fff; border-radius:14px; padding:18px; box-shadow:0 6px 18px rgba(30,40,60,0.06); align-items:center; }\r\n.bag-img{ width:120px; height:100px; object-fit:contain; border-radius:8px; background:#f7f9fc; padding:8px; }\r\n.bag-content h3{ margin:0 0 6px; font-size:20px; }\r\n.bag-sub-eng{ font-style: italic; margin:0 0 8px; color:#6b6b6b; }\r\n.bag-sub{ margin:0 0 8px; color:#6b6b6b; }\r\n.bag-price{ font-weight:700; margin-bottom:10px; }\r\n\r\n.qty{ display:flex; align-items:center; gap:12px; }\r\n.qty-btn{ width:46px; height:46px; border-radius:50%; border:1px solid #e6e6ee; background:#fff; font-size:22px; cursor:pointer; }\r\n.qty input[type=\"number\"]{ width:68px; text-align:center; font-size:48px; border:none; background:fff; }\r\n\r\n.dates-row{ background:#fff; display:flex; gap:12px; align-items:center; margin-top:18px; flex-wrap:wrap; }\r\n.dates-row label{ display:flex; flex-direction:column; font-size:14px; color:#444; }\r\n.days-note{ margin-left:6px; color:#666; }\r\n\r\n.summary{ background:#fff; margin-top:12px; font-size:18px; }\r\n.actions{ margin-top:14px; display:flex; gap:12px; }\r\n.btn{ padding:10px 18px; border-radius:10px; border:none; cursor:pointer; }\r\n.btn.send{ background:#25D366; color:#fff; }\r\n.btn.pay{ background:#1b9a59; color:#fff; }\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n  \/\/ pre\u00e7os (ajusta aqui se mudares pre\u00e7os)\r\n  const prices = {\r\n    'pequeno': 3.50,\r\n    'normal': 6.00,\r\n    'irregular': 7.50\r\n  };\r\n\r\n  \/\/ selectors\r\n  const qtyIds = ['qty-pequeno','qty-normal','qty-irregular'];\r\n  const daysCountEl = document.getElementById('days-count');\r\n  const totalDisplay = document.getElementById('total-display');\r\n  const totalHidden = document.getElementById('total-amount');\r\n  const startDateEl = document.getElementById('start-date');\r\n  const endDateEl = document.getElementById('end-date');\r\n  const payNowBtn = document.getElementById('pay-now');\r\n\r\n  \/\/ inicializa datas com hoje (opcional)\r\n  const today = new Date().toISOString().split('T')[0];\r\n  if(!startDateEl.value) startDateEl.value = today;\r\n  if(!endDateEl.value) endDateEl.value = today;\r\n\r\n  \/\/ fun\u00e7\u00f5es auxiliares\r\n  function parseNumber(v){ return Number(v) || 0; }\r\n  function daysBetween(s, e){\r\n    const start = new Date(s);\r\n    const end = new Date(e);\r\n    if(isNaN(start) || isNaN(end)) return 1;\r\n    const diffMs = end - start;\r\n    const oneDay = 1000*60*60*24;\r\n    \/\/ usamos inclusivo: (end - start) \/ oneDay + 1\r\n    const d = Math.floor(diffMs \/ oneDay) + 1;\r\n    return (d > 0) ? d : 1;\r\n  }\r\n\r\n  function calculateTotal(){\r\n    \/\/ soma qty * price\r\n    const qtyPeq = parseNumber(document.getElementById('qty-pequeno').value);\r\n    const qtyNorm = parseNumber(document.getElementById('qty-normal').value);\r\n    const qtyIrr = parseNumber(document.getElementById('qty-irregular').value);\r\n\r\n    const days = daysBetween(startDateEl.value, endDateEl.value);\r\n    daysCountEl.textContent = days;\r\n\r\n    const sub = qtyPeq*prices.pequeno + qtyNorm*prices.normal + qtyIrr*prices.irregular;\r\n    const total = sub * days;\r\n\r\n    \/\/ formatar com 2 casas decimais e v\u00edrgula\r\n    const formatted = total.toFixed(2).replace('.', ',') + ' \u20ac';\r\n    totalDisplay.textContent = formatted;\r\n    totalHidden.value = total.toFixed(2); \/\/ valor em formato num\u00e9rico com ponto (ex.: 27.00)\r\n    return total;\r\n  }\r\n\r\n  \/\/ inicial calculo\r\n  calculateTotal();\r\n\r\n  \/\/ + \/ - buttons\r\n  document.querySelectorAll('.qty-btn').forEach(btn=>{\r\n    btn.addEventListener('click', function(){\r\n      const action = this.dataset.action;\r\n      const target = document.getElementById(this.dataset.target);\r\n      let val = parseInt(target.value, 10) || 0;\r\n      if(action === 'increase'){ val = val + 1; }\r\n      else { val = Math.max(0, val - 1); }\r\n      target.value = val;\r\n      calculateTotal();\r\n    });\r\n  });\r\n\r\n  \/\/ mudar datas recalcula\r\n  startDateEl.addEventListener('change', calculateTotal);\r\n  endDateEl.addEventListener('change', calculateTotal);\r\n\r\n  \/\/ bot\u00e3o pagar (exemplo: redirecionar para p\u00e1gina de checkout com amount)\r\n  payNowBtn.addEventListener('click', function(){\r\n    const total = calculateTotal();\r\n    if(total <= 0.0){\r\n      alert('Escolha pelo menos 1 item para avan\u00e7ar para o pagamento.');\r\n      return;\r\n    }\r\n    \/\/ Exemplo: redireciona para \/checkout\/?amount=27.00\r\n    \/\/ Ajusta para o teu fluxo de pagamento (WooCommerce, Stripe, etc)\r\n    const url = '\/checkout\/?amount=' + total.toFixed(2);\r\n    window.location.href = url;\r\n  });\r\n\r\n  \/\/ valida\u00e7\u00e3o simples no submit (opcional)\r\n  document.getElementById('bag-form').addEventListener('submit', function(e){\r\n    const total = calculateTotal();\r\n    if(total <= 0.0){\r\n      e.preventDefault();\r\n      alert('N\u00e3o pode enviar um pedido com total 0. Escolha pelo menos 1 item.');\r\n      return false;\r\n    }\r\n    \/\/ o form ser\u00e1 enviado para admin-post.php?action=submit_reservation\r\n    \/\/ podes adicionar campos ocultos extras se quiseres (nome, email) antes de submeter\r\n  });\r\n\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"vamtam-has-theme-widget-styles elementor-element elementor-element-8c2898c elementor-align-center vamtam-has-underline-anim elementor-widget elementor-widget-button\" data-id=\"8c2898c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;none&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/wa.me\/351911741188\" target=\"_blank\" id=\"reserva_luggage_storage\" rel=\"noopener\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fab fa-whatsapp\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">WhatsApp<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\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-e7d99d3 elementor-widget elementor-widget-google_maps\" data-id=\"e7d99d3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"google_maps.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-custom-embed\">\n\t\t\t<iframe loading=\"lazy\"\n\t\t\t\t\tsrc=\"https:\/\/maps.google.com\/maps?q=Rua%20Sacadura%20Cabral%2C%2032%2C%20%204050-529%2C%20%20Porto&#038;t=m&#038;z=10&#038;output=embed&#038;iwloc=near\"\n\t\t\t\t\ttitle=\"Rua Sacadura Cabral, 32,  4050-529,  Porto\"\n\t\t\t\t\taria-label=\"Rua Sacadura Cabral, 32,  4050-529,  Porto\"\n\t\t\t><\/iframe>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2c7da10 elementor-widget elementor-widget-image\" data-id=\"2c7da10\" 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\t<a href=\"https:\/\/downtownlaundryporto.com\/en\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-1-1024x576.png\" class=\"attachment-large size-large wp-image-988372\" alt=\"\" srcset=\"https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-1-1024x576.png 1024w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-1-300x169.png 300w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-1-768x432.png 768w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-1-1536x864.png 1536w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-1-2048x1152.png 2048w, https:\/\/downtownlaundryporto.com\/wp-content\/uploads\/2025\/08\/downtown-cabecalho-luggage-storage-1-18x10.png 18w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\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\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},"excerpt":{"rendered":"<p>Small \/ Pequeno Handbags, travel bags and small cabin bags Bolsas, sacos de viagem e malas pequenas de cabine 3,50 \u20ac \/ dia \u2212 + Normal Large suitcases Malas grandes 6,00 \u20ac \/ dia \u2212 + Irregular size \/ Tamanho irregular Boards, bikes, large bags&#8230; Pranchas, bicicletas, sacos grandes&#8230; 7,50 \u20ac \/ dia \u2212 +&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"parent":6872,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_joinchat":[],"footnotes":""},"class_list":["post-988178","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/downtownlaundryporto.com\/pt\/wp-json\/wp\/v2\/pages\/988178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/downtownlaundryporto.com\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/downtownlaundryporto.com\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/downtownlaundryporto.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/downtownlaundryporto.com\/pt\/wp-json\/wp\/v2\/comments?post=988178"}],"version-history":[{"count":261,"href":"https:\/\/downtownlaundryporto.com\/pt\/wp-json\/wp\/v2\/pages\/988178\/revisions"}],"predecessor-version":[{"id":988562,"href":"https:\/\/downtownlaundryporto.com\/pt\/wp-json\/wp\/v2\/pages\/988178\/revisions\/988562"}],"up":[{"embeddable":true,"href":"https:\/\/downtownlaundryporto.com\/pt\/wp-json\/wp\/v2\/pages\/6872"}],"wp:attachment":[{"href":"https:\/\/downtownlaundryporto.com\/pt\/wp-json\/wp\/v2\/media?parent=988178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}