{"id":1442,"date":"2025-04-14T16:00:24","date_gmt":"2025-04-14T14:00:24","guid":{"rendered":"https:\/\/enigma.swallnet.com\/?page_id=1442"},"modified":"2025-11-29T10:02:45","modified_gmt":"2025-11-29T09:02:45","slug":"strazci-vysehradu-en","status":"publish","type":"page","link":"https:\/\/enigma.swallnet.com\/index.php\/strazci-vysehradu-en\/","title":{"rendered":"Keepers of Vy\u0161ehrad"},"content":{"rendered":"<!-- Enigma Web Log Active -->\n\n\n\n<h2 class=\"wp-block-heading\">Keepers of Vy\u0161ehrad<\/h2>\n\n\n    <div class=\"review-summary\">\n        <div class=\"star-rating-row\">\n            <div id=\"star-container-6\" class=\"star-rating\"><\/div>\n        <\/div>\n        <div class=\"review-meta-row\">\n            <div class=\"review-summary-text\" id=\"review-summary-text-6\"><\/div>\n        <\/div>\n    <\/div>\n\n    <style>\n        .review-summary {\n            max-width: 300px;\n        }\n\n        .star-rating-row {\n            display: flex;\n            justify-content: flex-start;\n            margin-bottom: 4px;\n        }\n\n        .star-rating {\n            display: flex;\n            font-size: 24px;\n            color: gold;\n            min-width: 130px;\n        }\n\n        .star {\n            position: relative;\n            width: 1em;\n            height: 1em;\n            margin-right: 4px;\n            display: inline-block;\n            background: lightgray;\n            clip-path: polygon(\n                50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%,\n                50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%\n            );\n        }\n\n        .star.filled {\n            background: gold;\n        }\n\n        .star.half::before {\n            content: '';\n            position: absolute;\n            width: 50%;\n            height: 100%;\n            background: gold;\n            left: 0;\n        }\n\n        .review-meta-row {\n            font-size: 14px;\n            color: white;\n        }\n\n        .review-summary-text {\n            color: #ccc;\n            font-weight: 500;\n        }\n    <\/style>\n\n    <script data-jetpack-boost=\"ignore\">\n        document.addEventListener(\"DOMContentLoaded\", function() {\n            const adventureId = 6;\n            const summaryTextId = 'review-summary-text-' + adventureId;\n            const starsId = 'star-container-' + adventureId;\n\n            if (typeof renderEnigmaRating === 'function') {\n                renderEnigmaRating(adventureId, function(totalReviews, averageRating) {\n                    const summary = document.getElementById(summaryTextId);\n                    if (summary && !isNaN(averageRating)) {\n                        summary.textContent = `${totalReviews} hodnocen\u00ed (${averageRating.toFixed(1)})`;\n                    }\n                });\n            }\n        });\n    <\/script>\n    \n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-843cb96b wp-block-columns-is-layout-flex block-visibility-hide-small-screen\" style=\"margin-top:0;margin-bottom:0;padding-right:0;padding-left:0\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\"><strong>Story<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vy\u0161ehrad is not just an old fortress above the Vltava River. For centuries, it hid a magical protective seal that shielded the city and its stories from being forgotten \u2014 a seal kept alive by the secret brotherhood known as the Keepers of Vy\u0161ehrad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But that was long ago.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The seal was broken. The Keepers vanished. And with them disappeared the wisdom passed down through generations. Yet legend tells of a time when new chosen ones would arise \u2014 those who could restore the shattered seal. Only they could revive the ancient order and return Vy\u0161ehrad its strength.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And now, more than ever, they are needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Old stories are fading. The world is changing. And Vy\u0161ehrad stands alone. But perhaps it\u2019s not too late. Perhaps there is still hope. Perhaps it is children \u2014 curious, brave, and willing to search, solve, and work together \u2014 who can face the trials and reunite the ten lost fragments of the seal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And if they succeed\u2026 Vy\u0161ehrad may shine once more.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full is-style-rounded wp-duotone-unset-2 is-style-rounded--1\" style=\"margin-top:var(--wp--preset--spacing--70);margin-right:0;margin-bottom:var(--wp--preset--spacing--70);margin-left:0\"><img data-dominant-color=\"1b3635\" data-has-transparency=\"false\" loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"600\" src=\"https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Strazci2_small.webp\" alt=\"\" class=\"wp-image-1437 not-transparent\" style=\"--dominant-color: #1b3635; object-fit:cover\" srcset=\"https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Strazci2_small.webp 900w, https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Strazci2_small-300x200.webp 300w, https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Strazci2_small-768x512.webp 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-6418681a wp-block-columns-is-layout-flex block-visibility-hide-large-screen block-visibility-hide-medium-screen\" style=\"padding-right:0;padding-left:0\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\"><strong>Story<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vy\u0161ehrad is not just an old fortress above the Vltava River. For centuries, it hid a magical protective seal that shielded the city and its stories from being forgotten \u2014 a seal kept alive by the secret brotherhood known as the Keepers of Vy\u0161ehrad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But that was long ago.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The seal was broken. The Keepers vanished. And with them disappeared the wisdom passed down through generations. Yet legend tells of a time when new chosen ones would arise \u2014 those who could restore the shattered seal. Only they could revive the ancient order and return Vy\u0161ehrad its strength.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And now, more than ever, they are needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Old stories are fading. The world is changing. And Vy\u0161ehrad stands alone. But perhaps it\u2019s not too late. Perhaps there is still hope. Perhaps it is children \u2014 curious, brave, and willing to search, solve, and work together \u2014 who can face the trials and reunite the ten lost fragments of the seal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And if they succeed\u2026 Vy\u0161ehrad may shine once more.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full is-style-rounded wp-duotone-unset-4 is-style-rounded--3\" style=\"margin-top:var(--wp--preset--spacing--40);margin-right:0;margin-bottom:var(--wp--preset--spacing--40);margin-left:0\"><img data-dominant-color=\"1b3635\" data-has-transparency=\"false\" loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"600\" src=\"https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Strazci2_small.webp\" alt=\"\" class=\"wp-image-1437 not-transparent\" style=\"--dominant-color: #1b3635; object-fit:cover\" srcset=\"https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Strazci2_small.webp 900w, https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Strazci2_small-300x200.webp 300w, https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Strazci2_small-768x512.webp 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-6418681a wp-block-columns-is-layout-flex block-visibility-hide-small-screen\" style=\"padding-right:0;padding-left:0\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full is-resized is-style-rounded is-style-rounded--5\" style=\"margin-top:var(--wp--preset--spacing--60);margin-bottom:var(--wp--preset--spacing--60)\"><img data-dominant-color=\"201e13\" data-has-transparency=\"false\" loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"600\" src=\"https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Vysehrad3_small.webp\" alt=\"\" class=\"wp-image-1438 not-transparent\" style=\"--dominant-color: #201e13; object-fit:cover;width:400px;height:350px\" srcset=\"https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Vysehrad3_small.webp 900w, https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Vysehrad3_small-300x200.webp 300w, https:\/\/enigma.swallnet.com\/wp-content\/uploads\/2025\/04\/Vysehrad3_small-768x512.webp 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p class=\"wp-block-paragraph\" style=\"font-size:22px\"><strong><strong><br><strong><br><strong>Key Features of the Game<\/strong><\/strong><\/strong><\/strong><\/p>\n\n\n\n<ul style=\"margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40)\" class=\"wp-block-list\">\n<li style=\"padding-top:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30)\"><strong>Vy\u0161ehrad like you\u2019ve never seen it before:<\/strong> This adventure will lead you through unexpected corners of the historic Vy\u0161ehrad complex \u2013 often away from the main paths. You\u2019ll move quietly, follow subtle clues, and gradually uncover what remains of the ancient order of Keepers.<\/li>\n\n\n\n<li><strong><strong><strong>History within reach:<\/strong><\/strong><\/strong> &nbsp;The stories you\u2019ll discover aren\u2019t made up \u2013 they draw from real history, legends, and events tied to Vy\u0161ehrad. Many of them have been forgotten\u2026 until now.<\/li>\n\n\n\n<li><strong>A shared journey, a shared goal:<\/strong> Every player brings something to the table \u2014 a new idea, an observation, a question. The challenges are designed to encourage teamwork between children and adults, where success comes from logic, attentiveness, or the courage to speak up.<\/li>\n\n\n\n<li><strong><strong><strong>An old world meets a modern game:<\/strong><\/strong><\/strong> &nbsp;The entire story unfolds on your mobile phone. Solve puzzles, listen to echoes of the past, explore GPS-activated locations, and interact with the game using images, sounds, and movement.<\/li>\n\n\n\n<li><strong>Tailored for young adventurers:<\/strong> The route is designed with children aged 7\u201311 in mind. The game takes approximately 2 to 2,5 hours \u2013 just right for an engaging afternoon quest that captivates without exhausting. The adventure takes place entirely outdoors.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">    <div style=\"text-align: center; margin-bottom: 10px;\">\n    <div style=\"display: inline-block;\">\n        <span style=\"font-weight: bold; color: red; margin-right: 10px;\">\n        P\u0159ihlaste se nebo si \u00fa\u010det zalo\u017ete na dv\u011b kliknut\u00ed \u2013 a z\u00edskejte slevu jako nikde jinde!        <\/span>\n        <a href=\"https:\/\/enigma.swallnet.com\/index.php\/login\"\n        class=\"wp-block-button__link wp-element-button\"\n        style=\"display: inline-block; white-space: nowrap; background: #22445d; color: white; padding: 8px 16px; border-radius: 5px; text-decoration: none;\">\n        Vyzkou\u0161ejte Ihned        <\/a>\n    <\/div>\n    <\/div>\n    <\/p>\n\n\n\n<figure class=\"wp-block-table aligncenter is-style-regular has-small-font-size\" style=\"padding-top:var(--wp--preset--spacing--70);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--70);padding-left:var(--wp--preset--spacing--30)\"><table class=\"has-border-color has-primary-border-color has-fixed-layout\" style=\"border-width:7px\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\"><strong>TEAM COUNT<\/strong><\/th><th><strong>DESCRIPTION<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\">CENA<\/th><th class=\"has-text-align-center\" data-align=\"center\"><\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Solo<\/strong><\/td><td>Real Challenge \ud83d\ude42<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#cf2e2e\" class=\"has-inline-color\"><s>990 K\u010d<\/s><\/mark><\/strong>  -&gt; <strong><strong><strong>     <span class=\"enigma-dynamic-price\"\n          data-adventure-id=\"6\"\n          data-multiplayer=\"0\"\n          data-user-id=\"0\">\n        ...\n    <\/span>\n\n    <style>\n        \/* m\u016f\u017ee\u0161 upravit podle sv\u00e9ho designu \/ p\u0159esunout do CSS souboru *\/\n        .enigma-price-original {\n            text-decoration: line-through;\n            color: #e74c3c;      \/* \u010derven\u00e1 *\/\n            margin-right: 6px;\n            font-weight: 500;\n        }\n        .enigma-price-user {\n            color: #ffffff;      \/* b\u00edl\u00e1 \u2013 po\u010d\u00edt\u00e1m s tmav\u00fdm pozad\u00edm boxu *\/\n            font-weight: 700;\n        }\n    <\/style>\n\n    <script data-jetpack-boost=\"ignore\">\n    document.addEventListener(\"DOMContentLoaded\", function () {\n        document.querySelectorAll('.enigma-dynamic-price').forEach(function (span) {\n            if (span.dataset.loaded === \"1\") return;\n            span.dataset.loaded = \"1\";\n\n            const adventureId = span.dataset.adventureId;\n            const multiplayer = span.dataset.multiplayer;\n            const userId = span.dataset.userId;\n\n            fetch(`https:\/\/enigma.swallnet.com\/api\/adventure\/price?adventureId=${adventureId}&multiplayer=${multiplayer}&userId=${userId}`)\n                .then(response => response.json())\n                .then(data => {\n                    const orig = Number(data.originalPrice);\n                    const user = Number(\n                        (data.userPrice !== undefined) ? data.userPrice : data.finalPrice\n                    );\n\n                    if (!isFinite(orig) || !isFinite(user)) {\n                        span.textContent = '\u2013';\n                        return;\n                    }\n\n                    \/\/ Pokud je cena stejn\u00e1 (\u017e\u00e1dn\u00e1 user sleva) \u2192 zobraz jedno \u010d\u00edslo\n                    if (Math.abs(orig - user) < 0.01) {\n                        span.textContent = user.toFixed(0) + ' K\u010d';\n                    } else {\n                        span.innerHTML =\n                            '<span class=\"enigma-price-original\">' +\n                                orig.toFixed(0) + ' K\u010d' +\n                            '<\/span>' +\n                            '<span class=\"enigma-price-user\">' +\n                                user.toFixed(0) + ' K\u010d' +\n                            '<\/span>';\n                    }\n                })\n                .catch(() => {\n                    span.textContent = '\u2013';\n                });\n        });\n    });\n    <\/script>\n    <\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">    <form class=\"enigma-add-to-cart-form\"\n          method=\"post\"\n          action=\"\"\n          data-user-id=\"0\"\n          data-game-id=\"6\"\n          data-game-name=\"Keepers of Vy\u0161ehrad\"\n          data-multiplayer=\"0\">\n\n        <input type=\"hidden\" name=\"game_id\" value=\"6\">\n        <input type=\"hidden\" name=\"game_name\" value=\"Keepers of Vy\u0161ehrad\">\n        <input type=\"hidden\" name=\"price\" value=\"\">\n        <input type=\"hidden\" name=\"original_price\" value=\"\">\n        <input type=\"hidden\" name=\"multiplayer\" value=\"0\">\n        <input type=\"hidden\" name=\"enigma_add_to_cart\" value=\"1\">\n\n        <button type=\"submit\" class=\"wp-block-button__link wp-element-button\">\n            Koupit        <\/button>\n    <\/form>\n\n    <script data-jetpack-boost=\"ignore\">\n    document.addEventListener('DOMContentLoaded', function () {\n        document.querySelectorAll('.enigma-add-to-cart-form').forEach(function(form) {\n            if (form.dataset.listenerAttached === \"true\") return;\n            form.dataset.listenerAttached = \"true\";\n\n            form.addEventListener('submit', function (e) {\n                e.preventDefault();\n\n                const userId = parseInt(form.dataset.userId) || 0;\n                const gameId = parseInt(form.dataset.gameId);\n                const multiplayer = parseInt(form.dataset.multiplayer);\n                const gameName = form.dataset.gameName;\n\n                const priceField = form.querySelector('input[name=\"price\"]');\n\n                fetch(`https:\/\/enigma.swallnet.com\/api\/adventure\/price?adventureId=${gameId}&multiplayer=${multiplayer}&userId=${userId}`)\n                    .then(res => res.json())\n                    .then(data => {\n                        const finalPrice = data.finalPrice;\n                        const originalPrice = data.originalPrice;\n\n                        priceField.value = finalPrice;\n                        \n                        \/\/ dodani original ceny\n                        const originalPriceField = form.querySelector('input[name=\"original_price\"]');\n                        if (originalPriceField) {\n                            originalPriceField.value = originalPrice;\n                        }\n\n                        \/\/ Odeslat analytiku\n                        fetch('https:\/\/enigma.swallnet.com\/api\/marketing\/add-to-cart', {\n                            method: 'POST',\n                            headers: { 'Content-Type': 'application\/json' },\n                            body: JSON.stringify({\n                                userId: userId,\n                                game_id: gameId,\n                                game_name: gameName,\n                                price: finalPrice,\n                                multiplayer: multiplayer\n                            })\n                        });\n                    })\n                    .finally(() => {\n                        \/\/ Po fetchi i analytice formul\u00e1\u0159 ode\u0161leme\n                        form.submit();\n                    });\n            });\n        });\n    });\n    <\/script>\n    <\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong><strong><strong>1 team<\/strong><\/strong><\/strong><\/td><td>Play as one team (any number of players).<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#cf2e2e\" class=\"has-inline-color\"><s>1090 K\u010d<\/s><\/mark><\/strong>  -&gt;<strong><strong><strong>     <span class=\"enigma-dynamic-price\"\n          data-adventure-id=\"6\"\n          data-multiplayer=\"1\"\n          data-user-id=\"0\">\n        ...\n    <\/span>\n\n    <style>\n        \/* m\u016f\u017ee\u0161 upravit podle sv\u00e9ho designu \/ p\u0159esunout do CSS souboru *\/\n        .enigma-price-original {\n            text-decoration: line-through;\n            color: #e74c3c;      \/* \u010derven\u00e1 *\/\n            margin-right: 6px;\n            font-weight: 500;\n        }\n        .enigma-price-user {\n            color: #ffffff;      \/* b\u00edl\u00e1 \u2013 po\u010d\u00edt\u00e1m s tmav\u00fdm pozad\u00edm boxu *\/\n            font-weight: 700;\n        }\n    <\/style>\n\n    <script data-jetpack-boost=\"ignore\">\n    document.addEventListener(\"DOMContentLoaded\", function () {\n        document.querySelectorAll('.enigma-dynamic-price').forEach(function (span) {\n            if (span.dataset.loaded === \"1\") return;\n            span.dataset.loaded = \"1\";\n\n            const adventureId = span.dataset.adventureId;\n            const multiplayer = span.dataset.multiplayer;\n            const userId = span.dataset.userId;\n\n            fetch(`https:\/\/enigma.swallnet.com\/api\/adventure\/price?adventureId=${adventureId}&multiplayer=${multiplayer}&userId=${userId}`)\n                .then(response => response.json())\n                .then(data => {\n                    const orig = Number(data.originalPrice);\n                    const user = Number(\n                        (data.userPrice !== undefined) ? data.userPrice : data.finalPrice\n                    );\n\n                    if (!isFinite(orig) || !isFinite(user)) {\n                        span.textContent = '\u2013';\n                        return;\n                    }\n\n                    \/\/ Pokud je cena stejn\u00e1 (\u017e\u00e1dn\u00e1 user sleva) \u2192 zobraz jedno \u010d\u00edslo\n                    if (Math.abs(orig - user) < 0.01) {\n                        span.textContent = user.toFixed(0) + ' K\u010d';\n                    } else {\n                        span.innerHTML =\n                            '<span class=\"enigma-price-original\">' +\n                                orig.toFixed(0) + ' K\u010d' +\n                            '<\/span>' +\n                            '<span class=\"enigma-price-user\">' +\n                                user.toFixed(0) + ' K\u010d' +\n                            '<\/span>';\n                    }\n                })\n                .catch(() => {\n                    span.textContent = '\u2013';\n                });\n        });\n    });\n    <\/script>\n    <\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">    <form class=\"enigma-add-to-cart-form\"\n          method=\"post\"\n          action=\"\"\n          data-user-id=\"0\"\n          data-game-id=\"6\"\n          data-game-name=\"Keepers of Vy\u0161ehrad\"\n          data-multiplayer=\"1\">\n\n        <input type=\"hidden\" name=\"game_id\" value=\"6\">\n        <input type=\"hidden\" name=\"game_name\" value=\"Keepers of Vy\u0161ehrad\">\n        <input type=\"hidden\" name=\"price\" value=\"\">\n        <input type=\"hidden\" name=\"original_price\" value=\"\">\n        <input type=\"hidden\" name=\"multiplayer\" value=\"1\">\n        <input type=\"hidden\" name=\"enigma_add_to_cart\" value=\"1\">\n\n        <button type=\"submit\" class=\"wp-block-button__link wp-element-button\">\n            Koupit        <\/button>\n    <\/form>\n\n    <script data-jetpack-boost=\"ignore\">\n    document.addEventListener('DOMContentLoaded', function () {\n        document.querySelectorAll('.enigma-add-to-cart-form').forEach(function(form) {\n            if (form.dataset.listenerAttached === \"true\") return;\n            form.dataset.listenerAttached = \"true\";\n\n            form.addEventListener('submit', function (e) {\n                e.preventDefault();\n\n                const userId = parseInt(form.dataset.userId) || 0;\n                const gameId = parseInt(form.dataset.gameId);\n                const multiplayer = parseInt(form.dataset.multiplayer);\n                const gameName = form.dataset.gameName;\n\n                const priceField = form.querySelector('input[name=\"price\"]');\n\n                fetch(`https:\/\/enigma.swallnet.com\/api\/adventure\/price?adventureId=${gameId}&multiplayer=${multiplayer}&userId=${userId}`)\n                    .then(res => res.json())\n                    .then(data => {\n                        const finalPrice = data.finalPrice;\n                        const originalPrice = data.originalPrice;\n\n                        priceField.value = finalPrice;\n                        \n                        \/\/ dodani original ceny\n                        const originalPriceField = form.querySelector('input[name=\"original_price\"]');\n                        if (originalPriceField) {\n                            originalPriceField.value = originalPrice;\n                        }\n\n                        \/\/ Odeslat analytiku\n                        fetch('https:\/\/enigma.swallnet.com\/api\/marketing\/add-to-cart', {\n                            method: 'POST',\n                            headers: { 'Content-Type': 'application\/json' },\n                            body: JSON.stringify({\n                                userId: userId,\n                                game_id: gameId,\n                                game_name: gameName,\n                                price: finalPrice,\n                                multiplayer: multiplayer\n                            })\n                        });\n                    })\n                    .finally(() => {\n                        \/\/ Po fetchi i analytice formul\u00e1\u0159 ode\u0161leme\n                        form.submit();\n                    });\n            });\n        });\n    });\n    <\/script>\n    <\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Additional Information<\/strong><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Who is the game for?<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended age:&nbsp;<strong>7\u201311 years<\/strong>, accompanied by an adult.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Perfect for&nbsp;<strong>families<\/strong>, small groups of curious children, or anyone who wants to experience Vy\u0161ehrad in a new way \u2014 through stories, puzzles, and a shared adventure.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What do you need to play?<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A&nbsp;<strong>fully charged smartphone<\/strong>&nbsp;with GPS enabled<\/li>\n\n\n\n<li><strong>Internet connection<\/strong>&nbsp;(mobile data is sufficient)<\/li>\n\n\n\n<li><strong>Comfortable shoes<\/strong>&nbsp;and clothing suitable for an outdoor quest<\/li>\n\n\n\n<li>Most importantly: a sense of&nbsp;<strong>curiosity, teamwork, and discovery<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udd10&nbsp;<strong>Ready to accept the challenge?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Become a Keeper of Vy\u0161ehrad and help restore the ancient seal before silence buries its secrets for good.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-0d5e80e3 wp-block-columns-is-layout-flex\" style=\"padding-right:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">    <div class=\"leaderboard-container\">\n        <h1>Nejlep\u0161\u00ed hr\u00e1\u010di<\/h1>\n        <table id=\"leaderboard-table\">\n            <thead>\n                <tr>\n                    <th>Po\u0159ad\u00ed<\/th>\n                    <th>P\u0159ezd\u00edvka<\/th>\n                    <th>Sk\u00f3re<\/th>\n                <\/tr>\n            <\/thead>\n            <tbody>\n                <!-- Dynamically inserted data -->\n            <\/tbody>\n        <\/table>\n        <div id=\"error-message\" class=\"error\"><\/div>\n    <\/div>\n\n    <style>\n        .leaderboard-container {\n            max-width: 800px;\n            margin: 0 auto;\n            background: #383838;\n            border-radius: 15px;\n            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n            padding: 20px;\n        }\n        h1 {\n            text-align: center;\n            color: white;\n        }\n        table {\n            width: 100%;\n            border-collapse: collapse;\n            margin-top: 20px;\n        }\n        th, td {\n            text-align: left;\n            padding: 12px;\n            border-bottom: 1px solid #9CA3AF;\n        }\n        th {\n            background-color: #0F3D57;\n            color: white;\n        }\n        tr:hover {\n            background-color: #265A7C;\n        }\n        #leaderboard-table tbody tr:nth-child(1) td {\n            color: #C4A85E;\n            font-weight: bold;\n        }\n        #leaderboard-table tbody tr:nth-child(2) td {\n            color: #A8A9AD;\n            font-weight: bold;\n        }\n        #leaderboard-table tbody tr:nth-child(3) td {\n            color: #CD7F32; \/* Bronze *\/\n            font-weight: bold;\n        }\n        .error {\n            color: red;\n            text-align: center;\n            margin-top: 20px;\n        }\n    <\/style>\n\n    <script data-jetpack-boost=\"ignore\" type=\"text\/javascript\">\n    \/\/ <![CDATA[\n    (function(){\n        async function fetchLeaderboard(adventureId, maxRecords, webLocale) {\n            try {\n                \/\/const response = await fetch(`https:\/\/enigma.swallnet.com\/api\/adventure\/leaderboard?adventureId=${adventureId}&maxRecords=${maxRecords}&webLocale=${webLocale}`);\n                const response = await fetch(`https:\/\/enigma.swallnet.com\/api\/adventure\/leaderboard?adventureId=${adventureId}&maxRecords=${maxRecords}&webLocale=cs`);\n                if (!response.ok) {\n                    throw new Error(`HTTP error! Status: ${response.status}`);\n                }\n                const data = await response.json();\n                populateLeaderboardTable(data);\n            } catch (error) {\n                document.getElementById('error-message').textContent = 'Nepoda\u0159ilo se na\u010d\u00edst data \u017eeb\u0159\u00ed\u010dku: ' + error.message;\n            }\n        }\n\n        function populateLeaderboardTable(data) {\n            const tableBody = document.getElementById('leaderboard-table').querySelector('tbody');\n            tableBody.innerHTML = ''; \/\/ Clear previous data\n\n            Object.values(data).forEach(record => {\n                const row = document.createElement('tr');\n\n                const rankCell = document.createElement('td');\n                rankCell.textContent = record.rank;\n\n                const nickNameCell = document.createElement('td');\n                nickNameCell.textContent = record.nickName;\n\n                const scoreCell = document.createElement('td');\n                scoreCell.textContent = record.score;\n\n                row.appendChild(rankCell);\n                row.appendChild(nickNameCell);\n                row.appendChild(scoreCell);\n\n                tableBody.appendChild(row);\n            });\n        }\n\n        const adventureId = 6;\n        const maxRecords  = 10;\n        const webLocale   = null;\n        fetchLeaderboard(adventureId, maxRecords, webLocale);\n    })();\n    \/\/ ]]>\n    <\/script>\n    \n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">    <div class=\"detailed-review-wrapper\" data-adventure-id=\"6\">\n        <h3>Hodnocen\u00ed u\u017eivatel\u016f<\/h3>\n\n        <div id=\"category-ratings-6\" class=\"category-ratings\">\n            <div class=\"rating-row\"><div class=\"star-rating\" id=\"cat-0-adventure-6\"><\/div><div class=\"numeric-average\" id=\"avg-0-adventure-6\"><\/div><span class=\"category-label\">Celkov\u00fd z\u00e1\u017eitek<\/span><\/div><div class=\"rating-row\"><div class=\"star-rating\" id=\"cat-1-adventure-6\"><\/div><div class=\"numeric-average\" id=\"avg-1-adventure-6\"><\/div><span class=\"category-label\">H\u00e1danky<\/span><\/div><div class=\"rating-row\"><div class=\"star-rating\" id=\"cat-2-adventure-6\"><\/div><div class=\"numeric-average\" id=\"avg-2-adventure-6\"><\/div><span class=\"category-label\">Lokalita<\/span><\/div><div class=\"rating-row\"><div class=\"star-rating\" id=\"cat-3-adventure-6\"><\/div><div class=\"numeric-average\" id=\"avg-3-adventure-6\"><\/div><span class=\"category-label\">Z\u00e1bava<\/span><\/div>        <\/div>\n\n        <h4>Vybran\u00e9 recenze<\/h4>\n        <div id=\"published-reviews-6\" class=\"published-reviews\"><\/div>\n    <\/div>\n\n    <style>\n        .rating-row {\n            display: flex;\n            align-items: center;\n            margin-bottom: 10px;\n            gap: 10px;\n        }\n        .category-label {\n            font-weight: bold;\n            color: white;\n        }\n        .numeric-average {\n            width: 40px;\n            text-align: right;\n            font-weight: bold;\n            color: white;\n        }\n        .star-rating {\n            display: flex;\n            font-size: 24px;\n        }\n        .star {\n            width: 1em;\n            height: 1em;\n            background: lightgray;\n            clip-path: polygon(\n                50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%,\n                50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%\n            );\n            margin-right: 5px;\n            position: relative;\n        }\n        .star.filled {\n            background: gold;\n        }\n        .star.half::before {\n            content: '';\n            position: absolute;\n            width: 50%;\n            height: 100%;\n            background: gold;\n            left: 0;\n        }\n        .published-review {\n            margin-bottom: 20px;\n            background: #f9f9f9;\n            padding: 10px;\n            border-radius: 5px;\n            border-left: 4px solid #ccc;\n        }\n        .published-review .review-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 5px;\n        }\n        .published-review .review-nickname {\n            font-weight: bold;\n            color: #333;\n        }\n        .published-review .review-stars {\n            display: flex;\n        }\n        .published-review .review-text {\n            font-style: italic;\n            color: #333;\n            margin-top: 5px;\n        }\n    <\/style>\n\n    <script data-jetpack-boost=\"ignore\">\n        document.addEventListener(\"DOMContentLoaded\", function () {\n            const adventureId = 6;\n            fetch(`https:\/\/enigma.swallnet.com\/api\/adventure\/review-details?adventureId=${adventureId}&webLocale=`)\n                .then(res => res.json())\n                .then(data => {\n                    if (!data.success) return;\n\n                    const averages = [\n                        data.categoryAverages[0], \/\/ Overall Experience\n                        data.categoryAverages[1], \/\/ Puzzles\n                        data.categoryAverages[2], \/\/ Locality\n                        data.categoryAverages[3]  \/\/ Fun\n                    ];\n\n                    averages.forEach((avg, index) => {\n                        renderStars(\"cat-\" + index + \"-adventure-\" + adventureId, avg);\n                        const numeric = document.getElementById(\"avg-\" + index + \"-adventure-\" + adventureId);\n                        if (numeric && avg !== undefined && !isNaN(avg)) {\n                            numeric.textContent = avg.toFixed(1);\n                        }\n                    });\n\n                    const container = document.getElementById(\"published-reviews-\" + adventureId);\n                    data.publishedReviews.forEach(review => {\n                        const div = document.createElement(\"div\");\n                        div.classList.add(\"published-review\");\n\n                        const header = document.createElement(\"div\");\n                        header.classList.add(\"review-header\");\n\n                        const nick = document.createElement(\"div\");\n                        nick.classList.add(\"review-nickname\");\n                        nick.textContent = review.nickName;\n\n                        const stars = document.createElement(\"div\");\n                        stars.classList.add(\"review-stars\");\n                        renderStars(stars, review.average);\n\n                        header.appendChild(nick);\n                        header.appendChild(stars);\n\n                        const textDiv = document.createElement(\"div\");\n                        textDiv.classList.add(\"review-text\");\n                        textDiv.textContent = `\"${review.text}\"`;\n\n                        div.appendChild(header);\n                        div.appendChild(textDiv);\n                        container.appendChild(div);\n                    });\n                });\n\n            function renderStars(containerOrId, avg) {\n                const container = (typeof containerOrId === \"string\") ? document.getElementById(containerOrId) : containerOrId;\n                if (!container) return;\n                container.innerHTML = '';\n                for (let i = 1; i <= 5; i++) {\n                    const star = document.createElement(\"div\");\n                    star.classList.add(\"star\");\n                    if (i <= Math.floor(avg)) {\n                        star.classList.add(\"filled\");\n                    } else if (i - avg < 1) {\n                        star.classList.add(\"half\");\n                    }\n                    container.appendChild(star);\n                }\n            }\n        });\n    <\/script>\n    \n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Keepers of Vy\u0161ehrad Story Vy\u0161ehrad is not just an old fortress above the Vltava River. For centuries, it hid a magical protective seal that shielded the city and its stories from being forgotten \u2014 a seal kept alive by the secret brotherhood known as the Keepers of Vy\u0161ehrad. But that was long ago. The seal [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"footnotes":""},"class_list":["post-1442","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/enigma.swallnet.com\/index.php\/wp-json\/wp\/v2\/pages\/1442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enigma.swallnet.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/enigma.swallnet.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/enigma.swallnet.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/enigma.swallnet.com\/index.php\/wp-json\/wp\/v2\/comments?post=1442"}],"version-history":[{"count":19,"href":"https:\/\/enigma.swallnet.com\/index.php\/wp-json\/wp\/v2\/pages\/1442\/revisions"}],"predecessor-version":[{"id":2223,"href":"https:\/\/enigma.swallnet.com\/index.php\/wp-json\/wp\/v2\/pages\/1442\/revisions\/2223"}],"wp:attachment":[{"href":"https:\/\/enigma.swallnet.com\/index.php\/wp-json\/wp\/v2\/media?parent=1442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}