{"product_id":"purple-leaf-zakladni-zahradni-altan-teple-bile-led-osvetleni","title":"PURPLE LEAF Základní hliníkový zahradní altán v antracitové barvě s pevnou ocelovou střechou a teplým bílým LED osvětlením pro celoroční použití","description":"\u003c!-- 自定义商品详情排版 - 完整稳定版 --\u003e\n\u003cdiv class=\"custom-detail-container\"\u003e\n\n    \u003c!-- \u003cdiv class=\"section-title\"\u003ePŘEHLED PRODUKTU\u003c\/div\u003e --\u003e\n\n    \u003c!-- Swiper CDN --\u003e\n    \u003clink rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.css\"\u003e\n    \u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.js\"\u003e\u003c\/script\u003e\n\n    \u003cstyle\u003e\n        :root {\n            --primary: #3771aa;\n            --text: #333;\n            --bg: #fff;\n            --gray: #666;\n            --border: #eee;\n        }\n\n        \/* ==========================================\n           GLOBAL\n        ========================================== *\/\n\n        .custom-detail-container {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 40px 20px;\n            color: var(--text);\n            line-height: 1.6;\n        }\n\n        html {\n            scrollbar-gutter: stable;\n        }\n\n        .section-title {\n            font-size: 32px;\n            font-weight: 600;\n            text-align: center;\n            margin-bottom: 50px;\n            letter-spacing: 0.5px;\n        }\n\n\n        \/* ==========================================\n           ACCORDION\n        ========================================== *\/\n\n        .accordion-item {\n            margin-bottom: 30px;\n            border: 1px solid var(--border);\n            border-radius: 12px;\n            overflow: hidden;\n            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);\n            transition: box-shadow 0.3s ease;\n        }\n\n        .accordion-header {\n            padding: 20px 30px;\n            background: var(--bg);\n            font-size: 24px;\n            font-weight: 600;\n            cursor: pointer;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            transition: background 0.3s ease;\n        }\n\n        .accordion-header:hover {\n            background: #f8f9fa;\n        }\n\n        .accordion-header::after {\n            content: '+';\n            font-size: 28px;\n            transition: transform 0.3s ease;\n            line-height: 1;\n        }\n\n        .accordion-item.active .accordion-header::after {\n            transform: rotate(45deg);\n        }\n\n\n        \/* ==========================================\n        ACCORDION CONTENT\n        ========================================== *\/\n\n        .accordion-content {\n            box-sizing: border-box;\n            height: 0;\n            padding-top: 0;\n            padding-bottom: 0;\n            padding-left: 30px;\n            padding-right: 30px;\n            overflow: hidden;\n            background: #fcfcfc;\n            transition: height 0.35s cubic-bezier(0.4, 0, 0.2, 1),\n                padding-top 0.35s cubic-bezier(0.4, 0, 0.2, 1),\n                padding-bottom 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n        }\n\n\n        \/* ==========================================\n           SEE MORE \/ SEE LESS\n        ========================================== *\/\n\n        .more-text {\n            overflow: hidden;\n            height: 0;\n            transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n        }\n\n        .more-text p {\n            margin: 16px 0;\n        }\n\n        .more-text p:last-of-type {\n            margin-bottom: 8px;\n        }\n\n        .see-more,\n        .see-less {\n            color: var(--primary);\n            font-weight: bold;\n            cursor: pointer;\n            display: inline-block;\n            margin: 10px 0;\n        }\n\n        .see-more:hover,\n        .see-less:hover {\n            text-decoration: underline;\n        }\n\n        .more-text .see-less {\n            display: inline-block;\n            margin-top: 8px;\n            margin-bottom: 0;\n        }\n\n\n        \/* ==========================================\n           FEATURES\n        ========================================== *\/\n\n        .features-list p {\n            margin: 16px 0;\n            font-size: 16px;\n        }\n\n        .highlight-text {\n            color: #ff8000;\n            font-weight: 600;\n        }\n\n\n        \/* ==========================================\n           POLICY\n        ========================================== *\/\n\n        .policy-section h4 {\n            font-size: 18px;\n            margin: 24px 0 12px;\n            color: var(--primary);\n            font-weight: 600;\n        }\n\n        .policy-section ul {\n            margin: 16px 0;\n            padding-left: 20px;\n        }\n\n        .policy-section ul li {\n            margin: 8px 0;\n            line-height: 1.6;\n        }\n\n        .policy-section p {\n            margin: 12px 0;\n        }\n\n\n        \/* ==========================================\n           SWIPER\n        ========================================== *\/\n\n        .swiper {\n            border-radius: 12px;\n            overflow: hidden;\n            box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n            margin: 20px 0;\n        }\n\n        .swiper-slide {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            background: #fff;\n        }\n\n        .swiper-slide img {\n            width: 100%;\n            height: auto;\n            display: block;\n            border-radius: 8px;\n            cursor: pointer;\n            transition: transform 0.3s ease;\n        }\n\n        .swiper-slide img:hover {\n            transform: scale(1.03);\n        }\n\n        .swiper-pagination-bullet-active {\n            background: var(--primary);\n        }\n\n        .swiper-button-next,\n        .swiper-button-prev {\n            color: var(--primary);\n            background: rgba(255, 255, 255, 0.9);\n            width: 40px;\n            height: 40px;\n            border-radius: 50%;\n            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n        }\n\n        .swiper-button-next:after,\n        .swiper-button-prev:after {\n            font-size: 18px;\n        }\n\n\n        \/* ==========================================\n           PC \/ MOBILE HIGHLIGHTS\n        ========================================== *\/\n\n        .pc-highlights-swiper {\n            display: block;\n        }\n\n        .mobile-highlights-swiper {\n            display: none;\n        }\n\n        .pc-bottom-img {\n            display: block;\n        }\n\n        .mobile-bottom-img {\n            display: none;\n        }\n\n\n        \/* ==========================================\n           HIGHLIGHT CARDS\n        ========================================== *\/\n\n        .pc-card-swiper {\n            display: block;\n        }\n\n        .mobile-card-grid {\n            display: none;\n        }\n\n        .pc-card-swiper,\n        .mobile-card-grid {\n            margin: 40px 0;\n            padding: 20px 0;\n        }\n\n        .pc-card-swiper .swiper-slide {\n            display: flex;\n            flex-direction: column;\n            padding: 0 15px;\n        }\n\n        .highlight-card {\n            text-align: center;\n            background: #fff;\n            padding: 20px;\n            border-radius: 12px;\n            box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n            height: 100%;\n            display: flex;\n            flex-direction: column;\n            box-sizing: border-box;\n        }\n\n        .highlight-card img {\n            width: 100%;\n            max-width: 300px;\n            border-radius: 8px;\n            margin: 0 auto 16px;\n            flex-shrink: 0;\n        }\n\n        .highlight-card h4 {\n            font-size: 18px;\n            margin: 12px 0;\n            font-weight: 600;\n            color: var(--primary);\n        }\n\n        .highlight-card p {\n            font-size: 14px;\n            color: var(--gray);\n            line-height: 1.5;\n            flex-grow: 1;\n        }\n\n\n        \/* ==========================================\n           MOBILE HIGHLIGHTS\n        ========================================== *\/\n\n        @media (max-width: 768px) {\n\n            .pc-highlights-swiper {\n                display: none;\n            }\n\n            .mobile-highlights-swiper {\n                display: block;\n                width: calc(100% + 60px);\n                margin-left: -30px;\n                margin-right: -30px;\n                margin-top: 0;\n                margin-bottom: 80px;\n                border-radius: 0;\n                box-shadow: none;\n            }\n\n            .mobile-highlights-swiper .swiper-slide {\n                padding: 40px 0;\n                background: #fff;\n            }\n\n            .mobile-highlights-swiper .swiper-slide img {\n                width: auto;\n                max-width: 100%;\n                height: auto;\n                max-height: 78vh;\n                object-fit: contain;\n                object-position: center;\n                border-radius: 0;\n            }\n\n            .mobile-highlights-swiper .swiper-button-next,\n            .mobile-highlights-swiper .swiper-button-prev {\n                display: none;\n            }\n\n            .mobile-highlights-swiper .swiper-pagination {\n                bottom: 15px;\n            }\n\n            .pc-bottom-img {\n                display: none;\n            }\n\n            .mobile-bottom-img {\n                display: block;\n            }\n\n            .pc-card-swiper {\n                display: none;\n            }\n\n            .mobile-card-grid {\n                display: grid;\n                grid-template-columns: 1fr;\n                gap: 20px;\n                margin: 40px 0;\n                padding: 0 10px;\n            }\n        }\n\n\n        \/* ==========================================\n           BOTTOM IMAGE\n        ========================================== *\/\n\n        .bottom-img-wrap {\n            margin: 20px 0;\n            border-radius: 12px;\n            overflow: hidden;\n            box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n        }\n\n        .bottom-img-wrap img {\n            width: 100%;\n            height: auto;\n            display: block;\n        }\n\n\n        \/* ==========================================\n           MEDIA EVALUATION\n        ========================================== *\/\n\n        .media-swiper {\n            padding-bottom: 46px;\n        }\n\n        .media-swiper .swiper-slide {\n            display: block;\n            height: auto;\n            background: transparent;\n        }\n\n        .media-card {\n            position: relative;\n            display: block;\n            width: 100%;\n            height: 0;\n            padding-bottom: 133.33%;\n            border-radius: 14px;\n            overflow: hidden;\n            text-decoration: none;\n            background: #111;\n            box-shadow: 0 6px 20px rgba(0, 0, 0, 0.12);\n            transition: transform 0.3s ease, box-shadow 0.3s ease;\n        }\n\n        .media-card:hover {\n            transform: translateY(-6px);\n            box-shadow: 0 14px 30px rgba(0, 0, 0, 0.18);\n        }\n\n        .media-swiper .media-card-img {\n            position: absolute !important;\n            top: 0 !important;\n            left: 0 !important;\n            right: 0 !important;\n            bottom: 0 !important;\n            width: 100% !important;\n            height: 100% !important;\n            max-width: none;\n            object-fit: cover;\n            border-radius: 0;\n            margin: 0;\n            transition: transform 0.5s ease;\n        }\n\n        .media-card:hover .media-card-img {\n            transform: scale(1.06);\n        }\n\n        .media-card-name {\n            position: absolute;\n            top: 14px;\n            left: 14px;\n            max-width: calc(100% - 28px);\n            background: rgba(20, 20, 20, 0.55);\n            color: #fff;\n            font-size: 13px;\n            font-weight: 600;\n            padding: 6px 14px;\n            border-radius: 999px;\n            backdrop-filter: blur(3px);\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n        }\n\n        .media-card-play {\n            position: absolute;\n            top: 14px;\n            right: 14px;\n            width: 30px;\n            height: 30px;\n            border-radius: 50%;\n            background: rgba(20, 20, 20, 0.55);\n            color: #fff;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 13px;\n            backdrop-filter: blur(3px);\n        }\n\n        .media-card-overlay {\n            position: absolute;\n            left: 0;\n            right: 0;\n            bottom: 0;\n            padding: 46px 16px 16px;\n            background: linear-gradient(to top,\n                    rgba(0, 0, 0, 0.88) 15%,\n                    rgba(0, 0, 0, 0.55) 55%,\n                    rgba(0, 0, 0, 0) 100%);\n            color: #fff;\n        }\n\n        .media-card-quote {\n            font-size: 13px;\n            line-height: 1.55;\n            margin: 0 0 10px;\n            display: -webkit-box;\n            -webkit-line-clamp: 4;\n            -webkit-box-orient: vertical;\n            overflow: hidden;\n        }\n\n        .media-card-rating {\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            font-size: 13px;\n        }\n\n        .media-card-rating .stars {\n            color: #ffb400;\n            letter-spacing: 1px;\n            font-size: 14px;\n        }\n\n        .media-card-rating .score {\n            color: #eee;\n            font-weight: 600;\n        }\n\n        .media-swiper .swiper-button-disabled {\n            display: none;\n        }\n\n\n        \/* ==========================================\n           PRODUCT CARD\n        ========================================== *\/\n\n        .product-card {\n            background: #fff;\n            border-radius: 12px;\n            box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n            padding: 24px;\n            width: 100%;\n            max-width: 340px;\n            text-align: center;\n            display: flex;\n            flex-direction: column;\n            justify-content: space-between;\n            box-sizing: border-box;\n            transition: transform 0.3s ease, box-shadow 0.3s ease;\n        }\n\n        @media (hover: hover) {\n            .product-card:hover {\n                transform: translateY(-8px);\n                box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12);\n            }\n        }\n\n        .product-card img {\n            width: 100%;\n            height: auto;\n            border-radius: 8px;\n            margin-bottom: 20px;\n        }\n\n        .card-title {\n            font-size: 18px;\n            font-weight: 600;\n            margin: 16px 0;\n        }\n\n        .spec-list {\n            list-style: none;\n            padding: 0;\n            margin: 20px 0;\n            text-align: left;\n            font-size: 15px;\n            line-height: 1.8;\n        }\n\n        .spec-list li {\n            padding: 8px 0;\n            border-bottom: 1px solid #eee;\n        }\n\n        .spec-list li:last-child {\n            border-bottom: none;\n        }\n\n        .spec-list strong {\n            color: var(--primary);\n        }\n\n        .spec-list li {\n            display: flex;\n            justify-content: space-between;\n            align-items: baseline;\n        }\n\n        .spec-list li strong {\n            flex-shrink: 0;\n        }\n\n        .spec-list li .spec-val {\n            text-align: right;\n        }\n\n        .pBtn {\n            display: inline-block;\n            padding: 12px 28px;\n            background: var(--primary);\n            color: white;\n            border-radius: 8px;\n            text-decoration: none;\n            font-weight: 600;\n            margin-top: auto;\n            transition: background 0.3s ease;\n        }\n\n        .pBtn:hover {\n            background: #2a5a8c;\n        }\n\n\n        \/* ==========================================\n           LIGHTBOX\n        ========================================== *\/\n\n        .lightbox-modal {\n            display: none;\n            position: fixed;\n            z-index: 10000;\n            left: 0;\n            top: 0;\n            width: 100%;\n            height: 100%;\n            background-color: rgba(0, 0, 0, 0.95);\n            justify-content: center;\n            align-items: center;\n            overflow: hidden;\n        }\n\n        .lightbox-modal.active {\n            display: flex;\n        }\n\n        .modal-content {\n            max-width: 95%;\n            max-height: 95%;\n            transform: translateY(120%);\n            transition: transform 0.7s cubic-bezier(0.22, 0.61, 0.36, 1);\n            border-radius: 12px;\n        }\n\n        .lightbox-modal.active .modal-content {\n            transform: translateY(0);\n        }\n\n        .lightbox-close {\n            position: absolute;\n            top: 20px;\n            right: 30px;\n            color: #fff;\n            font-size: 40px;\n            font-weight: bold;\n            cursor: pointer;\n            z-index: 10001;\n        }\n\n\n        \/* ==========================================\n           MOBILE\n        ========================================== *\/\n\n        @media (max-width: 768px) {\n\n            .custom-detail-container {\n                padding: 30px 20px;\n            }\n\n            .section-title {\n                font-size: 28px;\n                margin-bottom: 30px;\n            }\n\n            .accordion-header {\n                font-size: 20px;\n                padding: 16px 20px;\n            }\n\n            \/*\n             * 移动端左右 padding 固定不变，\n             * 上下 padding 仍由 JS 控制展开\/收起动画。\n             *\/\n            .accordion-content {\n                padding-left: 15px;\n                padding-right: 15px;\n            }\n\n            .product-card {\n                padding: 20px;\n                max-width: 300px;\n            }\n\n            .card-title {\n                font-size: 17px;\n            }\n\n            .highlight-card {\n                padding: 15px;\n            }\n\n            .highlight-card img {\n                max-width: 250px;\n            }\n\n            .highlight-card h4 {\n                font-size: 16px;\n            }\n\n            .highlight-card p {\n                font-size: 13px;\n            }\n        }\n\n\n        .accordion-item:first-child .accordion-content {\n            transition: height 0.2s cubic-bezier(0.4, 0, 0.2, 1),\n                padding-top 0.2s cubic-bezier(0.4, 0, 0.2, 1),\n                padding-bottom 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n            will-change: height;\n        }\n\n\n        \/* ==========================================\n        SPEZIFIKATIONEN - MOBILE\n        ========================================== *\/\n\n        .tableBox-narrow {\n            display: none;\n        }\n\n        \/* PC：保持原来的表格 *\/\n        @media (min-width: 769px) {\n\n            .tableBox {\n                display: table;\n            }\n\n            .tableBox-narrow {\n                display: none;\n            }\n\n        }\n\n        \/* 手机端：统一使用窄屏版 *\/\n        @media (max-width: 768px) {\n\n            .tableBox {\n                display: none;\n            }\n\n            .tableBox-narrow {\n                display: block;\n                width: 100%;\n            }\n\n            .tableBox-narrow .spec-item {\n                width: 100%;\n                text-align: left;\n                margin-bottom: 0;\n                padding: 10px 0;\n                position: relative;\n            }\n\n            .tableBox-narrow .spec-item:not(:last-child)::after {\n                content: \"\";\n                position: absolute;\n                bottom: 0;\n                left: 8%;\n                width: 84%;\n                border-bottom: 1px solid #e5e5e5;\n            }\n\n            .tableBox-narrow .spec-name {\n                font-size: 16px;\n                font-weight: 600;\n                text-align: left;\n                margin-bottom: 3px;\n            }\n\n            .tableBox-narrow .spec-value {\n                text-align: left;\n                font-size: 16px;\n                font-weight: 400;\n                color: #555;\n            }\n\n        }\n\n        \/* ==========================================\n        CHOICE SWIPER (MAẞE \u0026 GEWICHTE) 分页点与按钮避让\n        ========================================== *\/\n\n        .choice-swiper {\n            padding-bottom: 40px;\n        }\n\n        .choice-swiper .swiper-pagination {\n            bottom: 6px;\n        }\n\n        .choice-swiper .product-card {\n            margin-bottom: 8px;\n        }\n\n        \/* ==========================================\n                窄屏下 spec-list 换行优化（避免数值断行）\n                ========================================== *\/\n\n        @media (max-width: 374px) {\n\n            .spec-list li {\n                flex-direction: column;\n                align-items: flex-start;\n                gap: 2px;\n            }\n\n            .spec-list li .spec-val {\n                text-align: left;\n                width: 100%;\n            }\n\n        }\n    \u003c\/style\u003e\n\n\n    \u003c!-- ==========================================\n         FEATURES\n         默认展开\n    ========================================== --\u003e\n\n    \u003cdiv class=\"accordion-item active\"\u003e\n\n        \u003cdiv class=\"accordion-header\"\u003e\n            VLASTNOSTI\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"accordion-content\"\u003e\n\n            \u003cdiv class=\"features-list\"\u003e\n\n                \u003cp\u003e\n                    \u003cstrong\u003e● Dvojitá střecha z pozinkované oceli\u003c\/strong\u003e:\n                    Dvojitá střecha s horním odvětráváním podporuje přirozenou cirkulaci vzduchu a pomáhá udržovat\n                    příjemné klima pod\n                    střechou. Pozinkovaná ocel je odolná proti korozi a je vhodná pro dlouhodobé používání v exteriéru.\n                \u003c\/p\u003e\n\n                \u003cp\u003e\n                    \u003cstrong\u003e● Odnímatelné závěsy a síťky proti hmyzu\u003c\/strong\u003e:\n                    Polyesterové závěsy pomáhají omezit sluneční záření a zároveň poskytují více soukromí. Síťky proti\n                    hmyzu umožňují volné\n                    proudění vzduchu a chrání před hmyzem. Díky dvojitým zipům na obou stranách je vstup a výstup snadný\n                    a pohodlný.\n                \u003c\/p\u003e\n\n                \u003cp\u003e\n                    \u003cstrong\u003e● Hliníková konstrukce s práškovým lakováním\u003c\/strong\u003e:\n                    Pevná a zároveň lehká hliníková konstrukce s práškovou povrchovou úpravou nabízí vysokou stabilitu a\n                    odolnost proti\n                    korozi. Konstrukce je navržena pro dlouhodobé používání ve venkovním prostředí.\n                \u003c\/p\u003e\n\n                \u003cspan class=\"see-more\" onclick=\"expandContent(this)\"\u003e﹥Zobrazit více\u003c\/span\u003e\n\n\n                \u003cdiv class=\"more-text\"\u003e\n\n\n                    \u003cp\u003e\n                        \u003cstrong\u003e● Efektivní odvod vody\u003c\/strong\u003e:\n                        Střecha je navržena se spádem, který zajišťuje účinný odvod dešťové vody a tajícího sněhu.\n                    \u003c\/p\u003e\n\n                    \u003cp\u003e\n                        \u003cstrong\u003e● Integrované stropní háčky\u003c\/strong\u003e:\n                        Praktické stropní háčky jsou pevně integrovány do konstrukce a umožňují snadné zavěšení lustru,\n                        svítidla nebo dalších\n                        dekorací. Altán tak můžete snadno přizpůsobit pro odpočinek, stolování i příjemné posezení s\n                        rodinou a přáteli.\n                    \u003c\/p\u003e\n\n                    \u003cp\u003e\n                        \u003cstrong\u003e● Platná záruka\u003c\/strong\u003e:\n                        Poskytujeme omezenou záruku na výrobní vady: 5 let na pevnou střechu, 2 roky na závěsy a síťky a\n                        1 rok na konstrukci\n                        altánu.\n                    \u003c\/p\u003e\n\n                    \u003cp\u003e\n                        \u003cstrong\u003ePo dokončení instalace \u003cb\u003e\u003ca href=\"https:\/\/purpleleafshop.cz\/collections\/zahradni-altan\" target=\"_blank\" rel=\"noopener\" style=\"color:#ff8000;\"\u003ealtán\u003c\/a\u003e\u003c\/b\u003e vždy bezpečně ukotvěte k zemi. Před nákupem si prosím u příslušného stavebního úřadu ověřte místní stavební předpisy a\n                        případné požadavky na povolení. V závislosti na umístění, rozměrech a konstrukci altánu může být vyžadováno povolení\n                        záměru.\u003c\/strong\u003e\n                    \u003c\/p\u003e\n\n                    \u003cp class=\"highlight-text\"\u003e\n                        V případě jakýchkoli dalších dotazů se na nás neváhejte kdykoli obrátit.\n                        E-mail:\n                        \u003ca style=\"color:#ff8000;\" href=\"mailto:gazebo@purpleleafgarden.com\" target=\"_blank\"\u003egazebo@purpleleafgarden.com\u003c\/a\u003e\n                    \u003c\/p\u003e\n\n                    \u003cspan class=\"see-less\" onclick=\"collapseContent(this)\"\u003e﹥Zobrazit méně\u003c\/span\u003e\n\n                \u003c\/div\u003e\n\n            \u003c\/div\u003e\n\n        \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv style=\"display:none\"\u003e\n        \u003c!-- ==========================================\n         HIGHLIGHTS\n    ========================================== --\u003e\n\n        \u003cdiv class=\"accordion-item\"\u003e\n\n            \u003cdiv class=\"accordion-header\"\u003e\n                HLAVNÍ PŘEDNOSTI\n            \u003c\/div\u003e\n\n            \u003cdiv class=\"accordion-content\"\u003e\n\n\n                \u003cdiv class=\"image-container\"\u003e\n                    \u003c!-- 电脑端图片放这里 --\u003e\n                    \u003c!-- 第一张图片 --\u003e\n                    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0997\/9582\/9048\/files\/6fb7440a665c693a4559b674de646ce2.jpg?v=1792826318\"\u003e\n                    \u003c!-- 第二张图片 --\u003e\n                    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-04_a44a33cf-88d4-45a4-a5d6-cefb3223c40b.jpg?v=1770623139\"\u003e\n                            \u003c\/div\u003e\n\n                \u003cdiv class=\"mobile-image-container\"\u003e\n                    \u003c!-- 手机端图片放这里 --\u003e\n                    \u003c!-- 第一张图片 --\u003e\n                    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0997\/9582\/9048\/files\/PE-02_e7824b99-5fc3-444a-998b-4e455b58f98a.webp?v=1792827202\"\u003e\n                    \u003c!-- 第二张图片 --\u003e\n                    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-04_ac2760ac-4728-4e6a-be14-80d2f9411058.jpg?v=1770623138\"\u003e\n                            \u003c\/div\u003e\n\n                \u003cdiv class=\"wai\"\u003e\n\n                    \u003c!-- 轮播图1 --\u003e\n                    \u003cdiv class=\"carousel-section\"\u003e\n                        \u003cdiv class=\"carousel-container newCustom\" data-autoplay=\"false\"\u003e\n                            \u003c!-- 左箭头 --\u003e\n                            \u003cbutton class=\"carousel-btn left\"\u003e❮\u003c\/button\u003e\n                            \u003c!-- 桌面端轮播 --\u003e\n                            \u003cdiv class=\"carousel-track desktop-carousel\" style=\"transform: translateX(-300%)\"\u003e\n                                \u003c!-- 图片及tab文案 --\u003e\n                                \u003c!-- 示例：\u003cimg class=\"carousel-img\" src=\"填写图片地址\" alt=\"填写tab上面要展示的文案\" \/\u003e --\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-_-01.jpg?v=1787552741\" alt=\"Zesílené sloupky\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-06_51ad5905-d067-4020-b592-f90a53059407.jpg?v=1770623544\" alt=\"Přídavné střešní nosníky\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-_-02.jpg?v=1787552742\" alt=\"Barvené závěsy\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-_-03.jpg?v=1787552741\" alt=\"Textilene síť\"\u003e\n                                        \u003c\/div\u003e\n                            \u003c!-- 手机端轮播（600x450）--\u003e\n                            \u003cdiv class=\"carousel-track mobile-carousel\" style=\"transform: translateX(-300%)\"\u003e\n                                \u003c!-- 图片及tab文案 --\u003e\n                                \u003c!-- 示例：\u003cimg class=\"carousel-img\" src=\"填写图片地址\" alt=\"填写tab上面要展示的文案\" \/\u003e --\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-_-01_90193bb0-ee6a-4f64-96c9-556512ee34df.jpg?v=1787554823\" alt=\"Zesílené sloupky\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-06_bd3b8058-a85e-469e-b036-f19b6c2bec7a.jpg?v=1770624102\" alt=\"Přídavné střešní nosníky\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-_-02_15e21de9-77b8-4909-83f4-b559a9dc02a6.jpg?v=1787554780\" alt=\"Barvené závěsy\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-_-03_8a2170f0-763e-4411-a5db-13776ae31270.jpg?v=1787554780\" alt=\"Textilene síť\"\u003e\n                                        \u003c\/div\u003e\n                            \u003c!-- 右箭头 --\u003e\n                            \u003cbutton class=\"carousel-btn right\"\u003e❯\u003c\/button\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n\n                    \u003c!-- 轮播图2 --\u003e\n                    \u003cdiv class=\"carousel-section\"\u003e\n                        \u003cdiv class=\"carousel-container newCustom topbarCenter\" data-autoplay=\"false\"\u003e\n                            \u003c!-- 左箭头 --\u003e\n                            \u003cbutton class=\"carousel-btn left\"\u003e❮\u003c\/button\u003e\n                            \u003c!-- 桌面端轮播 --\u003e\n                            \u003cdiv class=\"carousel-track desktop-carousel\" style=\"transform: translateX(-300%)\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-09_541c8ad3-55f8-4c63-b994-ea7b331e7a40.jpg?v=1770623380\" alt=\"Zákaznický servis\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-07_c72ccf17-76eb-4ffd-95b3-0ac3b3ce7496.jpg?v=1787552741\" alt=\"Dlouhodobá hodnota\"\u003e\n                                        \u003c\/div\u003e\n                            \u003c!-- 手机端轮播（600x450）--\u003e\n                            \u003cdiv class=\"carousel-track mobile-carousel\" style=\"transform: translateX(-300%)\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-10_90780241-2d02-4e6f-ab21-b09e7bcc9f54.jpg?v=1770623371\" alt=\"Zákaznický servis\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-01_95254702-fc57-4cf2-9f4a-8a5bb8f7d8ad.jpg?v=1787554858\" alt=\"Dlouhodobá hodnota\"\u003e\n                                        \u003c\/div\u003e\n                            \u003c!-- 右箭头 --\u003e\n                            \u003cbutton class=\"carousel-btn right\"\u003e❯\u003c\/button\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"swiperTitle\"\u003eGalerie\u003c\/div\u003e\n\n                    \u003c!-- 轮播图3 --\u003e\n                    \u003cdiv class=\"carousel-section\"\u003e\n                        \u003cdiv class=\"carousel-container\" data-time=\"8000\"\u003e\n                            \u003c!-- 左箭头 --\u003e\n                            \u003cbutton class=\"carousel-btn left\"\u003e❮\u003c\/button\u003e\n                            \u003c!-- 桌面端轮播 --\u003e\n                            \u003cdiv class=\"carousel-track desktop-carousel\" style=\"transform: translateX(-300%)\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-08_516ffb32-ee89-479a-aea8-4ccdb23fa460.jpg?v=1770623544\" alt=\"Detail1\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-_-05_0bc031ea-7a5a-493f-8950-df41c8ed5b98.jpg?v=1787555361\" alt=\"Detail1\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-_-04_96f4f5be-7a1b-49b6-a03a-0f4e6a092c5c.jpg?v=1787555361\" alt=\"Detail2\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-13_f5db4010-a81a-4510-a5a8-c0ddb2010890.jpg?v=1770623231\" alt=\"Detail3\"\u003e\n\n                                        \u003c\/div\u003e\n                            \u003c!-- 手机端轮播（600x450）--\u003e\n                            \u003cdiv class=\"carousel-track mobile-carousel\" style=\"transform: translateX(-300%)\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-08_90d0d66c-d79d-4c83-a764-9c6a8ce28250.jpg?v=1770624103\" alt=\"Detail 1\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-_-04.jpg?v=1787555495\" alt=\"Detail 1\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-_-05.jpg?v=1787555495\" alt=\"Detail 2\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-13_0decbdd2-ea33-447d-b7e4-fb4e85197874.jpg?v=1770623327\" alt=\"Detail 3\"\u003e\n\n                                        \u003c\/div\u003e\n                            \u003c!-- 右箭头 --\u003e\n                            \u003cbutton class=\"carousel-btn right\"\u003e❯\u003c\/button\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n\n                    \u003c!-- 轮播图4 --\u003e\n                    \u003cdiv class=\"carousel-section\"\u003e\n                        \u003cdiv class=\"carousel-container\"\u003e\n                            \u003c!-- 左箭头 --\u003e\n                            \u003cbutton class=\"carousel-btn left\"\u003e❮\u003c\/button\u003e\n                            \u003c!-- 桌面端轮播 --\u003e\n                            \u003cdiv class=\"carousel-track desktop-carousel\" style=\"transform: translateX(-300%)\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-14_6b301166-c857-4c54-ac90-d94e7cabd361.jpg?v=1770623463\" alt=\"Detail1\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-06_363ed830-509f-49b0-aecc-6e037b4445e5.jpg?v=1787556152\" alt=\"Detail2\"\u003e\n                                \u003cimg class=\"carousel-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PC-16_07bc8e26-c7f2-4a0c-b4ca-f7d833a48a99.jpg?v=1770623463\" alt=\"Detail3\"\u003e\n                                        \u003c\/div\u003e\n                            \u003c!-- 手机端轮播（600x450）--\u003e\n                            \u003cdiv class=\"carousel-track mobile-carousel\" style=\"transform: translateX(-300%)\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-_-01_e7cdf913-23b1-4600-a91d-619db0d407ff.jpg?v=1770623452\" alt=\"Detail 1\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-_-03_8792587c-a49b-4b47-ac71-7c3a996898bd.jpg?v=1770623452\" alt=\"Detail 2\"\u003e\n                                \u003cimg class=\"carousel-img mobile-img\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0408\/7765\/4176\/files\/PE-06_fdff46b4-bc90-4140-ad21-39ef95c8c6bb.jpg?v=1787556152\" alt=\"Detail 3\"\u003e\n                                        \u003c\/div\u003e\n                            \u003c!-- 右箭头 --\u003e\n                            \u003cbutton class=\"carousel-btn right\"\u003e❯\u003c\/button\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/div\u003e\n\n\n\n\n    \u003c!-- ==========================================\n             TECHNISCHE DATEN\n        ========================================== --\u003e\n    \u003cdiv class=\"accordion-item\"\u003e\n        \u003c!-- ① --\u003e\n\n        \u003cdiv class=\"accordion-header\"\u003e\n            \u003c!-- ② --\u003e\n            TECHNICKÉ ÚDAJE\n        \u003c\/div\u003e \u003c!-- ② --\u003e\n\n        \u003cdiv class=\"accordion-content\"\u003e\n            \u003c!-- ③ --\u003e\n\n            \u003cdiv class=\"policy-section\"\u003e\n                \u003c!-- ④ --\u003e\n\n                \u003cdiv class=\"footerTable\"\u003e\n                    \u003c!-- ⑤ --\u003e\n\n                    \u003cstyle\u003e\n                        \/* 强制控制隐藏与显示 *\/\n                        .sku-detail-group {\n                            display: none !important;\n                        }\n\n                        .sku-detail-group.is-active {\n                            display: table-row-group !important;\n                        }\n\n                        \/* narrow (移动端) 里 sku-detail-group 挂在 div 上，\n                           不是 tbody，需要用 block 而不是 table-row-group *\/\n                        .tableBox-narrow .sku-detail-group.is-active {\n                            display: block !important;\n                        }\n\n                        @media only screen and (max-width: 600px) {\n                            .image-container {\n                                display: none;\n                            }\n\n                            .mobile-image-container {\n                                margin: 0 !important;\n                                padding: 0 !important;\n                                list-style-type: none;\n                            }\n\n                            .mobile-image-container li {\n                                width: 100%;\n                                margin-bottom: 20px;\n                            }\n\n                            .mobile-image-container img {\n                                width: 100%;\n                                height: auto;\n                                margin: 0px;\n                            }\n                        }\n\n                        @media only screen and (min-width: 601px) {\n                            .mobile-image-container {\n                                display: none;\n                            }\n                        }\n                    \u003c\/style\u003e\n\n                    \u003cscript\u003e\n                        (function() {\n\n  \/\/ 根据 PC 端表格（.tableBox）自动生成 narrow（移动端）\n  \/\/ 对应的全部 spec-item —— 包括通用字段和变体专属字段。\n  \/\/ 以后增删任何参数（无论是否随变体变化），\n  \/\/ 只需要改 PC 端的表格一处，narrow 会在页面加载时\n  \/\/ 按相同顺序自动同步生成，不用再手动复制一份。\n  \/* 根据 VARIANT_FIELDS + VARIANT_DATA 自动生成 PC 端变体 tbody，\n     插入到最后一个「通用 tbody」之前，保持原有顺序；\n     之后 generateNarrowVariantSpecs 会自动同步生成移动端 narrow 内容。 *\/\n  function buildVariantGroups() {\n    var table = document.querySelector('.tableBox');\n    if (!table || !window.VARIANT_DATA || !window.VARIANT_FIELDS) return;\n    if (table.dataset.variantBuilt === '1') return;\n\n    var commonTbodies = table.querySelectorAll(':scope \u003e tbody:not(.sku-detail-group)');\n    if (commonTbodies.length === 0) return;\n    var anchor = commonTbodies[commonTbodies.length - 1]; \/\/ 变体组插在它前面\n\n    VARIANT_DATA.forEach(function (v) {\n      var tbody = document.createElement('tbody');\n      tbody.className = 'sku-detail-group';\n      tbody.setAttribute('data-variant-id', v.id);\n\n      v.values.forEach(function (val, i) {\n        var tr = document.createElement('tr');\n        tr.innerHTML = '\u003cth\u003e\u003cspan class=\"a-text-bold\"\u003e\u003c\/span\u003e\u003c\/th\u003e\u003ctd\u003e\u003cspan\u003e\u003c\/span\u003e\u003c\/td\u003e';\n        tr.querySelector('th span').textContent = VARIANT_FIELDS[i] || '';\n        tr.querySelector('td span').textContent = val;\n        tbody.appendChild(tr);\n      });\n\n      table.insertBefore(tbody, anchor);\n    });\n\n    table.dataset.variantBuilt = '1';\n  }\n\n  function generateNarrowVariantSpecs() {\n    var narrowBox = document.querySelector('.tableBox-narrow');\n    var pcTbodies = document.querySelectorAll('.tableBox \u003e tbody');\n\n    if (!narrowBox || pcTbodies.length === 0) return;\n\n    \/\/ 避免重复生成（例如脚本被多次触发）\n    if (narrowBox.dataset.generated === '1') return;\n\n    pcTbodies.forEach(function(tbody) {\n      \/\/ 保留原有分组信息：如果这个 tbody 是变体专属的\n      \/\/ （带 sku-detail-group 类 + data-variant-id），\n      \/\/ 生成的每一项也带上同样的类和属性；\n      \/\/ 否则就是所有变体通用的普通字段。\n      var isVariantGroup = tbody.classList.contains('sku-detail-group');\n      var variantId = tbody.getAttribute('data-variant-id');\n\n      var rows = tbody.querySelectorAll('tr');\n\n      rows.forEach(function(tr) {\n        var th = tr.querySelector('th');\n        var td = tr.querySelector('td');\n        if (!th || !td) return;\n\n        var specItem = document.createElement('div');\n        specItem.className = isVariantGroup\n          ? 'spec-item sku-detail-group'\n          : 'spec-item';\n\n        if (isVariantGroup \u0026\u0026 variantId) {\n          specItem.setAttribute('data-variant-id', variantId);\n        }\n\n        var specName = document.createElement('div');\n        specName.className = 'spec-name';\n        specName.innerHTML = th.innerHTML;\n\n        var specValue = document.createElement('div');\n        specValue.className = 'spec-value';\n        specValue.innerHTML = td.innerHTML;\n\n        specItem.appendChild(specName);\n        specItem.appendChild(specValue);\n        narrowBox.appendChild(specItem);\n      });\n    });\n\n    narrowBox.dataset.generated = '1';\n  }\n\n  function getVariantIdFromUrl() {\n    var params = new URLSearchParams(window.location.search);\n    return params.get('variant');\n  }\n\n  function getVariantIdFromForm() {\n    var hiddenIdInput = document.querySelector('form[action*=\"\/cart\/add\"] input[name=\"id\"], form[action*=\"\/cart\/add\"] select[name=\"id\"]');\n    return hiddenIdInput ? hiddenIdInput.value : null;\n  }\n\n  function switchVariantGroup() {\n    var currentVariantId = getVariantIdFromUrl() || getVariantIdFromForm();\n    var groups = document.querySelectorAll('.sku-detail-group');\n    if (groups.length === 0) return;\n\n    var matchedGroups = [];\n\n    \/\/ 1. 匹配 Variant ID（同一变体在 PC 端和 narrow 端会对应多个元素，\n    \/\/    所以这里要收集全部匹配项，而不是只记录最后一个）\n    if (currentVariantId) {\n      groups.forEach(function(group) {\n        if (group.getAttribute('data-variant-id') === currentVariantId) {\n          matchedGroups.push(group);\n        }\n      });\n    }\n\n    \/\/ 2. 未匹配到任何元素时，以 DOM 中第一个元素的 variant-id 为准，\n    \/\/    激活所有共享该 variant-id 的元素（同样不止一个）\n    if (matchedGroups.length === 0) {\n      var firstGroup = document.querySelector('.sku-detail-group');\n      if (firstGroup) {\n        var fallbackId = firstGroup.getAttribute('data-variant-id');\n        groups.forEach(function(group) {\n          if (group.getAttribute('data-variant-id') === fallbackId) {\n            matchedGroups.push(group);\n          }\n        });\n      }\n    }\n\n    \/\/ 3. 切换状态\n    groups.forEach(function(group) {\n      group.classList.remove('is-active');\n    });\n\n    matchedGroups.forEach(function(group) {\n      group.classList.add('is-active');\n    });\n  }\n\n  \/\/ 1. 监听浏览器的历史前进后退\n  window.addEventListener('popstate', switchVariantGroup);\n\n  \/\/ 2. 拦截 History API (pushState 和 replaceState)，完美适配单页应用主题的 URL 动态切换\n  var originalPushState = history.pushState;\n  var originalReplaceState = history.replaceState;\n  \n  if (originalPushState) {\n    history.pushState = function() {\n      originalPushState.apply(this, arguments);\n      switchVariantGroup();\n    };\n  }\n  \n  if (originalReplaceState) {\n    history.replaceState = function() {\n      originalReplaceState.apply(this, arguments);\n      switchVariantGroup();\n    };\n  }\n\n  \/\/ 3. 监听表单改动事件\n  document.addEventListener('change', switchVariantGroup, true);\n\n  \/\/ 4. 监听关键规格元素的点击事件（带极短防抖延迟，等待主题渲染）\n  document.addEventListener('click', function(e) {\n    if (e.target.matches('input[type=\"radio\"], select, .variant-input, [data-option-value], label')) {\n      setTimeout(switchVariantGroup, 50);\n    }\n  }, true);\n\n  \/\/ 5. 初始化：等待 DOM 完全解析后，\n  \/\/    先生成 narrow 内容，再执行首次匹配\n  function init() {\n    buildVariantGroups();          \/\/ 先根据 VARIANT_DATA 生成 PC 端变体 tbody\n    generateNarrowVariantSpecs();  \/\/ 再自动同步生成移动端 narrow 内容\n    switchVariantGroup();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n                    \u003c\/script\u003e\n\n                    \u003c!-- ===== 变体规格数据：唯一需要修改的地方 ===== --\u003e\n                    \u003cscript\u003e\n                        \/* 字段名（顺序 = 每个变体 values 的顺序） *\/\n                      var VARIANT_FIELDS = [\n                        'Rozměry střechy',\n                        'Přesah střechy',\n                        'Vnější rozměry',\n                        'Vnitřní rozměry',\n                        'Výška hřebene',\n                        'Výška okapu',\n                        'Hrubá hmotnost',\n                        'Počet háčků',\n                        'Nosnost háčku',\n                        'Počet balení',\n                        'Počet průchodů'\n                      ];\n\n                      \/* 各变体数据：id = data-variant-id，values 与字段一一对应 *\/\n                      var VARIANT_DATA = [\n                        { id: '53554699043128', values: ['238 × 238 cm', '14 cm', '210 × 210 cm', '190 × 190 cm', '272 cm', '193 cm', '76 kg', '1', '25 kg', '3', '4'] },\n                        { id: '53554699075896', values: ['238 × 298 cm', '14 cm', '210 × 270 cm', '190 × 250 cm', '272 cm', '193 cm', '89 kg', '3', '25 kg', '3', '4'] },\n                        { id: '53554699108664', values: ['298 × 298 cm', '14 cm', '270 × 270 cm', '250 × 250 cm', '287 cm', '193 cm', '100 kg', '1', '25 kg', '3', '4'] },\n                        { id: '53554699141432', values: ['298 × 363 cm', '14 cm', '270 × 335 cm', '250 × 315 cm', '289 cm', '195 cm', '113 kg', '3', '25 kg', '3', '4'] },\n                        { id: '53554699174200', values: ['298 × 423 cm', '14 cm', '270 × 395 cm', '250 × 375 cm', '289 cm', '195 cm', '132 kg', '3', '25 kg', '4', '4'] },\n                        { id: '53554699206968', values: ['363 × 363 cm', '14 cm', '335 × 335 cm', '315 × 315 cm', '303 cm', '193 cm', '134 kg', '3', '25 kg', '5', '4'] },\n                        { id: '53554699239736', values: ['363 × 423 cm', '14 cm', '335 × 395 cm', '315 × 375 cm', '305 cm', '195 cm', '143 kg', '3', '25 kg', '5', '4'] },\n                        { id: '53554699272504', values: ['363 × 483 cm', '14 cm', '335 × 455 cm', '315 × 435 cm', '305 cm', '195 cm', '177 kg', '3', '25 kg', '6', '4'] },\n                        { id: '53554699305272', values: ['363 × 543 cm', '14 cm', '335 × 515 cm', '315 × 495 cm', '303 cm', '195 cm', '194 kg', '3', '25 kg', '6', '6'] },\n                        { id: '53554699338040', values: ['363 × 593 cm', '14 cm', '335 × 565 cm', '315 × 545 cm', '305 cm', '195 cm', '211 kg', '4', '25 kg', '6', '6'] }\n                      ];\n                    \u003c\/script\u003e\n\n\n                    \u003ctable class=\"tableBox\"\u003e\n\n                        \u003ctbody\u003e\n                            \u003c!-- 第一行START --\u003e\n                            \u003ctr\u003e\n                                \u003c!-- 表格左侧文案 下面同理--\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eMateriál střechy\u003c\/span\u003e\u003c\/th\u003e\n                                \u003c!-- 表格右侧文案 下面同理--\u003e\n                                \u003ctd\u003e\n                                    \u003cspan\u003e Pozinkovaná ocel \u003c\/span\u003e\n                                \u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第一行END --\u003e\n\n                            \u003c!-- 第一行START --\u003e\n                            \u003ctr\u003e\n                                \u003c!-- 表格左侧文案 下面同理--\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eTloušťka střešního plechu\u003c\/span\u003e\u003c\/th\u003e\n                                \u003c!-- 表格右侧文案 下面同理--\u003e\n                                \u003ctd\u003e\n                                    \u003cspan\u003e 0,3 mm \u003c\/span\u003e\n                                \u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第一行END --\u003e\n\n                            \u003c!-- 第二行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eMateriál konstrukce\u003c\/span\u003e\u003c\/th\u003e\n                                \u003ctd\u003e\u003cspan\u003e Hliník \u003c\/span\u003e\u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第二行END --\u003e\n\n                            \u003c!-- 第二行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eTloušťka hliníkových profilů\u003c\/span\u003e\u003c\/th\u003e\n                                \u003ctd\u003e\u003cspan\u003e 1,1 mm \u003c\/span\u003e\u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第二行END --\u003e\n\n                            \u003c!-- 第二行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eRozměry sloupků\u003c\/span\u003e\u003c\/th\u003e\n                                \u003ctd\u003e\u003cspan\u003e 10 x 10 cm \u003c\/span\u003e\u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第二行END --\u003e\n\n                            \u003c!-- 第二行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eRozměry základových patek\u003c\/span\u003e\u003c\/th\u003e\n                                \u003ctd\u003e\u003cspan\u003e 20 x 20 cm \u003c\/span\u003e\u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第二行END --\u003e\n\n                            \u003c!-- 第二行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eMateriál závěsů\u003c\/span\u003e\u003c\/th\u003e\n                                \u003ctd\u003e\u003cspan\u003e Polyester 180 g\/m² \u003c\/span\u003e\u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第二行END --\u003e\n\n                            \u003c!-- 第二行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eMateriál síťek\u003c\/span\u003e\u003c\/th\u003e\n                                \u003ctd\u003e\u003cspan\u003e Textilene 110 g\/m² \u003c\/span\u003e\u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第二行END --\u003e\n\n                            \u003c!-- 第二行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eMax. rychlost větru\u003c\/span\u003e\u003c\/th\u003e\n                                \u003ctd\u003e\u003cspan\u003e 64 km\/h \u003c\/span\u003e\u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第二行END --\u003e\n\n                            \u003c!-- 第二行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eZatížení sněhem\u003c\/span\u003e\u003c\/th\u003e\n                                \u003ctd\u003e\u003cspan\u003e 30 kg\/m² \u003c\/span\u003e\u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第二行END --\u003e\n                        \u003c\/tbody\u003e\n\n\n\n\n\n\n\n\n                        \u003ctbody\u003e\n\n                            \u003c!-- 第二行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eStálobarevnost závěsů\u003c\/span\u003e\u003c\/th\u003e\n                                \u003ctd\u003e\u003cspan\u003e 2 roky \u003c\/span\u003e\u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第二行END --\u003e\n\n                            \u003c!-- 第三行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\n                                    \u003cspan class=\"a-text-bold\"\u003eZáruka\u003c\/span\u003e\n                                \u003c\/th\u003e\n                                \u003ctd\u003e\n                                    \u003cspan\u003ePoskytujeme omezenou záruku na výrobní vady:\u003cbr\u003e\n                                        \u003cb\u003e•\u003c\/b\u003e 5 let na pevnou střechu；\u003cbr\u003e\n                                        \u003cb\u003e•\u003c\/b\u003e 2 roky na závěsy a síťky proti hmyzu；\u003cbr\u003e\n                                        \u003cb\u003e•\u003c\/b\u003e 1 rok na konstrukci altánu.\n                                    \u003c\/span\u003e\n                                \u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第三行END --\u003e\n\n                            \u003c!-- 第四行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\n                                    \u003cspan class=\"a-text-bold\"\u003eInstalace\u003c\/span\u003e\n                                \u003c\/th\u003e\n                                \u003ctd\u003e\n                                    \u003cspan\u003e\n                                        K instalaci jsou zapotřebí 2–3 osoby. Je nutný žebřík a ochranné rukavice.\n                                    \u003c\/span\u003e\n                                \u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第四行END --\u003e\n\n                            \u003c!-- 第五行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\n                                    \u003cspan class=\"a-text-bold\"\u003ePovolení\u003c\/span\u003e\n                                \u003c\/th\u003e\n                                \u003ctd\u003e\n                                    \u003cspan\u003ePro tento altán může být vyžadováno povolení. \n                                        Před nákupem si prosím u příslušného stavebního úřadu ověřte místní stavební předpisy a případné požadavky na povolení.\n                                    \u003c\/span\u003e\n                                \u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第五行END --\u003e\n\n                            \u003c!-- 第六行START --\u003e\n                            \u003ctr\u003e\n                                \u003cth\u003e\u003cspan class=\"a-text-bold\"\u003eRozměrové tolerance\u003c\/span\u003e\u003c\/th\u003e\n                                \u003ctd\u003e\n                                    \u003cspan\u003eVzhledem k povaze našich výrobků se mohou skutečné rozměry mírně lišit, a to až o ±5 cm. \n                                        Vrácení zboží z důvodu odchylky v rámci této povolené tolerance není zdarma.\n                                    \u003c\/span\u003e\n                                \u003c\/td\u003e\n                            \u003c\/tr\u003e\n                            \u003c!-- 第六行END --\u003e\n                        \u003c\/tbody\u003e\n                    \u003c\/table\u003e\n\n\n                    \u003cdiv class=\"tableBox-narrow\"\u003e\n                        \u003c!-- 全部内容由 JS 从 PC 端 .tableBox 自动生成，见下方 generateNarrowVariantSpecs --\u003e\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e \u003c!-- ⑤ --\u003e\n\n            \u003c\/div\u003e \u003c!-- ④ --\u003e\n\n        \u003c\/div\u003e \u003c!-- ③ --\u003e\n\n    \u003c\/div\u003e \u003c!-- ① --\u003e\n\n\n    \u003c!-- ==========================================\n         SHIPPING \u0026 RETURN\n    ========================================== --\u003e\n\n    \u003cdiv class=\"accordion-item\"\u003e\n\n        \u003cdiv class=\"accordion-header\"\u003e\n            DOPRAVA A VRÁCENÍ\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"accordion-content\"\u003e\n\n            \u003cdiv class=\"policy-section\"\u003e\n\n                \u003ch4\u003eDoba a lhůta doručení\u003c\/h4\u003e\n\n                \u003cp\u003e Objednávky obvykle odesíláme do 24–48 hodin od potvrzení platby (v pracovních dnech).\n                \u003c\/p\u003e\n\n                \u003cp\u003e\n                    Zásilky obvykle doručujeme prostřednictvím společností DPD, UPS nebo Hellmann. Průměrná doba\n                    doručení je přibližně 4–10 pracovních dnů. Předpokládané datum doručení si můžete ověřit na stránce\n                    produktu. Ve výjimečných případech může dojít ke zpoždění při aktualizaci údajů o zásilce nebo\n                    sledovacího čísla.\n                \u003c\/p\u003e\n\n                \u003cp\u003e\n                    Ve vzácných případech může být doba doručení z důvodu nepředvídatelných událostí (např. extrémního\n                    počasí, mimořádného nárůstu počtu objednávek apod.) delší.\n                \u003c\/p\u003e\n\n\n                \u003ch4\u003eDoprava zdarma\u003c\/h4\u003e\n\n                \u003cp\u003e\n                    Všechny naše produkty standardně doručujeme zdarma v rámci České republiky. Za doručení těchto\n                    produktů neplatíte žádné další poplatky ani manipulační či zpracovatelské poplatky. Cena uvedená v\n                    nákupním košíku je celková cena vaší objednávky. Při doručení do jiných evropských zemí mohou být\n                    účtovány dodatečné náklady na dopravu.\n                \u003c\/p\u003e\n\n                \u003cp\u003e\n                    V některých výjimečných případech je nutné uhradit náklady na dopravu, například při vrácení zboží,\n                    výměně zboží nebo doručení do vybraných regionů.\n                \u003c\/p\u003e\n\n\n                \u003ch4\u003eSledování zásilky\u003c\/h4\u003e\n\n                \u003cp\u003e\n                    O předpokládaném termínu doručení vás budeme informovat e-mailem. V případě dalších dotazů nás\n                    prosím kontaktujte na adrese purpleleafservice2@gmail.com.\n                \u003c\/p\u003e\n\n                \u003cp\u003e\n                    Pokud chcete svou objednávku změnit nebo zrušit, nejprve si prosím ověřte, zda již byla zpracována.\n                    Jakmile objednávka opustí náš sklad, již ji není možné změnit ani zrušit.\n                \u003c\/p\u003e\n\n                \u003cp\u003eUpozornění:\u003c\/p\u003e\n\n                \u003cul\u003e\n                    \u003cli\u003e1. Sledování zásilky ještě není k dispozici u objednávek se stavem „Zpracovává se“.\u003c\/li\u003e\n                    \u003cli\u003e2. Po odeslání může aktualizace informací o sledování zásilky trvat až 48 hodin.\u003c\/li\u003e\n                \u003c\/ul\u003e\n\n\n                \u003ch4\u003ePoškozené zásilky a zboží při doručení\u003c\/h4\u003e\n\n                \u003cp\u003e\n                    Při převzetí objednávky prosím pečlivě zkontrolujte stav zásilky i samotného zboží. Pokud zjistíte\n                    jakékoli poškození nebo vadu, postupujte prosím následovně:\n                \u003c\/p\u003e\n\n                \u003cul\u003e\n                    \u003cli\u003e1. Pořiďte fotografie, na kterých je poškození nebo vada zřetelně vidět.\u003c\/li\u003e\n                    \u003cli\u003e2. Poté nám co nejdříve zašlete e-mail na adresu purpleleafservice2@gmail.com a přiložte\n                        příslušné fotografie.\u003c\/li\u003e\n                    \u003cli\u003e3. Následně vás budeme kontaktovat a společně s vámi se pokusíme najít co nejvhodnější řešení.\n                    \u003c\/li\u003e\n\u003cli\u003e\n                    \u003c\/li\u003e\n\u003cli\u003e\n                        4. \u003cstrong\u003eUpozornění:\u003c\/strong\u003e Kartonovou krabici a veškerý obalový materiál si prosím\n                        ponechte. Pokud obalový materiál vyhodíte, nemusíme být schopni váš požadavek na vrácení nebo\n                        výměnu zboží vyřídit.\n                    \u003c\/li\u003e\n                \u003c\/ul\u003e\n\n\n                \u003ch4\u003eDalší informace\u003c\/h4\u003e\n\n                \u003cp\u003e\n                    Objednávky zpracováváme od pondělí do pátku (kromě státních svátků). Pokud objednávku zadáte mimo\n                    tuto dobu, zpracujeme ji a odešleme následující pracovní den. O nedělích a státních svátcích zásilky\n                    nedoručujeme.\n                \u003c\/p\u003e\n\n\n\n            \u003c\/div\u003e\n\n        \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n\n    \u003c!-- ==========================================\n         SERVICE \u0026 WARRANTY\n    ========================================== --\u003e\n\n    \u003cdiv class=\"accordion-item\"\u003e\n\n        \u003cdiv class=\"accordion-header\"\u003e\n            SERVIS A ZÁRUKA\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"accordion-content\"\u003e\n\n            \u003cdiv class=\"policy-section\"\u003e\n\n                \u003cp\u003e\n                    \u003cstrong\u003eVážení zákazníci,\u003c\/strong\u003e\n                \u003c\/p\u003e\n\n                \u003cp\u003e\n                    Zajišťujeme, aby všechny produkty, které nabízíme, procházely přísnou kontrolou kvality s cílem\n                    zajistit jejich vysokou kvalitu a spolehlivé používání. Naše záruční podmínky vám zároveň poskytují\n                    jistotu při nákupu produktů PURPLE LEAF. Na všechny produkty prodávané společností PURPLE LEAF se\n                    vztahují následující záruční podmínky.\n                \u003c\/p\u003e\n\n\n                \u003ch4\u003e1. Vrácení zboží a vrácení peněz\u003c\/h4\u003e\n\n                \u003cp\u003e \u003cstrong\u003e30denní lhůta pro vrácení neotevřeného a nepoužitého zboží\u003c\/strong\u003e\u003cbr\u003e Adresa pro vrácení zboží:\u003cbr\u003e\n                    \u003cstrong\u003eIndustriestr. 1\u003cbr\u003e66892 Bruchmühlbach-Miesau\u003cbr\u003eNěmecko\u003c\/strong\u003e\n                \u003c\/p\u003e\n\n                \u003cp\u003e Pokud nejste s nákupem spokojeni nebo si z jiného důvodu nepřejete zboží ponechat, můžete do 30 dnů\n                    od jeho obdržení požádat o vrácení zboží a vrácení peněz. V takovém případě náklady na zpětnou\n                    dopravu hradí zákazník a tyto náklady nejsou propláceny. Zboží musí být vráceno v původním obalu,\n                    nepoužité a neotevřené, aby vznikl nárok na vrácení peněz.\n                \u003c\/p\u003e\n\n                \u003cp\u003e Při vrácení zboží z osobních důvodů nese zákazník skutečně vzniklé náklady na zpětnou dopravu. Pokud\n                    je zboží vadné, náklady na jeho vrácení zákazník nehradí. Za opětovné naskladnění se neúčtuje žádný\n                    poplatek. Veškeré případné poplatky se hradí v eurech.\n                \u003c\/p\u003e\n\n                \u003cp\u003e Upozorňujeme, že náklady na zpětnou dopravu se neproplácejí a pro vrácení peněz musí být zboží\n                    neotevřené a nepoužité.\n                \u003c\/p\u003e\n\n                \u003cp\u003e\n                    Pokud byl obal již otevřen, je nutné zaslat fotografii zboží a předem se na vrácení dohodnout s\n                    prodejcem. V takovém případě lze zboží vrátit pouze po předchozím potvrzení ze strany prodejce.\n                    Pokud vrácení neovlivní běžné použití produktu, může být vrácení přijato. V takovém případě může být\n                    za případné snížení hodnoty zboží způsobené jeho používáním účtována odpovídající částka.\n                \u003c\/p\u003e\n\n                \u003cp\u003e\n                    Ujistěte se prosím, že zboží vracíte společně s původním obalem a veškerým příslušenstvím ve stejném\n                    stavu, v jakém jste jej obdrželi.\n                \u003c\/p\u003e\n\n\n                \u003ch4\u003e2. Případy, kdy nelze zboží vrátit\u003c\/h4\u003e\n\n                \u003cul\u003e\n                    \u003cli\u003e\n                        \u003cstrong\u003e(1)\u003c\/strong\u003e Vrácení zboží nebude přijato, pokud bylo poškození způsobeno neoprávněnou\n                        opravou nebo údržbou, nesprávným používáním, nárazem, nedbalostí, nesprávným zacházením nebo\n                        jiným nevhodným použitím.\n                    \u003c\/li\u003e\n                \u003c\/ul\u003e\n\n                \u003cul\u003e\n                    \u003cli\u003e\u003cstrong\u003e(2) Zboží poškozené při doručení\u003c\/strong\u003e\u003c\/li\u003e\n                \u003c\/ul\u003e\n\n                \u003cp\u003e\n                    Pokud obdržíte vadné nebo poškozené zboží, kontaktujte prosím co nejdříve náš zákaznický servis a do\n                    7 dnů nám zašlete číslo objednávky a fotografie nebo video, na kterých je vada či poškození zřetelně\n                    vidět. Po posouzení případu vám můžeme poskytnout plnou refundaci.\n                \u003c\/p\u003e\n\n                \u003cul\u003e\n                    \u003cli\u003e\n                        \u003cstrong\u003e(3) Chybějící části\u003c\/strong\u003e\n                    \u003c\/li\u003e\n                \u003c\/ul\u003e\n\n                \u003cp\u003e\n                    Pokud jsou některé části produktu poškozené nebo chybí, můžeme vám zaslat náhradní díly nebo\n                    nabídnout částečnou refundaci. Pokud chybějící nebo poškozená část ovlivňuje funkčnost či používání\n                    produktu a není možné ji opravit svépomocí ani prostřednictvím místního technika, zašleme vám nový\n                    produkt nebo vrátíme celou kupní cenu.\n                \u003c\/p\u003e\n\n                \u003cul\u003e\n                    \u003cli\u003e\n                        \u003cstrong\u003e(4) Produkt nefunguje nebo je vadný\u003c\/strong\u003e\n                    \u003c\/li\u003e\n                \u003c\/ul\u003e\n\n                \u003cp\u003e\n                    Pokud obdržíte produkt, který nefunguje, kontaktujte náš zákaznický servis. Poskytneme vám\n                    odpovídající technickou podporu. Pokud produkt ani poté nebude fungovat, můžete požádat o refundaci.\n                    U vadného produktu vám můžeme nabídnout technickou podporu nebo jiné vhodné řešení. Pokud lze\n                    problém vyřešit svépomocí nebo prostřednictvím místního servisu, nabídneme vám přiměřenou\n                    kompenzaci.\n                \u003c\/p\u003e\n\n                \u003cul\u003e\n                    \u003cli\u003e\n                        \u003cstrong\u003e(5) Doručení nesprávného produktu\u003c\/strong\u003e\n                    \u003c\/li\u003e\n                \u003c\/ul\u003e\n\n                \u003cp\u003e\n                    Pokud se obdržený produkt zcela liší od produktu, který jste si objednali, kontaktujte prosím náš\n                    zákaznický servis a do 7 dnů nám zašlete fotografie nebo video nesprávně doručeného produktu.\n                    Následně vám zašleme správný produkt.\n                \u003c\/p\u003e\n\n\n                \u003ch4\u003e3. Potvrzení vrácení zboží\u003c\/h4\u003e\n\n                \u003cul\u003e\n\n                    \u003cli\u003e\n                        \u003cstrong\u003e(1)\u003c\/strong\u003e\n                        Kontaktujte nás na adrese purpleleafservice2@gmail.com a požádejte o štítek pro vrácení zboží.\n                        Zašlete nám prosím číslo objednávky, jasné fotografie nebo video produktu a fotografie\n                        přepravního obalu, abychom mohli vaši žádost o vrácení posoudit a potvrdit.\n                    \u003c\/li\u003e\n\n                    \u003cli\u003e\n                        \u003cstrong\u003e(2)\u003c\/strong\u003e\n                        Při odesílání vráceného zboží se prosím ujistěte, že je produkt v dobrém stavu a že obsahuje\n                        veškeré příslušenství. Na balík nalepte štítek pro vrácení zboží, který vám poskytneme, a\n                        odešlete jej na adresu uvedenou naším zákaznickým servisem.\n                    \u003c\/li\u003e\n\n                    \u003cli\u003e\n                        \u003cstrong\u003e(3)\u003c\/strong\u003e\n                        Vrácené zboží zašlete na následující adresu:\u003cbr\u003e\n                        Industriestr. 1, 66892 Bruchmühlbach-Miesau, Německo\n                    \u003c\/li\u003e\n\n                \u003c\/ul\u003e\n\n\n                \u003ch4\u003e4. Postup při vrácení peněz a kompenzaci\u003c\/h4\u003e\n\n                \u003cul\u003e\n\n                    \u003cli\u003e\n                        \u003cstrong\u003e(1)\u003c\/strong\u003e\n                        Vrácení peněz prostřednictvím služby PayPal může trvat až 24 hodin, než bude platba zpracována a\n                        částka se zobrazí na vašem účtu.\n                    \u003c\/li\u003e\n\n                    \u003cli\u003e\n                        \u003cstrong\u003e(2)\u003c\/strong\u003e\n                        Vrácení peněz na kreditní kartu může trvat 7–14 pracovních dnů, než se částka zobrazí na vašem\n                        účtu. Tato lhůta závisí výhradně na vydavateli vaší kreditní karty a případně na poskytovatelích\n                        platebních služeb zapojených do transakce.\n                    \u003c\/li\u003e\n\n                \u003c\/ul\u003e\n\n                \u003cp\u003e\n                    \u003cstrong\u003eUpozornění:\u003c\/strong\u003e Ceny našich produktů se mohou měnit v závislosti na vývoji nákladů.\n                    Cenové rozdíly vzniklé v důsledku těchto změn se neproplácejí.\n                \u003c\/p\u003e\n\n            \u003c\/div\u003e\n\n        \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n\n    \u003c!-- ==========================================\n         LIGHTBOX\n    ========================================== --\u003e\n\n    \u003cdiv class=\"lightbox-modal\" id=\"lightbox\"\u003e\n\n        \u003cspan class=\"lightbox-close\"\u003e\n            ×\n        \u003c\/span\u003e\n\n        \u003cimg class=\"modal-content\" id=\"lightbox-img\" alt=\"PURPLE-LEAF Adjustable Louvered Pergola\" src=\"\"\u003e\n\n    \u003c\/div\u003e\n\n\n\n\n    \u003c!-- ==========================================\n             JavaScript\n        ========================================== --\u003e\n\n\n    \u003cscript\u003e\n        document.addEventListener('DOMContentLoaded', function () {\n\n        \/* ==========================================\n           VARIABLES\n        ========================================== *\/\n\n        var container = document.querySelector('.custom-detail-container');\n\n        if (!container) {\n            return;\n        }\n\n        var accordionItems = container.querySelectorAll('.accordion-item');\n\n\n        \/* ==========================================\n           ACCORDION\n           \n           Logic:\n           CLOSED:\n           height = 0\n           padding = 0\n\n           OPENING:\n           height = 0\n           →\n           real content height\n           →\n           height = auto\n\n           CLOSING:\n           height = auto\n           →\n           lock current real height\n           →\n           height = 0\n\n           This allows very long content to display\n           completely without being clipped.\n        ========================================== *\/\n\n\n        \/* ==========================================\n           SET ACCORDION PADDING\n        ========================================== *\/\n\n        function setAccordionPadding(content, open) {\n\n            if (!content) {\n                return;\n            }\n\n            if (!open) {\n\n                content.style.paddingTop = '0';\n                content.style.paddingBottom = '0';\n\n                return;\n            }\n\n            if (window.innerWidth \u003c= 768) {\n\n                content.style.paddingTop = '20px';\n                content.style.paddingBottom = '20px';\n\n            } else {\n\n                content.style.paddingTop = '30px';\n                content.style.paddingBottom = '30px';\n\n            }\n\n        }\n\n\n        \/* ==========================================\n           GET REAL CONTENT HEIGHT\n        ========================================== *\/\n\n        function getAccordionHeight(content) {\n\n            if (!content) {\n                return 0;\n            }\n\n            var oldHeight = content.style.height;\n\n            \/*\n             * Temporarily remove height restriction\n             * so the browser can calculate the\n             * complete content height.\n             *\/\n            content.style.height = 'auto';\n\n            void content.offsetHeight;\n\n            var height = content.scrollHeight;\n\n            \/*\n             * Restore previous height.\n             *\/\n            content.style.height = oldHeight;\n\n            return height;\n        }\n\n\n        \/* ==========================================\n           UPDATE ACCORDION HEIGHT\n           \n           IMPORTANT:\n           If accordion is already height:auto,\n           DO NOT convert it back to a fixed height.\n\n           This is critical for very long accordions.\n        ========================================== *\/\n\n        function updateAccordionHeight(content, immediate) {\n\n            if (!content) {\n                return;\n            }\n\n            var item = content.closest('.accordion-item');\n\n            if (!item || !item.classList.contains('active')) {\n                return;\n            }\n\n            \/*\n             * If already auto, let the browser\n             * naturally adapt to content height.\n             *\/\n            if (content.style.height === 'auto') {\n                return;\n            }\n\n            function measure() {\n\n                var height = getAccordionHeight(content);\n\n                content.style.height = height + 'px';\n\n            }\n\n            if (immediate) {\n\n                measure();\n\n            } else {\n\n                requestAnimationFrame(function () {\n\n                    requestAnimationFrame(function () {\n\n                        measure();\n\n                    });\n\n                });\n\n            }\n\n        }\n\n\n        \/* ==========================================\n           UPDATE ALL ACTIVE ACCORDIONS\n        ========================================== *\/\n\n        function updateAllActiveAccordions() {\n\n            container.querySelectorAll(\n                '.accordion-item.active .accordion-content'\n            ).forEach(function (content) {\n\n                \/*\n                 * Open accordions should normally\n                 * remain auto.\n                 *\n                 * Do not force them back to a fixed height.\n                 *\/\n                if (content.style.height === 'auto') {\n                    return;\n                }\n\n                updateAccordionHeight(content, true);\n\n            });\n\n        }\n\n\n        \/* ==========================================\n           INITIALIZE ACCORDIONS\n        ========================================== *\/\n\n        accordionItems.forEach(function (item) {\n\n            var content = item.querySelector('.accordion-content');\n\n            if (!content) {\n                return;\n            }\n\n            \/*\n             * CLOSED ACCORDIONS\n             *\/\n\n            if (!item.classList.contains('active')) {\n\n                content.style.height = '0px';\n                content.style.paddingTop = '0';\n                content.style.paddingBottom = '0';\n\n                return;\n            }\n\n\n            \/*\n             * DEFAULT OPEN ACCORDION\n             *\/\n\n            setAccordionPadding(content, true);\n\n            \/*\n             * First calculate its real height.\n             *\/\n            requestAnimationFrame(function () {\n\n                requestAnimationFrame(function () {\n\n                    var height = getAccordionHeight(content);\n\n                    \/*\n                     * Set the calculated height first.\n                     *\/\n                    content.style.height = height + 'px';\n\n                    \/*\n                     * Then release the height restriction.\n                     *\n                     * From this point onward the content\n                     * can grow naturally.\n                     *\/\n                    requestAnimationFrame(function () {\n\n                        content.style.height = 'auto';\n\n                    });\n\n                });\n\n            });\n\n        });\n\n\n        \/* ==========================================\n           ACCORDION CLICK\n        ========================================== *\/\n\n        container.querySelectorAll('.accordion-header').forEach(function (header) {\n\n            header.addEventListener('click', function () {\n\n                var item = header.closest('.accordion-item');\n\n                if (!item) {\n                    return;\n                }\n\n                var content = item.querySelector('.accordion-content');\n\n                if (!content) {\n                    return;\n                }\n\n                var isActive = item.classList.contains('active');\n\n\n                \/* ==========================================\n                   CLOSE\n                ========================================== *\/\n\n                if (isActive) {\n\n                    \/*\n                     * If currently auto,\n                     * lock the current real height first.\n                     *\/\n                    if (content.style.height === 'auto') {\n\n                        var currentHeight = content.scrollHeight;\n\n                        content.style.height = currentHeight + 'px';\n\n                        void content.offsetHeight;\n\n                    } else {\n\n                        \/*\n                         * If already fixed height,\n                         * make sure we have the current\n                         * actual content height.\n                         *\/\n                        var fixedHeight = content.scrollHeight;\n\n                        content.style.height = fixedHeight + 'px';\n\n                        void content.offsetHeight;\n\n                    }\n\n\n                    \/*\n                     * Start closing animation.\n                     *\n                     * Height and padding animate together.\n                     *\/\n                    requestAnimationFrame(function () {\n\n                        content.style.height = '0px';\n                        content.style.paddingTop = '0';\n                        content.style.paddingBottom = '0';\n\n                    });\n\n\n                    \/*\n                     * Remove active state only after\n                     * height animation has finished.\n                     *\/\n                    var closeHandler = function (e) {\n\n                        if (e.propertyName !== 'height') {\n                            return;\n                        }\n\n                        content.removeEventListener(\n                            'transitionend',\n                            closeHandler\n                        );\n\n                        item.classList.remove('active');\n\n                        \/*\n                         * Make absolutely sure that the\n                         * accordion is completely closed.\n                         *\/\n                        content.style.height = '0px';\n                        content.style.paddingTop = '0';\n                        content.style.paddingBottom = '0';\n\n                    };\n\n\n                    content.addEventListener(\n                        'transitionend',\n                        closeHandler\n                    );\n\n                    return;\n                }\n\n\n                \/* ==========================================\n                   OPEN\n                ========================================== *\/\n\n                \/*\n                 * Make sure the content starts from\n                 * a completely closed state.\n                 *\/\n                content.style.height = '0px';\n                content.style.paddingTop = '0';\n                content.style.paddingBottom = '0';\n\n                void content.offsetHeight;\n\n\n                \/*\n                 * Restore padding.\n                 *\/\n                setAccordionPadding(content, true);\n\n                void content.offsetHeight;\n\n\n                \/*\n                 * Activate accordion.\n                 *\/\n                item.classList.add('active');\n\n\n                \/*\n                 * Wait for browser layout.\n                 *\/\n                requestAnimationFrame(function () {\n\n                    requestAnimationFrame(function () {\n\n                        \/*\n                         * Get the complete content height.\n                         *\/\n                        var height = content.scrollHeight;\n\n                        \/*\n                         * Animate to the real height.\n                         *\/\n                        content.style.height = height + 'px';\n\n\n                        \/*\n                         * Once animation finishes,\n                         * switch to auto.\n                         *\n                         * This is the key for the very long\n                         * fifth and sixth accordions.\n                         *\/\n                        var openHandler = function (e) {\n\n                            if (e.propertyName !== 'height') {\n                                return;\n                            }\n\n                            content.removeEventListener(\n                                'transitionend',\n                                openHandler\n                            );\n\n                            \/*\n                             * Release fixed height.\n                             *\/\n                            content.style.height = 'auto';\n\n                            \/*\n                             * 动画完全结束、宽度已稳定后\n                             * 再更新 Swiper，避免展开过程中\n                             * 反复触发造成抖动。\n                             *\/\n                            updateSwipersInContent(content);\n\n                        };\n\n\n                        content.addEventListener(\n                            'transitionend',\n                            openHandler\n                        );\n\n                    });\n\n                });\n\n            });\n\n        });\n\n\n        \/* ==========================================\n           SEE MORE\n        ========================================== *\/\n\n        window.expandContent = function (el) {\n\n            if (!el) {\n                return;\n            }\n\n            var moreText = el.nextElementSibling;\n\n            if (!moreText) {\n                return;\n            }\n\n            \/\/ 隐藏 \"Mehr anzeigen\" 按钮\n            el.style.display = 'none';\n\n            \/\/ 测出 moreText 展开后的真实高度\n            moreText.style.height = 'auto';\n            var fullHeight = moreText.scrollHeight;\n\n            \/\/ 锁回 0，准备从 0 开始动画\n            moreText.style.height = '0';\n            void moreText.offsetHeight;\n\n            \/\/ 双帧后启动动画，确保浏览器提交起始状态\n            requestAnimationFrame(function () {\n                requestAnimationFrame(function () {\n                    moreText.style.height = fullHeight + 'px';\n\n                    var handler = function (e) {\n                        if (e.propertyName !== 'height') return;\n                        moreText.removeEventListener('transitionend', handler);\n                        \/\/ 释放为 auto，内容如果动态变化也能自适应\n                        moreText.style.height = 'auto';\n                    };\n                    moreText.addEventListener('transitionend', handler);\n                });\n            });\n\n        };\n\n\n        \/* ==========================================\n   SEE LESS\n========================================== *\/\n\nwindow.collapseContent = function (el) {\n    if (!el) return;\n\n    var moreText = el.closest('.more-text');\n    if (!moreText) return;\n\n    var seeMoreBtn = moreText.previousElementSibling;\n\n    \/\/ 如果当前是 auto（展开后释放的状态），\n    \/\/ 先锁定为真实像素高度，才能让过渡有起点\n    if (moreText.style.height === 'auto' || moreText.style.height === '') {\n        moreText.style.height = moreText.scrollHeight + 'px';\n        void moreText.offsetHeight;\n    }\n\n    \/\/ 恢复 \"Mehr anzeigen\" 按钮\n    if (seeMoreBtn) {\n        seeMoreBtn.style.display = 'inline-block';\n    }\n\n    \/\/ 双帧后启动收缩动画，确保浏览器已提交起始高度\n    requestAnimationFrame(function () {\n        requestAnimationFrame(function () {\n            moreText.style.height = '0';\n\n            var finished = false;\n            function finish() {\n                if (finished) return;\n                finished = true;\n                moreText.removeEventListener('transitionend', onEnd);\n            }\n            function onEnd(e) {\n                if (e.propertyName === 'height') finish();\n            }\n            moreText.addEventListener('transitionend', onEnd);\n            setTimeout(finish, 400);\n        });\n    });\n};\n\n\n        \/* ==========================================\n           SWIPER INITIALIZATION\n        ========================================== *\/\n\n        var swiperInstances = [];\n\n\n        function addSwiper(instance) {\n\n            if (instance) {\n                swiperInstances.push(instance);\n            }\n\n            return instance;\n\n        }\n\n\n        \/* ------------------------------------------\n           PC HIGHLIGHTS\n        ------------------------------------------ *\/\n\n        if (container.querySelector('.pc-highlights-swiper')) {\n\n            addSwiper(\n                new Swiper('.pc-highlights-swiper', {\n\n                    loop: true,\n\n                    observer: true,\n                    observeParents: true,\n                    resizeObserver: true,\n\n                    pagination: {\n                        el: '.pc-highlights-swiper .swiper-pagination',\n                        clickable: true\n                    },\n\n                    navigation: {\n                        nextEl: '.pc-highlights-swiper .swiper-button-next',\n                        prevEl: '.pc-highlights-swiper .swiper-button-prev'\n                    }\n\n                })\n            );\n\n        }\n\n\n        \/* ------------------------------------------\n           MOBILE HIGHLIGHTS\n        ------------------------------------------ *\/\n\n        if (container.querySelector('.mobile-highlights-swiper')) {\n\n            addSwiper(\n                new Swiper('.mobile-highlights-swiper', {\n\n                    loop: true,\n\n                    observer: true,\n                    observeParents: true,\n                    resizeObserver: true,\n\n                    pagination: {\n                        el: '.mobile-highlights-swiper .swiper-pagination',\n                        clickable: true\n                    }\n\n                })\n            );\n\n        }\n\n\n        \/* ------------------------------------------\n           PC CARD SWIPER\n        ------------------------------------------ *\/\n\n        if (container.querySelector('.pc-card-swiper')) {\n\n            addSwiper(\n                new Swiper('.pc-card-swiper', {\n\n                    slidesPerView: 1.2,\n                    centeredSlides: true,\n                    spaceBetween: 20,\n                    loop: true,\n\n                    observer: true,\n                    observeParents: true,\n                    resizeObserver: true,\n\n                    pagination: {\n                        el: '.pc-card-swiper .swiper-pagination',\n                        clickable: true\n                    },\n\n                    navigation: {\n                        nextEl: '.pc-card-swiper .swiper-button-next',\n                        prevEl: '.pc-card-swiper .swiper-button-prev'\n                    }\n\n                })\n            );\n\n        }\n\n\n        \/* ------------------------------------------\n           MEDIA SWIPER\n        ------------------------------------------ *\/\n\n        if (container.querySelector('.media-swiper')) {\n\n            addSwiper(\n                new Swiper('.media-swiper', {\n\n                    slidesPerView: 2,\n                    spaceBetween: 20,\n                    loop: true,\n\n                    observer: true,\n                    observeParents: true,\n                    resizeObserver: true,\n\n                    pagination: {\n                        el: '.media-swiper .swiper-pagination',\n                        clickable: true\n                    },\n\n                    navigation: {\n                        nextEl: '.media-swiper .swiper-button-next',\n                        prevEl: '.media-swiper .swiper-button-prev'\n                    },\n\n                    breakpoints: {\n\n                        768: {\n                            slidesPerView: 4\n                        },\n\n                        1024: {\n                            slidesPerView: 5\n                        }\n\n                    }\n\n                })\n            );\n\n        }\n\n\n        \/* ------------------------------------------\n           CHOICE SWIPER\n        ------------------------------------------ *\/\n\n        if (container.querySelector('.choice-swiper')) {\n\n            addSwiper(\n                new Swiper('.choice-swiper', {\n\n                    slidesPerView: 1.3,\n                    spaceBetween: 20,\n                    loop: true,\n                    speed: 500,\n\n                    observer: false,\n                    observeParents: false,\n                    resizeObserver: false,\n\n                    pagination: {\n                        el: '.choice-swiper .swiper-pagination',\n                        clickable: true\n                    },\n\n                    navigation: {\n                        nextEl: '.choice-swiper .swiper-button-next',\n                        prevEl: '.choice-swiper .swiper-button-prev'\n                    },\n\n                    breakpoints: {\n\n                        768: {\n                            slidesPerView: 3\n                        },\n\n                        1024: {\n                            slidesPerView: 4\n                        }\n\n                    }\n\n                })\n            );\n\n        }\n\n\n        \/* ==========================================\n           UPDATE SWIPERS\n        ========================================== *\/\n\n        function updateSwipersInContent(content) {\n\n            if (!content) {\n                return;\n            }\n\n            swiperInstances.forEach(function (swiper) {\n\n                if (!swiper || swiper.destroyed) {\n                    return;\n                }\n\n                var swiperElement = swiper.el;\n\n                if (content.contains(swiperElement)) {\n\n                    try {\n\n                        swiper.update();\n                        swiper.updateSize();\n                        swiper.updateSlides();\n\n                    } catch (e) {\n\n                        \/*\n                         * Ignore Swiper errors caused by\n                         * the Shopify theme destroying\n                         * an instance.\n                         *\/\n\n                    }\n\n                }\n\n            });\n\n        }\n\n\n        \/* ==========================================\n           LIGHTBOX\n        ========================================== *\/\n\n        var lightbox = container.querySelector('#lightbox');\n\n        var lightboxImg = container.querySelector('#lightbox-img');\n\n        var lightboxClose = container.querySelector('.lightbox-close');\n\n\n        if (lightbox \u0026\u0026 lightboxImg) {\n\n            container.querySelectorAll(\n                '.pc-highlights-swiper img, ' +\n                '.mobile-highlights-swiper img, ' +\n                '.pc-card-swiper img, ' +\n                '.mobile-card-grid img, ' +\n                '.bottom-img-wrap img'\n            ).forEach(function (img) {\n\n                img.addEventListener('click', function (e) {\n\n                    e.stopPropagation();\n\n                    lightboxImg.src = img.src;\n\n                    lightboxImg.alt = img.alt;\n\n                    lightbox.classList.add('active');\n\n                });\n\n            });\n\n\n            if (lightboxClose) {\n\n                lightboxClose.addEventListener('click', function () {\n\n                    lightbox.classList.remove('active');\n\n                });\n\n            }\n\n\n            lightbox.addEventListener('click', function (e) {\n\n                if (e.target === lightbox) {\n\n                    lightbox.classList.remove('active');\n\n                }\n\n            });\n\n        }\n\n\n        \/* ==========================================\n           WINDOW RESIZE\n        ========================================== *\/\n\n        var resizeTimer;\n\n\n        window.addEventListener('resize', function () {\n\n            clearTimeout(resizeTimer);\n\n            resizeTimer = setTimeout(function () {\n\n                \/*\n                 * Update Swipers first.\n                 *\/\n\n                swiperInstances.forEach(function (swiper) {\n\n                    if (!swiper || swiper.destroyed) {\n                        return;\n                    }\n\n                    try {\n\n                        swiper.update();\n\n                    } catch (e) {}\n\n                });\n\n\n                \/*\n                 * IMPORTANT:\n                 *\n                 * Do NOT force height on accordions\n                 * that are already auto.\n                 *\n                 * Their height will naturally adapt.\n                 *\/\n\n                container.querySelectorAll(\n                    '.accordion-item.active .accordion-content'\n                ).forEach(function (content) {\n\n                    if (content.style.height === 'auto') {\n                        return;\n                    }\n\n                    updateAccordionHeight(content, true);\n\n                });\n\n            }, 200);\n\n        });\n\n\n        \/* ==========================================\n           IMAGES LOADED\n        ========================================== *\/\n\n        container.querySelectorAll('img').forEach(function (img) {\n\n            if (!img.complete) {\n\n                img.addEventListener('load', function () {\n\n                    var content = img.closest('.accordion-content');\n\n                    if (!content) {\n                        return;\n                    }\n\n\n                    \/*\n                     * If the accordion is already auto,\n                     * the browser automatically expands it.\n                     *\n                     * We only need to update Swiper.\n                     *\/\n\n                    if (content.style.height === 'auto') {\n\n                        updateSwipersInContent(content);\n\n                        return;\n\n                    }\n\n\n                    \/*\n                     * If it is currently animating \/\n                     * fixed-height, update its height.\n                     *\/\n\n                    updateAccordionHeight(content, true);\n\n                });\n\n            }\n\n        });\n\n\n        \/* ==========================================\n           WINDOW LOAD\n        ========================================== *\/\n\n        window.addEventListener('load', function () {\n\n            setTimeout(function () {\n\n                \/*\n                 * Update all Swipers.\n                 *\/\n\n                swiperInstances.forEach(function (swiper) {\n\n                    if (!swiper || swiper.destroyed) {\n                        return;\n                    }\n\n                    try {\n\n                        swiper.update();\n\n                    } catch (e) {}\n\n                });\n\n\n                \/*\n                 * Recalculate only accordions\n                 * that are not already auto.\n                 *\n                 * Long text accordions remain auto\n                 * and therefore cannot be truncated.\n                 *\/\n\n                updateAllActiveAccordions();\n\n            }, 300);\n\n        });\n\n    });\n    \u003c\/script\u003e\n\n\u003c\/div\u003e","brand":"PURPLE LEAF Czechia","offers":[{"title":"2.5 × 2.5 m s 24 žárovkami","offer_id":53554699043128,"sku":"ZYEUJJG0808-24L","price":36499.0,"currency_code":"CZK","in_stock":true},{"title":"2.5 × 3 m s 24 žárovkami","offer_id":53554699075896,"sku":"ZYEUJJG0810-24L","price":41499.0,"currency_code":"CZK","in_stock":false},{"title":"3 × 3 m s 24 žárovkami","offer_id":53554699108664,"sku":"ZYEUJJG1010-24L","price":43499.0,"currency_code":"CZK","in_stock":false},{"title":"3 × 3.65 m s 24 žárovkami","offer_id":53554699141432,"sku":"ZYEUJJG1012-24L","price":48499.0,"currency_code":"CZK","in_stock":true},{"title":"3 × 4.25 m s 24 žárovkami","offer_id":53554699174200,"sku":"ZYEUJJG1014-24L","price":53499.0,"currency_code":"CZK","in_stock":true},{"title":"3.65 × 3.65 m s 24 žárovkami","offer_id":53554699206968,"sku":"ZYEUJJG1212-24L","price":51499.0,"currency_code":"CZK","in_stock":true},{"title":"3.65 × 4.25 m s 24 žárovkami","offer_id":53554699239736,"sku":"ZYEUJJG1214-24L","price":55999.0,"currency_code":"CZK","in_stock":true},{"title":"3.65 × 4.85 m s 24 žárovkami","offer_id":53554699272504,"sku":"ZYEUJJG1216-24L","price":61999.0,"currency_code":"CZK","in_stock":true},{"title":"3.65 × 5.5 m s 36 žárovkami","offer_id":53554699305272,"sku":"ZYEUJJG1218-36L","price":67999.0,"currency_code":"CZK","in_stock":true},{"title":"3.65 × 6 m s 36 žárovkami","offer_id":53554699338040,"sku":"ZYEUJJG1220-36L","price":76999.0,"currency_code":"CZK","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0997\/9582\/9048\/files\/0808_4d7d96f0-e951-40c1-83df-2c12353de18e.jpg?v=1792821404","url":"https:\/\/purpleleafshop.cz\/products\/purple-leaf-zakladni-zahradni-altan-teple-bile-led-osvetleni","provider":"PURPLE LEAF Czechia","version":"1.0","type":"link"}