{"id":251,"date":"2026-01-30T15:06:10","date_gmt":"2026-01-30T15:06:10","guid":{"rendered":"https:\/\/springchallenge-ascona-locarno.com\/spring-challenge-2026\/"},"modified":"2026-03-12T08:41:20","modified_gmt":"2026-03-12T08:41:20","slug":"spring-challenge-2026","status":"publish","type":"page","link":"https:\/\/springchallenge-ascona-locarno.com\/en\/","title":{"rendered":"Springchallenge 2026"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"251\" class=\"elementor elementor-251 elementor-102\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bdd4242 e-con-full e-flex e-con e-parent\" data-id=\"bdd4242\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1218b59 elementor-widget elementor-widget-template\" data-id=\"1218b59\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-template\">\n\t\t\t\t\t<div data-elementor-type=\"section\" data-elementor-id=\"809\" class=\"elementor elementor-809 elementor-146\" data-elementor-post-type=\"elementor_library\">\n\t\t\t<div class=\"elementor-element elementor-element-1388703 e-con-full e-flex e-con e-parent\" data-id=\"1388703\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d93b7d9 elementor-widget elementor-widget-html\" data-id=\"d93b7d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<audio id=\"bg-music\" loop=\"\" preload=\"none\">\r\n    <source src=\"https:\/\/springchallenge-ascona-locarno.com\/wp-content\/uploads\/2026\/03\/Solis-Quirky-Quest.webm\" type=\"audio\/webm\">\r\n<\/source><\/audio>\r\n\r\n<div id=\"discovery-overlay\" class=\"hidden\">\r\n    <div class=\"discovery-content\">\r\n        <img decoding=\"async\" id=\"found-object-img\" src=\"\" alt=\"Found Item\">\r\n    <\/div>\r\n<\/div>\r\n<div id=\"mappa-osd\" style=\"width: 100%; height: 100vh; background-color: transparent;\"><\/div>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/openseadragon\/4.1.0\/openseadragon.min.js\"><\/script>\r\n\r\n<script type=\"text\/javascript\">\r\n    document.addEventListener(\"DOMContentLoaded\", () => {\r\n\r\n        \/\/ ==========================================\r\n        \/\/ 1. GESTIONE AUDIO GLOBALE (Integrata nel tuo script)\r\n        \/\/ ==========================================\r\n        if (typeof window.audioScriptInitialized === 'undefined') {\r\n            window.audioScriptInitialized = true;\r\n            \r\n            \/\/ Audio muto di default all'avvio\r\n            window.isAudioMuted = true; \r\n            const bgMusic = document.getElementById('bg-music');\r\n\r\n            window.setAudioState = function(mute) {\r\n                window.isAudioMuted = mute;\r\n\r\n                \/\/ Gestione Musica Nativa\r\n                if (bgMusic) {\r\n                    bgMusic.muted = mute;\r\n                    if (!mute) {\r\n                        bgMusic.play().catch(e => console.log(\"Autoplay bloccato:\", e));\r\n                    } else {\r\n                        bgMusic.pause();\r\n                    }\r\n                }\r\n\r\n                \/\/ Gestione di altri audio\/video presenti nella pagina (es. Elementor)\r\n                document.querySelectorAll(\"video, audio:not(#bg-music)\").forEach(elem => {\r\n                    elem.muted = mute;\r\n                });\r\n\r\n                \/\/ Gestione Classi Icone (Invertita, come da tua richiesta)\r\n                document.querySelectorAll('.iconMute:not(.no-icon-change), .iconUnMute:not(.no-icon-change)').forEach(btn => {\r\n                    btn.classList.toggle('iconUnMute', window.isAudioMuted);\r\n                    btn.classList.toggle('iconMute', !window.isAudioMuted);\r\n                });\r\n\r\n                console.log(`Stato Audio: ${mute ? 'Muto' : 'Attivo'}`);\r\n            };\r\n\r\n            \/\/ Event Delegation per catturare i click ovunque\r\n            document.body.addEventListener('click', function(e) {\r\n                const btn = e.target.closest('.iconMute, .iconUnMute');\r\n                if (btn) {\r\n                    \/\/ Inverte semplicemente lo stato attuale dell'audio\r\n                    window.setAudioState(!window.isAudioMuted);\r\n                }\r\n            });\r\n\r\n            \/\/ Sincronizza l'aspetto visivo quando un popup viene aperto\r\n            if (typeof jQuery !== 'undefined') {\r\n                jQuery(document).on('elementor\/popup\/show', function() {\r\n                    setTimeout(() => { \r\n                        document.querySelectorAll('.iconMute:not(.no-icon-change), .iconUnMute:not(.no-icon-change)').forEach(btn => {\r\n                            btn.classList.toggle('iconUnMute', window.isAudioMuted);\r\n                            btn.classList.toggle('iconMute', !window.isAudioMuted);\r\n                        });\r\n                    }, 50);\r\n                });\r\n            }\r\n\r\n            \/\/ Inizializza muto\r\n            window.setAudioState(true);\r\n        }\r\n\r\n\r\n        \/\/ ==========================================\r\n        \/\/ 2. IL TUO CODICE DELLA MAPPA E DEL DEBUG\r\n        \/\/ ==========================================\r\n        \/\/ === MODALIT\u00c0 DEBUG \/ SETUP ===\r\n        \/\/ Metti a 'true' per vedere TUTTI i box rossi numerati e ottenere le coordinate al click.\r\n        \/\/ Metti a 'false' quando il gioco \u00e8 online (mostrer\u00e0 solo il pin di oggi, invisibile).\r\n        const isDebug = false;\r\n\r\n        const overlay = document.getElementById('discovery-overlay');\r\n        const foundImg = document.getElementById('found-object-img');\r\n        let pling = new Audio('https:\/\/springchallenge-ascona-locarno.com\/wp-content\/uploads\/2026\/03\/Gamemaster-Audio-Videogame-Powerups-Bonus-Score-Reward.webm');\r\n\r\n        window.openDiscovery = function (imageSrc, popupId) {\r\n            \/\/ Controlliamo lo stato dalla variabile globale sicura\r\n            if (typeof window.isAudioMuted === 'undefined' || !window.isAudioMuted) {\r\n                pling.currentTime = 0; \/\/ Ripristina per click ravvicinati\r\n                pling.play().catch(e => console.warn(\"Pling bloccato:\", e));\r\n            }\r\n            \r\n            foundImg.src = imageSrc;\r\n            overlay.classList.remove('hidden');\r\n            setTimeout(() => { overlay.classList.add('active'); }, 50);\r\n\r\n            setTimeout(() => {\r\n                if (typeof elementorProFrontend !== 'undefined') {\r\n                    elementorProFrontend.modules.popup.showPopup({ id: popupId });\r\n                }\r\n                overlay.style.transition = \"opacity 0.5s ease\";\r\n                overlay.style.opacity = \"0\";\r\n                setTimeout(() => {\r\n                    overlay.classList.remove('active', 'hidden');\r\n                    overlay.style.opacity = \"\";\r\n                    overlay.classList.add('hidden');\r\n                }, 500);\r\n            }, 2000);\r\n        };\r\n\r\n        var isMobile = window.innerWidth <= 768;\r\n        var zoomIniziale = isMobile ? 3.0 : 1.5;\r\n\r\n        \/\/ === LOGICA DATA AUTOMATICA ===\r\n        var d = new Date();\r\n        var anno = d.getFullYear();\r\n        var mese = String(d.getMonth() + 1).padStart(2, '0'); \r\n        var giorno = String(d.getDate()).padStart(2, '0');\r\n        \r\n        \/\/ SCOMMENTA QUESTA RIGA PER IL GO-LIVE (Usa la data di oggi):\r\n        var dataCodice = anno + \"-\" + mese + \"-\" + giorno;\r\n        \r\n        \/\/ COMMENTA QUESTA RIGA QUANDO VAI ONLINE (Data forzata per test):\r\n        \/\/ var dataCodice = \"2028-02-04\";\r\n        \r\n\r\n        var viewer = OpenSeadragon({\r\n            id: \"mappa-osd\",\r\n            prefixUrl: \"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/openseadragon\/4.1.0\/images\/\",\r\n            tileSources: {\r\n                type: 'image',\r\n                url: 'https:\/\/springchallenge-ascona-locarno.com\/wp-content\/uploads\/2026\/03\/ASLO_Mappa_DEF4.jpg'\r\n            },\r\n            defaultZoomLevel: zoomIniziale, minZoomLevel: zoomIniziale, maxZoomLevel: zoomIniziale,\r\n            visibilityRatio: 1, constrainDuringPan: true, showNavigationControl: false,\r\n            gestureSettingsMouse: { clickToZoom: false, dblClickToZoom: false, scrollToZoom: false },\r\n            gestureSettingsTouch: { pinchToZoom: false }\r\n        });\r\n\r\n        viewer.addHandler('canvas-scroll', function (event) {\r\n            event.preventDefaultAction = true;\r\n            viewer.viewport.panBy(new OpenSeadragon.Point(event.originalEvent.deltaX * 0.002, event.originalEvent.deltaY * 0.002));\r\n            viewer.viewport.applyConstraints();\r\n        });\r\n\r\n        viewer.addHandler('open', function () {\r\n\r\n            var sfide = [\r\n                { data: \"2028-02-04\", x: 0.4197, y: 0.4121 },\r\n                { data: \"2026-03-23\", x: 0.8690, y: 0.4241 },\r\n                { data: \"2026-03-24\", x: 0.6249, y: 0.6626 },\r\n                { data: \"2026-03-25\", x: 0.4909, y: 0.3879 },\r\n                { data: \"2026-03-26\", x: 0.5790, y: 1.3993 },\r\n                { data: \"2026-03-27\", x: 0.2600, y: 0.5458 },\r\n                { data: \"2026-03-28\", x: 0.1103, y: 1.3071 },\r\n                { data: \"2026-03-29\", x: 0.2783, y: 0.4453 },\r\n                { data: \"2026-03-30\", x: 0.8819, y: 0.9324 },\r\n                { data: \"2026-03-31\", x: 0.4932, y: 1.2135 },\r\n                { data: \"2026-04-01\", x: 0.7328, y: 0.2729 },\r\n                { data: \"2026-04-02\", x: 0.8482, y: 0.5778 },\r\n                { data: \"2026-04-03\", x: 0.3281, y: 1.2684 },\r\n                { data: \"2026-04-04\", x: 0.1744, y: 0.8602 },\r\n                { data: \"2026-04-05\", x: 0.8397, y: 0.1829 },\r\n                { data: \"2026-04-06\", x: 0.4928, y: 0.9527 }\r\n            ];\r\n\r\n            sfide.forEach(function (sfida) {\r\n                \/\/ Se isDebug \u00e8 true mostra tutti i box. Se \u00e8 false, mostra solo quello della data odierna.\r\n                if (isDebug || sfida.data === dataCodice) {\r\n\r\n                    const captainContainer = document.querySelector('.img-today-captain img');\r\n                    let dynamicImgUrl = captainContainer ? (captainContainer.currentSrc || captainContainer.src) : \"\";\r\n\r\n                    var pin = document.createElement(\"div\");\r\n                    pin.style.cursor = \"pointer\";\r\n                    pin.style.width = \"100%\";\r\n                    pin.style.height = \"100%\";\r\n\r\n                    if (isDebug) {\r\n                        \/\/ Stile Setup: Box rosso e semitrasparente con numero\r\n                        pin.style.border = \"2px solid red\";\r\n                        pin.style.backgroundColor = \"rgba(255, 0, 0, 0.3)\";\r\n                        \r\n                        var giornoSfida = sfida.data.split('-')[2];\r\n                        pin.innerText = giornoSfida;\r\n                        \r\n                        pin.style.color = \"white\"; \r\n                        pin.style.fontWeight = \"bold\";\r\n                        pin.style.fontSize = \"16px\";\r\n                        pin.style.textShadow = \"1px 1px 2px black\";\r\n                        pin.style.display = \"flex\";\r\n                        pin.style.alignItems = \"center\";\r\n                        pin.style.justifyContent = \"center\";\r\n                    } else {\r\n                        \/\/ Stile Produzione: Invisibile\r\n                        pin.style.backgroundColor = \"transparent\";\r\n                    }\r\n\r\n                    viewer.addOverlay({\r\n                        element: pin,\r\n                        location: new OpenSeadragon.Point(sfida.x, sfida.y),\r\n                        placement: OpenSeadragon.Placement.CENTER,\r\n                        width: 0.08, height: 0.08\r\n                    });\r\n\r\n                    new OpenSeadragon.MouseTracker({\r\n                        element: pin,\r\n                        clickHandler: function () {\r\n                            \/\/ In debug testiamo tutti i popup, in produzione solo quello di oggi\r\n                            window.openDiscovery(dynamicImgUrl, '172');\r\n                        }\r\n                    });\r\n                }\r\n            });\r\n        });\r\n\r\n        \/\/ --- SISTEMA TROVA COORDINATE (Attivo solo in Debug) ---\r\n        viewer.addHandler('canvas-click', function(event) {\r\n            \/\/ Ignora se non siamo in debug o se l'utente sta trascinando (pan) la mappa\r\n            if (!isDebug || !event.quick) return; \r\n\r\n            var viewportPoint = viewer.viewport.pointFromPixel(event.position);\r\n            var x = viewportPoint.x.toFixed(4);\r\n            var y = viewportPoint.y.toFixed(4);\r\n\r\n            \/\/ Stampa in console la stringa gi\u00e0 pronta\r\n            console.log('{ data: \"YYYY-MM-DD\", x: ' + x + ', y: ' + y + ' },');\r\n            \r\n            \/\/ Mostra un popup a schermo con le coordinate per fare copia-incolla rapido\r\n            alert(\"Coordinate:\\nx: \" + x + \"\\ny: \" + y + \"\\n\\n(La riga completa per l'array \u00e8 stata copiata anche nella Console del browser)\");\r\n        });\r\n\r\n    });\r\n<\/script>\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\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a9f2424 elementor-hidden-laptop elementor-hidden-tablet elementor-hidden-mobile elementor-hidden-desktop e-flex e-con-boxed e-con e-parent\" data-id=\"a9f2424\" 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-2784cc4 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"2784cc4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#elementor-action%3Aaction%3Dpopup%3Aopen%26settings%3DeyJpZCI6MjQ0LCJ0b2dnbGUiOmZhbHNlfQ%3D%3D\">\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\">Pop-up opening<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a0cd3ca elementor-align-center elementor-widget elementor-widget-button\" data-id=\"a0cd3ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#elementor-action%3Aaction%3Dpopup%3Aopen%26settings%3DeyJpZCI6MTAwMCwidG9nZ2xlIjpmYWxzZX0%3D\">\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\">Confirmation opening<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\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","protected":false},"excerpt":{"rendered":"<p>Pop-up opening Confirmation opening<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-251","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/springchallenge-ascona-locarno.com\/en\/wp-json\/wp\/v2\/pages\/251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/springchallenge-ascona-locarno.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/springchallenge-ascona-locarno.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/springchallenge-ascona-locarno.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/springchallenge-ascona-locarno.com\/en\/wp-json\/wp\/v2\/comments?post=251"}],"version-history":[{"count":7,"href":"https:\/\/springchallenge-ascona-locarno.com\/en\/wp-json\/wp\/v2\/pages\/251\/revisions"}],"predecessor-version":[{"id":1399,"href":"https:\/\/springchallenge-ascona-locarno.com\/en\/wp-json\/wp\/v2\/pages\/251\/revisions\/1399"}],"wp:attachment":[{"href":"https:\/\/springchallenge-ascona-locarno.com\/en\/wp-json\/wp\/v2\/media?parent=251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}