{"id":80,"date":"2024-10-04T00:17:51","date_gmt":"2024-10-04T00:17:51","guid":{"rendered":"https:\/\/paragliding-in-madeira.com\/weather\/?page_id=80"},"modified":"2026-04-20T01:11:22","modified_gmt":"2026-04-20T00:11:22","slug":"weather-info","status":"publish","type":"page","link":"https:\/\/paragliding-in-madeira.com\/weather\/weather-info\/","title":{"rendered":"Madeira Weather Info"},"content":{"rendered":"\n<div align=\"center\"><a href=\"https:\/\/time.is\/Funchal_Municipality\" id=\"time_is_link\" rel=\"nofollow\" style=\"font-size:16px\">Madeira Island<\/a>\n<span id=\"Funchal_Municipality_z505\" style=\"font-size:16px\"><\/span>\n<script src=\"\/\/widget.time.is\/en.js\"><\/script>\n<script>\ntime_is_widget.init({Funchal_Municipality_z505:{template:\"SUN\", sun_format:\"Sunrise: srhour:srminute Sunset: sshour:ssminute\", coords:\"32.6761700,-16.9172200\"}});\n<\/script><\/div>\n\n\n\n\n    <div class=\"pwa-install-wrapper\" style=\"width: fit-content; margin: 0 auto;\">\n       \n        <style>\n            \/* Button styling and initial state (hidden) *\/\n            .pwa-install-button-custom {\n                \/* HIDDEN BY DEFAULT (IMPORTANT!) *\/\n                display: none; \n                opacity: 0;\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0transition: opacity 1.5s ease-in;\n                \/* Your custom styling *\/\n                background-color: #37505d;\n                color: white;\n                padding: 10px 20px;\n                border-radius: 5px;\n                border: none;\n                font-weight: bold;\n                cursor: pointer;\n                font-size: 16px;\n                \/* Ensure it sits above other content if needed, but not fixed *\/\n                z-index: 10;\n                margin: 10px 0; \/* Add some margin for content flow *\/\n            }\n\n            \/* Show helper class - controlled by JavaScript *\/\n            .pwa-install-button-custom.show {\n                display: inline-block;\n                opacity: 1;\n            }\n        <\/style>\n\n        <button class=\"installAppButton pwa-install-button-custom\">\n            \ud83d\udcf2 Install the Weather App\n        <\/button>\n        \n        <script>\n        document.addEventListener('DOMContentLoaded', function() {\n            function isMobileDevice() {\n                \/\/ Detects Android, iPhone, iPad, iPod\n                \/\/ NOTE: iOS does not support beforeinstallprompt. It will still skip.\n                return \/android|iphone|ipad|ipod\/i.test(navigator.userAgent); \n            }\n        \n            \/\/ Only proceed on mobile devices that are NOT iOS\n            if (!isMobileDevice() || \/iphone|ipad|ipod\/i.test(navigator.userAgent)) {\n                return;\n            }\n            \n            let deferredPrompt;\n            \/\/ Use the generic class defined in the original code\n            const installButtons = document.querySelectorAll('.installAppButton'); \n            \n            if (installButtons.length === 0) return;\n        \n            \/\/ Detect when PWA can be installed\n            window.addEventListener('beforeinstallprompt', (e) => {\n                e.preventDefault();\n                deferredPrompt = e;\n        \n                \/\/ Show all buttons with fade-in using the \"show\" class\n                installButtons.forEach(btn => btn.classList.add('show'));\n            });\n        \n            \/\/ Handle button clicks\n            installButtons.forEach(btn => btn.addEventListener('click', async () => {\n                if (!deferredPrompt) return;\n        \n                btn.classList.remove('show'); \/\/ hide button immediately\n                deferredPrompt.prompt();       \/\/ trigger install\n        \n                const { outcome } = await deferredPrompt.userChoice;\n                console.log(`User ${outcome === 'accepted' ? 'accepted' : 'dismissed'} the install prompt`);\n        \n                deferredPrompt = null;\n            }));\n        \n            \/\/ Hide buttons if app is already installed\n            window.addEventListener('appinstalled', () => {\n                installButtons.forEach(btn => btn.classList.remove('show'));\n                console.log('App installed successfully');\n            });\n        });\n        <\/script>\n    <\/div>\n    \n\n\n\n<div class=\"wp-block-buttons alignfull is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/paragliding-in-madeira.com\/weather\">Home<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/paragliding-in-madeira.com\/weather\/forecast\/\">Forecast<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/paragliding-in-madeira.com\/weather\/sun-and-moon\/\">Sun &amp; sea<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/paragliding-in-madeira.com\/weather\/airport-live\/\">Airport<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/paragliding-in-madeira.com\/weather\/pressure-chart\/\">Pressure<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.windy.com\/sounding\/32.792\/-16.804?gfs,clouds,32.422,-16.804,10,i:pressure\" target=\"_blank\" rel=\"noreferrer noopener\">Sounding<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/paragliding-in-madeira.com\/weather\/weather-stations\/\">Weather Station<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/paragliding-in-madeira.com\/weather\/webcams\/\">Webcam<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/paragliding-in-madeira.com\/weather\/trails-status\/\"><strong>Trails<\/strong><\/a><\/p>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"has-text-align-center\">Simplifying Madeira island weather, combining 55+ tools on the same page, from flying to hiking, sailing to surfing or even when to <a style=\"text-decoration:none\" href=\"https:\/\/paragliding-in-madeira.com\/weather\/madeira-roads-live\/\" title=\"\">watch<\/a> the rising of the moon<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\" id=\"actual\"><strong>Actual conditions<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table aligncenter is-style-regular\"><table style=\"border-style:none;border-width:0px\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"44\" height=\"44\" class=\"wp-image-1579\" style=\"width: 44px;\" src=\"https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2024\/11\/Actual-conditions-s.png\" alt=\"\" srcset=\"https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2024\/11\/Actual-conditions-s.png 333w, https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2024\/11\/Actual-conditions-s-300x300.png 300w, https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2024\/11\/Actual-conditions-s-150x150.png 150w\" sizes=\"auto, (max-width: 44px) 100vw, 44px\" \/><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<!--- Source code beginning --->\n\t\t\n\t<!--- Terms of Use: The contained links and texts in the source code\n\tmay not be removed, otherwise the right of use expires. \n\tIn case of desired deviations please contact by mail. \n\tMail address on the homepage.\n\t\t\n\tA free service from https:\/\/www.Der-Mond.de\/ --->\n\n\t\n\t\t<img decoding=\"async\" border=0 src=\"https:\/\/www.der-mond.de\/feature\/luna_kalender.php?version=5&#038;txue=current+moon&#038;trans=1&#038;zefu=0&#038;txph=0&#038;txmoph=1&#038;txmophti=0&#038;txmost=0&#038;txmostau=0&#038;txze=1&#038;zezo=0&#038;zeso=1&#038;schgr=14&#038;schriftart=OpenSans&#038;schriftschnitt=0&#038;faan=1&#038;scro=0&#038;ragr=128&#038;rabl=255&#038;raro=0&#038;scgr=0&#038;scbl=0&#038;hiro=240&#038;higr=240&#038;hibl=240&#038;soep=0&#038;txsost=0&#038;txsostau=0&#038;geolagr=16&#038;geolami=55&#038;geolase=0&#038;geola=w&#038;geobrgr=32&#038;geobrmi=45&#038;geobrse=0&#038;geobr=n&#038;lang=en&#038;kalender_zeitraum=0&#038;jahr=2024&#038;monat=10\" alt=\"moon\" style=\"max-width: 100%\">\n\n<!--- End of source code --->\n\n\n\n<div align=\"left\" style=\"margin-top:-20px;\"><small><i><a href=\"https:\/\/www.der-mond.de\/\" target=\"_blank\" rel=\"noopener\">source<\/a><\/i><\/small><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:11px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div align=\"center\" style=\"margin-top:-20px;margin-left:-2px\"><p><a href=\"https:\/\/paragliding-in-madeira.com\/weather\/trails-status\/\">Madeira trails info<\/a>:<\/p>\n<\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><a href=\"https:\/\/paragliding-in-madeira.com\/weather\/trails-status\/\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2025\/10\/hiker-in-nature-1024x461.webp\" alt=\"Hiker in nature\" class=\"wp-image-5107\" style=\"width:462px;height:auto\" srcset=\"https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2025\/10\/hiker-in-nature-1024x461.webp 1024w, https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2025\/10\/hiker-in-nature-300x135.webp 300w, https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2025\/10\/hiker-in-nature-768x346.webp 768w, https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2025\/10\/hiker-in-nature-1536x691.webp 1536w, https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2025\/10\/hiker-in-nature-2048x922.webp 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:11px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:11px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div align=\"center\" style=\"margin-top:-10px;margin-left:-2px\"><p><sub><small>Madeira tides info:<\/sub><\/small><\/p>\n<\/div>\n\n\n\n<div style=\"height:11px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div align=\"center\"; style=\"margin-top:-20px;\">\n<iframe loading=\"lazy\" style=\"margin-top:-2px; margin-left:-30px;\" src=\"https:\/\/marea.ooo\/en\/widget\/32.6496497\/-16.9086783?padding=s&#038;components=chart&#038;background=transparent&#038;theme=light\"\n        style=\"background-color: transparent\"\n        width=\"100%\"\n        height=\"344px\"><\/iframe><\/div>\n\n\n\n<div style=\"height:4px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:4px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-center\"><sub><small>Air and Sea temperature with webcam image:<\/small><\/sub><\/p>\n\n\n\n<p class=\"has-text-align-center\" id=\"funchal\">Funchal (200m)<\/p>\n\n\n\n<div style=\"display:block; overflow:hidden; width:125px; height:80px;\" >\n<iframe style=\"width: 126px; height: 123px; margin-top:-40px;margin-left:-1px; border:0;align:center;\" src=\"https:\/\/www.meteoblue.com\/en\/weather\/widget\/three\/s%c3%a3o-pedro_portugal_2263257?geoloc=fixed&#038;nocurrent=0&#038;tempunit=CELSIUS&#038;layout=bright\" scrolling=\"no\" allowtransparency=\"true\" sandbox=\"allow-same-origin allow-scripts allow-popups allow-popups-to-escape-sandbox\" ><\/iframe>\n<\/div>\n\n\n\n<div align=\"right\" style=\"margin-top:-11px;\"><small><i><a href=\"https:\/\/www.meteoblue.com\/en\/weather\/week\/s%c3%a3o-pedro_portugal_2263257\" target=\"_blank\" rel=\"noopener\">source<\/a><\/i><\/small><\/div>\n\n\n\n<style>\n  .slideshow-wrapper {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    padding: 10px 0;\n  }\n\n  .slideshow-container {\n    position: relative;\n    width: 222px;\n    height: 169px;\n  }\n\n  .slideshow-container iframe {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    border: none;\n    opacity: 0;\n    transition: opacity 1s ease-in-out;\n  }\n\n  .slideshow-container iframe.active {\n    opacity: 1;\n    z-index: 1;\n  }\n<\/style>\n\n<div class=\"slideshow-wrapper\">\n  <div class=\"slideshow-container\">\n    <iframe class=\"active\" src=\"https:\/\/www.netmadeira.com\/webcams\/show\/netmadeira\/monte\"><\/iframe>\n    <iframe src=\"https:\/\/www.netmadeira.com\/webcams\/show\/netmadeira\/funchal-baia-do-funchal\"><\/iframe>\n    <iframe src=\"https:\/\/www.netmadeira.com\/webcams\/show\/netmadeira\/funchal-parque-ecologico\"><\/iframe>\n    <iframe src=\"https:\/\/www.netmadeira.com\/webcams\/show\/netmadeira\/funchal-pontinha\"><\/iframe>\n  <\/div>\n<\/div>\n\n<script>\n  const iframes = document.querySelectorAll('.slideshow-container iframe');\n  let current = 0;\n\n  setInterval(() => {\n    iframes[current].classList.remove('active');\n    current = (current + 1) % iframes.length;\n    iframes[current].classList.add('active');\n  }, 5555);\n<\/script>\n\n\n\n<div align=\"center\" style=\"margin-top:-1px;\"><a href=\"https:\/\/seatemperature.info\/funchal-water-temperature.html\" target=\"blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/seatemperature.info\/widget\/17288785907893.png\" alt=\"Sea water temperature\"><\/a><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-default\"\/>\n\n\n\n<p class=\"has-text-align-center\"><a style=\"text-decoration:none\" href=\"https:\/\/astronomiamadeira.pt\/\" target=\"_blank\" rel=\"noreferrer noopener\">Pico do Arieiro<\/a><a style=\"text-decoration:none\" href=\"https:\/\/www.wunderground.com\/dashboard\/pws\/IMONTE1093\" target=\"_blank\" rel=\"noreferrer noopener\"> <\/a><a style=\"text-decoration:none\" href=\"https:\/\/www.wunderground.com\/dashboard\/pws\/IMONTE1093\" target=\"_blank\" rel=\"noreferrer noopener\">(1818m)<\/a> \/ Ruivo<\/p>\n\n\n\n<div align=\"center\" style=\"position:relative; width:150px; height:80px; overflow:hidden;\">\n  <iframe style=\"width: 155px; height: 123px; margin-top:-40px; margin-left:10px; margin-right:-23px; border:0;\" \n    src=\"https:\/\/www.meteoblue.com\/en\/weather\/widget\/three\/pico-do-arieiro_portugal_2271550?geoloc=fixed&#038;nocurrent=0&#038;tempunit=CELSIUS&#038;layout=bright\" \n    scrolling=\"no\" allowtransparency=\"true\" sandbox=\"allow-same-origin allow-scripts allow-popups allow-popups-to-escape-sandbox\">\n  <\/iframe>\n\n  <!-- Mask only bottom right -->\n  <div style=\"position:absolute; bottom:0; right:0; width:35px; height:35px; background:#EBEBEF;\"><\/div>\n<\/div>\n\n\n\n<div align=\"center\"><small>Wind avg\/gust<\/small><\/div>\n<div align=\"center\" style=\"margin-top:-7px; position:relative; width:70px; height:77px; overflow:hidden;\">\n  <iframe style=\"width: 144px; height: 277px; margin-top:-99px; margin-left:-1px; margin-right:-1px; border:0;\" \nsrc=\"https:\/\/www.meteoblue.com\/en\/weather\/widget\/daily\/pico-do-arieiro_portugal_2271550?geoloc=fixed&#038;days=2&#038;tempunit=CELSIUS&#038;windunit=KILOMETER_PER_HOUR&#038;precipunit=MILLIMETER&#038;coloured=coloured&#038;pictoicon=0&#038;maxtemperature=0&#038;mintemperature=0&#038;windspeed=1&#038;windgust=1&#038;winddirection=1&#038;uv=0&#038;humidity=0&#038;precipitation=0&#038;precipitationprobability=0&#038;spot=0&#038;pressure=0&#038;layout=light\"\n    scrolling=\"no\" allowtransparency=\"true\" sandbox=\"allow-same-origin allow-scripts allow-popups allow-popups-to-escape-sandbox\">\n  <\/iframe>\n<\/div>\n\n\n\n<div align=\"right\" style=\"margin-top:-15px;\"><small><i><a href=\"https:\/\/www.meteoblue.com\/en\/weather\/week\/pico-do-arieiro_portugal_2271550\" target=\"_blank\" rel=\"noopener\">source<\/a><\/i><\/small><\/div>\n\n\n\n<style>\n  .slideshow-wrapper2 {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    padding: 10px 0;\n  }\n\n  .slideshow-container2 {\n    position: relative;\n    width: 222px;\n    height: 169px;\n  }\n\n  .slideshow-container2 iframe {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    border: none;\n    opacity: 0;\n    transition: opacity 1s ease-in-out;\n  }\n\n  .slideshow-container2 iframe.active2 {\n    opacity: 1;\n    z-index: 1;\n  }\n<\/style>\n\n<div class=\"slideshow-wrapper2\">\n  <div class=\"slideshow-container2\">\n    <iframe class=\"active2\" src=\"https:\/\/www.netmadeira.com\/webcams\/show\/netmadeira\/pico-do-arieiro\"><\/iframe>\n    <iframe src=\"https:\/\/www.netmadeira.com\/webcams\/show\/netmadeira\/achada-do-teixeira\"><\/iframe>\n  <\/div>\n<\/div>\n\n<script>\n  document.addEventListener(\"DOMContentLoaded\", () => {\n    const iframes2 = document.querySelectorAll('.slideshow-container2 iframe');\n    let current2 = 0;\n\n    setInterval(() => {\n      iframes2[current2].classList.remove('active2');\n      current2 = (current2 + 1) % iframes2.length;\n      iframes2[current2].classList.add('active2');\n    }, 7777);\n  });\n<\/script>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-default\" id=\"metar\"\/>\n\n\n\n<a href=\"https:\/\/metar-taf.com\/LPPS\" target=\"_blank\" id=\"metartaf-nmmNXCeW\" style=\"font-size:18px; font-weight:500; color:#000; width:300px; height:435px; display:block\" rel=\"noopener\">METAR Porto Santo Airport<\/a>\n<script async defer crossorigin=\"anonymous\" src=\"https:\/\/metar-taf.com\/embed-js\/LPPS?u=60001&#038;speed=kph&#038;qnh=hPa&#038;rh=rh&#038;target=nmmNXCeW\"><\/script>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"222\" height=\"178\" src=\"https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2024\/10\/Porto-Santo-Contorno.png\" alt=\"\" class=\"wp-image-587\" style=\"width:92px;height:auto\"\/><\/figure>\n\n\n\n<div style=\"margin-top:-1px;margin-left:-2px\"><p align=\"center\"><sub><small>ipma weather stations:<\/sub><\/small><\/p>\n<\/div>\n\n\n\n<div style=\"position:relative; left:-20px; overflow:hidden; width:333px; height:457px;\">\n  <iframe\n    style=\"position:absolute;\n           top:-128px;\n           left:-160px;\n           width:588px;\n           height:690px;\n           transform:scale(0.85);\n           transform-origin: top left;\"\n    src=\"https:\/\/www.ipma.pt\/pt\/otempo\/obs.superficie\/#Ponta%20do%20Sol\/Lugar%20de%20Baixo\"\n    scrolling=\"yes\"\n    border=\"0\">\n  <\/iframe>\n<\/div>\n\n\n\n<div style=\"text-align: center; margin-top:1px;\">\n   <small><i><sup style=\"margin-left: -35px; display: inline-block;\"><a href=\"https:\/\/www.ipma.pt\/pt\/otempo\/obs.superficie\/\" target=\"_blank\" rel=\"noopener\" \"noindex\" \"nofollow\">source<\/a> time in UTC upd varies (use 2 fingers to move map)<\/i><\/small><\/sup>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<!-- tests below\n<div align=\"center\">\n<div style=\"margin-top:-20px;margin-left:-2px\"><p><sub><small>Webcams at the most frequent flying spots:<\/small><\/sub><\/p>\n<\/div>\n<div style=\"margin-top:-28px\"><p align=\"center\"><sub><small><i>Madalena do Mar, Porto da Cruz and Portela<\/i><\/small><\/sub><\/p>\n<\/div>\n-->\n\n\n\n<!-- tests below\n<div style=\"height: 200px; width: 333px; overflow: hidden; position: relative;\" id=\"widgetWrapperMadalena\">\n  <div style=\"position: relative; overflow: hidden; width: 333px; height: 200px;\" id=\"iframeContainerMadalena\">\n    <div id=\"loaderMadalena\" style=\"width:100%;height:100%;background:#eee;display:flex;align-items:center;justify-content:center;transition: opacity 0.3s ease; font-family: sans-serif; font-size: 14px; color: #666;\">\n      <span id=\"statusTextMadalena\">Loading webcam...<\/span>\n    <\/div>\n  <\/div>\n  <div style=\"height: 200px; width: 333px; background: transparent;\" aria-hidden=\"true\"><\/div>\n<\/div>\n\n<script>\n  const containerMadalena = document.getElementById('iframeContainerMadalena');\n  const loaderMadalena = document.getElementById('loaderMadalena');\n  const statusTextMadalena = document.getElementById('statusTextMadalena');\n  const widgetWrapperMadalena = document.getElementById('widgetWrapperMadalena');\n\n  const observerMadalena = new IntersectionObserver((entries, observer) => {\n    entries.forEach(entry => {\n      if (entry.isIntersecting) {        containerMadalena.insertAdjacentHTML('beforeend', `\n          <iframe id=\"iframeMadalena\" class=\"fade-in-iframe\" src=\"https:\/\/paragliding-in-madeira.com\/weather\/webcams\/\" style=\"opacity:0; transition: opacity 0.3s ease; position: absolute; top: -72px; left: -25px; width: 380px; height: 444px; border: 0;\" scrolling=\"no\" tabindex=\"-1\"><\/iframe>\n        `);\n        const iframe = document.getElementById('iframeMadalena');\n       iframe.addEventListener('load', () => {\n          try {\n            const targetId = 'MadalenaDoMar'; \n            const idExists = iframe.contentWindow.document.getElementById(targetId);\n\n            if (!idExists) {\n              statusTextMadalena.innerText = \"Madalena do Mar webcam offline...\";\n              iframe.remove();\n              return;\n            }     loaderMadalena.style.opacity = '0';\n     setTimeout(() => {\n              loaderMadalena.remove();             iframe.style.opacity = '1';\n              iframe.contentWindow.location.hash = targetId;\n            }, 300);\n          } catch(e) {\n            console.warn('Load error:', e);\n            loaderMadalena.remove();\niframe.style.opacity = '1';\n          }\n        });\n       observer.unobserve(containerMadalena);\n      }\n    });\n  }, { threshold: 0.3 });\n  observerMadalena.observe(containerMadalena);\n<\/script>\n-->\n\n\n\n<!-- tests below\n<div style=\"height: 200px; width: 333px; overflow: hidden; position: relative;\" id=\"widgetWrapperPDC\">\n  <div style=\"position: relative; overflow: hidden; width: 333px; height: 200px;\" id=\"iframeContainerPDC\">\n    <div id=\"loaderPDC\" style=\"width:100%;height:100%;background:#eee;display:flex;align-items:center;justify-content:center;transition: opacity 0.3s ease; font-family: sans-serif; font-size: 14px; color: #666;\">\n      <span id=\"statusTextPDC\">Loading webcam...<\/span>\n    <\/div>\n  <\/div>\n  <div style=\"height: 200px; width: 333px; background: transparent;\" aria-hidden=\"true\"><\/div>\n<\/div>\n\n<script>\n  const containerPDC = document.getElementById('iframeContainerPDC');\n  const loaderPDC = document.getElementById('loaderPDC');\n  const statusTextPDC = document.getElementById('statusTextPDC');\n  const widgetWrapperPDC = document.getElementById('widgetWrapperPDC');\n\n  const observerPDC = new IntersectionObserver((entries, observer) => {\n    entries.forEach(entry => {\n      if (entry.isIntersecting) {       containerPDC.insertAdjacentHTML('beforeend', `\n<iframe id=\"iframePDC\" class=\"fade-in-iframe\" src=\"https:\/\/paragliding-in-madeira.com\/weather\/webcams\/\" style=\"opacity:0; transition: opacity 0.3s ease; position: absolute; top: -72px; left: -25px; width: 380px; height: 444px; border: 0;\" scrolling=\"no\" tabindex=\"-1\"><\/iframe>\n        `);\n\n     const iframe = document.getElementById('iframePDC');\n       iframe.addEventListener('load', () => {\n\/\/ Check if the specific ID exists in the loaded page\n\/\/ It works because same domain\n          try {\n    const targetId = 'PortoDaCruzMaiata'; \/\/ The ID we are looking for\n   const idExists = iframe.contentWindow.document.getElementById(targetId);\n\n\/*\nif (!idExists) {\n  widgetWrapperPDC.remove(); \/\/ This deletes the whole widget from the page\n  return;\n}\n*\/\n            if (!idExists) {\n\/\/ OPTION: Show offline message\n       statusTextPDC.innerText = \"Porto da Cruz webcam offline...\";\n       iframe.remove(); \/\/ Clean up the empty iframe\n         return; \/\/ Stop here\n            }\n\n\/\/ If exists, proceed as normal          loaderPDC.style.opacity = '0';\n            setTimeout(() => {\n              loaderPDC.remove();\n              iframe.style.opacity = '1';\n              iframe.contentWindow.location.hash = targetId;\n            }, 300);\n          } catch(e) {\n            console.warn('Security or load error:', e);\n\/\/ Safety line: Just show the iframe anyway if check fails\n            loaderPDC.remove();\n            iframe.style.opacity = '1';\n          }\n        });\n        observerPDC.unobserve(containerPDC);\n      }\n    });\n  }, { threshold: 0.3 });\n  observerPDC.observe(containerPDC);\n<\/script>\n-->\n\n\n\n<!-- tests below\n<style>\n    .iframe-wrapper {\n        width: 100%;\n        overflow: hidden;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        padding: 5px 0; \/* Adjust this if you need more space around *\/\n        box-sizing: border-box;\n    }\n\n    .iframe-container {\n        width: 100vw;\n        max-width: 100%;\n        height: 244px; \/* Keep original height *\/\n        min-height: 14vh;\n        overflow: hidden;\n        position: relative;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n    }\n\n    .iframe-container iframe {\n        width: 100%;  \/* Increase width to prevent cropping *\/\n        height: 244px; \/* Increase height to prevent cropping *\/\n        border: none;\n        transform: scale(1.6); \/* Keep zoomed level *\/\n        transform-origin: top center; \/* Keep zoomed from top *\/\n        margin-top: -1px; \/* Move iframe up to hide header *\/\n    }\n<\/style>\n\n<div class=\"iframe-wrapper\">\n    <div class=\"iframe-container\">\n        <iframe src=\"https:\/\/www.netmadeira.com\/webcams\/show\/netmadeira\/portela-porto-da-cruz\"><\/iframe>\n    <\/div>\n<\/div>\n-->\n\n\n\n<div align=\"center\">\n  <div style=\"margin-top:-20px;margin-left:-2px\"><p><sub><small>Webcams at the most frequent flying spots:<\/small><\/sub><\/p><\/div>\n  <div style=\"margin-top:-28px\"><p align=\"center\"><sub><small><i>Madalena do Mar, Porto da Cruz (Maiata) and Portela<\/i><\/small><\/sub><\/p><\/div>\n<\/div>\n\n<div id=\"unifiedWebcamsBlock\" style=\"display: flex; flex-direction: column; align-items: center;\">\n\n  <div style=\"height: 200px; width: 333px; overflow: hidden; position: relative;\" id=\"widgetWrapperMadalena\">\n    <div style=\"position: relative; overflow: hidden; width: 333px; height: 200px;\" id=\"iframeContainerMadalena\">\n      <div id=\"loaderMadalena\" style=\"width:100%;height:100%;background:#eee;display:flex;align-items:center;justify-content:center;transition: opacity 0.3s ease; font-family: sans-serif; font-size: 14px; color: #666; text-align: center; padding: 0 10px;\">\n        <span id=\"statusTextMadalena\">Loading webcam&#8230;<\/span>\n      <\/div>\n    <\/div>\n    <div style=\"height: 200px; width: 333px; background: transparent;\" aria-hidden=\"true\" id=\"spacerMadalena\"><\/div>\n  <\/div>\n\n  <div style=\"height: 200px; width: 333px; overflow: hidden; position: relative;\" id=\"widgetWrapperPDC\">\n    <div style=\"position: relative; overflow: hidden; width: 333px; height: 200px;\" id=\"iframeContainerPDC\">\n      <div id=\"loaderPDC\" style=\"width:100%;height:100%;background:#eee;display:flex;align-items:center;justify-content:center;transition: opacity 0.3s ease; font-family: sans-serif; font-size: 14px; color: #666; text-align: center; padding: 0 10px;\">\n        <span id=\"statusTextPDC\">Loading webcam&#8230;<\/span>\n      <\/div>\n    <\/div>\n    <div style=\"height: 200px; width: 333px; background: transparent;\" aria-hidden=\"true\" id=\"spacerPDC\"><\/div>\n  <\/div>\n\n<\/div>\n\n<script>\n  const containerMadalena = document.getElementById('iframeContainerMadalena');\n  const loaderMadalena = document.getElementById('loaderMadalena');\n  const statusTextMadalena = document.getElementById('statusTextMadalena');\n  const widgetWrapperMadalena = document.getElementById('widgetWrapperMadalena');\n  const spacerMadalena = document.getElementById('spacerMadalena');\n\n  const containerPDC = document.getElementById('iframeContainerPDC');\n  const loaderPDC = document.getElementById('loaderPDC');\n  const statusTextPDC = document.getElementById('statusTextPDC');\n  const widgetWrapperPDC = document.getElementById('widgetWrapperPDC');\n  const spacerPDC = document.getElementById('spacerPDC');\n\n  \/\/ Track individual status to manage the final layout\n  let statusMadalena = 'pending';\n  let statusPDC = 'pending';\n\n  function checkCombinedLayout() {\n    if (statusMadalena === 'offline' && statusPDC === 'offline') {\n\/\/ Both offline: Hide PDC and show one combined message\n      widgetWrapperPDC.style.display = 'none'; \n      statusTextMadalena.innerText = \"Madalena and Maiata webcams offline...\";\n      widgetWrapperMadalena.style.height = '60px';\n      containerMadalena.style.height = '60px';\n      loaderMadalena.style.height = '100%';\n      if (spacerMadalena) spacerMadalena.style.display = 'none';\n    } else {\n\/\/ Handle individual offline states\n      if (statusMadalena === 'offline') {\n        statusTextMadalena.innerText = \"Madalena do Mar webcam offline...\";\n        widgetWrapperMadalena.style.height = '60px';\n        containerMadalena.style.height = '60px';\n        loaderMadalena.style.height = '100%';\n        if (spacerMadalena) spacerMadalena.style.display = 'none';\n      }\n      if (statusPDC === 'offline') {\n        statusTextPDC.innerText = \"Porto da Cruz webcam offline...\";\n        widgetWrapperPDC.style.height = '60px';\n        containerPDC.style.height = '60px';\n        loaderPDC.style.height = '100%';\n        if (spacerPDC) spacerPDC.style.display = 'none';\n      }\n    }\n  }\n\n\/\/ Use single observer for the unified block\n  const observerUnified = new IntersectionObserver((entries, observer) => {\n    entries.forEach(entry => {\n      if (entry.isIntersecting) {\n        \n \/\/ --- Madalena Logic ---\ncontainerMadalena.insertAdjacentHTML('beforeend', `\n          <iframe id=\"iframeMadalena\" class=\"fade-in-iframe\" src=\"https:\/\/paragliding-in-madeira.com\/weather\/webcams\/\" style=\"opacity:0; transition: opacity 0.3s ease; position: absolute; top: -72px; left: -25px; width: 380px; height: 444px; border: 0;\" scrolling=\"no\" tabindex=\"-1\"><\/iframe>\n        `);\n        const iframeMadalena = document.getElementById('iframeMadalena');\n        iframeMadalena.addEventListener('load', () => {\n          try {\n            const targetId = 'MadalenaDoMar'; \n            const idExists = iframeMadalena.contentWindow.document.getElementById(targetId);\n\n            if (!idExists) {\n   statusMadalena = 'offline';\n              iframeMadalena.remove();\n              checkCombinedLayout();\n            } else {\n              statusMadalena = 'online';\n              loaderMadalena.style.opacity = '0';\n              setTimeout(() => {\n                loaderMadalena.remove();\n                iframeMadalena.style.opacity = '1';\n                iframeMadalena.contentWindow.location.hash = targetId;\n              }, 300);\n            }\n          } catch(e) {\n            console.warn('Load error:', e);\n            loaderMadalena.remove();\n            iframeMadalena.style.opacity = '1';\n          }\n        });\n\n\/\/ --- Porto da Cruz Logic ---\ncontainerPDC.insertAdjacentHTML('beforeend', `\n          <iframe id=\"iframePDC\" class=\"fade-in-iframe\" src=\"https:\/\/paragliding-in-madeira.com\/weather\/webcams\/\" style=\"opacity:0; transition: opacity 0.3s ease; position: absolute; top: -72px; left: -25px; width: 380px; height: 444px; border: 0;\" scrolling=\"no\" tabindex=\"-1\"><\/iframe>\n        `);\n        const iframePDC = document.getElementById('iframePDC');\n        iframePDC.addEventListener('load', () => {\n\/\/ Check if the specific ID exists in the loaded page\n\/\/ It works because same domain\n          try {\n            const targetId = 'PortoDaCruzMaiata'; \/\/ The ID we are looking for\n            const idExists = iframePDC.contentWindow.document.getElementById(targetId);\n\n            if (!idExists) {\n     statusPDC = 'offline';\n              iframePDC.remove(); \/\/ Clean up the empty iframe\n              checkCombinedLayout();\n            } else {\n      statusPDC = 'online';\n\/\/ If exists, proceed as normal\n              loaderPDC.style.opacity = '0';\n              setTimeout(() => {\n                loaderPDC.remove();\n                iframePDC.style.opacity = '1';\n                iframePDC.contentWindow.location.hash = targetId;\n              }, 300);\n            }\n          } catch(e) {\n            console.warn('Security or load error:', e);\n            \/\/ Safety line: Just show the iframe anyway if check fails\n            loaderPDC.remove();\n            iframePDC.style.opacity = '1';\n          }\n        });\n        observer.unobserve(document.getElementById('unifiedWebcamsBlock'));\n      }\n    });\n  }, { threshold: 0.1 });\n\nobserverUnified.observe(document.getElementById('unifiedWebcamsBlock'));\n<\/script>\n\n<style>\n    .iframe-wrapper {\n        width: 100%;\n        overflow: hidden;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        padding: 5px 0; \/* Adjust this if you need more space around *\/\n        box-sizing: border-box;\n    }\n\n    .iframe-container {\n        width: 100vw;\n        max-width: 100%;\n        height: 244px; \/* Keep original height *\/\n        min-height: 14vh;\n        overflow: hidden;\n        position: relative;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n    }\n\n    .iframe-container iframe {\n        width: 100%;  \/* Increase width to prevent cropping *\/\n        height: 244px; \/* Increase height to prevent cropping *\/\n        border: none;\n        transform: scale(1.6); \/* Keep zoomed level *\/\n        transform-origin: top center; \/* Keep zoomed from top *\/\n        margin-top: -1px; \/* Move iframe up to hide header *\/\n    }\n<\/style>\n\n<div class=\"iframe-wrapper\">\n    <div class=\"iframe-container\">\n        <iframe src=\"https:\/\/www.netmadeira.com\/webcams\/show\/netmadeira\/portela-porto-da-cruz\"><\/iframe>\n    <\/div>\n<\/div>\n\n\n\n<div style=\"height:39px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Madeira Island Trails Simplifying Madeira island weather, combining 55+ tools on the same page, from flying to hiking, sailing to surfing or even when to watch the rising of the moon Actual conditions source Madeira trails info: Madeira tides info: Air and Sea temperature with webcam image: Funchal (200m) source Pico do Arieiro (1818m) \/ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4496,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"slim_seo":{"title":"Madeira Island weather info","description":"Simplifying Madeira weather, combining 55+ tools on the same page. From flying to hiking, sailing to surfing, even when to watch the rising of the moon.","facebook_image":"https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2025\/08\/Social-image-In-Flight-at-Porto-da-Cruz.jpg","twitter_image":"https:\/\/paragliding-in-madeira.com\/weather\/wp-content\/uploads\/2025\/08\/Social-image-In-Flight-at-Porto-da-Cruz.jpg"},"footnotes":""},"class_list":["post-80","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/paragliding-in-madeira.com\/weather\/wp-json\/wp\/v2\/pages\/80","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/paragliding-in-madeira.com\/weather\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/paragliding-in-madeira.com\/weather\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/paragliding-in-madeira.com\/weather\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/paragliding-in-madeira.com\/weather\/wp-json\/wp\/v2\/comments?post=80"}],"version-history":[{"count":836,"href":"https:\/\/paragliding-in-madeira.com\/weather\/wp-json\/wp\/v2\/pages\/80\/revisions"}],"predecessor-version":[{"id":10696,"href":"https:\/\/paragliding-in-madeira.com\/weather\/wp-json\/wp\/v2\/pages\/80\/revisions\/10696"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/paragliding-in-madeira.com\/weather\/wp-json\/wp\/v2\/media\/4496"}],"wp:attachment":[{"href":"https:\/\/paragliding-in-madeira.com\/weather\/wp-json\/wp\/v2\/media?parent=80"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}