{"id":801,"date":"2026-03-06T01:58:18","date_gmt":"2026-03-06T00:58:18","guid":{"rendered":"https:\/\/www.edge-skating-academy.pl\/?page_id=801"},"modified":"2026-03-06T23:33:58","modified_gmt":"2026-03-06T22:33:58","slug":"muza","status":"publish","type":"page","link":"https:\/\/www.edge-skating-academy.pl\/index.php\/muza\/","title":{"rendered":"muza"},"content":{"rendered":"    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/sortablejs@latest\/Sortable.min.js\"><\/script>\r\n    <style>\r\n        \/* GLOBAL STYLES *\/\r\n        html, body { margin: 0 !important; padding: 0 !important; overflow: hidden; background: #222; font-family: sans-serif; width:100%; height:100%; }\r\n        #wpadminbar { display: none !important; }\r\n        \/* Ukrywa standardowe elementy motywu (nag\u0142\u00f3wek, stopka) *\/\r\n        #masthead, #colophon, .site-header, .site-footer, header, footer { display: none !important; }\r\n        \r\n        \/* LOGIN STYLES *\/\r\n        .edge-app-login-wrap { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 99999; background: #3498db; display: flex; justify-content: center; align-items: center; }\r\n        #PINform { background: #ededed; width: 320px; padding: 30px; border-radius: 15px; box-shadow: 0px 10px 25px rgba(0,0,0,0.2); text-align: center; box-sizing: border-box; }\r\n        #PINbox { background: #ededed; margin: 0 0 20px 0; width: 100%; font-size: 3em; text-align: center; border: 1px solid #d5d5d5; box-sizing: border-box; border-radius: 8px; color: #333; }\r\n        .edge-pin-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; justify-items: center; }\r\n        .PINbutton { background: #ededed; color: #7e7e7e; border: none; border-radius: 50%; font-size: 1.5em; text-align: center; width: 65px; height: 60px; cursor: pointer; transition: 0.2s; display: flex; align-items: center; justify-content: center; padding: 0; }\r\n        .PINbutton:hover { box-shadow: #506CE8 0 0 1px 1px; }\r\n        .PINbutton:active { background: #506CE8; color: #fff; }\r\n        .PINbutton:focus { outline: none; }\r\n\r\n        \/* HOME STYLES *\/\r\n        .edge-logo-circle { width: 120px; height: 120px; background: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 20px; padding: 10px; box-shadow: 0 4px 15px rgba(0,0,0,0.15); border: 1px solid #eee; }\r\n        .edge-logo-circle img { max-width: 100%; height: auto; border-radius: 50%; }\r\n\r\n        .edge-home-wrap { \r\n            position: fixed; top: 0; left: 0; width: 100%; height: 100%; \r\n            display: flex; flex-direction: column; align-items: center; justify-content: center;\r\n            background: linear-gradient(135deg, #1a1a1a, #2c3e50); color: #fff;\r\n            z-index: 1;\r\n        }\r\n        .edge-home-title { font-size: 40px; margin-bottom: 40px; font-weight: 900; letter-spacing: 2px; text-transform: uppercase; }\r\n        .edge-home-grid { display: flex; gap: 30px; flex-wrap: wrap; justify-content: center; }\r\n        \r\n        .edge-home-btn { \r\n            width: 200px; height: 200px; border-radius: 20px; border: none; \r\n            display: flex; flex-direction: column; align-items: center; justify-content: center;\r\n            font-size: 24px; font-weight: bold; color: #fff; cursor: pointer; \r\n            transition: 0.3s; text-decoration: none; box-shadow: 0 10px 30px rgba(0,0,0,0.3);\r\n        }\r\n        .edge-home-btn:hover { transform: translateY(-10px); box-shadow: 0 20px 40px rgba(0,0,0,0.5); }\r\n        .edge-home-btn span { font-size: 60px; margin-bottom: 15px; }\r\n        \r\n        .btn-dj { background: linear-gradient(135deg, #B19EF7, #7e57c2); }\r\n        .btn-tester { background: linear-gradient(135deg, #00e676, #00c853); }\r\n        .btn-viewer { background: linear-gradient(135deg, #29b6f6, #0288d1); }\r\n        \r\n        .edge-logout { position: absolute; bottom: 30px; color: #666; text-decoration: none; font-size: 14px; border: 1px solid #444; padding: 10px 20px; border-radius: 30px; transition: 0.2s; }\r\n        .edge-logout:hover { color: #fff; border-color: #fff; }\r\n    <\/style>\r\n\r\n    <!-- KONTENER G\u0141\u00d3WNY APLIKACJI -->\r\n    <div id=\"edge-app-root\" class=\"edge-home-wrap\">\r\n        <!-- MENU G\u0141\u00d3WNE (Zawsze renderowane pod spodem) -->\r\n        <div class=\"edge-logo-circle\" style=\"width:180px; height:180px; margin-bottom:40px;\">\r\n            <img decoding=\"async\" src=\"https:\/\/www.edge-skating-academy.pl\/wp-content\/uploads\/2024\/11\/cropped-cropped-logo-biale-2.jpg\">\r\n        <\/div>\r\n        <div class=\"edge-home-grid\">\r\n            <a href=\"#\" onclick=\"openApp('dj'); return false;\" class=\"edge-home-btn btn-dj\">\r\n                <span>\ud83c\udfa7<\/span>\r\n                Panel DJ\r\n            <\/a>\r\n            <a href=\"#\" onclick=\"openApp('tester'); return false;\" class=\"edge-home-btn btn-tester\">\r\n                <span>\ud83d\udccb<\/span>\r\n                Tester\r\n            <\/a>\r\n            <a href=\"#\" onclick=\"openApp('viewer'); return false;\" class=\"edge-home-btn btn-viewer\">\r\n                <span>\ud83d\udcca<\/span>\r\n                Wyniki\r\n            <\/a>\r\n        <\/div>\r\n        <a href=\"?edge_unified_logout=1\" class=\"edge-logout\">Wyloguj si\u0119<\/a>\r\n\r\n        <!-- PIN PAD OVERLAY (Tylko je\u015bli niezalogowany) -->\r\n                    <div class=\"edge-app-login-wrap\" id=\"edge-login-container\">\r\n                <div id=\"PINform\">\r\n                    <div class=\"edge-logo-circle\">\r\n                        <img decoding=\"async\" src=\"https:\/\/www.edge-skating-academy.pl\/wp-content\/uploads\/2024\/11\/cropped-cropped-logo-biale-2.jpg\">\r\n                    <\/div>\r\n                    <h2 style=\"margin-top:0;\">EDGE System<\/h2>\r\n                    <p style=\"color:#666; font-size:14px;\">Wprowad\u017a PIN, aby uruchomi\u0107 aplikacj\u0119.<\/p>\r\n                    \r\n                    <input type=\"password\" id=\"PINbox\" readonly>\r\n                    <input type=\"hidden\" id=\"pin-hidden-input\">\r\n                    \r\n                    <div class=\"edge-pin-grid\">\r\n                        <button type=\"button\" class=\"PINbutton\" onclick=\"pinInput('1')\">1<\/button>\r\n                        <button type=\"button\" class=\"PINbutton\" onclick=\"pinInput('2')\">2<\/button>\r\n                        <button type=\"button\" class=\"PINbutton\" onclick=\"pinInput('3')\">3<\/button>\r\n                        <button type=\"button\" class=\"PINbutton\" onclick=\"pinInput('4')\">4<\/button>\r\n                        <button type=\"button\" class=\"PINbutton\" onclick=\"pinInput('5')\">5<\/button>\r\n                        <button type=\"button\" class=\"PINbutton\" onclick=\"pinInput('6')\">6<\/button>\r\n                        <button type=\"button\" class=\"PINbutton\" onclick=\"pinInput('7')\">7<\/button>\r\n                        <button type=\"button\" class=\"PINbutton\" onclick=\"pinInput('8')\">8<\/button>\r\n                        <button type=\"button\" class=\"PINbutton\" onclick=\"pinInput('9')\">9<\/button>\r\n                        <button type=\"button\" class=\"PINbutton clear\" onclick=\"pinClear()\">C<\/button>\r\n                        <button type=\"button\" class=\"PINbutton\" onclick=\"pinInput('0')\">0<\/button>\r\n                        <button type=\"button\" class=\"PINbutton enter\" onclick=\"pinSubmit()\">OK<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <\/div>\r\n\r\n    <!-- Kontener na aplikacje (Iframe) -->\r\n    <div id=\"edge-dynamic-view\" style=\"position:fixed; top:0; left:0; width:100%; height:100%; border:none; z-index:100000; display:none; background:#fff; overflow-y: auto; -webkit-overflow-scrolling: touch;\"><\/div>\r\n\r\n    <script>\r\n        \/\/ --- LOGIKA APLIKACJI (Dost\u0119pna zawsze) ---\r\n        const hubContainer = document.getElementById('edge-app-root');\r\n        const viewContainer = document.getElementById('edge-dynamic-view');\r\n\r\n        function executeScriptsInContainer(container) {\r\n            const scripts = Array.from(container.querySelectorAll('script'));\r\n            scripts.forEach(oldScript => {\r\n                const newScript = document.createElement('script');\r\n                Array.from(oldScript.attributes).forEach(attr => {\r\n                    newScript.setAttribute(attr.name, attr.value);\r\n                });\r\n                newScript.appendChild(document.createTextNode(oldScript.innerHTML));\r\n                oldScript.parentNode.replaceChild(newScript, oldScript);\r\n            });\r\n        }\r\n\r\n        async function openApp(view) {\r\n            hubContainer.style.display = 'none';\r\n            viewContainer.innerHTML = '<div style=\"display:flex; justify-content:center; align-items:center; height:100%; font-size:24px; color:#888;\">\u0141adowanie...<\/div>';\r\n            viewContainer.style.display = 'block';\r\n\r\n            try {\r\n                const response = await fetch('?view=' + view + '&ajax=1');\r\n                if (!response.ok) {\r\n                    throw new Error('B\u0142\u0105d sieci: ' + response.statusText);\r\n                }\r\n                const html = await response.text();\r\n                \r\n                viewContainer.innerHTML = html;\r\n                executeScriptsInContainer(viewContainer);\r\n\r\n                if (!document.fullscreenElement) {\r\n                    document.documentElement.requestFullscreen().catch(err => console.log(`Pe\u0142ny ekran zablokowany: ${err.message}`));\r\n                }\r\n\r\n            } catch (error) {\r\n                viewContainer.innerHTML = `<div style=\"display:flex; flex-direction:column; justify-content:center; align-items:center; height:100%; font-size:24px; color:red;\">B\u0142\u0105d \u0142adowania modu\u0142u.<br><button onclick=\"closeApp()\">Powr\u00f3t<\/button><\/div>`;\r\n                console.error('B\u0142\u0105d podczas \u0142adowania widoku:', error);\r\n            }\r\n        }\r\n\r\n        window.closeApp = function() {\r\n            viewContainer.innerHTML = '';\r\n            viewContainer.style.display = 'none';\r\n            hubContainer.style.display = 'flex';\r\n        }\r\n\r\n        \/\/ --- LOGIKA PIN PAD (Tylko je\u015bli niezalogowany) ---\r\n        const pinDisplay = document.getElementById('PINbox');\r\n        const pinHidden = document.getElementById('pin-hidden-input');\r\n        \r\n        if (pinDisplay) {\r\n            \/\/ Fullscreen trigger\r\n            document.getElementById('PINform').addEventListener('click', function() {\r\n                const elem = document.documentElement;\r\n                if (elem.requestFullscreen) {\r\n                    elem.requestFullscreen().catch(err => console.log(`Pe\u0142ny ekran zablokowany: ${err.message}`));\r\n                }\r\n            }, { once: true });\r\n        }\r\n\r\n        function pinInput(num) {\r\n            if (!pinHidden) return;\r\n            if (pinHidden.value.length < 4) {\r\n                pinHidden.value += num;\r\n                pinDisplay.value = '\u2022'.repeat(pinHidden.value.length);\r\n                if (pinHidden.value.length === 4) {\r\n                    setTimeout(pinSubmit, 200);\r\n                }\r\n            }\r\n        }\r\n        function pinClear() { if(pinHidden) { pinHidden.value = ''; pinDisplay.value = ''; } }\r\n        \r\n        function pinSubmit() {\r\n            if (!pinHidden || pinHidden.value.length === 0) return;\r\n            \r\n            \/\/ AJAX LOGIN - Bez prze\u0142adowania strony!\r\n            const pin = pinHidden.value;\r\n            const formData = new FormData();\r\n            formData.append('action', 'edge_app_login');\r\n            formData.append('pin', pin);\r\n\r\n            \/\/ Poka\u017c \u0142adowanie\r\n            pinDisplay.value = '\u23f3...';\r\n\r\n            fetch('https:\/\/www.edge-skating-academy.pl\/wp-admin\/admin-ajax.php', {\r\n                method: 'POST',\r\n                body: formData\r\n            })\r\n            .then(response => response.json())\r\n            .then(data => {\r\n                if (data.success) {\r\n                    \/\/ Zalogowano pomy\u015blnie! Ukryj overlay PIN-pada\r\n                    const overlay = document.getElementById('edge-login-container');\r\n                    if(overlay) {\r\n                        overlay.style.transition = 'opacity 0.5s';\r\n                        overlay.style.opacity = '0';\r\n                        \/\/ Wa\u017cne: usuwamy z DOM, aby nie blokowa\u0142 klikni\u0119\u0107\r\n                        setTimeout(() => overlay.remove(), 500);\r\n                    }\r\n                } else {\r\n                    pinDisplay.value = 'B\u0141\u0104D';\r\n                    setTimeout(pinClear, 1000);\r\n                }\r\n            })\r\n            .catch(error => {\r\n                console.error('Error:', error);\r\n                pinDisplay.value = 'ERR';\r\n            });\r\n        }\r\n    <\/script>\r\n    \n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-801","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.edge-skating-academy.pl\/index.php\/wp-json\/wp\/v2\/pages\/801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.edge-skating-academy.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.edge-skating-academy.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.edge-skating-academy.pl\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.edge-skating-academy.pl\/index.php\/wp-json\/wp\/v2\/comments?post=801"}],"version-history":[{"count":2,"href":"https:\/\/www.edge-skating-academy.pl\/index.php\/wp-json\/wp\/v2\/pages\/801\/revisions"}],"predecessor-version":[{"id":807,"href":"https:\/\/www.edge-skating-academy.pl\/index.php\/wp-json\/wp\/v2\/pages\/801\/revisions\/807"}],"wp:attachment":[{"href":"https:\/\/www.edge-skating-academy.pl\/index.php\/wp-json\/wp\/v2\/media?parent=801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}