{"id":38744,"date":"2025-12-22T22:15:33","date_gmt":"2025-12-22T22:15:33","guid":{"rendered":"https:\/\/thisismadeiraisland.com\/?page_id=38744"},"modified":"2025-12-27T18:50:04","modified_gmt":"2025-12-27T18:50:04","slug":"madeira-new-years-eve-fireworks-guide","status":"publish","type":"page","link":"https:\/\/thisismadeiraisland.com\/pt\/madeira-new-years-eve-fireworks-guide\/","title":{"rendered":"Madeira NYE Fireworks 2025\/26: Mapa e Guia dos Melhores Locais"},"content":{"rendered":"\n<script>\nconsole.log(\n  \"%cSTOP! %cThis code is the property of This is Madeira Island (https:\/\/thisismadeiraisland.com\/). Theft or unauthorized use will be prosecuted.\", \n  \"color: red; font-size: 20px; font-weight: bold;\", \n  \"color: #333; font-size: 14px;\"\n);\n\n\/\/ ... rest of your code ...\n<\/script>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>New Year&#8217;s Eve Spots &#8211; thisismadeiraisland.com<\/title>\n    <link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@300;400;500;600;700&#038;display=swap\" rel=\"stylesheet\">\n    <script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\n    <style>\n        :root {\n            --primary: #004e92;\n            --secondary: #000428;\n            --accent: #f9d423;\n            --danger: #ff4757;\n            --success: #2ed573;\n            --card-bg: #ffffff;\n            --text-main: #2d3436;\n            --bg-light: #f4f7f6;\n        }\n\n        * { margin: 0; padding: 0; box-sizing: border-box; }\n        html { scroll-behavior: smooth; }\n        \n        body { \n            font-family: 'Poppins', sans-serif; \n            line-height: 1.5; color: var(--text-main); background: var(--bg-light);\n        }\n        \n        \/* --- Hero --- *\/\n        .hero {\n            height: 60vh; min-height: 500px;\n            background: linear-gradient(rgba(0,4,40,0.6), rgba(0,78,146,0.5)), \n            url('\/wp-content\/uploads\/2025\/12\/iStock-2164447122.jpg') center\/cover no-repeat fixed;\n            display: flex; flex-direction: column; justify-content: center; align-items: center; \n            text-align: center; color: white;\n        }\n        .hero h1 { font-size: clamp(2rem, 5vw, 4rem); font-weight: 800; text-shadow: 0 4px 15px rgba(0,0,0,0.5); margin-bottom: 0.5rem; }\n        \n        \/* --- Dashboard --- *\/\n        .dashboard-grid { display: flex; gap: 1.5rem; flex-wrap: wrap; justify-content: center; margin-top: 2rem; }\n        .glass-panel {\n            background: rgba(255, 255, 255, 0.15); backdrop-filter: blur(10px);\n            padding: 0.8rem 1.5rem; border-radius: 16px; border: 1px solid rgba(255,255,255,0.2);\n            color: white; display: flex; align-items: center; gap: 1rem;\n        }\n        .time-val { font-size: 1.5rem; font-weight: 700; color: var(--accent); display: block; line-height: 1; }\n        .time-label { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 1px; opacity: 0.9; }\n        \n        \/* --- Layout --- *\/\n        .container { max-width: 1400px; margin: 0 auto; padding: 3rem 1.5rem; }\n        \n        \/* --- Filters --- *\/\n        .filters-wrapper { position: sticky; top: 15px; z-index: 999; display: flex; justify-content: center; margin-bottom: 2rem; pointer-events: none; }\n        .filters { \n            background: rgba(255,255,255,0.95); backdrop-filter: blur(12px); padding: 8px 20px;\n            border-radius: 50px; box-shadow: 0 10px 30px rgba(0,0,0,0.1); pointer-events: auto;\n            display: flex; gap: 0.5rem; flex-wrap: wrap; border: 1px solid white;\n        }\n        .filter-btn { \n            padding: 0.5rem 1.2rem; border: none; background: transparent; border-radius: 25px; \n            cursor: pointer; font-weight: 600; color: #555; transition: 0.3s; font-size: 0.9rem;\n        }\n        .filter-btn.active { background: var(--primary); color: white; box-shadow: 0 4px 12px rgba(0,78,146,0.3); }\n        .geo-btn { color: var(--primary); border: 2px solid var(--primary); }\n        .geo-btn:hover { background: var(--primary); color: white; }\n\n        \/* --- Map --- *\/\n        #map { height: 500px; border-radius: 24px; margin-bottom: 3rem; border: 6px solid white; box-shadow: var(--shadow); z-index: 1; }\n\n        \/* --- Cards --- *\/\n        .locations { display: grid; grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); gap: 2rem; }\n        \n        .location-card { \n            background: var(--card-bg); border-radius: 20px; overflow: hidden; \n            box-shadow: 0 5px 20px rgba(0,0,0,0.05); transition: 0.3s;\n            border: 1px solid rgba(0,0,0,0.03); display: flex; flex-direction: column;\n        }\n        .location-card:hover { transform: translateY(-8px); box-shadow: 0 15px 40px rgba(0,0,0,0.1); }\n        .location-card.highlight { border: 2px solid var(--accent); transform: scale(1.02); z-index: 5; }\n\n        .location-img { height: 200px; position: relative; }\n        .location-img img { width: 100%; height: 100%; object-fit: cover; }\n        \n        .badges-top { position: absolute; top: 12px; left: 12px; display: flex; gap: 6px; }\n        .tag { background: rgba(0,0,0,0.75); color: white; padding: 4px 10px; border-radius: 8px; font-size: 0.7rem; font-weight: 700; backdrop-filter: blur(4px); }\n        \n        .fav-btn {\n            position: absolute; top: 12px; right: 12px; width: 36px; height: 36px;\n            background: white; border-radius: 50%; border: none; cursor: pointer;\n            display: flex; align-items: center; justify-content: center; font-size: 1.2rem;\n            box-shadow: 0 4px 10px rgba(0,0,0,0.2); transition: 0.2s;\n        }\n        .fav-btn.is-favorite { color: var(--danger); }\n\n        .location-content { padding: 1.5rem; flex-grow: 1; display: flex; flex-direction: column; }\n        .location-title { font-size: 1.3rem; font-weight: 800; color: var(--secondary); margin-bottom: 0.8rem; }\n\n        \/* Info Sections *\/\n        .info-row { display: flex; gap: 15px; margin-bottom: 12px; font-size: 0.85rem; color: #555; }\n        .info-item { display: flex; align-items: center; gap: 6px; font-weight: 500; }\n        \n        \/* Highlighted Arrival Time *\/\n        .arrive-badge { \n            color: var(--primary); \n            background: rgba(0, 78, 146, 0.1); \n            padding: 2px 8px; border-radius: 6px; \n            font-weight: 700;\n        }\n\n        .amenities-row { display: flex; gap: 8px; margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px solid #eee; }\n        .amenity { \n            font-size: 1.1rem; \n            width: 32px; height: 32px; \n            display: flex; align-items: center; justify-content: center;\n            background: #f0f2f5; border-radius: 50%;\n            opacity: 0.9;\n        }\n        .amenity.missing { opacity: 0.3; background: transparent; }\n\n        .tip-box { \n            background: #fff8e1; border-left: 4px solid var(--accent); \n            padding: 10px 15px; border-radius: 0 8px 8px 0;\n            font-size: 0.85rem; color: #664d03; margin-bottom: 1rem;\n            font-style: italic;\n        }\n\n        .desc-text { font-size: 0.9rem; color: #666; margin-bottom: 0.8rem; line-height: 1.6; }\n        .features { list-style: none; margin-bottom: 1rem; padding: 0; }\n        .features li { padding: 0.2rem 0; font-size: 0.85rem; color: #555; display: flex; align-items: center; gap: 8px; }\n        .features li::before { content: '\u2022'; color: var(--accent); font-weight: bold; font-size: 1.2rem; line-height: 0.5; }\n\n        .btn-group { display: flex; gap: 10px; margin-top: auto; }\n        .btn { \n            flex: 1; padding: 0.8rem; border-radius: 12px; border: none;\n            font-size: 0.9rem; font-weight: 600; cursor: pointer; text-align: center; text-decoration: none;\n        }\n        .btn-primary { background: var(--primary); color: white; }\n        .btn-outline { border: 1px solid #ddd; background: white; color: #555; }\n        .btn:hover { opacity: 0.9; transform: translateY(-1px); }\n\n        @media (max-width: 768px) { .hero h1 { font-size: 2.2rem; } .filters { padding: 10px; overflow-x: auto; max-width: 100%; } }\n    <\/style>\n<\/head>\n<body>\n\n    <div class=\"hero\">\n        <h1>\ud83c\udf86 Madeira New Year&#8217;s Eve Fireworks Spots<\/h1>\n        <p>The Ultimate 2025\/26 Fireworks Guide<\/p>\n        \n        <div class=\"dashboard-grid\">\n            <div class=\"glass-panel\" id=\"weather-widget\">\n                <div style=\"font-size: 2rem;\">\ud83c\udf24\ufe0f<\/div>\n                <div>\n                    <div style=\"font-size: 0.7rem; opacity: 0.9;\">FUNCHAL LIVE<\/div>\n                    <div style=\"font-size: 1.2rem; font-weight: 700; color: var(--accent);\" id=\"weather-temp\">&#8211;\u00b0C<\/div>\n                <\/div>\n            <\/div>\n            <div class=\"glass-panel\" id=\"countdown\">\n                <div class=\"time-unit\"><span class=\"time-val\" id=\"d\">00<\/span><span class=\"time-label\">Days<\/span><\/div>\n                <div class=\"time-unit\"><span class=\"time-val\" id=\"h\">00<\/span><span class=\"time-label\">Hrs<\/span><\/div>\n                <div class=\"time-unit\"><span class=\"time-val\" id=\"m\">00<\/span><span class=\"time-label\">Min<\/span><\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"container\">\n        <div class=\"intro\">\n            <h2>Find Your Perfect Spot<\/h2>\n            <p>Explore the best 27 locations. Check parking difficulty, amenities, and arrival times before you go.<\/p>\n        <\/div>\n\n        <div class=\"filters-wrapper\">\n            <div class=\"filters\">\n                <button class=\"filter-btn geo-btn\" id=\"geo-btn\">\ud83d\udccd Near Me<\/button>\n                <div style=\"width:1px; background:#ddd; margin:0 5px;\"><\/div>\n                <button class=\"filter-btn active\" data-filter=\"all\">All<\/button>\n                <button class=\"filter-btn\" data-filter=\"boat\">\ud83d\udee5\ufe0f Boat<\/button>\n                <button class=\"filter-btn\" data-filter=\"land\">\ud83c\udfd4\ufe0f Land<\/button>\n                <button class=\"filter-btn\" data-filter=\"family\">\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 Family<\/button>\n                <button class=\"filter-btn\" data-filter=\"photo\">\ud83d\udcf8 Photo<\/button>\n                <div style=\"width:1px; background:#ddd; margin:0 5px;\"><\/div>\n                <button class=\"filter-btn\" data-filter=\"favorites\" style=\"color:var(--danger)\">\u2764\ufe0f Saved<\/button>\n            <\/div>\n        <\/div>\n\n        <div id=\"map\"><\/div>\n        <div class=\"locations\" id=\"locations\"><\/div>\n    <\/div>\n\n    <script>\n        \/* Config:\n           Amenities: [WC, Food, Drink, Music, Seat]\n           Parking: 1=Easy, 2=Medium, 3=Hard, 4=Impossible\n        *\/\n        let locations = [\n            {\n                id: 3, name: \"Avenida do Mar\", lat: 32.6489, lng: -16.9114,\n                type: ['land'], crowd: 'High', parking: 4, access: 'Flat', \n                amenities: ['wc', 'food', 'drink', 'music'],\n                features: ['Main seafront avenue', 'Directly under fireworks', 'Bars & food stalls'],\n                tip: \"Roads close at 19:00. Arrive early on foot.\",\n                imgUrl: \"https:\/\/www.jet2holidays.com\/-\/media\/destinations\/poi\/maderia\/funchal\/fnc0042_avenido_do_mar_0916_01.jpg\",\n                bookUrl: '#', bookText: 'Walk Here', desc: 'Lively downtown strip directly facing the bay.',\n                bestTime: '20:30' \/\/ Updated for realism\n            },\n            {\n                id: 11, name: \"Barreirinha Complex\", lat: 32.6469, lng: -16.8973,\n                type: ['land','family'], crowd: 'Med', parking: 3, access: 'Stairs',\n                amenities: ['wc', 'drink', 'seat'],\n                features: ['Sea-pool complex', 'Open sea views', 'Near Old Town bars'],\n                tip: \"Great bar atmosphere; tickets sometimes required.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/qcmp1s5y\/funchal_barreirinha-ricardo-faria-paulino.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Oceanfront pools and terraces east of old town.',\n                bestTime: '22:00'\n            },\n            {\n                id: 17, name: \"Cabo Gir\u00e3o Skywalk\", lat: 32.6558, lng: -17.0074,\n                type: ['land','photo'], crowd: 'Low', parking: 1, access: 'Flat',\n                amenities: ['wc', 'food'],\n                features: ['580m glass platform', 'Panoramic coast view', 'Away from smoke'],\n                tip: \"It is windy and cold here\u2014bring a jacket!\",\n                imgUrl: \"https:\/\/www.madeira-web.com\/images\/madeira-web\/32-camara-de-lobos\/3211-cabo-girao-t.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Europe\\'s highest sea cliff. Distant but spectacular view.',\n                bestTime: '22:00'\n            },\n            {\n                id: 10, name: \"Cristo Rei (Garajau)\", lat: 32.6385, lng: -16.8507,\n                type: ['land','photo'], crowd: 'Low', parking: 2, access: 'Downhill',\n                amenities: [],\n                features: ['Huge statue viewpoint', 'See whole bay curve', 'Very peaceful'],\n                tip: \"Bring a flashlight for the path down to the statue.\",\n                imgUrl: \"https:\/\/tukway.com\/wp-content\/uploads\/2023\/09\/shutterstock_2341365207.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Iconic statue on a headland with ocean on all sides.',\n                bestTime: '22:30'\n            },\n            {\n                id: 22, name: \"Forte de S\u00e3o Tiago\", lat: 32.6477, lng: -16.8995,\n                type: ['land','photo'], crowd: 'Med', parking: 4, access: 'Cobbles',\n                amenities: ['food', 'drink'],\n                features: ['Historic yellow fortress', 'Old Town atmosphere', 'Great photo backdrop'],\n                tip: \"Perfect backdrop for photos with the yellow fortress.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/rapds2us\/forte-de-sao-tiago0008-francisco-correia.jpg\",\n                bookUrl: '#', bookText: 'Walk Here', desc: 'Historic 17th-century fortress in the Old Town.',\n                bestTime: '21:30'\n            },\n            {\n                id: 9, name: \"Fortaleza do Pico\", lat: 32.6513, lng: -16.9119,\n                type: ['land','photo'], crowd: 'Med', parking: 2, access: 'Steep',\n                amenities: ['wc'],\n                features: ['Old fortress setting', '360 views of city', 'Steep walk up'],\n                tip: \"Steep walk up, wear comfortable shoes.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/dptn0nbt\/fortaleza_do_pico_2-filipe-matos.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Stone fortress offering a 360-degree view over the city.',\n                bestTime: '21:45'\n            },\n            {\n                id: 1, name: \"Funchal Bay Boat Cruise\", lat: 32.6458, lng: -16.9093,\n                type: ['boat'], crowd: 'High', parking: 4, access: 'Steps',\n                amenities: ['wc', 'drink', 'food', 'seat'],\n                features: ['Unobstructed 360\u00b0 views', 'Sparkling wine included', 'No pushing'],\n                tip: \"Must book months in advance. Arrive 21:30.\",\n                imgUrl: \"https:\/\/dynamic-media-cdn.tripadvisor.com\/media\/photo-o\/1d\/d2\/d7\/84\/marina.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/tours\/', bookText: 'Book Boat', desc: 'Unobstructed 360\u00b0 views from the water. Premium experience.',\n                bestTime: '22:30'\n            },\n            {\n                id: 18, name: \"Lido Promenade\", lat: 32.6378, lng: -16.9366,\n                type: ['land', 'family'], crowd: 'Med', parking: 2, access: 'Flat',\n                amenities: ['drink', 'food', 'wc'],\n                features: ['Great for Lido guests', 'Side view of fireworks', 'Avoids city traffic'],\n                tip: \"Perfect if you are staying in a Lido hotel.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/4bghgx4c\/jardins-do-lido0007-francisco-correia.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Coastal promenade connecting the hotel zone to the sea.',\n                bestTime: 'Anytime'\n            },\n            {\n                id: 2, name: \"Marina do Funchal\", lat: 32.6488, lng: -16.9076,\n                type: ['land'], crowd: 'High', parking: 4, access: 'Flat',\n                amenities: ['wc', 'drink', 'food'],\n                features: ['Heart of the action', 'Reflections on water', 'Restaurants nearby'],\n                tip: \"Very crowded but closest to the cruise ships.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/gvjnoiu3\/dji_0163.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Up-close view of the harbour action and reflections.',\n                bestTime: '21:00'\n            },\n            {\n                id: 24, name: \"Miradouro do Curral dos Romeiros\", lat: 32.6719, lng: -16.9017,\n                type: ['land','photo'], crowd: 'Low', parking: 1, access: 'Flat',\n                amenities: [],\n                features: ['Hidden gem', 'Unobstructed valley view', 'Very quiet'],\n                tip: \"No facilities nearby, bring your own drinks.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/egtae5z4\/funchal_miradourodocurraldosromeiros2-francisco-correia.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Hidden gem near Monte with unobstructed valley views.',\n                bestTime: '22:00'\n            },\n            {\n                id: 14, name: \"Miradouro das Cruzes\", lat: 32.6512, lng: -16.9128,\n                type: ['land','family'], crowd: 'Med', parking: 3, access: 'Steps',\n                amenities: ['wc', 'seat'],\n                features: ['Benches and greenery', 'Easier with kids', 'Close to center'],\n                tip: \"Arrive early to grab a bench in the garden.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/loblkzrt\/miradouro-das-cruzes0001-francisco-correia.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Leafy garden viewpoint just uphill from historic core.',\n                bestTime: '21:30'\n            },\n            {\n                id: 6, name: \"Miradouro das Neves\", lat: 32.6574, lng: -16.8947,\n                type: ['land','photo'], crowd: 'Low', parking: 1, access: 'Flat',\n                amenities: [],\n                features: ['Sweeping bay angle', 'Great for photographers', 'Eastern perspective'],\n                tip: \"Park your car facing the exit for a quick getaway.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/0vbdp12d\/funchal_miradourodasneves4.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Eastern viewpoint offering a complete side profile of the bay.',\n                bestTime: '22:00'\n            },\n            {\n                id: 27, name: \"Miradouro de Santa Luzia\", lat: 32.6580, lng: -16.9150,\n                type: ['land','photo'], crowd: 'Low', parking: 2, access: 'Flat',\n                amenities: ['wc'],\n                features: ['Charming suburb view', 'Close to city center', 'Local feel'],\n                tip: \"A quiet, local spot often overlooked by tourists.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/hkqj0qkn\/miradouro-de-santa-luzia0008-francisco-correia.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Charming neighborhood viewpoint close to the center.',\n                bestTime: '22:00'\n            },\n            {\n                id: 13, name: \"Miradouro da Vila Guida\", lat: 32.6498, lng: -16.9581,\n                type: ['land','photo'], crowd: 'Low', parking: 2, access: 'Stairs',\n                amenities: [],\n                features: ['Discreet terrace', 'Surprising wide views', 'Locals spot'],\n                tip: \"Small terrace, fills up very fast with locals.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/zmsb2ttr\/funchal_vilaguida_miradouro1-1-francisco-correia.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Discreet terrace with surprisingly wide views.',\n                bestTime: '22:00'\n            },\n            {\n                id: 8, name: \"Miradouro da Nazar\u00e9\", lat: 32.6489, lng: -16.9482,\n                type: ['land','photo','family'], crowd: 'Low', parking: 2, access: 'Flat',\n                amenities: [],\n                features: ['Clear angle to bay', 'Residential area', 'Good for Lido guests'],\n                tip: \"Great if you are staying in the S\u00e3o Martinho area.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/tbddkxf0\/miradouro-do-avista-navios0003-francisco-correia.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Local miradouro looking back over Funchal.',\n                bestTime: '22:30'\n            },\n            {\n                id: 19, name: \"Miradouro de Palheiro Ferreiro\", lat: 32.6631, lng: -16.8767,\n                type: ['land', 'photo'], crowd: 'Low', parking: 1, access: 'Flat',\n                amenities: [],\n                features: ['Extremely high view', 'Above the clouds view', 'Very quiet'],\n                tip: \"Can be foggy\/cloudy. Check webcams before driving up.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/s2qmtgml\/srtt_palheiro_golf_05_mencionar-sempre-tiago-sousa_desenquadrado-6-_web.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'High altitude view looking down on the entire bowl.',\n                bestTime: '21:30'\n            },\n            {\n                id: 12, name: \"Miradouro de S\u00e3o Roque\", lat: 32.6679, lng: -16.9271,\n                type: ['land'], crowd: 'Low', parking: 2, access: 'Flat',\n                amenities: ['food'],\n                features: ['Avoid tour buses', 'Atlantic & City views', 'Quiet residential'],\n                tip: \"Avoid the tour buses; go to the smaller terrace nearby.\",\n                imgUrl: \"https:\/\/visit.funchal.pt\/wp-content\/uploads\/2016\/04\/2021-10-29-Miradouro-de-S.-Roque-7-1030x686.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Overlooks Funchal from a quieter, residential hill.',\n                bestTime: '22:00'\n            },\n            {\n                id: 23, name: \"Miradouro do Pico Alto\", lat: 32.6844, lng: -16.9078,\n                type: ['land','photo'], crowd: 'Low', parking: 1, access: 'Flat',\n                amenities: [],\n                features: ['1,129m Altitude', 'Above the clouds potential', 'Panoramic nature'],\n                tip: \"1,129m high! It will be cold. Check for clouds.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/rpnbchcc\/miradouro-do-pico-alto0010-francisco-correia.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent 4x4', desc: 'Extreme altitude viewpoint. Watch the fireworks from the sky.',\n                bestTime: '21:30'\n            },\n            {\n                id: 7, name: \"Miradouro do Pin\u00e1culo\", lat: 32.6453, lng: -16.8704,\n                type: ['land','photo'], crowd: 'Low', parking: 3, access: 'Flat',\n                amenities: [],\n                features: ['Balcony terrace', 'Eastern edge of bay', 'Car essential'],\n                tip: \"Parking is on the main road and very dangerous. Be careful.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/14tllzm1\/miradouro-do-pin%C3%A1culo1-francisco-corrria.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'The classic \"entry to Funchal\" view from the east.',\n                bestTime: '22:00'\n            },\n            {\n                id: 25, name: \"Miradouro dos Marmeleiros\", lat: 32.6650, lng: -16.9120,\n                type: ['land','photo'], crowd: 'Low', parking: 2, access: 'Steep',\n                amenities: ['wc'],\n                features: ['Quiet spot', 'Near hospital\/church', 'Dramatic steep view'],\n                tip: \"Located near the hospital; quick access to main roads.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/bqdfhtwy\/miradouro-dos-marmeleiros2-francisco-correoa.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Steep, dramatic view over the city rooftops.',\n                bestTime: '21:30'\n            },\n            {\n                id: 15, name: \"Monte\", lat: 32.6667, lng: -16.9029,\n                type: ['land','photo'], crowd: 'Med', parking: 2, access: 'Hilly',\n                amenities: ['food', 'drink', 'wc'],\n                features: ['High viewpoint', 'Look down on fireworks', 'Gardens nearby'],\n                tip: \"Watch from the church steps for the best angle.\",\n                imgUrl: \"https:\/\/www.madeira-a-z.com\/uploads\/pics\/Funchal_Seilbahn3_08.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Drive\/Cable Car', desc: 'The famous village above Funchal.',\n                bestTime: '21:00'\n            },\n            {\n                id: 26, name: \"Miradouro Largo Padre Pita Ferreira\", lat: 32.6520, lng: -16.8770,\n                type: ['land','family'], crowd: 'Med', parking: 1, access: 'Flat',\n                amenities: [],\n                features: ['Open square', 'Family friendly', 'Room to move'],\n                tip: \"Very spacious, great for kids to run around.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/o4ik0tuz\/funchal_saogoncalo_vistamar-2.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'A spacious paved square in S\u00e3o Gon\u00e7alo.',\n                bestTime: '22:00'\n            },\n            {\n                id: 20, name: \"Parque de Santa Catarina\", lat: 32.6465, lng: -16.9152,\n                type: ['land', 'family'], crowd: 'Med', parking: 4, access: 'Slopes',\n                amenities: ['wc', 'food', 'seat'],\n                features: ['Sloping lawns', 'Playground for kids', 'Elevated harbor view'],\n                tip: \"Bring a blanket and sit on the grass.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/fwvo0sfp\/parque-sta-catarina052-francisco-correia.jpg\",\n                bookUrl: '#', bookText: 'Walk Here', desc: 'Huge city park with a lake and harbor views.',\n                bestTime: '20:30'\n            },\n            {\n                id: 5, name: \"Pico dos Barcelos\", lat: 32.6587, lng: -16.9395,\n                type: ['land','photo'], crowd: 'High', parking: 3, access: 'Flat',\n                amenities: ['wc', 'drink', 'food'],\n                features: ['Elevated 360 view', 'Parking available', 'Tripod friendly'],\n                tip: \"Arrive by 21:00 to get a spot at the railing.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/00teekuv\/miradouro-do-pico-dos-barcelos0012-francisco-correia.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Renovated viewpoint with a massive 360-degree view.',\n                bestTime: '21:00'\n            },\n            {\n                id: 21, name: \"Pra\u00e7a do Povo\", lat: 32.6475, lng: -16.9025,\n                type: ['land', 'family'], crowd: 'High', parking: 4, access: 'Flat',\n                amenities: ['food', 'drink', 'wc'],\n                features: ['Right on water line', 'Food trucks', 'Closest to ships'],\n                tip: \"Lots of Christmas market stalls here for food.\",\n                imgUrl: \"https:\/\/www.madeira-web.com\/images\/madeira-web\/3-places\/3114-new-promenade-b1.jpg\",\n                bookUrl: '#', bookText: 'Walk Here', desc: 'Modern leisure area on the seafront.',\n                bestTime: '20:30'\n            },\n            {\n                id: 4, name: \"Praia Formosa\", lat: 32.6428, lng: -16.9532,\n                type: ['land','family'], crowd: 'Med', parking: 2, access: 'Flat',\n                amenities: ['drink', 'wc'],\n                features: ['Breathing room', 'Ocean sounds', 'Promenade walk'],\n                tip: \"Park near the tunnel entrance for easier exit.\",\n                imgUrl: \"https:\/\/visitmadeira.com\/media\/1mei0sbc\/dsc_4432.jpg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Relaxed beach party vibe west of the city.',\n                bestTime: '22:30'\n            },\n            {\n                id: 16, name: \"Terreiro da Luta\", lat: 32.6780, lng: -16.9006,\n                type: ['land','photo','family'], crowd: 'Low', parking: 1, access: 'Flat',\n                amenities: [],\n                features: ['Big open space', 'Higher altitude', 'Near Monte'],\n                tip: \"It gets very cold here; bring blankets.\",\n                imgUrl: \"https:\/\/cdn.prod.website-files.com\/66837e509c4763691171a11f\/686e137baebe2ec8ea6353d6_Miradouro%20Largo%20Padre%20Pita%20Ferreira%20-%20Madeira%20Island%20Map%20and%20Pass%20-%202.jpeg\",\n                bookUrl: 'https:\/\/www.thisismadeiraisland.com\/rental-car\/', bookText: 'Rent Car', desc: 'Massive open plateau with a holy monument.',\n                bestTime: '21:30'\n            }\n        ];\n\n        let map, userMarker;\n        let markers = {};\n        let favorites = JSON.parse(localStorage.getItem('nye_favs')) || [];\n\n        document.addEventListener('DOMContentLoaded', function() {\n            locations.sort((a, b) => a.name.localeCompare(b.name));\n            initMap();\n            initCountdown();\n            fetchWeather();\n            renderLocations();\n            initFilters();\n            initGeolocation();\n        });\n\n        function initMap() {\n            map = L.map('map', { scrollWheelZoom: false }).setView([32.65, -16.92], 13);\n            L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', { attribution: '&copy; OpenStreetMap' }).addTo(map);\n            updateMapMarkers('all');\n        }\n\n        async function fetchWeather() {\n            try {\n                const r = await fetch('https:\/\/api.open-meteo.com\/v1\/forecast?latitude=32.65&longitude=-16.90&current=temperature_2m,wind_speed_10m');\n                const d = await r.json();\n                document.getElementById('weather-temp').innerText = Math.round(d.current.temperature_2m) + '\u00b0C';\n            } catch(e) {}\n        }\n\n        function initGeolocation() {\n            document.getElementById('geo-btn').addEventListener('click', function() {\n                const btn = this;\n                if(!navigator.geolocation) return alert('Geo not supported');\n                btn.innerText = '...';\n                navigator.geolocation.getCurrentPosition(p => {\n                    const {latitude: lat, longitude: lng} = p.coords;\n                    if(userMarker) map.removeLayer(userMarker);\n                    userMarker = L.circleMarker([lat, lng], { radius:8, fillColor:'#f9d423', color:'#000', fillOpacity:1 }).addTo(map).bindPopup('You').openPopup();\n                    map.flyTo([lat, lng], 14);\n                    btn.innerText = '\ud83d\udccd Found You';\n                });\n            });\n        }\n\n        function updateMapMarkers(filter) {\n            Object.values(markers).forEach(m => map.removeLayer(m));\n            markers = {};\n            const filtered = filterLocations(filter);\n            filtered.forEach(loc => {\n                const color = loc.type.includes('boat') ? '#00a8ff' : '#ff4757';\n                const m = L.circleMarker([loc.lat, loc.lng], { radius: 8, fillColor: color, color: '#fff', weight: 2, fillOpacity: 0.9 }).addTo(map);\n                m.bindPopup(`<b>${loc.name}<\/b><br>${loc.desc}`);\n                m.on('click', () => {\n                    const card = document.getElementById('loc-'+loc.id);\n                    if(card) {\n                        card.scrollIntoView({behavior: 'smooth', block: 'center'});\n                        document.querySelectorAll('.location-card').forEach(c => c.classList.remove('highlight'));\n                        card.classList.add('highlight');\n                        setTimeout(() => card.classList.remove('highlight'), 2000);\n                    }\n                });\n                markers[loc.id] = m;\n            });\n        }\n\n        function filterLocations(f) {\n            if(f === 'favorites') return locations.filter(l => favorites.includes(l.id));\n            if(f === 'boat') return locations.filter(l => l.type.includes('boat')); \n            return locations.filter(l => f === 'all' || l.type.includes(f));\n        }\n\n        window.toggleFavorite = function(id) {\n            const idx = favorites.indexOf(id);\n            if(idx === -1) favorites.push(id); else favorites.splice(idx, 1);\n            localStorage.setItem('nye_favs', JSON.stringify(favorites));\n            renderLocations(document.querySelector('.filter-btn.active').dataset.filter);\n        };\n\n        function renderLocations(filter = 'all') {\n            const container = document.getElementById('locations');\n            const filtered = filterLocations(filter);\n            if(!filtered.length) { container.innerHTML = '<p style=\"grid-column:1\/-1;text-align:center\">No spots found.<\/p>'; return; }\n            \n            container.innerHTML = filtered.map(loc => {\n                const isFav = favorites.includes(loc.id) ? 'is-favorite' : '';\n                const heart = favorites.includes(loc.id) ? '\u2764\ufe0f' : '\ud83e\udd0d';\n                \n                \/\/ Parking badge logic\n                let parkColor = loc.parking === 1 ? '#2ed573' : (loc.parking === 2 ? '#ffa502' : '#ff4757');\n                let parkText = loc.parking === 1 ? '\ud83c\udd7f\ufe0f Easy' : (loc.parking === 2 ? '\ud83c\udd7f\ufe0f Medium' : (loc.parking === 3 ? '\ud83c\udd7f\ufe0f Hard' : '\ud83d\udeab No Parking'));\n                \n                \/\/ Amenities HTML (FIXED UNIFORMITY)\n                const icons = { wc: '\ud83d\udebb', food: '\ud83c\udf54', drink: '\ud83c\udf7a', music: '\ud83c\udfb5', seat: '\ud83e\ude91' };\n                let amHtml = loc.amenities.length ? loc.amenities.map(a => `<span class=\"amenity\" title=\"${a}\">${icons[a]||''}<\/span>`).join('') : '<span style=\"font-size:0.8rem;color:#999\">No facilities<\/span>';\n\n                return `\n                <div class=\"location-card\" id=\"loc-${loc.id}\">\n                    <div class=\"location-img\">\n                        <img decoding=\"async\" src=\"${loc.imgUrl}\" loading=\"lazy\" alt=\"${loc.name}\">\n                        <div class=\"badges-top\">\n                            <span class=\"tag\">${loc.crowd} Crowd<\/span>\n                            <span class=\"tag\" style=\"background:${parkColor}\">${parkText}<\/span>\n                        <\/div>\n                        <button class=\"fav-btn ${isFav}\" onclick=\"toggleFavorite(${loc.id})\">${heart}<\/button>\n                    <\/div>\n                    <div class=\"location-content\">\n                        <h3 class=\"location-title\">${loc.name}<\/h3>\n                        <div class=\"info-row\">\n                            <div class=\"info-item\">\u267f ${loc.access}<\/div>\n                            <div class=\"info-item arrive-badge\">\ud83c\udfc1 Arrive By: ${loc.bestTime}<\/div>\n                        <\/div>\n                        <div class=\"amenities-row\">${amHtml}<\/div>\n                        <p class=\"desc-text\">${loc.desc}<\/p>\n                        <ul class=\"features\">\n                            ${loc.features.map(f => `<li>${f}<\/li>`).join('')}\n                        <\/ul>\n                        <div class=\"tip-box\">\ud83d\udca1 <strong>Pro Tip:<\/strong> ${loc.tip}<\/div>\n                        <div class=\"btn-group\">\n                            <a href=\"${loc.bookUrl}\" target=\"_blank\" class=\"btn btn-primary\">${loc.bookText}<\/a>\n                            <button onclick=\"flyToLoc(${loc.lat}, ${loc.lng}, ${loc.id})\" class=\"btn btn-outline\">Show on Map<\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>`;\n            }).join('');\n        }\n\n        window.flyToLoc = function(lat, lng, id) {\n            document.getElementById('map').scrollIntoView({behavior: 'smooth'});\n            map.flyTo([lat, lng], 15);\n            setTimeout(() => { if(markers[id]) markers[id].openPopup(); }, 1000);\n        };\n\n        function initCountdown() {\n            function u() {\n                const now = new Date();\n                const nye = new Date((now.getMonth()==11 && now.getDate()>30) ? (now.getFullYear()+1)+'-01-01' : now.getFullYear()+'-12-31T23:59:59'); \n                const d = Math.max(0, nye - now);\n                document.getElementById('d').innerText = Math.floor(d\/(1000*60*60*24));\n                document.getElementById('h').innerText = Math.floor((d\/(1000*60*60))%24);\n                document.getElementById('m').innerText = Math.floor((d\/1000\/60)%60);\n            }\n            setInterval(u, 1000); u();\n        }\n\n        function initFilters() {\n            document.querySelectorAll('.filter-btn:not(.geo-btn)').forEach(b => {\n                b.addEventListener('click', () => {\n                    document.querySelector('.filter-btn.active').classList.remove('active');\n                    b.classList.add('active');\n                    renderLocations(b.dataset.filter);\n                    updateMapMarkers(b.dataset.filter);\n                });\n            });\n        }\n    <\/script>\n<\/body>\n<\/html>\n\n\n\n<div style=\"\n    text-align: center; \n    font-size: 11px; \n    color: #94a3b8; \n    padding: 20px; \n    border-top: 1px solid #e2e8f0; \n    margin-top: 20px;\n    opacity: 0.8;\">\n    \n    Madeira New Year\u2019s Eve Fireworks Spots\n\u00a9 2026 <a href=\"https:\/\/thisismadeiraisland.com\/\" style=\"color: inherit; text-decoration: none; font-weight: 600;\">This is Madeira Island<\/a>. \n    <br>Unauthorized copying of this tool&#8217;s code or logic is prohibited.\n<\/div>\n","protected":false},"excerpt":{"rendered":"Locais para a Passagem de Ano \u2013 thisismadeiraisland.com \ud83c\udf86 Locais para ver os fogos de artif\u00edcio de Ano Novo na Madeira O Guia Definitivo dos Fogos de Artif\u00edcio 2025\/26 \ud83c\udf24\ufe0f FUNCHAL AO VIVO \u2013\u00b0C 00Dias 00Horas 00Minutos Encontre o seu local perfeito Explore os 27 melhores locais. Verifique a dificuldade de estacionamento, as comodidades e os hor\u00e1rios de chegada antes de partir. \ud83d\udccd Perto de mim Todos \ud83d\udee5\ufe0f Barco \ud83c\udfd4\ufe0f Terra \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 Fam\u00edlia \ud83d\udcf8 Foto \u2764\ufe0f Guardado Locais para ver os fogos de artif\u00edcio de Ano Novo na Madeira \u00a9 2026 This is Madeira Island\u2026.","protected":false},"author":63,"featured_media":38748,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-38744","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/thisismadeiraisland.com\/pt\/wp-json\/wp\/v2\/pages\/38744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thisismadeiraisland.com\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/thisismadeiraisland.com\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/thisismadeiraisland.com\/pt\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/thisismadeiraisland.com\/pt\/wp-json\/wp\/v2\/comments?post=38744"}],"version-history":[{"count":0,"href":"https:\/\/thisismadeiraisland.com\/pt\/wp-json\/wp\/v2\/pages\/38744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thisismadeiraisland.com\/pt\/wp-json\/wp\/v2\/media\/38748"}],"wp:attachment":[{"href":"https:\/\/thisismadeiraisland.com\/pt\/wp-json\/wp\/v2\/media?parent=38744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}