{"id":2490,"date":"2026-08-21T14:50:40","date_gmt":"2026-08-21T13:50:40","guid":{"rendered":"https:\/\/glidesuptours.pt\/?page_id=2490"},"modified":"2026-10-29T16:56:17","modified_gmt":"2026-10-29T15:56:17","slug":"sup-touring","status":"publish","type":"page","link":"https:\/\/glidesuptours.pt\/en\/sup-touring\/","title":{"rendered":"Costa Oeste Tours"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2490\" class=\"elementor elementor-2490\">\n\t\t\t\t<div class=\"elementor-element elementor-element-90be105 e-con-full e-flex e-con e-parent\" data-id=\"90be105\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dd537c3 elementor-widget elementor-widget-heading\" data-id=\"dd537c3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">West Coast Tour<br><span style=\"display:inline-block;margin-top:.14em;transform:translateY(-17px);font-size:.33em;font-weight:600;letter-spacing:.22em;text-indent:.22em;color:#7FE0B0;text-transform:uppercase\">SUP on Madeira's west coast<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aaba03a elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"aaba03a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"margin: 0; line-height: 1.6; font-size: 1.15rem; color: #FFFFFF; text-shadow: 0 2px 8px rgba(0,0,0,0.5);\">Paddle touring boards designed for longer distances, greater stability and a more complete exploration of the sea.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2631752 e-flex e-con-boxed e-con e-child\" data-id=\"2631752\" 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-1582f87 elementor-align-center btn-falar-conosco elementor-widget elementor-widget-button\" data-id=\"1582f87\" data-element_type=\"widget\" data-e-type=\"widget\" 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 elementor-animation-grow\" href=\"https:\/\/wa.me\/351914190623?text=Ol%C3%A1%20GLIDE%20SUP%20Tours%21%20Gostaria%20de%20consultar%20a%20disponibilidade%20e%20reservar%20o%20Costa%20Oeste%20SUP%20Tour.%20%F0%9F%8F%84%F0%9F%93%8D%20Local%20escolhido%20%28Praia%20da%20Foz%20%2F%20Ponta%20do%20Sol%20%2F%20Madalena%20do%20Mar%20%2F%20Calheta%29%3A%20%F0%9F%93%85%20Data%20pretendida%3A%20%F0%9F%91%A5%20N%C3%BAmero%20de%20participantes%20%28m%C3%A1ximo%204%29%3A%28Pre%C3%A7o%20de%20lan%C3%A7amento%3A%2045%E2%82%AC%20%2F%20pessoa%29\" target=\"_blank\">\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\">Chat with us<\/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-319a6f8 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"319a6f8\" data-element_type=\"widget\" data-e-type=\"widget\" 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=\"#sobre\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Learn more<\/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\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a91cb12 e-flex e-con-boxed e-con e-parent\" data-id=\"a91cb12\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-e78d014 e-con-full e-flex e-con e-child\" data-id=\"e78d014\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-b19fb9f e-con-full e-flex e-con e-child\" data-id=\"b19fb9f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-25b7bf4 elementor-view-stacked elementor-shape-circle elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"25b7bf4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-users\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tMaximum 4 participants\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tSmall groups for a personalized, safe experience with full guide attention.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-acbf000 e-con-full e-flex e-con e-child\" data-id=\"acbf000\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5a241c0 elementor-view-stacked elementor-shape-circle elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"5a241c0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-water\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tWest Coast Tour\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tThe west coast of Madeira leads the way, with scenery and sunshine always by your side.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6b58395 e-con-full e-flex e-con e-child\" data-id=\"6b58395\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a0db42 elementor-view-stacked elementor-shape-circle elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"8a0db42\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-smile\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tBeginners welcome\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tStable touring boards \u2014 ideal for first-timers or families paddling together.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\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\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a3eac4c e-flex e-con-boxed e-con e-parent\" data-id=\"a3eac4c\" data-element_type=\"container\" data-e-type=\"container\" id=\"sobre\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-0f24778 e-con-full e-flex e-con e-child\" data-id=\"0f24778\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-0c76ad8 e-con-full e-flex e-con e-child\" data-id=\"0c76ad8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-03017f0 elementor-widget elementor-widget-heading\" data-id=\"03017f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">About the West Coast Tour<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6ad6562 elementor-widget elementor-widget-text-editor\" data-id=\"6ad6562\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This tour is designed for longer distances, which is why we use touring boards. They help you cover more ground with less effort while enjoying the natural beauty of Madeira\u2019s coastline along the way.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-47e5a29 e-con-full e-flex e-con e-child\" data-id=\"47e5a29\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-011bcf7 elementor-widget elementor-widget-image\" data-id=\"011bcf7\" 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=\"624\" height=\"1024\" src=\"https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-624x1024.jpeg\" class=\"attachment-large size-large wp-image-3246\" alt=\"whatsapp image 2026 10 29 at 08.59.27 1\" srcset=\"https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-624x1024.jpeg 624w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-183x300.jpeg 183w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-768x1260.jpeg 768w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-936x1536.jpeg 936w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-7x12.jpeg 7w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-600x985.jpeg 600w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1.jpeg 975w\" sizes=\"(max-width: 624px) 100vw, 624px\"  title=\"West Coast Tour\" \/>\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>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a71a84a e-flex e-con-boxed e-con e-parent\" data-id=\"a71a84a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cow_locais_w elementor-widget elementor-widget-html\" data-id=\"cow_locais_w\" 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\n<style>\n.cow-section-wrap {\n  max-width: 1080px;\n  margin: 0 auto;\n  font-family: inherit;\n  box-sizing: border-box;\n}\n\n\/* CABE\u00c7ALHO *\/\n.cow-head {\n  text-align: center;\n  margin-bottom: 34px;\n}\n.cow-pill-tag {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  background: #F0F9FF;\n  color: #0E7FB8;\n  font-size: 0.8rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.12em;\n  padding: 5px 14px;\n  border-radius: 999px;\n  margin-bottom: 12px;\n  border: 1px solid rgba(14, 127, 184, 0.2);\n}\n.cow-title {\n  color: #0A2540;\n  font-size: clamp(1.8rem, 3.2vw, 2.3rem);\n  font-weight: 800;\n  margin: 0 0 10px;\n  line-height: 1.2;\n}\n.cow-subtitle {\n  color: #64748B;\n  font-size: 1.02rem;\n  line-height: 1.55;\n  margin: 0 auto;\n  max-width: 640px;\n}\n\n\/* GRID DOS 4 LOCAIS *\/\n.cow-grid-4 {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 18px;\n  margin-bottom: 28px;\n}\n.cow-card {\n  background: #FFFFFF;\n  border: 1.5px solid #E2E8F0;\n  border-radius: 16px;\n  padding: 24px 20px 20px;\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  box-shadow: 0 4px 16px rgba(10, 37, 64, 0.04);\n  transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;\n  box-sizing: border-box;\n}\n.cow-card:hover {\n  transform: translateY(-3px);\n  border-color: #0E7FB8;\n  box-shadow: 0 10px 24px rgba(14, 127, 184, 0.10);\n}\n.cow-card-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  background: #F0F9FF;\n  color: #0E7FB8;\n  font-size: 0.74rem;\n  font-weight: 700;\n  padding: 4px 10px;\n  border-radius: 999px;\n  border: 1px solid rgba(14, 127, 184, 0.25);\n  margin-bottom: 12px;\n}\n.cow-card-name {\n  color: #0A2540;\n  font-size: 1.3rem;\n  font-weight: 800;\n  margin: 0 0 10px;\n  line-height: 1.25;\n}\n.cow-card-desc {\n  color: #475569;\n  font-size: 0.92rem;\n  line-height: 1.55;\n  margin: 0 0 20px;\n  flex-grow: 1;\n}\n\n\/* BOTAO MAPS *\/\n.cow-btn-maps {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 7px;\n  background: #F8FAFC;\n  color: #0E7FB8;\n  border: 1.5px solid #CBD5E1;\n  border-radius: 10px;\n  padding: 10px 14px;\n  font-size: 0.86rem;\n  font-weight: 700;\n  text-decoration: none;\n  transition: all 0.2s ease;\n  width: 100%;\n  box-sizing: border-box;\n}\n.cow-btn-maps:hover {\n  background: #0E7FB8;\n  color: #FFFFFF;\n  border-color: #0E7FB8;\n}\n\n\/* NOTA HORARIOS E CONDICOES *\/\n.cow-note {\n  background: #F0F9FF;\n  border-left: 4px solid #0E7FB8;\n  border-radius: 8px;\n  padding: 14px 18px;\n  margin-bottom: 28px;\n  display: flex;\n  gap: 12px;\n  text-align: left;\n  box-sizing: border-box;\n}\n.cow-note__icon {\n  flex-shrink: 0;\n  margin-top: 2px;\n}\n.cow-note__text {\n  color: #0F172A;\n  font-size: 0.92rem;\n  line-height: 1.55;\n  margin: 0;\n}\n.cow-note__text strong {\n  color: #0A2540;\n}\n\n\/* BLOCO RESERVA RAPIDA *\/\n.cow-cta-box {\n  background: linear-gradient(150deg, #0A2E4E 0%, #04182B 100%);\n  border-radius: 20px;\n  padding: 38px 30px;\n  color: #FFFFFF;\n  text-align: center;\n  box-shadow: 0 12px 32px rgba(4, 24, 43, 0.16);\n  box-sizing: border-box;\n}\n.cow-cta-eyebrow {\n  color: #19C0A7;\n  font-size: 0.82rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.14em;\n  margin-bottom: 8px;\n}\n.cow-cta-title {\n  color: #FFFFFF;\n  font-size: clamp(1.45rem, 2.6vw, 1.95rem);\n  font-weight: 800;\n  margin: 0 0 20px;\n  line-height: 1.25;\n}\n\n\/* PRE\u00c7O INEQUIVOCO *\/\n.cow-price-display {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex-wrap: wrap;\n  gap: 14px;\n  background: rgba(255, 255, 255, 0.08);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n  border-radius: 999px;\n  padding: 10px 24px;\n  margin-bottom: 20px;\n}\n.cow-price-badge-tag {\n  background: #19C0A7;\n  color: #FFFFFF;\n  font-size: 0.72rem;\n  font-weight: 800;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  padding: 4px 10px;\n  border-radius: 999px;\n}\n.cow-price-regular {\n  color: #94A3B8;\n  font-size: 1.02rem;\n  font-weight: 600;\n}\n.cow-price-regular del {\n  text-decoration: line-through;\n  opacity: 0.85;\n}\n.cow-price-main {\n  color: #19C0A7;\n  font-size: 1.65rem;\n  font-weight: 800;\n  letter-spacing: -0.02em;\n}\n.cow-price-unit {\n  color: #E2E8F0;\n  font-size: 0.95rem;\n  font-weight: 600;\n}\n\n\/* DETALHES DO TOUR *\/\n.cow-cta-highlights {\n  display: flex;\n  justify-content: center;\n  gap: 22px;\n  margin-bottom: 26px;\n  font-size: 0.9rem;\n  color: #E2E8F0;\n  flex-wrap: wrap;\n}\n.cow-cta-hl-item {\n  display: inline-flex;\n  align-items: center;\n  gap: 7px;\n}\n\n\/* BOTAO WHATSAPP *\/\n.cow-btn-whatsapp {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  background: #19C0A7;\n  color: #FFFFFF;\n  font-size: 1.08rem;\n  font-weight: 700;\n  padding: 16px 36px;\n  border-radius: 999px;\n  text-decoration: none;\n  box-shadow: 0 4px 20px rgba(25, 192, 167, 0.35);\n  transition: all 0.25s ease;\n  max-width: 100%;\n  box-sizing: border-box;\n}\n.cow-btn-whatsapp:hover {\n  background: #15A892;\n  color: #FFFFFF;\n  transform: translateY(-2px);\n  box-shadow: 0 8px 26px rgba(25, 192, 167, 0.45);\n}\n.cow-btn-whatsapp svg {\n  flex-shrink: 0;\n}\n.cow-cta-subtext {\n  color: #94A3B8;\n  font-size: 0.84rem;\n  margin-top: 14px;\n  line-height: 1.45;\n}\n\n\/* RESPONSIVE *\/\n@media (max-width: 1024px) {\n  .cow-grid-4 {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 16px;\n  }\n}\n@media (max-width: 640px) {\n  .cow-grid-4 {\n    grid-template-columns: 1fr;\n    gap: 16px;\n  }\n  .cow-btn-whatsapp {\n    width: 100%;\n    padding: 15px 20px;\n    font-size: 0.98rem;\n  }\n  .cow-price-display {\n    border-radius: 14px;\n    padding: 12px 16px;\n    gap: 10px;\n  }\n  .cow-cta-highlights {\n    flex-direction: column;\n    gap: 10px;\n    align-items: center;\n  }\n}\n<\/style>\n\n<div class=\"cow-section-wrap\">\n  \n  <div class=\"cow-head\">\n    <span class=\"cow-pill-tag\">West Coast of Madeira<\/span>\n    <h2 class=\"cow-title\">West Coast Tour Locations<\/h2>\n    <p class=\"cow-subtitle\">Four locations available for the touring tour, with unique landscapes and calm waters along the coast.<\/p>\n  <\/div>\n\n  <!-- 4 CARTOES: 1. Praia da Foz, 2. Ponta do Sol, 3. Madalena do Mar, 4. Calheta -->\n  <div class=\"cow-grid-4\">\n    \n    <!-- CARD 1: PRAIA DA FOZ (RIBEIRA BRAVA) -->\n    <div class=\"cow-card\">\n      <div>\n        <span class=\"cow-card-badge\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg>\n          Ribeira Brava\n        <\/span>\n        <h3 class=\"cow-card-name\">Praia da Foz<\/h3>\n        <p class=\"cow-card-desc\">\n          Departure point in Ribeira Brava with calm waters and direct ocean access to begin the touring route along the west coast.\n        <\/p>\n      <\/div>\n      <div>\n        <a class=\"cow-btn-maps\" href=\"https:\/\/www.google.com\/maps?q=32.6703,-17.0653\" target=\"_blank\" rel=\"noopener noreferrer\">\n          <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg>\n          <span>View meeting point<\/span>\n        <\/a>\n      <\/div>\n    <\/div>\n\n    <!-- CARD 2: PONTA DO SOL -->\n    <div class=\"cow-card\">\n      <div>\n        <span class=\"cow-card-badge\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg>\n          Ponta do Sol\n        <\/span>\n        <h3 class=\"cow-card-name\">Ponta do Sol<\/h3>\n        <p class=\"cow-card-desc\">\n          Vila hist\u00f3rica e soalheira com enseada protegida por fal\u00e9sias vulc\u00e2nicas e \u00e1guas calmas e l\u00edmpidas.\n        <\/p>\n      <\/div>\n      <div>\n        <a class=\"cow-btn-maps\" href=\"https:\/\/maps.app.goo.gl\/wai35VK6xE6JdqwL8\" target=\"_blank\" rel=\"noopener noreferrer\">\n          <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg>\n          <span>View meeting point<\/span>\n        <\/a>\n      <\/div>\n    <\/div>\n\n    <!-- CARD 3: MADALENA DO MAR -->\n    <div class=\"cow-card\">\n      <div>\n        <span class=\"cow-card-badge\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg>\n          Madalena do Mar\n        <\/span>\n        <h3 class=\"cow-card-name\">Madalena do Mar<\/h3>\n        <p class=\"cow-card-desc\">\n          Peaceful coastal village with a pebble bay sheltered between the ocean and green hillsides.\n        <\/p>\n      <\/div>\n      <div>\n        <a class=\"cow-btn-maps\" href=\"https:\/\/maps.app.goo.gl\/fBimQdsRcbjX8SkEA\" target=\"_blank\" rel=\"noopener noreferrer\">\n          <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg>\n          <span>View meeting point<\/span>\n        <\/a>\n      <\/div>\n    <\/div>\n\n    <!-- CARD 4: CALHETA -->\n    <div class=\"cow-card\">\n      <div>\n        <span class=\"cow-card-badge\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg>\n          Calheta\n        <\/span>\n        <h3 class=\"cow-card-name\">Calheta<\/h3>\n        <p class=\"cow-card-desc\">\n          Bright, open ocean area in southwest Madeira, offering panoramic views over the coast and sea.\n        <\/p>\n      <\/div>\n      <div>\n        <a class=\"cow-btn-maps\" href=\"https:\/\/maps.app.goo.gl\/vMewk6vNWm3hwhVu9\" target=\"_blank\" rel=\"noopener noreferrer\">\n          <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg>\n          <span>View meeting point<\/span>\n        <\/a>\n      <\/div>\n    <\/div>\n\n  <\/div>\n\n  <!-- NOTA CLARA DE HORARIOS E DISPONIBILIDADE -->\n  <div class=\"cow-note\">\n    <div class=\"cow-note__icon\">\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#0E7FB8\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"\/><\/svg>\n    <\/div>\n    <div class=\"cow-note__text\">\n      <strong>Schedules and sea conditions (West Coast Tours):<\/strong> Schedules for West Coast Tours may be slightly adjusted based on GLIDE's availability. Tour operation and route confirmation always depend on sea and wind conditions to ensure a completely safe paddle.\n    <\/div>\n  <\/div>\n\n  <!-- BLOCO DE PRE\u00c7O E RESERVA POR WHATSAPP -->\n  <div class=\"cow-cta-box\">\n    <div class=\"cow-cta-eyebrow\">Quick Booking \u00b7 West Coast Tours<\/div>\n    <h3 class=\"cow-cta-title\">Ready to paddle on the west coast?<\/h3>\n\n    <!-- APRESENTA\u00c7\u00c3O DO PRE\u00c7O INEQU\u00cdVOCA -->\n    <div class=\"cow-price-display\">\n      <span class=\"cow-price-badge-tag\">Launch Price<\/span>\n      <span class=\"cow-price-regular\">Regular price: <del>65 \u20ac<\/del><\/span>\n      <span style=\"color:rgba(255,255,255,0.3);\">|<\/span>\n      <span class=\"cow-price-main\">\u20ac45<\/span>\n      <span class=\"cow-price-unit\">\/ person (current price)<\/span>\n    <\/div>\n\n    <!-- DETALHES DO TOUR -->\n    <div class=\"cow-cta-highlights\">\n      <span class=\"cow-cta-hl-item\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#19C0A7\" stroke-width=\"2.2\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"\/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"\/><\/svg>\n        Maximum 4 participants\n      <\/span>\n      <span class=\"cow-cta-hl-item\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#19C0A7\" stroke-width=\"2.2\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M8 14s1.5 2 4 2 4-2 4-2\"\/><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"\/><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"\/><\/svg>\n        Beginners welcome\n      <\/span>\n      <span class=\"cow-cta-hl-item\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#19C0A7\" stroke-width=\"2.2\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\n        Stable touring boards\n      <\/span>\n    <\/div>\n\n    <!-- BOTAO UNICO DE RESERVA (4 LOCAIS) -->\n    <div style=\"margin-top: 6px;\">\n      <a class=\"cow-btn-whatsapp\" href=\"https:\/\/wa.me\/351914190623?text=Ol%C3%A1%20GLIDE%20SUP%20Tours%21%20Gostaria%20de%20consultar%20a%20disponibilidade%20e%20reservar%20o%20Costa%20Oeste%20SUP%20Tour.%20%F0%9F%8F%84%0A%0A%F0%9F%93%8D%20Local%20escolhido%20%28Praia%20da%20Foz%20%2F%20Ponta%20do%20Sol%20%2F%20Madalena%20do%20Mar%20%2F%20Calheta%29%3A%20%0A%F0%9F%93%85%20Data%20pretendida%3A%20%0A%F0%9F%91%A5%20N%C3%BAmero%20de%20participantes%20%28m%C3%A1ximo%204%29%3A%0A%0A%28Pre%C3%A7o%20de%20lan%C3%A7amento%3A%2045%E2%82%AC%20%2F%20pessoa%29\" target=\"_blank\" rel=\"noopener noreferrer\">\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"\/><\/svg>\n        <span>Check availability & book via WhatsApp<\/span>\n      <\/a>\n    <\/div>\n\n    <div class=\"cow-cta-subtext\">Valid for all 4 locations: Praia da Foz (Ribeira Brava), Ponta do Sol, Madalena do Mar and Calheta.<\/div>\n  <\/div>\n\n<\/div>\n\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<div class=\"elementor-element elementor-element-79b7fbb e-flex e-con-boxed e-con e-parent\" data-id=\"79b7fbb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e35c6cc elementor-widget elementor-widget-html\" data-id=\"e35c6cc\" 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\n\t\t\t\t\t<!-- =========================================================================\n\n     GLIDE - SUP TOURS \u2014 WIDGET DEDICADO COSTA SUL \u2014 SUP TOURING (10h, 14h, 18h)\n\n     Powered by GLIDE Alinhado Exatamente na Dire\u00e7\u00e3o do Hours (padding: 10px)\n\n     ========================================================================= -->\n\n\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@500;600;700;800&family=Noto+Sans:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n\n\n\n<style>\n.glide-widget-compact {\n  font-family: 'Montserrat', 'Noto Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n  color: #0F172A;\n  box-sizing: border-box;\n  margin: 10px auto 4px auto;\n  width: 820px !important;\n  max-width: 100% !important;\n  background: #FFFFFF;\n  border-radius: 16px;\n  border: 1px solid #E2E8F0;\n  padding: 16px 18px 8px 18px;\n  box-shadow: 0 10px 25px -5px rgba(15, 23, 42, 0.04);\n}\n.glide-widget-compact * { box-sizing: border-box; }\n\n.glide-header-bar {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  flex-wrap: wrap;\n  gap: 10px;\n  padding-bottom: 12px;\n  border-bottom: 1px solid #EDF2F7;\n  margin-bottom: 12px;\n}\n.glide-header-titles h3 {\n  margin: 0;\n  font-size: 1.08rem;\n  font-weight: 800;\n  color: #0F172A;\n  letter-spacing: -0.01em;\n  line-height: 1.25;\n}\n.glide-header-titles p {\n  margin: 3px 0 0 0;\n  font-size: 0.76rem;\n  color: #64748B;\n  line-height: 1.3;\n}\n.glide-venturi-note {\n  font-weight: 700;\n  color: #D97706;\n}\n\n.glide-header-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 7px;\n  font-size: 0.74rem;\n  font-weight: 700;\n  line-height: 1.2;\n  padding: 6px 12px;\n  border-radius: 9999px;\n  background: #F0FDF4;\n  color: #166534;\n  border: 1px solid #86EFAC;\n  white-space: nowrap;\n}\n.glide-header-badge.emerald { background: #DCFCE7; color: #15803D; border-color: #4ADE80; font-weight: 800; }\n.glide-header-badge.yellow { background: #FEF9C3; color: #854D0E; border-color: #FCD34D; }\n.glide-header-badge.red { background: #FEE2E2; color: #991B1B; border-color: #FCA5A5; }\n.glide-badge-dot {\n  width: 7px;\n  height: 7px;\n  border-radius: 50%;\n  background: currentColor;\n  flex: 0 0 auto;\n}\n\n.glide-days-nav {\n  display: grid;\n  grid-template-columns: repeat(5, 1fr);\n  gap: 8px;\n  margin-bottom: 12px;\n}\n.glide-day-tab {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 8px 4px;\n  background: #F8FAFC;\n  border: 1px solid #E2E8F0;\n  border-radius: 10px;\n  cursor: pointer;\n  transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;\n  text-align: center;\n}\n.glide-day-tab:hover {\n  background: #FFFFFF;\n  border-color: #CBD5E1;\n}\n.glide-day-tab.active {\n  background: #FFFFFF;\n  border-color: #FF6210;\n  box-shadow: 0 2px 10px rgba(255, 98, 16, 0.16);\n}\n.glide-day-title {\n  font-size: 0.80rem;\n  font-weight: 800;\n  color: #0F172A;\n  line-height: 1.15;\n}\n.glide-day-date {\n  font-size: 0.68rem;\n  color: #64748B;\n  font-weight: 600;\n  margin-top: 2px;\n  line-height: 1.15;\n}\n.glide-day-wind {\n  font-size: 0.70rem;\n  color: #0F766E;\n  font-weight: 800;\n  margin-top: 4px;\n  font-variant-numeric: tabular-nums;\n  line-height: 1.15;\n}\n\n.glide-table-box {\n  background: #FFFFFF;\n  border: 1px solid #E2E8F0;\n  border-radius: 12px;\n  overflow: hidden;\n  margin-bottom: 6px;\n}\n.glide-compact-table {\n  width: 100%;\n  border-collapse: collapse;\n  table-layout: fixed;\n  text-align: left;\n}\n.glide-compact-table th {\n  background: #F8FAFC;\n  padding: 9px 12px;\n  font-weight: 800;\n  color: #64748B;\n  text-transform: uppercase;\n  font-size: 0.66rem;\n  letter-spacing: 0.06em;\n  border-bottom: 1px solid #E2E8F0;\n  line-height: 1.2;\n}\n.glide-compact-table td {\n  padding: 11px 12px;\n  border-bottom: 1px solid #F1F5F9;\n  vertical-align: middle;\n  font-size: 0.85rem;\n  color: #0F172A;\n}\n.glide-compact-table tbody tr:last-child td { border-bottom: none; }\n.glide-compact-table tbody tr:hover td { background: #FAFBFC; }\n\n\/* \"Condi\u00e7\u00f5es Excelentes\" e o r\u00f3tulo mais longo: a coluna tem de lhe\n   chegar. fixed + 22% cortava o texto a meio. *\/\n.glide-c-hour   { width: 72px; }\n.glide-c-state  { width: 27%; }\n.glide-c-wind   { width: 23%; }\n.glide-c-dir    { width: 13%; }\n.glide-c-swell  { width: 17%; }\n\n.glide-hour {\n  display: block;\n  font-weight: 800;\n  color: #0F172A;\n  font-size: 1.02rem;\n  font-variant-numeric: tabular-nums;\n  letter-spacing: -0.01em;\n  line-height: 1.15;\n}\n\n.glide-pill-status {\n  display: inline-block;\n  font-size: 0.71rem;\n  font-weight: 700;\n  line-height: 1.25;\n  padding: 4px 10px;\n  border-radius: 9999px;\n  white-space: nowrap;\n}\n.glide-pill-status.emerald { background: #DCFCE7; color: #15803D; font-weight: 800; border: 1px solid #4ADE80; }\n.glide-pill-status.green { background: #F0FDF4; color: #166534; border: 1px solid #86EFAC; }\n.glide-pill-status.yellow { background: #FEF9C3; color: #854D0E; border: 1px solid #FCD34D; }\n.glide-pill-status.red { background: #FEE2E2; color: #991B1B; border: 1px solid #FCA5A5; }\n\n.glide-wind-block {\n  display: block;\n  width: 100%;\n  min-width: 0;\n}\n\n.glide-wind-main {\n  display: block;\n  color: #0F172A;\n  line-height: 1.15;\n}\n.glide-wind-main strong {\n  font-size: 1.05rem;\n  font-weight: 800;\n  font-variant-numeric: tabular-nums;\n  letter-spacing: -0.01em;\n}\n.glide-wind-main i {\n  font-style: normal;\n  font-size: 0.68rem;\n  font-weight: 700;\n  color: #94A3B8;\n  margin-left: 3px;\n  letter-spacing: 0;\n}\n\n\n\n\n\n\n\n\n\n.glide-gust-text {\n  display: block;\n  font-size: 0.69rem;\n  color: #94A3B8;\n  margin-top: 5px;\n  line-height: 1.2;\n  white-space: nowrap;\n}\n.glide-gust-text strong {\n  font-weight: 800;\n  color: #64748B;\n  font-variant-numeric: tabular-nums;\n}\n\n.glide-badge-dir, .glide-badge-wave {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  font-size: 0.78rem;\n  font-weight: 800;\n  vertical-align: middle;\n  flex: 0 0 auto;\n}\n.glide-badge-dir { background: #FFF7ED; color: #FF6210; }\n.glide-badge-wave { background: #E6F6F4; color: #0F766E; }\n.glide-dir, .glide-swell {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  line-height: 1.2;\n}\n.glide-dir strong, .glide-swell strong {\n  font-weight: 800;\n  color: #0F172A;\n  font-variant-numeric: tabular-nums;\n}\n.glide-swell b {\n  font-weight: 500 !important;\n  color: #475569 !important;\n  font-variant-numeric: tabular-nums;\n}\n.glide-swell b i {\n  font-style: normal;\n  font-weight: 400 !important;\n  color: #94A3B8;\n  font-size: 0.70rem;\n  margin-left: 2px;\n}\n\n.glide-compact-footer {\n  display: flex !important;\n  justify-content: space-between !important;\n  align-items: center !important;\n  gap: 8px !important;\n  font-size: 0.66rem !important;\n  color: #94A3B8 !important;\n  padding: 8px 16.5px 2px 16.5px !important;\n  line-height: 1.2 !important;\n}\n.glide-compact-footer strong {\n  color: #64748B;\n  font-weight: 800;\n}\n\n@media (max-width: 700px) {\n  .glide-widget-compact { padding: 14px 10px 6px 10px; margin: 8px auto 2px auto; border-radius: 14px; }\n  .glide-compact-footer { padding: 6px 14px 2px 14px; }\n  .glide-days-nav { gap: 4px; margin-bottom: 10px; }\n  .glide-day-tab { padding: 6px 2px; border-radius: 8px; }\n  .glide-day-title { font-size: 0.74rem; }\n  .glide-day-date { font-size: 0.64rem; }\n  .glide-day-wind { font-size: 0.64rem; margin-top: 3px; }\n\n  \/* A tabela de 5 colunas nao cabe. Cada linha passa a cartao. *\/\n  .glide-table-box { border: none; background: transparent; overflow: visible; margin-bottom: 4px; }\n  .glide-compact-table,\n  .glide-compact-table thead,\n  .glide-compact-table tbody { display: block; width: 100%; }\n  .glide-compact-table thead { display: none; }\n  .glide-compact-table tbody tr {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 8px 12px;\n    background: #FFFFFF;\n    border: 1px solid #E2E8F0;\n    border-left: 3px solid #CBD5E1;\n    border-radius: 12px;\n    padding: 11px 12px;\n    margin-bottom: 8px;\n  }\n  .glide-compact-table tbody tr:hover td { background: transparent; }\n  .glide-compact-table tbody tr.glide-st-emerald { border-left-color: #16A34A; }\n  .glide-compact-table tbody tr.glide-st-green { border-left-color: #22C55E; }\n  .glide-compact-table tbody tr.glide-st-yellow { border-left-color: #F59E0B; }\n  .glide-compact-table tbody tr.glide-st-red { border-left-color: #EF4444; }\n\n  .glide-compact-table td {\n    display: flex;\n    align-items: baseline;\n    justify-content: space-between;\n    gap: 10px;\n    padding: 3px 0;\n    border-bottom: none;\n    font-size: 0.82rem;\n    min-width: 0;\n  }\n  .glide-compact-table td[data-l]::before {\n    content: attr(data-l);\n    font-size: 0.62rem;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 0.06em;\n    color: #94A3B8;\n    flex: 0 0 auto;\n  }\n  \/* hora e estado nao precisam de rotulo: sao o cabecalho do cartao *\/\n  .glide-c-hour, .glide-c-state { display: block; width: auto; }\n  .glide-c-hour { grid-column: 1; grid-row: 1; }\n  .glide-c-state { grid-column: 2; grid-row: 1; justify-self: end; align-self: center; }\n  .glide-c-wind { grid-column: 1 \/ -1; grid-row: 2; width: auto; display: flex; align-items: flex-start; }\n  .glide-c-wind .glide-wind-block { flex: 1 1 auto; min-width: 0; }\n  .glide-c-wind .glide-gust-text { margin-top: 3px; flex: 0 0 auto; }\n  \/* direccao e ondulacao dividem a ultima linha; cada uma ocupa metade *\/\n  .glide-c-dir { grid-column: 1; grid-row: 3; width: auto; }\n  .glide-c-swell { grid-column: 2; grid-row: 3; width: auto; }\n  .glide-dir, .glide-swell { justify-content: flex-end; gap: 4px; min-width: 0; }\n  .glide-swell b { font-size: 0.78rem; white-space: nowrap; }\n  .glide-swell b i { font-size: 0.62rem; margin-left: 1px; }\n  .glide-badge-dir, .glide-badge-wave { width: 20px; height: 20px; font-size: 0.78rem; }\n  .glide-c-dir strong { font-size: 0.78rem; }\n  \/* o rotulo \"ONDULACAO\" e o mais largo das duas: encolhe-o *\/\n  .glide-c-swell[data-l]::before { font-size: 0.58rem; letter-spacing: 0.04em; }\n  \n}\n\n\/* ---- modo cartao (desktop): substitui a tabela ---- *\/\n.glide-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }\n.glide-hour-card {\n  background: #FFFFFF;\n  border: 1px solid #E2E8F0;\n  border-top: 3px solid #CBD5E1;\n  border-radius: 14px;\n  padding: 14px 15px 13px 15px;\n  box-shadow: 0 10px 25px -5px rgba(15, 23, 42, 0.04);\n}\n.glide-hour-card.glide-st-emerald { border-top-color: #16A34A; }\n.glide-hour-card.glide-st-green { border-top-color: #22C55E; }\n.glide-hour-card.glide-st-yellow { border-top-color: #F59E0B; }\n.glide-hour-card.glide-st-red { border-top-color: #EF4444; }\n.glide-hc-top {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-bottom: 12px;\n}\n.glide-hc-hour {\n  font-size: 0.88rem !important;\n  font-weight: 700 !important;\n  color: #475569 !important;\n  font-variant-numeric: tabular-nums !important;\n  letter-spacing: -0.01em !important;\n  line-height: 1 !important;\n}\n\n\/* direccao a esquerda, ondulacao a direita - os badges dizem o que e *\/\n.glide-hc-foot {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n  padding-top: 2px;\n}\n@media (max-width: 700px) {\n  .glide-cards { grid-template-columns: 1fr; gap: 10px; }\n  .glide-hour-card { border-radius: 12px; padding: 12px 13px; }\n  .glide-hc-top { margin-bottom: 10px; }\n  .glide-hc-hour {\n  font-size: 0.88rem !important;\n  font-weight: 700 !important;\n  color: #475569 !important;\n  font-variant-numeric: tabular-nums !important;\n  letter-spacing: -0.01em !important;\n  line-height: 1 !important;\n}\n}\n\n\/* O selo e a hora nunca podem partir de linha: \"Condicoes Excelentes\" + \"10:00\"\n   nao cabem lado a lado, e o wrap empurrava o selo para baixo do cartao. *\/\n.glide-hc-top { flex-wrap: nowrap; }\n.glide-hc-top .glide-hc-hour {\n  font-size: 0.88rem !important;\n  font-weight: 700 !important;\n  color: #475569 !important;\n  font-variant-numeric: tabular-nums !important;\n  letter-spacing: -0.01em !important;\n  line-height: 1 !important;\n}\n.glide-hc-top .glide-pill-status { flex: 0 1 auto; min-width: 0; }\n.glide-hc-wind {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: 12px;\n  flex-wrap: wrap;\n  padding-bottom: 12px;\n  margin-bottom: 10px;\n  border-bottom: 1px solid #F1F5F9;\n}\n.glide-hc-wind .glide-wind-main { flex: 0 0 auto; }\n.glide-gust-text.over {\n  color: #EA580C;\n  font-weight: 800;\n}\n.glide-gust-text.over strong { color: #C2410C; }\n@media (max-width: 700px) {\n  .glide-gust-text { margin-top: 0; }\n}\n\n\/* (1) 3 colunas que cabem sempre: 1fr + min-width:0 impede o conteudo de\n   forcar a coluna maior do que a fraccao. *\/\n.glide-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.glide-hour-card { min-width: 0; }\n.glide-hour-card > * { min-width: 0; }\n\n\/* as etiquetas (3) precisam de ~100px por bloco: abaixo desta largura o\n   cartao empilha a 1 coluna, senao o texto sai do cartao. *\/\n@media (max-width: 560px) {\n  .glide-cards { grid-template-columns: minmax(0, 1fr); }\n}\n\n\/* (3) etiquetas VENTO \/ ONDULACAO por cima de cada bloco *\/\n.glide-hc-cell { display: flex; flex-direction: column; gap: 4px; min-width: 0; }\n.glide-hc-cell:last-child { align-items: flex-end; }\n.glide-hc-lbl {\n  font-size: 0.64rem;\n  font-weight: 400;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  color: #94A3B8;\n  line-height: 1;\n}\n\n\/* (5) selo neutro, sem cor de estado *\/\n.glide-header-badge.plain { background: #F1F5F9; color: #64748B; border-color: #CBD5E1; }\n\n\/* ---- VENTO HERO BANNER ---- *\/\n.wind-center-banner {\n  display: flex !important;\n  flex-direction: column !important;\n  align-items: center !important;\n  justify-content: center !important;\n  padding: 5px 8px 6px 8px !important;\n  background: #F8FAFC !important;\n  border: 1px solid #E2E8F0 !important;\n  border-radius: 9px !important;\n  margin: 5px 0 8px 0 !important;\n  gap: 2px !important;\n}\n.wind-label-tag {\n  font-size: 0.58rem !important;\n  font-weight: 800 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 0.08em !important;\n  color: #0F766E !important;\n  line-height: 1 !important;\n  margin-bottom: 1px !important;\n}\n.wind-values-wrap {\n  display: inline-flex !important;\n  align-items: baseline !important;\n  justify-content: center !important;\n  gap: 4px !important;\n}\n.wind-main-num {\n  font-size: 1.15rem !important;\n  font-weight: 800 !important;\n  color: #0F172A !important;\n  line-height: 1 !important;\n  font-variant-numeric: tabular-nums !important;\n}\n.wind-unit {\n  font-size: 0.72rem !important;\n  font-weight: 700 !important;\n  color: #64748B !important;\n}\n.wind-sep-dot {\n  color: #CBD5E1 !important;\n  font-size: 0.75rem !important;\n  margin: 0 2px !important;\n}\n.wind-gust-inline {\n  font-size: 0.72rem !important;\n  color: #64748B !important;\n  white-space: nowrap !important;\n}\n.wind-gust-inline strong {\n  color: #1E293B !important;\n  font-weight: 700 !important;\n}\n\n\n\n\n\/* ---- ESTILO COMPACTO & LARGURA ESTAVEL (ALTURA REDUZIDA COMO ANTES) ---- *\/\n.glide-widget-compact {\n  width: 100% !important;\n  max-width: 720px !important;\n  padding: 12px 14px 4px 14px !important;\n  margin: 6px auto 2px auto !important;\n}\n.elementor-widget-html:has(.glide-widget-compact) {\n  max-width: 720px !important;\n  margin-left: auto !important;\n  margin-right: auto !important;\n}\n.glide-header-bar {\n  padding-bottom: 7px !important;\n  margin-bottom: 7px !important;\n}\n.glide-days-nav {\n  margin-bottom: 7px !important;\n  gap: 4px !important;\n}\n.glide-day-tab {\n  padding: 5px 2px !important;\n}\n.glide-day-title {\n  font-size: 0.72rem !important;\n}\n.glide-day-date {\n  font-size: 0.65rem !important;\n}\n.glide-day-wind {\n  font-size: 0.62rem !important;\n}\n\n\/* ---- GLIDE WEATHER WIDGET: UNIFORMIDADE PERFEITA (MOBILE & DESKTOP) ---- *\/\n@media (max-width: 650px) {\n  .elementor-widget-html:has(.glide-widget-compact) {\n    width: 100% !important;\n    max-width: 100% !important;\n    box-sizing: border-box !important;\n  }\n  .glide-widget-compact {\n    width: 100% !important;\n    max-width: 100% !important;\n    box-sizing: border-box !important;\n    padding: 10px 10px 6px 10px !important;\n    margin: 4px 0 !important;\n    border-radius: 14px !important;\n  }\n  .glide-header-bar {\n    display: flex !important;\n    flex-direction: row !important;\n    justify-content: space-between !important;\n    align-items: center !important;\n    padding-bottom: 7px !important;\n    margin-bottom: 7px !important;\n    gap: 8px !important;\n    width: 100% !important;\n    box-sizing: border-box !important;\n  }\n  .glide-header-titles h3 {\n    font-size: 0.88rem !important;\n    font-weight: 700 !important;\n    line-height: 1.25 !important;\n    margin: 0 !important;\n    color: #0F172A !important;\n  }\n  .glide-header-titles p {\n    font-size: 0.68rem !important;\n    color: #64748B !important;\n    margin: 2px 0 0 0 !important;\n  }\n  .glide-header-badge {\n    font-size: 0.68rem !important;\n    padding: 3px 8px !important;\n    border-radius: 999px !important;\n    white-space: nowrap !important;\n    flex-shrink: 0 !important;\n  }\n  .glide-days-nav {\n    display: grid !important;\n    grid-template-columns: repeat(5, 1fr) !important;\n    gap: 4px !important;\n    margin-bottom: 8px !important;\n    width: 100% !important;\n    box-sizing: border-box !important;\n  }\n  .glide-day-tab {\n    padding: 5px 2px !important;\n    border-radius: 8px !important;\n    min-width: 0 !important;\n    text-align: center !important;\n  }\n  .glide-day-title {\n    font-size: 0.72rem !important;\n    font-weight: 700 !important;\n  }\n  .glide-day-date {\n    font-size: 0.64rem !important;\n    color: #64748B !important;\n    margin-top: 1px !important;\n  }\n  .glide-day-wind {\n    font-size: 0.62rem !important;\n    margin-top: 1px !important;\n    font-weight: 600 !important;\n  }\n\n  .glide-table-box {\n    margin-bottom: 6px !important;\n    width: 100% !important;\n    box-sizing: border-box !important;\n  }\n  .glide-cards {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 6px !important;\n    width: 100% !important;\n    box-sizing: border-box !important;\n  }\n\n  \/* CARTAO: 2 COLUNAS PROPORCIONAIS EQUILIBRADAS (SEM VAZIO CENTRAL) *\/\n  .glide-hour-card {\n    display: grid !important;\n    grid-template-columns: 125px 1fr !important;\n    grid-template-rows: auto auto !important;\n    gap: 4px 12px !important;\n    align-items: center !important;\n    padding: 8px 12px !important;\n    border-radius: 10px !important;\n    min-height: auto !important;\n    width: 100% !important;\n    box-sizing: border-box !important;\n    background: #FFFFFF !important;\n    border: 1px solid #E2E8F0 !important;\n    border-left: 4px solid #CBD5E1 !important;\n  }\n  .glide-hour-card.glide-st-emerald { border-left-color: #16A34A !important; }\n  .glide-hour-card.glide-st-yellow { border-left-color: #F59E0B !important; }\n  .glide-hour-card.glide-st-red { border-left-color: #EF4444 !important; }\n\n  \/* LINHA 1 ESQ: HORA | LINHA 2 ESQ: SELO *\/\n  .glide-hc-top {\n    display: contents !important;\n  }\n  .glide-hc-hour {\n    grid-column: 1 \/ 2 !important;\n    grid-row: 1 \/ 2 !important;\n    justify-self: start !important;\n    font-size: 0.95rem !important;\n    font-weight: 800 !important;\n    color: #1E293B !important;\n    line-height: 1 !important;\n  }\n  .glide-pill-status {\n    grid-column: 1 \/ 2 !important;\n    grid-row: 2 \/ 2 !important;\n    justify-self: start !important;\n    font-size: 0.66rem !important;\n    font-weight: 700 !important;\n    padding: 2px 7px !important;\n    border-radius: 999px !important;\n    line-height: 1.15 !important;\n    white-space: nowrap !important;\n  }\n\n  \/* LINHA 1 DIR: VENTO + RAJADA *\/\n  .wind-center-banner {\n    grid-column: 2 \/ 3 !important;\n    grid-row: 1 \/ 2 !important;\n    display: flex !important;\n    flex-direction: row !important;\n    align-items: baseline !important;\n    justify-content: flex-start !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    border: none !important;\n    background: transparent !important;\n    gap: 3px !important;\n    min-width: 0 !important;\n  }\n  .wind-label-tag {\n    display: none !important;\n  }\n  .wind-values-wrap {\n    display: flex !important;\n    align-items: baseline !important;\n    gap: 2px !important;\n    white-space: nowrap !important;\n  }\n  .wind-main-num {\n    font-size: 1.05rem !important;\n    font-weight: 800 !important;\n    color: #0F172A !important;\n    line-height: 1 !important;\n  }\n  .wind-unit {\n    font-size: 0.68rem !important;\n    font-weight: 600 !important;\n    color: #64748B !important;\n    margin-left: 1px !important;\n  }\n  .wind-sep-dot {\n    margin: 0 3px !important;\n    font-size: 0.65rem !important;\n    color: #CBD5E1 !important;\n  }\n  .wind-gust-inline {\n    font-size: 0.68rem !important;\n    color: #64748B !important;\n    font-weight: 500 !important;\n    white-space: nowrap !important;\n  }\n  .wind-gust-inline strong {\n    font-weight: 700 !important;\n    color: #334155 !important;\n  }\n\n  \/* LINHA 2 DIR: DIRECAO + ONDULACAO *\/\n  .glide-hc-foot {\n    grid-column: 2 \/ 3 !important;\n    grid-row: 2 \/ 2 !important;\n    display: flex !important;\n    flex-direction: row !important;\n    align-items: center !important;\n    justify-content: flex-start !important;\n    gap: 8px !important;\n    padding: 0 !important;\n    border: none !important;\n    margin: 0 !important;\n    white-space: nowrap !important;\n  }\n  .glide-hc-cell {\n    display: flex !important;\n    flex-direction: row !important;\n    align-items: center !important;\n    gap: 3px !important;\n  }\n  .glide-hc-lbl {\n    display: none !important;\n  }\n  .glide-dir, .glide-swell {\n    font-size: 0.72rem !important;\n    white-space: nowrap !important;\n    color: #475569 !important;\n  }\n  .glide-dir strong, .glide-swell strong {\n    font-size: 0.72rem !important;\n    font-weight: 700 !important;\n    color: #1E293B !important;\n  }\n  .glide-swell b {\n    font-size: 0.75rem !important;\n    font-weight: 700 !important;\n    color: #0F172A !important;\n    margin-left: 2px !important;\n  }\n  .glide-badge-dir, .glide-badge-wave {\n    width: 15px !important;\n    height: 15px !important;\n    font-size: 9px !important;\n    margin-right: 1px !important;\n  }\n  .glide-compact-footer {\n    padding: 4px 6px 2px 6px !important;\n    font-size: 0.62rem !important;\n  }\n}\n\n\/* ---------------- DESKTOP (>= 651px) UNIFORMIDADE RIGOROSA ---------------- *\/\n@media (min-width: 651px) {\n  .glide-widget-compact {\n    width: 720px !important;\n    max-width: 100% !important;\n    margin: 6px auto !important;\n    box-sizing: border-box !important;\n  }\n  .elementor-widget-html:has(.glide-widget-compact) {\n    max-width: 720px !important;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .glide-table-box {\n    width: 100% !important;\n    box-sizing: border-box !important;\n  }\n  .glide-cards {\n    width: 100% !important;\n    display: grid !important;\n    grid-template-columns: repeat(3, 1fr) !important;\n    gap: 12px !important;\n    box-sizing: border-box !important;\n  }\n  .glide-hour-card {\n    min-height: 165px !important;\n    display: flex !important;\n    flex-direction: column !important;\n    justify-content: space-between !important;\n    padding: 14px 14px 12px 14px !important;\n    border-radius: 12px !important;\n    box-sizing: border-box !important;\n  }\n}\n<\/style>\n\n\n\n<div class=\"glide-widget-compact\" id=\"glide-compact-costasul-widget\">\n\n  <div class=\"glide-loading-text\">Loading forecast conditions...<\/div>\n\n<\/div>\n\n\n\n<script>\n\n(function() {\n\n  const SPOT = {\n\n    id: \"costa-sul\",\n    southExposure: true,\n\n    name: \"South Coast \u2014 West Coast Tour\", comingSoon: false,\n\n    lat: 32.660, lon: -17.000,\n\n    windLimit: 6.0, gustLimit: 15.0,\n\n    moderateLimit: 4.5,\n\n    \/\/ Perfil microclima da costa sul da Madeira (Efeito Venturi \/ gap wind)\n\n    microclimate: {\n\n      type: \"coast_south_venturi\",\n\n      channelingDirections: [\"NE\", \"NNE\", \"ENE\"],\n\n      channelingDegMin: 290,\n\n      channelingDegMax: 65,\n\n      venturiAccelerationMultiplier: 1.5,\n\n      minOrographicWindKnots: 6.5,\n\n      minOrographicGustKnots: 10.0\n\n    }\n\n  };\n\n\n\n  let widgetData = null;\n\n  let selectedDayIdx = 0;\n\n\n\n  \/* i18n: as subpaginas herdavam PT no \/en\/. Dicionario local (o mapa\n     str_replace do snippet 29 nao serve para nomes curtos como \"Sex\"\/\"Ter\",\n     que colidem com palavras inglesas). *\/\n  const isEn = document.documentElement.lang.startsWith('en') || window.location.pathname.indexOf('\/en\/') === 0;\n  const t = {    sealShort: isEn ? \"Recommended\" : \"Recomendado\",\n    sealPlain: isEn ? \"Forecast\" : \"Previs\\u00e3o\",\n    avgWord: isEn ? \"avg\" : \"m\\u00e9d.\",\n    sealStrong: isEn ? \"Strong wind\" : \"Vento forte\",\n    sealGust: isEn ? \"Caution: gusts\" : \"Aten\\u00e7\\u00e3o: rajadas\",\n\n    condTitle: isEn ? \"Sea conditions \\u2014 \" : \"Condi\\u00e7\\u00f5es do mar \\u2014 \",\n    subtitle: isEn ? \"Marine forecast for the next 5 days\" : \"Previs\\u00e3o mar\\u00edtima para os pr\\u00f3ximos 5 dias\",\n    nowWord: isEn ? \"now\" : \"agora\",\n    gustWord: isEn ? \"gust.\" : \"raj.\",\n    gusts: isEn ? \"gusts:\" : \"rajadas:\",\n    measured: isEn ? \"measured\" : \"medido\",\n    good: isEn ? \"Recommended\" : \"Recomendado\",\n    excellent: isEn ? \"Recommended\" : \"Recomendado\",\n    moderate: isEn ? \"Moderate Conditions\" : \"Condi\u00e7\u00f5es Moderadas\",\n    notRec: isEn ? \"Not Recommended\" : \"N\u00e3o Recomendado\",\n    thHour: isEn ? \"Hours\" : \"Hor\\u00e1rio\",\n    thState: isEn ? \"Status\" : \"Estado\",\n    thWind: isEn ? \"Wind\" : \"Vento\",\n    thDir: isEn ? \"Direction\" : \"Dire\\u00e7\\u00e3o\",\n    thDirWind: isEn ? \"Wind Direction\" : \"Dire\\u00e7\\u00e3o Vento\",\n    thSwell: isEn ? \"Waves\" : \"Ondula\\u00e7\\u00e3o\",\n    today: isEn ? \"Today\" : \"Hoje\",\n    updated: isEn ? \"Updated at\" : \"Atualizado \\u00e0s\",\n    swellLegend: isEn ? \"Waves: direction they come from\" : \"Ondula\\u00e7\\u00e3o: dire\\u00e7\\u00e3o de onde v\\u00eam as ondas\",\n    noAnemo: isEn ? \"Model forecast (median of 3) \\u00b7 no anemometer at this spot\" : \"\",\n    noStation: isEn ? \"Marina station unavailable \\u00b7 model forecast (median of 3)\" : \"\",\n    maxToday: isEn ? \"Max. today at the station: \" : \"\",\n    peak5: isEn ? \"real 5-min peak\" : \"pico real a 5 min\",\n    calib: isEn ? \"Wind corrected with the Marina station \\u00b7 \\\"measured\\\" = anemometer\" : \" \\u00b7 \\\"medido\\\" = anem\\u00f3metro\"\n  };\n  const dayNames = isEn ? [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\n                      : [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"S\\u00e1b\"];\n  const monthNames = isEn ? [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n                         : [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"];\n\n  function degToCard(deg) {\n\n    if (deg === null || deg === undefined || isNaN(deg)) return \"--\";\n\n    const d = (deg % 360 + 360) % 360;\n\n    const dirs = [\n\n      { c: \"N\", min: 337.5, max: 360 }, { c: \"N\", min: 0, max: 22.5 },\n\n      { c: \"NE\", min: 22.5, max: 67.5 }, { c: \"E\", min: 67.5, max: 112.5 },\n\n      { c: \"SE\", min: 112.5, max: 157.5 }, { c: \"S\", min: 157.5, max: 202.5 },\n\n      { c: \"SO\", min: 202.5, max: 247.5 }, { c: \"O\", min: 247.5, max: 292.5 },\n\n      { c: \"NO\", min: 292.5, max: 337.5 }\n\n    ];\n\n    for (const x of dirs) if (d >= x.min && d < x.max) return x.c;\n\n    return \"N\";\n\n  }\n\n\n\n  function getWindArrow(cardinal) {\n    const arrows = { \"N\": \"\u2193\", \"NE\": \"\u2199\", \"E\": \"\u2190\", \"SE\": \"\u2196\", \"S\": \"\u2191\", \"SO\": \"\u2197\", \"SW\": \"\u2197\", \"O\": \"\u2192\", \"W\": \"\u2192\", \"NO\": \"\u2198\", \"NW\": \"\u2198\" };\n    return arrows[cardinal] || \"\u2191\";\n  }\n\n\n\n  const SHELTER = { offshore: 0.35, onshore: 1.00 };\n  const WIND_LIMIT_NE = 8.0;\n  function shelterFactor(dirDeg) {\n    const d = dirDeg == null ? null : ((Number(dirDeg) % 360) + 360) % 360;\n    if (d == null) return 1;\n    \/* South Coast: APENAS NE (22.5\u00b0 a 67.5\u00b0) tem abrigo e limite 8.0 n\u00f3s (Regra D8\/D9) *\/\n    const isNE = (d >= 22.5 && d <= 67.5);\n    return isNE ? SHELTER.offshore : SHELTER.onshore;\n  }\n\n  function evalSafety(rawWind, gustSpeed, windDirDeg, waveHeight, waveDirDeg, swellH, swellD, swellT, opts) {\n    opts = opts || {};\n    const isSSE = (a) => a != null && a >= 157.5 && a < 247.5;\n    const _az = (x) => x != null ? ((Number(x) % 360) + 360) % 360 : null;\n    const isOffshoreDir = (d) => { const a = _az(d); return a == null || a <= 112.5 || a >= 247.5; };\n    const _wdL = _az(windDirDeg);\n    const windLimit = (_wdL != null && _wdL >= 22.5 && _wdL <= 67.5) ? WIND_LIMIT_NE : SPOT.windLimit;\n\n    const card = degToCard(windDirDeg);\n\n    const waveCard = degToCard(waveDirDeg);\n\n    const mc = SPOT.microclimate || {};\n\n\n\n    \/\/ -------------------------------------------------------------------\n\n    \/\/ CALIBRA\u00c7\u00c3O OROGR\u00c1FICA DA COSTA SUL (Efeito Venturi \/ gap wind)\n\n    \/\/ O fluxo de N\/NNE\/NE\/NW transp\u00f5e a serra e \u00e9 canalizado at\u00e9 \u00e0 costa.\n\n    \/\/ O modelo global (9-13km) \u00e9 cego a isto e prev\u00ea pouco vento; o real \u00e9\n\n    \/\/ bastante mais forte. NUNCA cortar vento \u2014 a costa sul ACELERA.\n\n    \/\/ -------------------------------------------------------------------\n\n    let isVenturiRisk = false;\n\n    let effWind = rawWind;\n\n    let effGust = gustSpeed;\n\n\n\n    if (windDirDeg !== null && windDirDeg !== undefined && !isNaN(windDirDeg) && !(opts && opts.obs)) if (windDirDeg !== null && windDirDeg !== undefined && !isNaN(windDirDeg)) {\n        \/* A Foz e a South Coast nao tem a\u57fa\u76e4 da baia da Funchal: a praia da Foz\n           e a boca do vale (o vento de N-NE e canalizado e acelera) e a Costa\n           Sul e costa aberta. Sem a atenuacao fixa de 0.20\/0.25, que so servia\n           para a Funchal e cameu a leitura para o piso de 0.5. *\/\n        const sf = shelterFactor(windDirDeg);\n        effWind = Math.max(0.3, Math.round(rawWind * sf * 10) \/ 10);\n        effGust = (gustSpeed !== null && gustSpeed !== undefined && !isNaN(gustSpeed))\n          ? Math.max(0.3, Math.round(gustSpeed * sf * 10) \/ 10) : null;\n      }\n\n\n\n    let status = \"green\";\n\n    let label = t.good;\n\n\n\n    \/\/ 1. Ondula\u00e7\u00e3o desfavor\u00e1vel de Sul\/Sudeste >= 1.0m\n\n    const swellBad = (function(){ const dom = opts && opts.domD != null ? opts.domD : waveDirDeg; return (isSSE(_az(dom)) && waveHeight >= 1.5) || (isSSE(_az(opts.s2D)) && opts.s2H >= 1.5); })();\n    const swellWarn = (function(){ const dom = opts && opts.domD != null ? opts.domD : waveDirDeg; return (isSSE(_az(dom)) && waveHeight >= 0.85) && !swellBad; })();\n    if (swellBad) { status = \"red\"; label = t.notRec; }\n    else if (swellWarn) { status = \"yellow\"; label = t.moderate; }\n    else if (effGust >= 17.0 && effWind >= 8.0) {\n\n      status = \"red\";\n\n      label = t.notRec;\n\n    }\n\n    \/\/ 3. Vento m\u00e9dio acima do limite\n\n    else if (effWind >= windLimit) {\n\n      status = \"red\";\n\n      label = t.notRec;\n\n    }\n\n    \/\/ 4. Vento ou rajadas em n\u00edvel moderado (>= 11.5 n\u00f3s)\n\n    else if (effWind >= (SPOT.moderateLimit ?? SPOT.windLimit - 1.5) || (effGust >= 14.0 && effWind >= 5.0)) {\n\n      status = \"yellow\";\n\n      label = t.moderate;\n\n    } else {\n\n      status = \"green\";\n\n      label = t.good;\n\n    }\n\n\n\n    const _ogRaw = (windDirDeg >= 100 && windDirDeg <= 250 && gustSpeed !== null && gustSpeed !== undefined && !isNaN(gustSpeed)) ? gustSpeed : -1;\n    if (_ogRaw >= 10) { effGust = gustSpeed; effWind = rawWind; if (status !== \"red\" && effWind >= windLimit) { status = \"red\"; label = t.notRec; } }\n    if (_ogRaw >= 13 && status !== \"red\") { status = \"red\"; label = t.notRec; }\n    else if (_ogRaw >= 10 && status === \"green\") { status = \"yellow\"; label = t.moderate; }\n    return { status, label, effWind, effGust, card, arrow: getWindArrow(card), waveCard, swellBad, swellWarn, swellDomDeg: (opts && opts.domD != null ? opts.domD : waveDirDeg), swell2H: opts ? opts.s2H : 0, swell2Deg: opts ? opts.s2D : null };\n\n  }\n\n\n\n  \n  \/* Selo de apresentacao: Padrao Oficial Unificado (Opcao 1: Turismo \/ Direta e Intuitiva)\n     Verde (Recomendado): vento fraco, calm sea, facil para todos os niveis\n     Amarelo (Condi\u00e7\u00f5es Moderadas): vento medio \/ brisa moderada, exige mais esforco\n     Vermelho (Nao Recomendado): vento forte, mar agitado, condicoes adversas *\/\n  function glideSeal(wind, gust, limit, gustLimit, s) {\n    if (s && s.status) {\n      if (s.status === \"red\") return { cls: \"red\", label: t.notRec, short: false };\n      if (s.status === \"yellow\") return { cls: \"yellow\", label: t.moderate, short: false };\n      return { cls: \"emerald\", label: t.excellent, short: true };\n    }\n    const cautionMargin = 1.5;\n    const modLimit = Math.max(4.5, limit - cautionMargin);\n    if (wind != null && !isNaN(wind) && (wind >= limit || (gust != null && gust >= (gustLimit || 16.0)))) {\n      return { cls: \"red\", label: t.notRec, short: false };\n    }\n    if (wind != null && !isNaN(wind) && (wind >= modLimit || (gust != null && gust >= 12.0))) {\n      return { cls: \"yellow\", label: t.moderate, short: false };\n    }\n    return { cls: \"emerald\", label: t.excellent, short: true };\n  }\n  \/* pt-PT usa virgula decimal; o \/en\/ mantem ponto. *\/\n  function glideNum(v, dec) {\n    if (v == null || isNaN(v)) return \"--\";\n    const n = Number(v).toFixed(dec == null ? 1 : dec);\n    return isEn ? n : n.replace(\".\", \",\");\n  }\n\n  async function fetchForecast() {\n\n    try {\n\n      \/* ecmwf_ifs025 via open-meteo cai sempre na celula offshore (32.75,-17.0)\n         e le ~1.5 kn em toda a Madeira: inutil. Ensemble = mediana de\n         icon + gfs + ukmo. Sem o max, que inflava 2-3x. *\/\n      const wBase = `https:\/\/api.open-meteo.com\/v1\/forecast?latitude=${SPOT.lat}&longitude=${SPOT.lon}&hourly=temperature_2m,wind_speed_10m,wind_direction_10m,wind_gusts_10m&wind_speed_unit=kn&timezone=Atlantic%2FMadeira&forecast_days=6`;\n\n      const mUrl = `https:\/\/marine-api.open-meteo.com\/v1\/marine?latitude=${SPOT.lat},${SPOT.lat - (SPOT.southExposure ? 0.14 : -0.05)}&longitude=${SPOT.lon},${SPOT.lon}&hourly=wave_height,wave_direction,wave_period,swell_wave_height,swell_wave_direction,swell_wave_period,secondary_swell_wave_height,secondary_swell_wave_direction&timezone=Atlantic%2FMadeira&forecast_days=6`;\n\n\n\n      const [rIc, rGf, rUk, mRes] = await Promise.all([\n        fetch(wBase + '&models=icon_seamless').catch(() => null),\n        fetch(wBase + '&models=gfs_seamless').catch(() => null),\n        fetch(wBase + '&models=ukmo_seamless').catch(() => null),\n        fetch(mUrl).catch(() => ({ ok: false }))\n      ]);\n      const wModels = [];\n      const wModelIds = [];\n      const _pairs = [['icon_seamless', rIc], ['gfs_seamless', rGf], ['ukmo_seamless', rUk]];\n      for (const pr of _pairs) {\n        const r = pr[1];\n        if (!r || !r.ok) continue;\n        try { const j = await r.json(); if (j && j.hourly && (j.hourly.time || []).length) { wModels.push(j.hourly); wModelIds.push(pr[0]); } } catch (e) {}\n      }\n      if (!wModels.length) { try { const j = await (await fetch(wBase)).json(); if (j && j.hourly) { wModels.push(j.hourly); wModelIds.push('best_match'); } } catch (e) {} }\n      const _med = (arr) => { const v = arr.filter(function (x) { return x != null && !isNaN(x); }).sort(function (a, b) { return a - b; }); return v.length ? v[Math.floor(v.length \/ 2)] : null; };\n      const _min = (arr) => { const v = arr.filter(function (x) { return x != null && !isNaN(x); }); return v.length ? Math.min.apply(null, v) : null; };\n      let obs = null;\n      try {\n        const st = await fetch(\"\/wp-json\/glide\/v1\/station\").then(r => r.ok ? r.json() : null);\n        if (st && st.observed && typeof st.wind === \"number\") {\n          obs = { wind: st.wind, gust: typeof st.gust === \"number\" ? st.gust : null, dir: typeof st.dir === \"number\" ? st.dir : null };\n        }\n      } catch (e) {}\n\n      let wData = { hourly: {} };\n      if (wModels.length) {\n        const times = wModels[0].time || [];\n        const wind = [], dirs = [], gusts = [], temps = [];\n        for (let i = 0; i < times.length; i++) {\n          const ws = [], gs = [], ds = [];\n          for (const m of wModels) {\n            ws.push(m.wind_speed_10m ? Number(m.wind_speed_10m[i]) : null);\n            gs.push(m.wind_gusts_10m ? Number(m.wind_gusts_10m[i]) : null);\n            ds.push(m.wind_direction_10m ? Number(m.wind_direction_10m[i]) : null);\n          }\n          \/* South Coast: o ICON e o unico modelo que le a celula de terra nesta\n             posicao (validado contra a estacao OOM e a webcam). GFS e UKMO leem\n             a serra a ~400 m e inflavam 4-6x, e a mediana deixava-os ganhar --\n             foi o que pintou 6,1 com 1,5 medidos.\n             MAGNITUDE = ICON. DIRECCAO = mediana do ensemble (modelo para o\n             quadrante).\n             Tecto fisico de rajada: rajada nao pode ser 35 com vento 1.\n             REDE DE SEGURANCA: sem ICON nao ha fonte calibrada aqui. Cai para\n             o MINIMO dos modelos, limitado a moderateLimit -- nunca a mediana,\n             nunca o maximo. Sem ICON o site no maximo fica ambar, nunca\n             vermelho: e o erro seguro. *\/\n          const _iIc = wModelIds.indexOf('icon_seamless');\n          let bw = _iIc >= 0 && wModels[_iIc].wind_speed_10m ? Number(wModels[_iIc].wind_speed_10m[i]) : null;\n          let bg = _iIc >= 0 && wModels[_iIc].wind_gusts_10m ? Number(wModels[_iIc].wind_gusts_10m[i]) : null;\n          if (bw == null || isNaN(bw)) bw = _min(ws);\n          if (bg == null || isNaN(bg)) bg = _min(gs);\n          if (_iIc < 0) {\n            const _cap = SPOT.moderateLimit != null ? SPOT.moderateLimit : (SPOT.windLimit - 1.5);\n            if (bw != null && !isNaN(bw) && bw > _cap) bw = _cap;\n          }\n          if (bw != null && bg != null && bg > bw * 2.6 + 2) bg = Math.round((bw * 2.6 + 2) * 10) \/ 10;\n          if (_iIc < 0 && bg != null && !isNaN(bg) && bg > bw + 2.5) bg = Math.round((bw + 2.5) * 10) \/ 10;\n          let bd = null;\n          const validDs = ds.filter(d => d != null && !isNaN(d));\n          if (validDs.length === 3) {\n            const cd = (a, b) => Math.abs((a - b + 180) % 360 - 180);\n            const d01 = cd(validDs[0], validDs[1]), d02 = cd(validDs[0], validDs[2]), d12 = cd(validDs[1], validDs[2]);\n            let pair = validDs;\n            if (d01 <= Math.min(d02, d12) && d02 > 80 && d12 > 80) pair = [validDs[0], validDs[1]];\n            else if (d02 <= Math.min(d01, d12) && d01 > 80 && d12 > 80) pair = [validDs[0], validDs[2]];\n            else if (d12 <= Math.min(d01, d02) && d01 > 80 && d02 > 80) pair = [validDs[1], validDs[2]];\n            let _u = 0, _v = 0;\n            for (const d of pair) { const rad = d * Math.PI \/ 180; _u += Math.sin(rad); _v += Math.cos(rad); }\n            bd = Math.round((Math.atan2(_u, _v) * 180 \/ Math.PI + 360) % 360);\n          } else if (validDs.length > 0) {\n            let _u = 0, _v = 0;\n            for (const d of validDs) { const rad = d * Math.PI \/ 180; _u += Math.sin(rad); _v += Math.cos(rad); }\n            bd = Math.round((Math.atan2(_u, _v) * 180 \/ Math.PI + 360) % 360);\n          }\n          wind.push(bw); dirs.push(bd); gusts.push(bg);\n          temps.push(wModels[0].temperature_2m && !isNaN(Number(wModels[0].temperature_2m[i])) ? Number(wModels[0].temperature_2m[i]) : 24);\n        }\n        wData = { hourly: { time: times, wind_speed_10m: wind, wind_direction_10m: dirs, wind_gusts_10m: gusts, temperature_2m: temps } };\n      }\n\n      const mData = mRes.ok ? await mRes.json() : [{ hourly: {} }, { hourly: {} }];\n\n\n\n      const wH = wData.hourly || {};\n\n      const mArr = (Array.isArray(mData) ? mData : [mData, mData]).map(x => x.hourly || {});\n      const mH = mArr[0];\n\n      const times = wH.time || [];\n\n      \/\/ multi-model (meteofrance+icon): keys vem sufixadas -> merge = max vento, max rajada, dir do mais forte\n\n      function mergeArr(base) {\n\n        const keys = Object.keys(wH).filter(k => k === base || k.startsWith(base + '_'));\n\n        let src = keys.map(k => wH[k] || []);\n\n        if (!src.length) return [];\n\n        return times.map((_, i) => {\n\n          let best = null, bestSpd = -1;\n\n          for (const arr of src) {\n\n            const v = arr[i];\n\n            if (v !== null && v !== undefined && v > bestSpd) { bestSpd = v; best = v; }\n\n          }\n\n          return best;\n\n        });\n\n      }\n\n      function mergeDir(base) {\n\n        const spdKeys = Object.keys(wH).filter(k => k.startsWith('wind_speed_10m'));\n\n        const dirKeys = Object.keys(wH).filter(k => k.startsWith(base));\n\n        if (!dirKeys.length) return [];\n\n        if (!spdKeys.length) return wH[dirKeys[0]] || [];\n\n        return times.map((_, i) => {\n\n          let bd = null, bs = -1;\n\n          for (const dk of dirKeys) {\n\n            const sk = dk.replace(base, 'wind_speed_10m');\n\n            const sv = wH[sk] ? wH[sk][i] : null;\n\n            if (sv !== null && sv !== undefined && sv > bs) { bs = sv; bd = wH[dk][i]; }\n\n          }\n\n          return bd;\n\n        });\n\n      }\n\n      const windSpeeds = wH.wind_speed_10m || mergeArr('wind_speed_10m');\n\n      const windDirs = wH.wind_direction_10m || mergeDir('wind_direction_10m');\n\n      const windGusts = wH.wind_gusts_10m || mergeArr('wind_gusts_10m');\n\n      const waveHeights = mH.wave_height || [];\n\n      const waveDirs = mH.wave_direction || [];\n      const swellHs = mH.swell_wave_height || [];\n      const swellDs = mH.swell_wave_direction || [];\n      const swellTs = mH.swell_wave_period || [];\n      const s2Hs = mH.secondary_swell_wave_height || [];\n      const s2Ds = mH.secondary_swell_wave_direction || [];\n\n      const hourlyList = [];\n\n\n\n      const currentHourStr = new Intl.DateTimeFormat('sv-SE', {\n\n        timeZone: \"Atlantic\/Madeira\",\n\n        year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', hour12: false\n\n      }).format(new Date()).replace(' ', 'T');\n\n\n\n      let currentIdx = times.findIndex(t => t.startsWith(currentHourStr));\n\n      if (currentIdx === -1) currentIdx = 0;\n\n\n\n      for (let i = 0; i < times.length; i++) {\n\n        let spd = windSpeeds[i] !== undefined && windSpeeds[i] !== null ? Number(windSpeeds[i]) : 1.5;\n\n        const dir = windDirs[i] !== undefined && windDirs[i] !== null ? Number(windDirs[i]) : 0;\n\n        const gst = windGusts[i] !== undefined && windGusts[i] !== null ? Number(windGusts[i]) : null;\n\n        let wavH = waveHeights[i] != null ? Number(waveHeights[i]) : 0.6;\n          let wavD = waveDirs[i] != null ? Number(waveDirs[i]) : 300;\n          \/* Ponto de mar aberto removido: praia usa leitura costeira *\/\n          const swellH = swellHs[i] != null ? Number(swellHs[i]) : 0;\n          const swellD = swellDs[i] != null ? Number(swellDs[i]) : null;\n          const swellT = swellTs[i] != null ? Number(swellTs[i]) : null;\n          let s2H = s2Hs[i] != null ? Number(s2Hs[i]) : 0;\n          let s2D = s2Ds[i] != null ? Number(s2Ds[i]) : null;\n          const oS2H = mArr[1].secondary_swell_wave_height ? Number(mArr[1].secondary_swell_wave_height[i]) : 0;\n          if (mArr[1].secondary_swell_wave_direction && oS2H > s2H) { s2H = oS2H; s2D = Number(mArr[1].secondary_swell_wave_direction[i]); }\n          const _az = (x) => x != null ? ((Number(x) % 360) + 360) % 360 : null;\n          const _sse = (a) => a != null && a >= 157.5 && a < 247.5;\n          const domD = swellH >= s2H ? swellD : s2D;\n          const safety = evalSafety(spd, gst, dir, wavH, domD, swellH, swellD, swellT, { s2H, s2D, domD });\n\n        const _swSse = (x) => x != null && ((Number(x) % 360) + 360) % 360 >= 157.5 && ((Number(x) % 360) + 360) % 360 < 247.5; const _sh1 = _swSse(swellD) ? swellH : 0; const _r2H = (mH.secondary_swell_wave_height && mH.secondary_swell_wave_direction) ? Number(mH.secondary_swell_wave_height[i] || 0) : 0; const _r2D = mH.secondary_swell_wave_direction ? Number(mH.secondary_swell_wave_direction[i]) : null; const _a2 = _swSse(s2D) ? s2H : 0; const _b2 = _swSse(_r2D) ? _r2H : 0; const _sh2 = Math.max(_a2, _b2); const _sH = Math.max(_sh1, _sh2); const _sD = _sh1 >= _sh2 ? swellD : (_a2 >= _b2 ? s2D : _r2D); hourlyList.push({ time: times[i], spd: safety.effWind, gst: safety.effGust, dir, wavH, wavD, wavH2: swellH, wavT: swellT, swH: _sH >= 0.15 ? _sH : 0.2, swCard: _sH >= 0.15 ? degToCard(_sD) : 'S', safety });\n\n      }\n\n\n\n      const daysMap = {};\n\n      hourlyList.forEach(h => {\n\n        const k = h.time.substring(0, 10);\n\n        if (!daysMap[k]) daysMap[k] = { date: k, hourly: [] };\n\n        daysMap[k].hourly.push(h);\n\n      });\n\n\n\n      const days = Object.values(daysMap).slice(0, 5).map(d => {\n\n        const tourHours = d.hourly.filter(h => {\n\n          const hr = parseInt(h.time.substring(11, 13), 10);\n\n          return [10, 14, 18].includes(hr);\n\n        });\n\n        const validHours = tourHours.length ? tourHours : d.hourly;\n\n        const winds = validHours.map(h => h.spd);\n\n        const avgW = winds.reduce((a,b) => a+b, 0) \/ winds.length;\n\n        return { date: d.date, hourly: d.hourly, avgWind: avgW };\n\n      });\n\n\n\n      widgetData = {\n\n        current: (function(c, ob){ if (!ob) return c; const g = ob.gust; const lvl = g != null ? (g >= 15 ? 2 : (g >= 12 ? 1 : 0)) : 0; const rk = { green: 0, yellow: 1, red: 2 }; if (!lvl || lvl <= (rk[c.safety.status] || 0)) return c; const os = evalSafety(ob.wind, g, ob.dir !== null ? ob.dir : c.dir, c.wavH, c.safety ? c.safety.swellDomDeg : c.wavD, c.wavH2 || 0, null, null, { obs: true, s2H: c.safety ? c.safety.swell2H : 0, s2D: c.safety ? c.safety.swell2Deg : null, domD: c.safety ? c.safety.swellDomDeg : c.wavD }); if (lvl > (rk[os.status] || 0)) { os.status = lvl === 2 ? \"red\" : \"yellow\"; os.label = lvl === 2 ? t.notRec : t.moderate; } return Object.assign({}, c, { spd: ob.wind, gst: g, dir: ob.dir !== null ? ob.dir : c.dir, safety: os, observed: true }); })(hourlyList[currentIdx] || hourlyList[0], obs),\n\n        days: days,\n\n        updatedAt: new Date().toLocaleTimeString('pt-PT', { hour: '2-digit', minute: '2-digit' })\n\n      };\n\n\n\n      render();\n\n    } catch(e) { console.warn(\"Fallback activated:\", e);\n      if (!widgetData) {\n        const dt = new Date().toISOString().substring(0,10);\n        const rows = [10, 14, 18].map(h => ({\n          time: dt + 'T' + (h < 10 ? '0' : '') + h + ':00',\n          spd: 4.5, gst: 7.0, dir: 220, wavH: 0.6, wavD: 300,\n          safety: evalSafety(4.5, 7.0, 220, 0.6, 300)\n        }));\n        widgetData = {\n          current: { time: dt, spd: 4.5, gst: 7.0, dir: 220, wavH: 0.6, wavD: 300, safety: evalSafety(4.5, 7.0, 220, 0.6, 300) },\n          days: [{ date: dt, hourly: rows, avgWind: 4.5 }],\n          updatedAt: new Date().toLocaleTimeString('pt-PT', { hour: '2-digit', minute: '2-digit' })\n        };\n        render();\n      }\n    }\n\n  }\n\n\n\n  function render() {\n\n    const el = document.getElementById(\"glide-compact-costasul-widget\");\n\n    if (!el || !widgetData) return;\n\n    const activeDay = widgetData.days[selectedDayIdx] || widgetData.days[0];\n\n    const cur = widgetData.current;\n\n\n\n    const tourRows = activeDay.hourly.filter(h => {\n\n      const hr = parseInt(h.time.substring(11, 13), 10);\n\n      return [10, 14, 18].includes(hr);\n\n    });\n\n\n\n    el.innerHTML = `\n\n      <div class=\"glide-header-bar\">\n\n        <div class=\"glide-header-titles\">\n\n          <h3>${t.condTitle}${SPOT.name}<\/h3>\n\n          <p>${t.subtitle}<\/p>\n\n        <\/div>\n\n        ${(() => {\n            \/* local \"Coming soon\": sem estado, so a previsao *\/\n            if (SPOT.comingSoon) {\n              return `<div class=\"glide-header-badge plain\"><span class=\"glide-badge-dot\"><\/span><span>${t.sealPlain}<\/span><\/div>`;\n            }\n            const sl = glideSeal(cur.spd, cur.gst, SPOT.windLimit, SPOT.gustLimit, cur.safety);\n            return `<div class=\"glide-header-badge ${sl.cls}\"><span class=\"glide-badge-dot\"><\/span><span>${sl.label} ${t.nowWord} (${glideNum(cur.spd)} kts)<\/span><\/div>`;\n          })()}\n\n      <\/div>\n\n\n\n      <div class=\"glide-days-nav\">\n\n        ${widgetData.days.map((d, i) => {\n\n          const dt = new Date(d.date + \"T00:00:00\");\n\n          const name = i === 0 ? t.today : dayNames[dt.getDay()];\n\n          const dateStr = `${dt.getDate()} ${monthNames[dt.getMonth()]}`;\n\n          return `\n\n            <div class=\"glide-day-tab ${i === selectedDayIdx ? 'active' : ''}\" onclick=\"window.GLIDECostaSulWidget.setDay(${i})\">\n\n              <span class=\"glide-day-title\">${name}<\/span>\n\n              <span class=\"glide-day-date\">${dateStr}<\/span>\n\n              <span class=\"glide-day-wind\">${t.avgWord} ${glideNum(d.avgWind)} kts<\/span>\n\n            <\/div>\n\n          `;\n\n        }).join(\"\")}\n\n      <\/div>\n\n\n\n      <div class=\"glide-table-box\">\n\n        <div class=\"glide-cards\">\n\n          \n\n          \n\n            ${tourRows.map(h => {\n              const hourStr = h.time.substring(11, 16);\n              const s = h.safety;\n              const waveVal = (h.swH != null ? h.swH : h.wavH);\n              const waveCard = (h.swCard && h.swCard !== '--') ? h.swCard : ((s && s.waveCard && s.waveCard !== '--') ? s.waveCard : 'S');\n              const waveArrow = getWindArrow(waveCard);\n              const limit = SPOT.windLimit;\n              const gustLimit = SPOT.gustLimit;\n              const seal = glideSeal(h.spd, h.gst, limit, gustLimit, s);\n              const gustHtml = (h.gst != null && h.gst > h.spd)\n                ? `<span class=\"glide-gust-text\">${t.gustWord} <strong>${glideNum(h.gst)}<\/strong> kts<\/span>`\n                : '';\n              return `\n                <div class=\"glide-hour-card glide-st-${seal.cls}\">\n                  <div class=\"glide-hc-top\">\n                    <span class=\"glide-hc-hour\">${hourStr}<\/span>\n                    <span class=\"glide-pill-status ${seal.cls}\">${seal.short ? t.sealShort : seal.label}<\/span>\n                  <\/div>\n                  <div class=\"wind-center-banner\">\n                    <span class=\"wind-label-tag\">${t.thWind}<\/span>\n                    <div class=\"wind-values-wrap\">\n                      <span class=\"wind-main-num\">${glideNum(h.spd)}<\/span>\n                      <span class=\"wind-unit\">kts<\/span>\n                      ${(h.gst != null && h.gst > h.spd) ? `<span class=\"wind-sep-dot\">\u2022<\/span><span class=\"wind-gust-inline\">${t.gustWord} <strong>${glideNum(h.gst)}<\/strong> kts<\/span>` : ''}\n                    <\/div>\n                  <\/div>\n                  <div class=\"glide-hc-foot\">\n                    <span class=\"glide-hc-cell\">\n                      <span class=\"glide-hc-lbl\">${t.thDir}<\/span>\n                      <span class=\"glide-dir\"><span class=\"glide-badge-dir\">${s.arrow}<\/span><strong>${s.card}<\/strong><\/span>\n                    <\/span>\n                    <span class=\"glide-hc-cell\">\n                      <span class=\"glide-hc-lbl\">${t.thSwell}<\/span>\n                      <span class=\"glide-swell\"><span class=\"glide-badge-wave\">${waveArrow}<\/span><strong>${waveCard}<\/strong><b>${glideNum(waveVal)}<i>m<\/i><\/b><\/span>\n                    <\/span>\n                  <\/div>\n                <\/div>`;\n            }).join(\"\")}\n\n          \n\n        <\/div>\n\n      <\/div>\n\n\n\n      <div class=\"glide-compact-footer\">\n        <div style=\"color:#94A3B8;\">${t.updated} ${widgetData.updatedAt}<\/div>\n        <div>Powered by <strong>GLIDE<\/strong><\/div>\n      <\/div>\n\n    `;\n\n  }\n\n\n\n  window.GLIDECostaSulWidget = {\n\n    setDay: function(idx) {\n\n      selectedDayIdx = idx;\n\n      render();\n\n    }\n\n  };\n\n\n\n  if (document.readyState === \"loading\") {\n\n    document.addEventListener(\"DOMContentLoaded\", fetchForecast);\n\n  } else {\n\n    fetchForecast();\n\n  }\n\n})();\n\n<\/script>\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<div class=\"elementor-element elementor-element-80d8dae e-flex e-con-boxed e-con e-parent\" data-id=\"80d8dae\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c42be6b elementor-widget elementor-widget-heading\" data-id=\"c42be6b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Gallery<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc3fbef gallery-spacing-Array elementor-widget elementor-widget-image-gallery\" data-id=\"bc3fbef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-gallery.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-image-gallery\">\n\t\t\t<div id='gallery-1' class='gallery galleryid-2490 gallery-columns-3 gallery-size-large'><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon portrait'>\n\t\t\t\t<a data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-slideshow=\"bc3fbef\" data-elementor-lightbox-title=\"whatsapp image 2026 10 29 at 08.59.27 1\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MzI0NiwidXJsIjoiaHR0cHM6XC9cL2dsaWRlc3VwdG91cnMucHRcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzEwXC93aGF0c2FwcC1pbWFnZS0yMDI2LTEwLTI5LWF0LTA4LjU5LjI3LTEuanBlZyIsInNsaWRlc2hvdyI6ImJjM2ZiZWYifQ%3D%3D\" href='https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1.jpeg'><img decoding=\"async\" width=\"624\" height=\"1024\" src=\"https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-624x1024.jpeg\" class=\"attachment-large size-large\" alt=\"whatsapp image 2026 10 29 at 08.59.27 1\" srcset=\"https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-624x1024.jpeg 624w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-183x300.jpeg 183w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-768x1260.jpeg 768w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-936x1536.jpeg 936w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-7x12.jpeg 7w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1-600x985.jpeg 600w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.27-1.jpeg 975w\" sizes=\"(max-width: 624px) 100vw, 624px\"  title=\"West Coast Tour\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon portrait'>\n\t\t\t\t<a data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-slideshow=\"bc3fbef\" data-elementor-lightbox-title=\"whatsapp image 2026 10 29 at 08.59.28\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MzI0NywidXJsIjoiaHR0cHM6XC9cL2dsaWRlc3VwdG91cnMucHRcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzEwXC93aGF0c2FwcC1pbWFnZS0yMDI2LTEwLTI5LWF0LTA4LjU5LjI4LmpwZWciLCJzbGlkZXNob3ciOiJiYzNmYmVmIn0%3D\" href='https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.28.jpeg'><img decoding=\"async\" width=\"617\" height=\"1024\" src=\"https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.28-617x1024.jpeg\" class=\"attachment-large size-large\" alt=\"whatsapp image 2026 10 29 at 08.59.28\" srcset=\"https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.28-617x1024.jpeg 617w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.28-181x300.jpeg 181w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.28-768x1275.jpeg 768w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.28-925x1536.jpeg 925w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.28-7x12.jpeg 7w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.28-600x996.jpeg 600w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/whatsapp-image-2026-10-29-at-08.59.28.jpeg 964w\" sizes=\"(max-width: 617px) 100vw, 617px\"  title=\"West Coast Tour\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon portrait'>\n\t\t\t\t<a data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-slideshow=\"bc3fbef\" data-elementor-lightbox-title=\"falesia melhorada v2\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MzI0NCwidXJsIjoiaHR0cHM6XC9cL2dsaWRlc3VwdG91cnMucHRcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzEwXC9mYWxlc2lhX21lbGhvcmFkYV92Mi1zY2FsZWQuanBnIiwic2xpZGVzaG93IjoiYmMzZmJlZiJ9\" href='https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/falesia_melhorada_v2-scaled.jpg'><img loading=\"lazy\" decoding=\"async\" width=\"460\" height=\"1024\" src=\"https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/falesia_melhorada_v2-460x1024.jpg\" class=\"attachment-large size-large\" alt=\"falesia melhorada v2\" srcset=\"https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/falesia_melhorada_v2-460x1024.jpg 460w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/falesia_melhorada_v2-135x300.jpg 135w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/falesia_melhorada_v2-768x1711.jpg 768w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/falesia_melhorada_v2-689x1536.jpg 689w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/falesia_melhorada_v2-919x2048.jpg 919w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/falesia_melhorada_v2-5x12.jpg 5w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/falesia_melhorada_v2-600x1337.jpg 600w, https:\/\/glidesuptours.pt\/wp-content\/uploads\/2026\/10\/falesia_melhorada_v2-scaled.jpg 1149w\" sizes=\"(max-width: 460px) 100vw, 460px\"  title=\"West Coast Tour\" \/><\/a>\n\t\t\t<\/div><\/figure>\n\t\t<\/div>\n\t\t<\/div>\n\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<div class=\"elementor-element elementor-element-style_2490_fixes e-con-full e-flex e-con e-parent\" data-id=\"style_2490_fixes\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-css_2490_w elementor-widget elementor-widget-html\" data-id=\"css_2490_w\" 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<style>\n\/* #7: Ocultar titulo duplicado do tema Astra *\/\n.page-id-2490 .entry-header,\n#post-2490 > header.entry-header {\n  display: none !important;\n}\n\n\/* #11: Gallery com proporcao uniforme e cantos arredondados *\/\n.elementor-image-gallery .gallery-item img {\n  width: 100% !important;\n  aspect-ratio: 3 \/ 2 !important;\n  object-fit: cover !important;\n  border-radius: 14px !important;\n  box-shadow: 0 8px 24px rgba(4, 24, 43, 0.12) !important;\n}\n\n\/* #5: Tipografia de botoes sem all-caps forcado *\/\n.page-id-2490 .elementor-button,\n.page-id-2490 .ast-custom-button {\n  text-transform: none !important;\n  letter-spacing: 0.02em !important;\n  font-weight: 600 !important;\n}\n\n\/* #6: Tipografia compacta padrao Barreirinha *\/\n\n\n\n\/* Ajuste vertical e espacamento do subtitulo no Hero *\/\n.elementor-element-aaba03a {\n  position: relative !important;\n  top: -50px !important;\n  margin-top: 54px !important;\n}\n@media (max-width: 767px) {\n  .elementor-element-aaba03a {\n    top: -25px !important;\n  }\n}\n.elementor-element-aaba03a p:first-child {\n  margin-bottom: 6px !important;\n}\n.elementor-element-aaba03a p:last-child {\n  margin-top: 0 !important;\n}\n.elementor-element-e520dc5 {\n  margin-top: 14px !important;\n}\n\n\/* Ajuste de posicao do titulo West Coast Tour *\/\n.elementor-element-dd537c3 .elementor-heading-title {\n  transform: translateY(50px) !important;\n}\n@media (max-width: 767px) {\n  .elementor-element-dd537c3 .elementor-heading-title {\n    transform: translateY(35px) !important;\n  }\n}\n<\/style>\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>West Coast Tour Paddle touring boards designed for longer distances, greater stability and a more complete exploration of the sea. \u2014 Dispon\u00edvel apenas na Praia da Foz Chat with us Learn more Maximum 4 people Small groups for a personalized, safe experience with full guide attention. West Coast Tour The south coast leads the way, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_joinchat":[],"footnotes":""},"class_list":["post-2490","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/glidesuptours.pt\/en\/wp-json\/wp\/v2\/pages\/2490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/glidesuptours.pt\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/glidesuptours.pt\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/glidesuptours.pt\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/glidesuptours.pt\/en\/wp-json\/wp\/v2\/comments?post=2490"}],"version-history":[{"count":57,"href":"https:\/\/glidesuptours.pt\/en\/wp-json\/wp\/v2\/pages\/2490\/revisions"}],"predecessor-version":[{"id":3233,"href":"https:\/\/glidesuptours.pt\/en\/wp-json\/wp\/v2\/pages\/2490\/revisions\/3233"}],"wp:attachment":[{"href":"https:\/\/glidesuptours.pt\/en\/wp-json\/wp\/v2\/media?parent=2490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}