{"product_id":"kobra-x-combo-3d-printer","title":"Anycubic Kobra X Combo","description":"\/*\n * ------------------------------------------------------------\n * IMPORTANT: The contents of this file are auto-generated.\n *\n * This file may be updated by the Shopify admin theme editor\n * or related systems. Please exercise caution as any changes\n * made to this file may be overwritten.\n * ------------------------------------------------------------\n *\/\n{\n  \"sections\": {\n    \"main\": {\n      \"type\": \"main-product\",\n      \"blocks\": {\n        \"yg_badges_9LQVrQ\": {\n          \"type\": \"yg_badges\",\n          \"settings\": {}\n        },\n        \"title\": {\n          \"type\": \"title\",\n          \"settings\": {\n            \"show_vendor_link\": false,\n            \"title_size\": \"h3\"\n          }\n        },\n        \"price\": {\n          \"type\": \"price\",\n          \"settings\": {\n            \"variant_price\": true\n          }\n        },\n        \"kudosi_ali_reviews_widget_star_rating_zXtR8L\": {\n          \"type\": \"shopify:\/\/apps\/ali-reviews\/blocks\/widget-star-rating\/bf2eea72-0400-4db1-8908-44b7418f9a88\",\n          \"disabled\": true,\n          \"settings\": {\n            \"product\": \"\"\n          }\n        },\n        \"yg_discount_jHxiHJ\": {\n          \"type\": \"yg_discount\",\n          \"settings\": {\n            \"discount_title\": \"{{ product.metafields.custom.product_discount_time.value.product_info_label.value }}\",\n            \"show_count_down\": true,\n            \"discount_code\": \"{{ product.metafields.custom.product_discount_time.value.discount_code.value }}\",\n            \"discount_button\": \"Copy\",\n            \"discount_border_color\": \"rgba(0,0,0,0)\",\n            \"discount_background_color\": \"linear-gradient(90deg, rgba(0, 0, 0, 1), rgba(0, 90, 255, 1) 100%)\",\n            \"discount_title_color\": \"#ffffff\",\n            \"discount_button_color\": \"#ffffff\",\n            \"discount_button_bg_color\": \"#005aff\"\n          }\n        },\n        \"description_cCbXqJ\": {\n          \"type\": \"description\",\n          \"settings\": {\n            \"show_custom_description\": true,\n            \"description\": \"{{ product.metafields.custom.product_info.value.product_features | metafield_tag }}\",\n            \"truncate_description\": 500,\n            \"read_more_button\": \"Read more\"\n          }\n        },\n        \"e592d434-8377-4309-b179-f98d4b3742a2\": {\n          \"type\": \"sale_box\",\n          \"settings\": {\n            \"show_free_shipping_bar\": false,\n            \"enable_compare\": false,\n            \"picker_type\": \"button\",\n            \"enable_color_swatches\": true,\n            \"color_swatches_style\": \"variant\",\n            \"size_chart_enable\": false,\n            \"size_chart_option\": \"size\",\n            \"size_chart_link_label\": \"Size chart\",\n            \"size_chart_page\": \"\",\n            \"quantity_selector_enable\": true,\n            \"show_dynamic_checkout\": true,\n            \"show_gift_card_recipient\": true\n          }\n        },\n        \"custom_liquid_GMxwNJ\": {\n          \"type\": \"custom_liquid\",\n          \"settings\": {\n            \"custom_liquid\": \"\\n\\n\\n\\n    \u003cmeta charset='\\\"UTF-8\\\"'\u003e\\n    \u003cmeta name='\\\"viewport\\\"' content='\\\"width=device-width,' initial-scale='1.0\\\"'\u003e\\n    \u003ctitle\u003eCoupon Component\u003c\/title\u003e\\n    \u003cstyle\u003e\\n        \/* 样式限定到组件内部：不要污染全局样式 *\/\\n        .coupon-container {\\n            --primary-color: #005aff;\\n            --primary-light: #e6f7ff;\\n            --border-color: #d9d9d9;\\n            --text-color: #333;\\n            --text-light: #666;\\n            --white: #ffffff;\\n            --shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\\n            --success-color: #52c41a;\\n            \/* 将字体限定于组件内 *\/\\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\\n        }\\n\\n        \/* 仅在组件内部应用 box-sizing，避免修改全局元素 *\/\\n        .coupon-container,\\n        .coupon-container * {\\n            box-sizing: border-box;\\n        }\\n\\n        .coupon-container {\\n            \/* 默认隐藏；只有接口返回数据时再显示 *\/\\n            \/* display: none; *\/\\n            \/* max-width: 500px; *\/\\n            width: 100%;\\n            border-radius: 12px;\\n            overflow: hidden;\\n            box-shadow: var(--shadow);\\n            background: var(--white);\\n        }\\n\\n        .current-coupon {\\n            background: var(--white);\\n            padding: 20px;\\n            display: flex;\\n            justify-content: space-between;\\n            align-items: center;\\n            border-bottom: 1px solid var(--border-color);\\n            cursor: pointer;\\n            position: relative;\\n        }\\n\\n        .coupon-info {\\n            flex: 1;\\n        }\\n\\n        .coupon-code {\\n            font-size: 20px;\\n            font-weight: 600;\\n            color: var(--primary-color);\\n            margin-bottom: 6px;\\n            display: flex;\\n            align-items: center;\\n            gap: 8px;\\n        }\\n\\n        .coupon-desc {\\n            font-size: 14px;\\n            color: var(--text-light);\\n            display: flex;\\n            align-items: center;\\n            gap: 6px;\\n        }\\n\\n        .coupon-actions {\\n            display: flex;\\n            align-items: center;\\n            gap: 12px;\\n            flex-shrink: 0;\\n        }\\n\\n        .copy-btn {\\n            background: var(--primary-color);\\n            color: var(--white);\\n            border: none;\\n            padding: 8px 16px;\\n            border-radius: 6px;\\n            cursor: pointer;\\n            font-size: 14px;\\n            transition: all 0.2s;\\n            display: flex;\\n            align-items: center;\\n            gap: 6px;\\n        }\\n\\n        .copy-btn:hover {\\n            background: #0048d6;\\n            transform: translateY(-1px);\\n        }\\n\\n        .copy-btn.copied {\\n            background: var(--success-color);\\n        }\\n\\n        .dropdown-btn {\\n            background: none;\\n            border: none;\\n            cursor: pointer;\\n            padding: 8px;\\n            color: var(--text-light);\\n            transition: transform 0.3s ease;\\n            display: flex;\\n            align-items: center;\\n            justify-content: center;\\n        }\\n\\n        .dropdown-btn.open {\\n            transform: rotate(180deg);\\n        }\\n\\n        \/* Header icon sizing *\/\\n        .voucher-icon {\\n            width: 20px;\\n            height: 20px;\\n            vertical-align: middle;\\n            margin-right: 8px;\\n            object-fit: contain;\\n            margin-top: 4px;\\n        }\\n\\n        @media (max-width: 768px) {\\n            .voucher-icon {\\n                width: 18px;\\n                height: 18px;\\n                margin-right: 6px;\\n            }\\n        }\\n\\n        \/* 未登录提示样式与展示控制 *\/\\n        .login-tip {\\n            font-size: 14px;\\n            color: var(--primary-color);\\n        }\\n\\n        .current-coupon.login-required #currentDesc {\\n            display: block;\\n        }\\n\\n        .current-coupon.login-required .dropdown-btn,\\n        .current-coupon.login-required #copyCurrentBtn {\\n            display: none !important;\\n        }\\n\\n        .current-coupon.login-required .coupon-code {\\n            display: none !important;\\n        }\\n\\n        .coupon-list {\\n            background: var(--white);\\n            max-height: 0;\\n            overflow: hidden;\\n            transition: max-height 0.3s ease;\\n        }\\n\\n        .coupon-list.open {\\n            max-height: 400px;\\n            overflow-y: auto;\\n        }\\n\\n        .coupon-item {\\n            padding: 16px 20px;\\n            border-bottom: 1px solid var(--border-color);\\n            display: flex;\\n            justify-content: space-between;\\n            align-items: center;\\n            transition: background 0.2s;\\n        }\\n\\n        .coupon-item:hover {\\n            background: var(--primary-light);\\n        }\\n\\n        .coupon-item:last-child {\\n            border-bottom: none;\\n        }\\n\\n        .coupon-item .coupon-code {\\n            font-size: 16px;\\n        }\\n\\n        .coupon-item .copy-btn {\\n            padding: 6px 12px;\\n            font-size: 12px;\\n        }\\n\\n        \/* Voucher header styles *\/\\n        .voucher-header {\\n            font-size: 16px;\\n            font-weight: 600;\\n            color: var(--text-color);\\n        }\\n\\n        .voucher-header .count {\\n            font-weight: 400;\\n            color: var(--text-light);\\n            margin-left: 6px;\\n        }\\n\\n        .voucher-main {\\n            margin-top: 6px;\\n            font-size: 18px;\\n            color: var(--primary-color);\\n            font-weight: 700;\\n        }\\n\\n        .voucher-sub {\\n            font-size: 12px;\\n            color: var(--text-light);\\n            margin-top: 6px;\\n        }\\n\\n        .voucher-valid {\\n            font-size: 12px;\\n            color: var(--text-light);\\n            margin-top: 4px;\\n            display: flex;\\n            align-items: center;\\n            gap: 6px;\\n        }\\n\\n        .expired {\\n            color: #999;\\n            opacity: 0.7;\\n        }\\n\\n        .expired .coupon-code {\\n            color: #999;\\n            text-decoration: line-through;\\n        }\\n\\n        .expired .copy-btn {\\n            background: #ccc;\\n            cursor: not-allowed;\\n        }\\n\\n        .expired .copy-btn:hover {\\n            transform: none;\\n            background: #ccc;\\n        }\\n\\n        .ac_icon {\\n            width: 16px;\\n            height: 16px;\\n        }\\n\\n        .tag {\\n            background: var(--primary-light);\\n            color: var(--primary-color);\\n            padding: 2px 6px;\\n            border-radius: 4px;\\n            font-size: 12px;\\n            margin-left: 8px;\\n        }\\n\\n        .loading {\\n            text-align: center;\\n            padding: 20px;\\n            color: var(--text-light);\\n        }\\n\\n        .error {\\n            text-align: center;\\n            padding: 20px;\\n            color: #ff4d4f;\\n            background: #fff2f0;\\n            border-radius: 6px;\\n            margin: 10px;\\n        }\\n\\n        @media (max-width: 480px) {\\n            body {\\n                padding: 10px;\\n            }\\n\\n            .current-coupon {\\n                padding: 16px;\\n                flex-direction: column;\\n                align-items: flex-start;\\n                gap: 12px;\\n            }\\n\\n            .coupon-actions {\\n                justify-content: space-between;\\n            }\\n\\n            .coupon-code {\\n                font-size: 18px;\\n            }\\n\\n            .coupon-item {\\n                padding: 14px 16px;\\n            }\\n        }\\n\\n        \/* 默认仅展示标题与数量：隐藏详情与复制按钮 *\/\\n        .current-coupon .voucher-main,\\n        .current-coupon #currentDesc,\\n        .current-coupon #copyCurrentBtn {\\n            display: none;\\n        }\\n\\n        \/* 下拉展开时顶部不要展示复制按钮（保持隐藏） *\/\\n        .current-coupon.details-open #copyCurrentBtn {\\n            display: none;\\n        }\\n\\n        \/* 移动端优化 *\/\\n        @media (max-width: 768px) {\\n            .coupon-container {\\n                border-radius: 8px;\\n                box-shadow: none;\\n            }\\n\\n            .coupon-info {\\n                flex: 1 1 auto;\\n            }\\n\\n            .current-coupon {\\n                padding: 12px 14px;\\n                flex-direction: row;\\n                gap: 10px;\\n            }\\n\\n            .coupon-actions {\\n                gap: 8px;\\n            }\\n\\n            .coupon-code {\\n                font-size: 16px;\\n                gap: 6px;\\n                overflow: hidden;\\n                text-overflow: ellipsis;\\n                white-space: nowrap;\\n            }\\n\\n            .ac_icon {\\n                width: 14px;\\n                height: 14px;\\n            }\\n\\n            .dropdown-btn svg {\\n                width: 18px;\\n                height: 18px;\\n            }\\n\\n            .coupon-list.open {\\n                max-height: 60vh;\\n            }\\n\\n            .coupon-item {\\n                padding: 12px 14px;\\n                flex-direction: column;\\n                align-items: flex-start;\\n                gap: 8px;\\n            }\\n\\n            .coupon-item .coupon-code {\\n                font-size: 15px;\\n            }\\n\\n            .coupon-item .copy-btn {\\n                width: 100%;\\n                justify-content: center;\\n                padding: 10px 12px;\\n            }\\n\\n            .voucher-sub,\\n            .voucher-valid {\\n                font-size: 12px;\\n            }\\n        }\\n    \u003c\/style\u003e\\n\\n\\n\\n    \u003cdiv class='\\\"coupon-container\\\"'\u003e\\n        \u003cdiv class='\\\"current-coupon\\\"' id='\\\"currentCoupon\\\"'\u003e\\n            \u003cdiv class='\\\"coupon-info\\\"'\u003e\\n                \u003cdiv class='\\\"coupon-code\\\"' id='\\\"currentCode\\\"'\u003e\\n                    \u003csvg class='\\\"ac_icon\\\"' viewbox='\\\"0' fill='\\\"currentColor\\\"'\u003e\\n                        \u003cpath d='\\\"M20'\u003e\u003c\/path\u003e\\n                    \u003c\/svg\u003e\\n                    \u003cspan\u003eLoading...\u003c\/span\u003e\\n                    \u003cspan class='\\\"tag\\\"'\u003eLatest\u003c\/span\u003e\\n                \u003c\/div\u003e\\n                \u003cdiv class='\\\"coupon-desc\\\"' id='\\\"currentDesc\\\"'\u003e\\n                    \u003csvg class='\\\"ac_icon\\\"' viewbox='\\\"0' fill='\\\"currentColor\\\"'\u003e\\n                        \u003cpath d='\\\"M11.99'\u003e\u003c\/path\u003e\\n                    \u003c\/svg\u003e\\n                    \u003cspan\u003eLoading coupon information...\u003c\/span\u003e\\n                \u003c\/div\u003e\\n            \u003c\/div\u003e\\n            \u003cdiv class='\\\"coupon-actions\\\"'\u003e\\n                \u003cbutton class='\\\"copy-btn\\\"' id='\\\"copyCurrentBtn\\\"' disabled\u003e\\n                    \u003csvg class='\\\"ac_icon\\\"' viewbox='\\\"0' fill='\\\"currentColor\\\"'\u003e\\n                        \u003cpath d='\\\"M16' .9-2\u003e\u003c\/path\u003e\\n                    \u003c\/svg\u003e\\n                    Copy\\n                \u003c\/button\u003e\\n                \u003cbutton class='\\\"dropdown-btn\\\"' id='\\\"dropdownBtn\\\"'\u003e\\n                    \u003csvg width='\\\"20\\\"' height='\\\"20\\\"' viewbox='\\\"0' fill='\\\"currentColor\\\"'\u003e\\n                        \u003cpath d='\\\"M7.41'\u003e\u003c\/path\u003e\\n                    \u003c\/svg\u003e\\n                \u003c\/button\u003e\\n            \u003c\/div\u003e\\n        \u003c\/div\u003e\\n        \u003cdiv class='\\\"coupon-list\\\"' id='\\\"couponList\\\"'\u003e\\n            \u003cdiv class='\\\"loading\\\"'\u003e\u003c\/div\u003e\\n        \u003c\/div\u003e\\n    \u003c\/div\u003e\\n\\n    \u003cscript\u003e\\n        \/\/ Shopify Configuration\\n        let urlSite = `au`\\n        let copdes = '$45 OFF';\\n        const subtitle = '*For Kobra X Only';\\n\\n        let logtip = `Log in to View Your Deposit Vouche`\\n        let copTitle = `My Deposit Voucher`\\n        let noCopTip = `No available coupons`\\n        let loadingTip = `Loading coupons...`\\n\\n        const SHOPIFY_CONFIG = {\\n            \/\/ 在Shopify主题配置中设置这些值\\n            apiUrl: 'https:\/\/shopify.makeronline.com\/discount.php', \/\/ Shopify配置中的API URL\\n            encryptionKey: '8738bc788738bc788738bc788738bc78', \/\/ Shopify配置中的加密秘钥\\n            site: urlSite, \/\/ Shopify配置中的站点信息\\n        };\\n\\n        \/\/ 如果Shopify配置不可用，使用默认值（开发环境）\\n        const CONFIG = {\\n            encryptionKey: SHOPIFY_CONFIG.encryptionKey.includes('settings.') ? 'your-encryption-key-here' : SHOPIFY_CONFIG.encryptionKey,\\n            apiUrl: SHOPIFY_CONFIG.apiUrl.includes('settings.') ? 'https:\/\/shopify-mo-itdev.anycubic.com\/discount.php' : SHOPIFY_CONFIG.apiUrl,\\n            site: SHOPIFY_CONFIG.site.includes('settings.') ? 'uk' : SHOPIFY_CONFIG.site\\n        };\\n\\n        \/\/ DOM Elements\\n        const currentCouponEl = document.getElementById('currentCoupon');\\n        const currentCodeEl = document.getElementById('currentCode');\\n        const currentDescEl = document.getElementById('currentDesc');\\n        const copyCurrentBtn = document.getElementById('copyCurrentBtn');\\n        const dropdownBtn = document.getElementById('dropdownBtn');\\n        const couponListEl = document.getElementById('couponList');\\n\\n        function getShopifyCustomerEmail() {\\n\\n            \/\/ 方法1: 从Shopify客户对象获取\\n            if (typeof Customer !== 'undefined' \u0026\u0026 Customer.email) {\\n                return Customer.email;\\n            }\\n\\n            \/\/ 方法2: 从Shopify全局变量获取\\n            if (typeof window !== 'undefined' \u0026\u0026 window.Shopify) {\\n                return window.userEmail;\\n            }\\n\\n            \/\/ 方法3: 从页面元素中获取（如果Shopify主题有显示邮箱）\\n            const emailElement = document.querySelector('.customer-email, [data-customer-email]');\\n            if (emailElement) {\\n                return emailElement.textContent.trim();\\n            }\\n\\n            \/\/ 方法4: 从URL参数获取（适用于邮件链接等场景）\\n            const urlParams = new URLSearchParams(window.location.search);\\n            const emailFromUrl = urlParams.get('email');\\n            if (emailFromUrl) {\\n                return emailFromUrl;\\n            }\\n\\n            console.warn('无法获取客户邮箱，请确保客户已登录');\\n            return null;\\n        }\\n\\n        async function encryptEmail(email, key) {\\n            try {\\n                const isHexKey = \/^[0-9a-fA-F]+$\/.test(key);\\n                const keyBytes = isHexKey ? CryptoJS.enc.Hex.parse(key) : CryptoJS.enc.Utf8.parse(key);\\n\\n                const FIXED_IV_HEX = '036bfbb1696501dff6cacf378cd57aa4';\\n                const iv = CryptoJS.enc.Hex.parse(FIXED_IV_HEX);\\n\\n                const encrypted = CryptoJS.AES.encrypt(email, keyBytes, {\\n                    iv: iv,\\n                    mode: CryptoJS.mode.CBC,\\n                    padding: CryptoJS.pad.Pkcs7\\n                });\\n\\n                const ivHex = FIXED_IV_HEX;\\n                const cipherBase64 = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);\\n\\n                return cipherBase64;\\n            } catch (e) {\\n                console.error('加密失败:', e);\\n                throw e;\\n            }\\n        }\\n\\n        \/\/ 初始化函数\\n        async function initCouponComponent() {\\n            try {\\n                \/\/ 显示加载状态\\n                showLoadingState();\\n\\n                \/\/ 获取客户邮箱\\n                const customerEmail = getShopifyCustomerEmail()\\n                \/\/ const customerEmail = ''\\n\\n                \/\/ 未登录：展示登录提示并绑定跳转\\n                if (!customerEmail) {\\n                    let container = document.querySelector('.coupon-container');\\n                    if (container) container.style.display = '';\\n\\n                    const count = 0;\\n                    const isMobileHeader = window.matchMedia('(max-width: 768px)').matches;\\n                    const headerIconSrc = isMobileHeader\\n                        ? 'https:\/\/cdn.shopify.com\/s\/files\/1\/0736\/0787\/2764\/files\/coupon_icon_50px_scaled_with_padding.png?v=1762428661'\\n                        : 'https:\/\/cdn.shopify.com\/s\/files\/1\/0736\/0787\/2764\/files\/1_23ca0e47-6eaa-4ccd-9200-10f3665e1207.png?v=1762428661';\\n                    currentCodeEl.innerHTML = `\u003cimg src=\\\"${headerIconSrc}\\\" alt=\\\"coupon\\\" class=\\\"voucher-icon\\\" \/\u003e\\n                        \u003cdiv class=\\\"voucher-header\\\"\u003e${copTitle} \u003cspan class=\\\"count\\\"\u003e(${count})\u003c\/span\u003e\u003c\/div\u003e`;\\n                    currentDescEl.innerHTML = `\u003cdiv class=\\\"login-tip\\\"\u003e${logtip}r\u003c\/div\u003e`;\\n\\n                    \/\/ 计算登录 URL\\n                    let loginHref = '\/account\/login';\\n                    const loginEl = document.getElementById('iconAccHide');\\n                    if (loginEl) {\\n                        if (loginEl.tagName \u0026\u0026 loginEl.tagName.toLowerCase() === 'a' \u0026\u0026 loginEl.href) {\\n                            loginHref = loginEl.href + `${window.location.href ? '\u0026redirect_uri=' + encodeURIComponent(window.location.href) : ''}`;\\n                        } else {\\n                            const a = loginEl.querySelector('a');\\n                            if (a \u0026\u0026 a.href) loginHref = a.href;\\n                        }\\n                    }\\n\\n                    \/\/ 标记登录态并绑定点击跳转\\n                    currentCouponEl.classList.add('login-required');\\n                    currentCouponEl.dataset.loginHref = loginHref;\\n                    dropdownBtn.style.display = 'none';\\n                    copyCurrentBtn.style.display = 'none';\\n                    couponListEl.innerHTML = '';\\n\\n                    \/\/ 点击当前区域跳转登录\\n                    currentCouponEl.addEventListener('click', function () {\\n                        const url = this.dataset.loginHref || '\/account\/login';\\n                        window.location.href = url;\\n                    });\\n\\n                    return;\\n                }\\n\\n                const encryptedEmail = await encryptEmail(customerEmail, CONFIG.encryptionKey);\\n                const coupons = await fetchCoupons(encryptedEmail);\\n\\n                if (coupons \u0026\u0026 coupons.length \u003e 0) {\\n                    \/\/ 只有在接口有数据时才显示组件\\n                    \/\/ 如果之前因为没有 email 或无数据被移除，则尝试恢复备份\\n                    let container = document.querySelector('.coupon-container');\\n                    if (!container \u0026\u0026 window.__couponComponentBackup \u0026\u0026 window.__couponComponentPlaceholder) {\\n                        try {\\n                            window.__couponComponentPlaceholder.parentNode.replaceChild(window.__couponComponentBackup, window.__couponComponentPlaceholder);\\n                            container = window.__couponComponentBackup;\\n                            \/\/ 清理临时备份\\n                            window.__couponComponentBackup = null;\\n                            window.__couponComponentPlaceholder = null;\\n                        } catch (e) {\\n                            console.warn('Failed to restore coupon component from backup', e);\\n                        }\\n                    }\\n                    if (container) container.style.display = '';\\n\\n                    \/\/ 显示最新优惠券（传入总数以显示计数）\\n                    updateCurrentCoupon(coupons[0], coupons.length);\\n\\n                    if (coupons.length == 0) {\\n                        \/\/ 只有一张券：隐藏下拉按钮和列表，不生成列表\\n                        if (dropdownBtn) dropdownBtn.style.display = 'none';\\n                        couponListEl.innerHTML = '';\\n                    } else {\\n                        \/\/ 多于一张券：生成列表并显示下拉按钮\\n                        if (dropdownBtn) dropdownBtn.style.display = '';\\n                        renderCouponList(coupons);\\n                    }\\n                } else {\\n                    \/\/ 无数据：移除组件并插入注释占位符（便于调试）\\n                    const container = document.querySelector('.coupon-container');\\n                    if (container \u0026\u0026 container.parentNode) {\\n                        window.__couponComponentBackup = container;\\n                        const placeholder = document.createComment('coupon-component:removed:no-coupons');\\n                        container.parentNode.replaceChild(placeholder, container);\\n                        window.__couponComponentPlaceholder = placeholder;\\n                    }\\n                }\\n\\n                \/\/ 添加事件监听\\n                addEventListeners();\\n\\n            } catch (error) {\\n                console.error('Error initializing coupon component:', error);\\n                showErrorMessage('Failed to load coupons. Please try again later.');\\n            }\\n        }\\n\\n        \/\/ 获取优惠券数据\\n        async function fetchCoupons(encryptedEmail) {\\n            try {\\n                const requestData = {\\n                    site: CONFIG.site,\\n                    key: encryptedEmail,\\n                    productType: `kx`\\n                };\\n\\n                const query = new URLSearchParams(requestData).toString();\\n                \/\/ 使用 GET 请求；不设置 Content-Type 为 application\/json（会触发 CORS 预检），仅设置 Accept\\n                const response = await fetch(`${CONFIG.apiUrl}?${query}`, {\\n                    method: 'GET',\\n                    headers: {\\n                        'Accept': 'application\/json'\\n                    }\\n                });\\n\\n                if (!response.ok) {\\n                    throw new Error(`HTTP error! status: ${response.status}`);\\n                }\\n\\n                const data = await response.json();\\n                console.log(data);\\n\\n                \/\/ 转换API响应格式（根据后端返回字段 start_at \/ ends_at）\\n                if (data \u0026\u0026 data.data) {\\n                    return data.data.map((coupon, index) =\u003e ({\\n                        id: index + 1,\\n                        code: coupon.code,\\n                        description: copdes,\\n                        startAt: coupon.start_at || coupon.startAt || null,\\n                        endsAt: coupon.ends_at || coupon.endsAt || null,\\n                        isExpired: isCouponExpired(coupon.ends_at || coupon.endsAt || null),\\n                        isNew: index === 0\\n                    }));\\n                } else {\\n                    const container = document.querySelector('.coupon-container');\\n                    if (container) container.style.display = 'none';\\n                }\\n\\n                return [];\\n            } catch (error) {\\n                console.error('Error fetching coupons:', error);\\n                throw error;\\n            }\\n        }\\n\\n        \/\/ 检查优惠券是否过期\\n        function isCouponExpired(endsAt) {\\n            if (!endsAt) return true;\\n\\n            const endDate = new Date(endsAt);\\n            const now = new Date();\\n\\n            return endDate \u003c now;\\n        }\\n\\n        \/\/ 格式化日期显示\\n        function formatDate(dateString) {\\n            if (!dateString) return 'Unknown';\\n\\n            const date = new Date(dateString);\\n            return date.toLocaleDateString('en-ca', {\\n                year: 'numeric',\\n                month: 'short',\\n                day: 'numeric'\\n            });\\n        }\\n\\n        \/\/ 显示加载状态\\n        function showLoadingState() {\\n            \/\/ 显示默认标题和加载状态（默认只展示标题与数量）\\n            const count = 0;\\n            const isMobileHeader = window.matchMedia('(max-width: 768px)').matches;\\n            const headerIconSrc = isMobileHeader\\n                ? 'https:\/\/cdn.shopify.com\/s\/files\/1\/0736\/0787\/2764\/files\/1_1.png?v=1762480315'\\n                : 'https:\/\/cdn.shopify.com\/s\/files\/1\/0736\/0787\/2764\/files\/1_1.png?v=1762480315';\\n            currentCodeEl.innerHTML = `\u003cimg src=\\\"${headerIconSrc}\\\" alt=\\\"coupon\\\" class=\\\"voucher-icon\\\" \/\u003e\\n                \u003cdiv class=\\\"voucher-header\\\"\u003e${copTitle} \u003cspan class=\\\"count\\\"\u003e(${count})\u003c\/span\u003e\u003c\/div\u003e`;\\n            currentDescEl.innerHTML = `\u003cdiv class=\\\"loading\\\"\u003eLoading coupon information...\u003c\/div\u003e`;\\n            copyCurrentBtn.disabled = true;\\n\\n            couponListEl.innerHTML = `\u003cdiv class=\\\"loading\\\"\u003e${loadingTip}\u003c\/div\u003e`;\\n        }\\n\\n        \/\/ 显示错误信息\\n        function showErrorMessage(message) {\\n            couponListEl.innerHTML = `\u003cdiv class=\\\"error\\\"\u003e${message}\u003c\/div\u003e`;\\n\\n            const codeSpan = currentCodeEl.querySelector('span:nth-child(2)');\\n            const descSpan = currentDescEl.querySelector('span');\\n\\n            codeSpan.textContent = 'Error';\\n            descSpan.textContent = 'Failed to load coupons';\\n        }\\n\\n        \/\/ 显示无优惠券信息\\n        function showNoCouponsMessage() {\\n            couponListEl.innerHTML = '\u003cdiv class=\\\"loading\\\"\u003e${noCopTip}\u003c\/div\u003e';\\n\\n            const codeSpan = currentCodeEl.querySelector('span:nth-child(2)');\\n            const descSpan = currentDescEl.querySelector('span');\\n\\n            codeSpan.textContent = 'No Coupons';\\n            descSpan.textContent = 'You have no available coupons at this time';\\n            copyCurrentBtn.disabled = true;\\n        }\\n\\n        \/\/ 更新当前显示的优惠券\\n        function updateCurrentCoupon(coupon, totalCount) {\\n            const count = typeof totalCount === 'number' ? totalCount : 1;\\n\\n            const mainTitle = `$100 OFF ${coupon.code}`;\\n\\n            function formatShortNoSpace(d) {\\n                if (!d) return 'Unknown';\\n                const date = new Date(d);\\n                const month = date.toLocaleString('en-ca', { month: 'short' });\\n                const day = date.getDate();\\n                const year = date.getFullYear();\\n                return `${month} ${day},${year}`; \/\/ e.g. Nov 25,2025\\n            }\\n\\n            const start = formatShortNoSpace(coupon.startAt || coupon.start_at);\\n            const end = formatShortNoSpace(coupon.endsAt || coupon.ends_at);\\n            const validLine = `Valid: ${start}-${end}`;\\n\\n            \/\/ 顶部仅展示标题与数量，不增添其他详情元素\\n            const isMobileLoading = window.matchMedia('(max-width: 768px)').matches;\\n            const loadingIconSrc = isMobileLoading\\n                ? 'https:\/\/cdn.shopify.com\/s\/files\/1\/0736\/0787\/2764\/files\/1_1.png?v=1762480315'\\n                : 'https:\/\/cdn.shopify.com\/s\/files\/1\/0736\/0787\/2764\/files\/1_1.png?v=1762480315';\\n            currentCodeEl.innerHTML = `\u003cimg src=\\\"${loadingIconSrc}\\\" alt=\\\"coupon\\\" class=\\\"voucher-icon\\\" \/\u003e\\n                \u003cdiv class=\\\"voucher-header\\\"\u003e${copTitle} \u003cspan class=\\\"count\\\"\u003e(${count})\u003c\/span\u003e\u003c\/div\u003e`;\\n            currentDescEl.innerHTML = ``;\\n\\n            \/\/ 处理过期与复制按钮\\n            if (coupon.isExpired) {\\n                currentCouponEl.classList.add('expired');\\n                copyCurrentBtn.disabled = true;\\n            } else {\\n                currentCouponEl.classList.remove('expired');\\n                copyCurrentBtn.disabled = false;\\n            }\\n\\n            copyCurrentBtn.setAttribute('data-code', coupon.code);\\n        }\\n\\n        \/\/ 渲染优惠券列表\\n        function renderCouponList(coupons) {\\n            couponListEl.innerHTML = '';\\n\\n            coupons.forEach(coupon =\u003e {\\n                const couponItem = document.createElement('div');\\n                couponItem.className = `coupon-item ${coupon.isExpired ? 'expired' : ''}`;\\n\\n                \/\/ 列表项中展示开始与结束时间，并移动顶部的说明与有效期到这里\\n                const startLabel = formatDate(coupon.startAt);\\n                const endLabel = formatDate(coupon.endsAt);\\n\\n                couponItem.innerHTML = `\\n                    \u003cdiv class=\\\"coupon-info\\\"\u003e\\n                        \u003cdiv class=\\\"coupon-code\\\"\u003e\\n                            \u003csvg class=\\\"ac_icon\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"\u003e\\n                                \u003cpath d=\\\"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z\\\"\/\u003e\\n                            \u003c\/svg\u003e\\n                            \u003cspan\u003e${coupon.code}\u003c\/span\u003e\\n                            ${coupon.isNew ? '\u003cspan class=\\\"tag\\\"\u003eLatest\u003c\/span\u003e' : ''}\\n                        \u003c\/div\u003e\\n                        \u003cdiv class=\\\"coupon-desc\\\"\u003e\\n                            \u003csvg class=\\\"ac_icon\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"\u003e\\n                                \u003cpath d=\\\"M21 12.5l-8.5 8.5-10-10V3h8.5l10 10zM7 7a1.5 1.5 0 110-3 1.5 1.5 0 010 3z\\\"\/\u003e\\n                            \u003c\/svg\u003e\\n                            \u003cspan\u003e${coupon.description}   ${subtitle}\u003c\/span\u003e\\n                        \u003c\/div\u003e\\n                        \u003cdiv class=\\\"voucher-valid\\\"\u003e\\n                            \u003csvg class=\\\"ac_icon\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"\u003e\\n                                \u003cpath d=\\\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z\\\"\/\u003e\\n                            \u003c\/svg\u003e\\n                            \u003cspan\u003e${startLabel}-${endLabel}\u003c\/span\u003e\\n                        \u003c\/div\u003e\\n                    \u003c\/div\u003e\\n                    \u003cbutton class=\\\"copy-btn\\\" ${coupon.isExpired ? 'disabled' : ''} data-code=\\\"${coupon.code}\\\"\u003e\\n                        \u003csvg class=\\\"ac_icon\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"\u003e\\n                            \u003cpath d=\\\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\\\"\/\u003e\\n                        \u003c\/svg\u003e\\n                        ${coupon.isExpired ? 'Expired' : 'Copy'}\\n                    \u003c\/button\u003e\\n                `;\\n\\n                couponListEl.appendChild(couponItem);\\n            });\\n        }\\n\\n        \/\/ 添加事件监听\\n        function addEventListeners() {\\n            \/\/ 当前优惠券复制按钮点击事件\\n            copyCurrentBtn.addEventListener('click', function (e) {\\n                e.stopPropagation();\\n                if (!this.disabled) {\\n                    const code = this.getAttribute('data-code');\\n                    copyToClipboard(code, this);\\n                }\\n            });\\n\\n            \/\/ 下拉按钮点击事件\\n            dropdownBtn.addEventListener('click', function (e) {\\n                e.stopPropagation();\\n                toggleCouponList();\\n            });\\n\\n            \/\/ 当前优惠券点击事件\\n            currentCouponEl.addEventListener('click', function (e) {\\n                \/\/ 未登录：保持点击跳转到登录页\\n                if (this.classList.contains('login-required')) {\\n                    const url = this.dataset.loginHref || '\/account\/login';\\n                    window.location.href = url;\\n                    return;\\n                }\\n\\n                \/\/ 防止点击复制按钮时触发列表切换\\n                if (!e.target.closest('.copy-btn')) {\\n                    toggleCouponList();\\n                }\\n            });\\n\\n            \/\/ 列表中的复制按钮点击事件\\n            couponListEl.addEventListener('click', function (e) {\\n                if (e.target.classList.contains('copy-btn') \u0026\u0026 !e.target.disabled) {\\n                    const code = e.target.getAttribute('data-code');\\n                    copyToClipboard(code, e.target);\\n                }\\n            });\\n\\n            \/\/ 点击其他地方关闭下拉列表\\n            document.addEventListener('click', function () {\\n                if (couponListEl.classList.contains('open')) {\\n                    closeCouponList();\\n                }\\n            });\\n        }\\n\\n        \/\/ 切换优惠券列表显示状态\\n        function toggleCouponList() {\\n            \/\/ 如果没有列表项，不允许打开\\n            if (!couponListEl || couponListEl.children.length === 0) return;\\n\\n            if (couponListEl.classList.contains('open')) {\\n                closeCouponList();\\n            } else {\\n                openCouponList();\\n            }\\n        }\\n\\n        \/\/ 打开优惠券列表\\n        function openCouponList() {\\n            couponListEl.classList.add('open');\\n            dropdownBtn.classList.add('open');\\n            currentCouponEl.classList.add('details-open');\\n        }\\n\\n        \/\/ 关闭优惠券列表\\n        function closeCouponList() {\\n            couponListEl.classList.remove('open');\\n            dropdownBtn.classList.remove('open');\\n            currentCouponEl.classList.remove('details-open');\\n        }\\n\\n        \/\/ 复制到剪贴板\\n        function copyToClipboard(text, button) {\\n            const textarea = document.createElement('textarea');\\n            textarea.value = text;\\n            document.body.appendChild(textarea);\\n            textarea.select();\\n            document.execCommand('copy');\\n            document.body.removeChild(textarea);\\n\\n            \/\/ 视觉反馈\\n            const originalText = button.innerHTML;\\n            button.innerHTML = `\\n                \u003csvg class=\\\"ac_icon\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"\u003e\\n                    \u003cpath d=\\\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\\\"\/\u003e\\n                \u003c\/svg\u003e\\n                Copied!\\n            `;\\n            button.classList.add('copied');\\n\\n            setTimeout(() =\u003e {\\n                button.innerHTML = originalText;\\n                button.classList.remove('copied');\\n            }, 2000);\\n        }\\n\\n        \/\/ 初始化组件\\n        document.addEventListener('DOMContentLoaded', initCouponComponent);\\n    \u003c\/script\u003e\\n\\n    \u003c!-- 引入CryptoJS库用于加密 --\u003e\\n    \u003cscript src='\\\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/crypto-js\/4.1.1\/crypto-js.min.js\\\"'\u003e\u003c\/script\u003e\\n\\n\\n\"\n          }\n        },\n        \"information_group_QfWygb\": {\n          \"type\": \"information_group\",\n          \"settings\": {\n            \"brand_enable\": false,\n            \"brand_label\": \"\",\n            \"stock_enable\": false,\n            \"stock_label\": \"Availability\",\n            \"inventory_threshold\": 10,\n            \"show_inventory_quantity\": true,\n            \"sku_enable\": false,\n            \"sku_label\": \"SKU\",\n            \"barcode_enable\": false,\n            \"barcode_label\": \"Barcode\",\n            \"tags_enable\": false,\n            \"tags_label\": \"Tags\",\n            \"collections_enable\": false,\n            \"collections_label\": \"Collections\",\n            \"additional_information_enable\": true,\n            \"additional_information_label\": \"How It Works\",\n            \"additional_information_content\": \"{{ product.metafields.custom.product_note.value }}\",\n            \"additional_information_label_1\": \"\",\n            \"additional_information_content_1\": \"\",\n            \"additional_information_label_2\": \"\",\n            \"additional_information_content_2\": \"\",\n            \"additional_information_label_3\": \"\",\n            \"additional_information_content_3\": \"\",\n            \"additional_information_label_4\": \"\",\n            \"additional_information_content_4\": \"\",\n            \"additional_information_label_5\": \"\",\n            \"additional_information_content_5\": \"\",\n            \"additional_information_label_6\": \"\",\n            \"additional_information_content_6\": \"\",\n            \"additional_information_label_7\": \"\",\n            \"additional_information_content_7\": \"\",\n            \"additional_information_label_8\": \"\",\n            \"additional_information_content_8\": \"\",\n            \"additional_information_label_9\": \"\",\n            \"additional_information_content_9\": \"\"\n          }\n        },\n        \"complementary_YyQL4T\": {\n          \"type\": \"complementary\",\n          \"settings\": {\n            \"in_the_variants_bottom\": true,\n            \"custom_products\": \"{{ product.metafields.custom.product_info.value.recommend_products.value }}\",\n            \"block_heading\": \"50% Off Add-On\",\n            \"make_collapsible_row\": true,\n            \"icon\": \"menu_alt_2\",\n            \"product_list_limit\": 6,\n            \"total_enable\": false,\n            \"total_label\": \"Total:\",\n            \"button_enable\": false,\n            \"button_label\": \"Add items to cart\",\n            \"image_ratio\": \"square\"\n          }\n        },\n        \"yg_payment_delivery_JcpBeF\": {\n          \"type\": \"yg_payment_delivery\",\n          \"settings\": {\n            \"icon_1\": \"shopify:\/\/shop_images\/truck-line_81b87f9f-6d14-4103-a724-083868f9eb91.svg\",\n            \"title_1\": \"Estimated Shipping Time\",\n            \"icon_2\": \"shopify:\/\/shop_images\/shield-check-line_bb5bbe09-7f8f-4324-b485-63fa989c9ad8.svg\",\n            \"title_2\": \"Payment Methods\",\n            \"icon_3\": \"shopify:\/\/shop_images\/dropbox-line.svg\",\n            \"title_3\": \"Delivery Method\",\n            \"content_icon_1\": \"shopify:\/\/shop_images\/Credit_Cards_1.svg\",\n            \"content_icon_2\": \"shopify:\/\/shop_images\/Credit_Cards.svg\"\n          }\n        },\n        \"yg_icon_list_PxXMfG\": {\n          \"type\": \"yg_icon_list\",\n          \"settings\": {\n            \"below_the_media\": true,\n            \"icon_1\": \"shopify:\/\/shop_images\/truck-line_81b87f9f-6d14-4103-a724-083868f9eb91_1.svg\",\n            \"title_1\": \"Free Express Shipping\",\n            \"icon_2\": \"shopify:\/\/shop_images\/box-3-line.svg\",\n            \"title_2\": \"14-Day No Reason Return\",\n            \"icon_3\": \"shopify:\/\/shop_images\/customer-service-2-line.svg\",\n            \"title_3\": \"30-Day After-Sales Guarantee\",\n            \"icon_4\": \"shopify:\/\/shop_images\/shield-check-line.svg\",\n            \"title_4\": \"1-Year Warranty For 3D Printers\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"yg_badges_9LQVrQ\",\n        \"title\",\n        \"price\",\n        \"kudosi_ali_reviews_widget_star_rating_zXtR8L\",\n        \"yg_discount_jHxiHJ\",\n        \"description_cCbXqJ\",\n        \"e592d434-8377-4309-b179-f98d4b3742a2\",\n        \"custom_liquid_GMxwNJ\",\n        \"information_group_QfWygb\",\n        \"complementary_YyQL4T\",\n        \"yg_payment_delivery_JcpBeF\",\n        \"yg_icon_list_PxXMfG\"\n      ],\n      \"custom_css\": [\n        \".information .font-body-semi-bold {overflow-wrap: anywhere;}\",\n        \".complementary__item__title {font-size: 14px !important;}\"\n      ],\n      \"settings\": {\n        \"section_width\": \"page-width\",\n        \"use_background_input\": true,\n        \"enable_sticky_info\": true,\n        \"enable_sticky_cart\": true,\n        \"enable_sticky_info_pc\": true,\n        \"sticky_cart\": \"always\",\n        \"show_next_prev_products\": true,\n        \"auto_scroll_up_mobile\": false,\n        \"default_image\": \"product_featured_image\",\n        \"media_position\": \"left\",\n        \"gallery_layout\": \"thumbnail_slider_vertical\",\n        \"thumbnail_position\": \"left\",\n        \"media_size\": \"small\",\n        \"image_ratio\": \"adapt\",\n        \"image_fit\": true,\n        \"disable_images_lightbox\": false,\n        \"mobile_thumbnails\": \"hide\",\n        \"hide_variants\": false,\n        \"enable_video_looping\": false,\n        \"show_custom_badges_on\": \"all\",\n        \"custom_badges_position\": \"right\",\n        \"padding_top\": 0,\n        \"padding_bottom\": 0\n      }\n    },\n    \"yg_anchor_tab_WHGK7n\": {\n      \"type\": \"yg-anchor-tab\",\n      \"blocks\": {\n        \"anchor_yg7JjD\": {\n          \"type\": \"anchor\",\n          \"disabled\": true,\n          \"settings\": {\n            \"text\": \"Early Bird Timeline\",\n            \"section_number\": 4\n          }\n        },\n        \"anchor_LUnbAp\": {\n          \"type\": \"anchor\",\n          \"settings\": {\n            \"text\": \"Features\",\n            \"section_number\": 5\n          }\n        },\n        \"anchor_6VUXDT\": {\n          \"type\": \"anchor\",\n          \"settings\": {\n            \"text\": \"Packing List\",\n            \"section_number\": 20\n          }\n        },\n        \"anchor_KgxXME\": {\n          \"type\": \"anchor\",\n          \"settings\": {\n            \"text\": \"Specifications\",\n            \"section_number\": 21\n          }\n        },\n        \"anchor_Wp99dR\": {\n          \"type\": \"anchor\",\n          \"settings\": {\n            \"text\": \"Compare\",\n            \"section_number\": 22\n          }\n        },\n        \"anchor_ULkViK\": {\n          \"type\": \"anchor\",\n          \"settings\": {\n            \"text\": \"Reviews\",\n            \"section_number\": 23\n          }\n        },\n        \"anchor_ELFJVr\": {\n          \"type\": \"anchor\",\n          \"settings\": {\n            \"text\": \"FAQs\",\n            \"section_number\": 24\n          }\n        }\n      },\n      \"block_order\": [\n        \"anchor_yg7JjD\",\n        \"anchor_LUnbAp\",\n        \"anchor_6VUXDT\",\n        \"anchor_KgxXME\",\n        \"anchor_Wp99dR\",\n        \"anchor_ULkViK\",\n        \"anchor_ELFJVr\"\n      ],\n      \"name\": \"YG Anchor Tab\",\n      \"settings\": {\n        \"color_scheme\": \"background-1\",\n        \"padding_top\": 12,\n        \"padding_bottom\": 12,\n        \"padding_top_mobile\": 0,\n        \"padding_bottom_mobile\": 0\n      }\n    },\n    \"video_HbrBV3\": {\n      \"type\": \"video\",\n      \"name\": \"t:sections.video.presets.name\",\n      \"settings\": {\n        \"title\": \"\",\n        \"subtitle\": \"\",\n        \"heading_size\": \"h1\",\n        \"cover_image\": \"shopify:\/\/shop_images\/en-3840_2160.jpg\",\n        \"video_url\": \"https:\/\/youtu.be\/EO0LMdtKnFU\",\n        \"description\": \"\",\n        \"autoplay\": false,\n        \"enable_controls\": false,\n        \"enable_video_looping\": true,\n        \"full_width\": false,\n        \"hide_when_empty_video\": false,\n        \"enable_section_box_layout\": false,\n        \"color_scheme\": \"\",\n        \"padding_top\": 36,\n        \"padding_bottom\": 36\n      }\n    },\n    \"yg_image_list_dNVcBE\": {\n      \"type\": \"yg-image-list\",\n      \"blocks\": {\n        \"item_8eP9qG\": {\n          \"type\": \"item\",\n          \"settings\": {\n            \"youtube_url\": \"https:\/\/youtu.be\/Uow4KpLthkc\",\n            \"outside_text\": false,\n            \"title\": \"\",\n            \"color_text\": \"#000000\",\n            \"content\": \"\"\n          }\n        },\n        \"item_TF7jry\": {\n          \"type\": \"item\",\n          \"settings\": {\n            \"youtube_url\": \"https:\/\/youtu.be\/Rfze0GsOxc0\",\n            \"outside_text\": false,\n            \"title\": \"\",\n            \"color_text\": \"#000000\",\n            \"content\": \"\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"item_8eP9qG\",\n        \"item_TF7jry\"\n      ],\n      \"custom_css\": [\n        \"@media (max-width: 768px) {yg-image {aspect-ratio: 15 \/ 9 !important; }}\"\n      ],\n      \"name\": \"YG Image List\",\n      \"settings\": {\n        \"title\": \"\",\n        \"heading_size\": \"h1\",\n        \"heading_alignment\": \"center\",\n        \"enable_section_box_layout\": false,\n        \"color_scheme\": \"\",\n        \"slides_per_view\": 2,\n        \"slides_per_view_mb\": 1.1,\n        \"padding_top\": 0,\n        \"padding_bottom\": 0,\n        \"padding_top_mobile\": 0,\n        \"padding_bottom_mobile\": 0\n      }\n    },\n    \"yg_image_switch_Mbnkk4\": {\n      \"type\": \"yg-image-switch\",\n      \"blocks\": {\n        \"item_keicHC\": {\n          \"type\": \"item\",\n          \"settings\": {\n            \"image_pc\": \"shopify:\/\/shop_images\/1.KXC_KSP_PC.jpg\",\n            \"image_mobile\": \"shopify:\/\/shop_images\/1.KXC_KSP_M.jpg\",\n            \"label\": \"\",\n            \"title\": \"\",\n            \"des\": \"\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"item_keicHC\"\n      ],\n      \"name\": \"YG Image Switch\",\n      \"settings\": {\n        \"title\": \"What Sets the Anycubic Kobra X Combo Apart\",\n        \"heading_size\": \"h2\",\n        \"text_align\": \"center\",\n        \"show_view_all\": false,\n        \"view_all_label\": \"View all\",\n        \"view_all_link\": \"\",\n        \"enable_section_box_layout\": false,\n        \"color_scheme\": \"\",\n        \"color_background\": \"#ffffff\",\n        \"padding_top\": 12,\n        \"padding_bottom\": 12,\n        \"padding_top_mobile\": 12,\n        \"padding_bottom_mobile\": 12\n      }\n    },\n    \"rich_text_4hyyiq\": {\n      \"type\": \"rich-text\",\n      \"blocks\": {\n        \"heading_cgiQMX\": {\n          \"type\": \"heading\",\n          \"settings\": {\n            \"heading\": \"\u003cp\u003e\u003cstrong\u003eWhat the Pros Are Saying\u003c\/strong\u003e\u003c\/p\u003e\",\n            \"heading_size\": \"h3\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"heading_cgiQMX\"\n      ],\n      \"name\": \"t:sections.rich-text.presets.name\",\n      \"settings\": {\n        \"desktop_content_position\": \"center\",\n        \"desktop_content_width\": \"large\",\n        \"content_alignment\": \"center\",\n        \"enable_section_box_layout\": false,\n        \"color_scheme\": \"\",\n        \"full_width\": true,\n        \"padding_top\": 28,\n        \"padding_bottom\": 0,\n        \"padding_top_mobile\": 0,\n        \"padding_bottom_mobile\": 0\n      }\n    },\n    \"yg_slideshow_iY7dNR\": {\n      \"type\": \"yg-slideshow\",\n      \"blocks\": {\n        \"slide_84rbgp\": {\n          \"type\": \"slide\",\n          \"settings\": {\n            \"box_align\": \"center center\",\n            \"text_align\": \"center\",\n            \"box_align_mobile\": \"center center\",\n            \"text_align_mobile\": \"center\",\n            \"box_width\": \"500\",\n            \"image\": \"shopify:\/\/shop_images\/en-pc-All3dp.jpg\",\n            \"image_mobile\": \"shopify:\/\/shop_images\/en-m-All3dp.jpg\",\n            \"high_priority\": false,\n            \"subtitle\": \"\",\n            \"title\": \"\",\n            \"title_size\": \"h2\",\n            \"content\": \"\",\n            \"end_time\": \"\",\n            \"button_style\": \"secondary\",\n            \"button_label\": \"\",\n            \"button_link\": \"\",\n            \"button_style_1\": \"secondary\",\n            \"button_label_1\": \"\",\n            \"button_link_1\": \"\",\n            \"text_color\": \"\",\n            \"time_color\": \"\",\n            \"time_bg_color\": \"\",\n            \"button_color\": \"\",\n            \"button_bg_color\": \"\",\n            \"button_color_1\": \"\",\n            \"button_bg_color_1\": \"\"\n          }\n        },\n        \"slide_YByfMy\": {\n          \"type\": \"slide\",\n          \"settings\": {\n            \"box_align\": \"center center\",\n            \"text_align\": \"center\",\n            \"box_align_mobile\": \"center center\",\n            \"text_align_mobile\": \"center\",\n            \"box_width\": \"500\",\n            \"image\": \"shopify:\/\/shop_images\/en-pc-Fabbaloo.jpg\",\n            \"image_mobile\": \"shopify:\/\/shop_images\/en-m-Fabbaloo.jpg\",\n            \"high_priority\": false,\n            \"subtitle\": \"\",\n            \"title\": \"\",\n            \"title_size\": \"h2\",\n            \"content\": \"\",\n            \"end_time\": \"\",\n            \"button_style\": \"secondary\",\n            \"button_label\": \"\",\n            \"button_link\": \"\",\n            \"button_style_1\": \"secondary\",\n            \"button_label_1\": \"\",\n            \"button_link_1\": \"\",\n            \"text_color\": \"\",\n            \"time_color\": \"\",\n            \"time_bg_color\": \"\",\n            \"button_color\": \"\",\n            \"button_bg_color\": \"\",\n            \"button_color_1\": \"\",\n            \"button_bg_color_1\": \"\"\n          }\n        },\n        \"slide_qFfpeG\": {\n          \"type\": \"slide\",\n          \"settings\": {\n            \"box_align\": \"center center\",\n            \"text_align\": \"center\",\n            \"box_align_mobile\": \"center center\",\n            \"text_align_mobile\": \"center\",\n            \"box_width\": \"500\",\n            \"image\": \"shopify:\/\/shop_images\/en-pc-Tom_s_Hardware.jpg\",\n            \"image_mobile\": \"shopify:\/\/shop_images\/en-m-Tom_s_Hardware.jpg\",\n            \"high_priority\": false,\n            \"subtitle\": \"\",\n            \"title\": \"\",\n            \"title_size\": \"h2\",\n            \"content\": \"\",\n            \"end_time\": \"\",\n            \"button_style\": \"secondary\",\n            \"button_label\": \"\",\n            \"button_link\": \"\",\n            \"button_style_1\": \"secondary\",\n            \"button_label_1\": \"\",\n            \"button_link_1\": \"\",\n            \"text_color\": \"\",\n            \"time_color\": \"\",\n            \"time_bg_color\": \"\",\n            \"button_color\": \"\",\n            \"button_bg_color\": \"\",\n            \"button_color_1\": \"\",\n            \"button_bg_color_1\": \"\"\n          }\n        },\n        \"slide_q7jkeY\": {\n          \"type\": \"slide\",\n          \"settings\": {\n            \"box_align\": \"center center\",\n            \"text_align\": \"center\",\n            \"box_align_mobile\": \"center center\",\n            \"text_align_mobile\": \"center\",\n            \"box_width\": \"500\",\n            \"image\": \"shopify:\/\/shop_images\/en-pc-3D_Print_Beginner.jpg\",\n            \"image_mobile\": \"shopify:\/\/shop_images\/en-m-3D-Print-Beginner.jpg\",\n            \"high_priority\": false,\n            \"subtitle\": \"\",\n            \"title\": \"\",\n            \"title_size\": \"h2\",\n            \"content\": \"\",\n            \"end_time\": \"\",\n            \"button_style\": \"secondary\",\n            \"button_label\": \"\",\n            \"button_link\": \"\",\n            \"button_style_1\": \"secondary\",\n            \"button_label_1\": \"\",\n            \"button_link_1\": \"\",\n            \"text_color\": \"\",\n            \"time_color\": \"\",\n            \"time_bg_color\": \"\",\n            \"button_color\": \"\",\n            \"button_bg_color\": \"\",\n            \"button_color_1\": \"\",\n            \"button_bg_color_1\": \"\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"slide_84rbgp\",\n        \"slide_YByfMy\",\n        \"slide_qFfpeG\",\n        \"slide_q7jkeY\"\n      ],\n      \"name\": \"YG Slideshow\",\n      \"settings\": {\n        \"full_width\": false,\n        \"autoplay\": true,\n        \"autoplay_delay\": 8,\n        \"color_scheme\": \"\",\n        \"box_padding_block\": 48,\n        \"box_padding_block_mobile\": 48,\n        \"box_padding_inline\": 70,\n        \"padding_top\": 32,\n        \"padding_bottom\": 20,\n        \"padding_top_mobile\": 32,\n        \"padding_bottom_mobile\": 20\n      }\n    },\n    \"yg_image_list_xLtBUq\": {\n      \"type\": \"yg-image-list\",\n      \"blocks\": {\n        \"item_xRJaxh\": {\n          \"type\": \"item\",\n          \"settings\": {\n            \"image\": \"shopify:\/\/shop_images\/print-model-1380x800-2.jpg\",\n            \"youtube_url\": \"\",\n            \"outside_text\": true,\n            \"title\": \"\",\n            \"color_text\": \"#000000\",\n            \"content\": \"\"\n          }\n        },\n        \"item_iKQ8Y9\": {\n          \"type\": \"item\",\n          \"settings\": {\n            \"image\": \"shopify:\/\/shop_images\/print-model-1380x800-3.jpg\",\n            \"youtube_url\": \"\",\n            \"outside_text\": true,\n            \"title\": \"\",\n            \"color_text\": \"#000000\",\n            \"content\": \"\"\n          }\n        },\n        \"item_er4MEL\": {\n          \"type\": \"item\",\n          \"settings\": {\n            \"image\": \"shopify:\/\/shop_images\/print-model-1380x800-1.jpg\",\n            \"youtube_url\": \"\",\n            \"outside_text\": true,\n            \"title\": \"\",\n            \"color_text\": \"#000000\",\n            \"content\": \"\"\n          }\n        },\n        \"item_fA9Xgt\": {\n          \"type\": \"item\",\n          \"settings\": {\n            \"image\": \"shopify:\/\/shop_images\/print-model-1380x800-4.jpg\",\n            \"youtube_url\": \"\",\n            \"outside_text\": true,\n            \"title\": \"\",\n            \"color_text\": \"#000000\",\n            \"content\": \"\"\n          }\n        },\n        \"item_7HqaAP\": {\n          \"type\": \"item\",\n          \"settings\": {\n            \"image\": \"shopify:\/\/shop_images\/print-model-1380x800-5.jpg\",\n            \"youtube_url\": \"\",\n            \"outside_text\": true,\n            \"title\": \"\",\n            \"color_text\": \"#000000\",\n            \"content\": \"\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"item_xRJaxh\",\n        \"item_iKQ8Y9\",\n        \"item_er4MEL\",\n        \"item_fA9Xgt\",\n        \"item_7HqaAP\"\n      ],\n      \"custom_css\": [\n        \".yg-section-title {font-weight: 700;}\"\n      ],\n      \"name\": \"YG Image List\",\n      \"settings\": {\n        \"title\": \"Prints from First Users\",\n        \"heading_size\": \"h2\",\n        \"heading_alignment\": \"center\",\n        \"enable_section_box_layout\": false,\n        \"color_scheme\": \"\",\n        \"slides_per_view\": 3.4,\n        \"slides_per_view_mb\": 1.1,\n        \"padding_top\": 40,\n        \"padding_bottom\": 40,\n        \"padding_top_mobile\": 32,\n        \"padding_bottom_mobile\": 28\n      }\n    },\n    \"custom_liquid_MJgjd8\": {\n      \"type\": \"custom-liquid\",\n      \"name\": \"t:sections.custom-liquid.presets.name\",\n      \"settings\": {\n        \"custom_liquid\": \"\\n    \u003cmeta charset='\\\"UTF-8\\\"'\u003e\\n    \u003cmeta name='\\\"viewport\\\"' content='\\\"width=device-width,' initial-scale='1.0\\\"'\u003e\\n    \u003clink rel='\\\"stylesheet\\\"' href='\\\"https:\/\/unpkg.com\/swiper@8\/swiper-bundle.min.css\\\"'\u003e\\n    \u003cscript src='\\\"https:\/\/unpkg.com\/swiper@8\/swiper-bundle.min.js\\\"'\u003e \u003c\/script\u003e\\n\\n\u003cdiv id='\\\"precision-section-s1mc-3\\\"' class='\\\"acsmc_precision-wrapper\\\"'\u003e\\n    \u003cdiv class='\\\"page-width\\\"'\u003e\\n        \u003c!-- 第一屏 --\u003e\\n        \u003csection class='\\\"acsmc_intro\\\"'\u003e\\n            \u003c!-- \u003cdiv class=\\\"acsmc_intro-subtitle\\\"\u003eAnycubic\u003c\/div\u003e\\n            \u003cdiv class=\\\"acsmc_intro-subtitle\\\"\u003eThe Dawn of a New Era: \u003c\/div\u003e\\n            \u003cdiv class=\\\"acsmc_intro-subtitle\\\"\u003eFirst-Ever ACE GEN 2 Multicolor Printing Technology\\n            \u003c\/div\u003e --\u003e\\n            \u003cimg class='\\\"acsmc_logoImg\\\"' style='\\\"' width: loading='\\\"lazy\\\"' src='\\\"\\\"' alt='\\\"\\\"'\u003e\\n\\n            \u003cdiv class='\\\"acsmc_intro-subtitle\\\"' style='\\\"font-size:'\u003e2X the Speed, 2X the Material\\n                Savings\u003csup\u003e[1]\u003c\/sup\u003e\n\u003c\/div\u003e\\n            \u003cp class='\\\"acsmc_intro-body\\\"'\u003eThe ACE GEN 2 technology at the core of the Kobra X reduces multicolor filament\\n                change length by a massive 81.25%. This not only dramatically cuts print time but also cuts filament\\n                purge waste, turning every spool into a more cost-effective success.\\n            \u003c\/p\u003e\\n        \u003c\/section\u003e\\n\\n        \u003csection class='\\\"acsmc_scroll-gallery_3\\\"'\u003e\u003c\/section\u003e\\n    \u003c\/div\u003e\\n\u003c\/div\u003e\\n\\n\u003cstyle\u003e\\n    \/* html,\\n    body {\\n        font-family: \\\"OPPO Sans 4.0\\\", sans-serif !important;\\n    }\\n\\n    * {\\n        font-family: inherit !important;\\n    }\\n\\n    .gradient {\\n        background: #F7F8FA;\\n    } *\/\\n\\n    \/* .image-with-text__heading,\\n    .banner__heading,\\n    h3,\\n    .rich-text__heading,\\n    .title__heading {\\n        font-size: 32px !important;\\n        font-weight: 700 !important;\\n    }\\n\\n    .rich-text__text p,\\n    .image-with-text__text p {\\n        font-size: 18px !important;\\n    }\\n\\n    .newsletter,\\n    #float-icon-container,\\n    .footer,\\n    .yg-country-popup-container,\\n    .color-inverse {\\n        display: none;\\n    } *\/\\n\\n    .acsmc_precision-wrapper {\\n        width: 100%;\\n        overflow: hidden;\\n        background: #000;\\n        color: #fff;\\n    }\\n\\n    .acsmc_precision-light {\\n        background: #fff;\\n        color: #000;\\n    }\\n\\n    .acsmc_precision-light .acsmc_panel {\\n        background: #fff;\\n    }\\n\\n    .acsmc_precision-light .acsmc_intro-subtitle {\\n        color: #000;\\n    }\\n\\n    .acsmc_precision-light .acsmc_intro-body {\\n        color: #333;\\n    }\\n\\n    .acsmc_precision-light .acsmc_panel .acsmc_text h3 {\\n        color: #000;\\n    }\\n\\n    .acsmc_precision-light .acsmc_panel .acsmc_text p {\\n        color: #333;\\n    }\\n\\n    .acsmc_precision-light .acsmc_panel strong {\\n        color: #000;\\n    }\\n\\n    .acsmc_intro {\\n        \/* height: 100vh; *\/\\n        display: flex;\\n        flex-direction: column;\\n        justify-content: flex-start;\\n        align-items: center;\\n        padding: 0;\\n        position: relative;\\n    }\\n\\n    .acsmc_introTitle {\\n        background: linear-gradient(90deg, #ffdfc0 0%, #e2995a 100%);\\n        -webkit-background-clip: text;\\n        background-clip: text;\\n        color: transparent;\\n        font-weight: 700;\\n        font-size: 32px;\\n        line-height: 136%;\\n        letter-spacing: 0%;\\n        text-align: center;\\n        margin-top: 60px;\\n        margin-bottom: 30px;\\n    }\\n\\n    .acsmc_intro-subtitle {\\n        font-weight: 600;\\n        font-size: 32px;\\n        line-height: 150%;\\n        text-align: center;\\n        color: #fff;\\n        margin-bottom: 16px;\\n    }\\n\\n    .acsmc_intro-body {\\n        font-size: 14px;\\n        line-height: 160%;\\n        color: #fff;\\n        text-align: center;\\n        max-width: 860px;\\n        margin: 0 20px 40px;\\n    }\\n\\n    .acsmc_intro-images {\\n        display: flex;\\n        justify-content: center;\\n        align-items: stretch;\\n        width: 100%;\\n        height: 50vh;\\n        gap: 20px;\\n    }\\n\\n    .acsmc_intro-left {\\n        \/* flex: 0.6; *\/\\n        max-height: 518px;\\n    }\\n\\n    .acsmc_intro-right {\\n        max-width: 450px;\\n        max-height: 518px;\\n        \/* flex: 0.4; *\/\\n    }\\n\\n    .acsmc_intro-images img {\\n        width: 100%;\\n        height: 100%;\\n        border-radius: 16px;\\n        object-fit: cover;\\n    }\\n\\n    \/* 统一图片与视频样式，保证 intro-left 的视频与图片显示一致 *\/\\n    .acsmc_intro-images img,\\n    .acsmc_intro-images video,\\n    .acsmc_intro-left video,\\n    .acsmc_intro-right video {\\n        display: block;\\n        width: 100%;\\n        height: 100%;\\n        border-radius: 16px;\\n        object-fit: contain;\\n    }\\n\\n    \/* 若需要视频在容器内垂直居中，可以在父容器上这样设置（可选） *\/\\n    .acsmc_intro-images .acsmc_intro-left,\\n    .acsmc_intro-images .acsmc_intro-right {\\n        display: flex;\\n        align-items: center;\\n        justify-content: center;\\n    }\\n\\n    \/* =====================\\n   滚动内容区\\n===================== *\/\\n    .acsmc_scroll-gallery_3 {\\n        position: relative;\\n        height: auto;\\n    }\\n\\n\\n    \/* 所有 panel 统一为紧凑、无特效的布局 *\/\\n    .acsmc_panel {\\n        position: relative;\\n        min-height: auto;\\n        \/* padding: 40px 5%; *\/\\n        background: #000;\\n        z-index: 1;\\n        display: flex;\\n        align-items: center;\\n        justify-content: space-between;\\n        opacity: 1;\\n        transform: none;\\n        transition: none;\\n        margin-bottom: 16px;\\n        \/* 缩小板块间距 *\/\\n    }\\n\\n    \/* 条件性去除板块内边距（可通过 JS 添加 .acsmc_no-padding） *\/\\n    .acsmc_panel.acsmc_no-padding {\\n        padding: 0 !important;\\n    }\\n\\n    .acsmc_panel.acsmc_active {\\n        opacity: 1;\\n        transform: translateY(0);\\n        z-index: 2;\\n    }\\n\\n    .acsmc_panel.acsmc_reverse {\\n        \/* flex-direction: row-reverse; *\/\\n    }\\n\\n    .acsmc_panel .acsmc_text {\\n        flex: 0.45;\\n        padding: 20px;\\n        font-weight: 400;\\n        font-style: Regular;\\n        font-size: 20px;\\n        line-height: 150%;\\n        letter-spacing: 0%;\\n        order: 1;\\n        \/* Default order: Text first *\/\\n    }\\n\\n    .acsmc_panel .acsmc_media {\\n        text-align: center;\\n        order: 1;\\n        \/* Default order: Media second *\/\\n    }\\n\\n    .acsmc_has-bigtitle .acsmc_media {\\n        flex: 0.5;\\n    }\\n\\n    \/* Use order property to swap content instead of row-reverse *\/\\n    .acsmc_panel.acsmc_reverse .acsmc_text {\\n        order: 2;\\n    }\\n\\n    .acsmc_panel.acsmc_reverse .acsmc_media {\\n        order: 1;\\n    }\\n\\n    .acsmc_panel.acsmc_reverse {\\n        \/* flex-direction: row-reverse; *\/\\n        \/* Removed row-reverse to avoid issues with wrapping elements like bigtitle *\/\\n    }\\n\\n    .acsmc_panel .acsmc_text h3 {\\n        margin-bottom: 20px;\\n        font-weight: 700;\\n        font-size: 32px;\\n        line-height: 140%;\\n        letter-spacing: 0%;\\n        color: #fff;\\n    }\\n\\n    .acsmc_panel .acsmc_text p {\\n        font-size: 18px;\\n        color: #bbb;\\n        line-height: 1.6;\\n    }\\n\\n    .acsmc_panel strong {\\n        color: #fff;\\n    }\\n\\n    \/* .acsmc_panel .acsmc_media {\\n        flex: 0.5;\\n        text-align: center;\\n    } *\/\\n\\n    .acsmc_panel .acsmc_media img,\\n    .acsmc_panel .acsmc_media video {\\n        width: 100%;\\n        border-radius: 12px;\\n        object-fit: cover;\\n        \/* max-height: 80vh; *\/\\n    }\\n\\n    \/* 文本内联图片（@ACE_GEN_2） *\/\\n    #precision-section-s1mc-3 .acsmc_inline-logo {\\n        display: inline-block;\\n        height: 24px;\\n        width: auto;\\n        vertical-align: -0.15em;\\n        margin: 0 6px;\\n    }\\n\\n    .acsmc_media-2col {\\n        display: flex;\\n        flex-direction: column;\\n        gap: 16px;\\n        align-items: center;\\n        justify-content: center;\\n    }\\n\\n    .acsmc_media-2col .acsmc_media-item {\\n        flex: none;\\n        max-width: 100%;\\n        display: flex;\\n        justify-content: center;\\n        align-items: center;\\n        width: 100%;\\n    }\\n\\n    .acsmc_media-2col .acsmc_media-item img,\\n    .acsmc_media-2col .acsmc_media-item video {\\n        width: 100%;\\n        height: auto;\\n        border-radius: 12px;\\n        object-fit: contain;\\n        display: block;\\n        margin: 0 auto;\\n    }\\n\\n    .acsmc_media {\\n        display: flex;\\n        justify-content: center;\\n        align-items: center;\\n        width: 100%;\\n    }\\n\\n    .acsmc_textImg {\\n        display: block;\\n        margin-top: 12px;\\n        max-width: 680px;\\n        width: 100%;\\n        border-radius: 12px;\\n    }\\n\\n    .acsmc_textImgList {\\n        display: flex;\\n        gap: 16px;\\n        margin-top: 12px;\\n        width: 100%;\\n        max-width: 680px;\\n        justify-content: center;\\n        margin-left: auto;\\n        margin-right: auto;\\n    }\\n\\n    .acsmc_textImgList img {\\n        flex: 1 1 0;\\n        width: 100%;\\n        border-radius: 12px;\\n        object-fit: contain;\\n    }\\n\\n    \/* 简易轮播（限定到当前页面容器，避免影响其他页面） *\/\\n    #precision-section-s1mc-3 .swiper {\\n        width: 100%;\\n        max-width: 1200px;\\n        border-radius: 12px;\\n        overflow: hidden;\\n        background: #000;\\n    }\\n\\n    #precision-section-s1mc-3 .swiper-wrapper {\\n        align-items: center;\\n    }\\n\\n    #precision-section-s1mc-3 .swiper-slide {\\n        display: flex;\\n        justify-content: center;\\n        align-items: center;\\n        background: #000;\\n    }\\n\\n    #precision-section-s1mc-3 .swiper-slide img,\\n    #precision-section-s1mc-3 .swiper-slide video {\\n        width: 100%;\\n        height: auto;\\n        display: block;\\n        object-fit: cover;\\n        border-radius: 0;\\n    }\\n\\n    #precision-section-s1mc-3 .ac_gallery-dots.swiper-pagination-bullets {\\n        position: static;\\n        display: flex;\\n        justify-content: center;\\n        align-items: center;\\n        gap: 8px;\\n        margin-top: 16px;\\n    }\\n\\n    #precision-section-s1mc-3 .ac_gallery-dots .swiper-pagination-bullet {\\n        width: 32px;\\n        height: 4px;\\n        border-radius: 2px;\\n        background: #333;\\n        opacity: 1;\\n        margin: 0;\\n    }\\n\\n    #precision-section-s1mc-3 .ac_gallery-dots .swiper-pagination-bullet-active {\\n        background: #fff;\\n    }\\n\\n    .acsmc_bigtitle {\\n        width: 100%;\\n        text-align: center;\\n        font-weight: 700;\\n        font-size: 24px;\\n        color: #fff;\\n        margin-bottom: 20px;\\n        padding-top: 80px;\\n    }\\n\\n    .acsmc_precision-light .acsmc_bigtitle {\\n        color: #000;\\n    }\\n\\n    .acsmc_panel.acsmc_has-bigtitle {\\n        flex-wrap: wrap;\\n    }\\n\\n    .acsmc_panel.acsmc_single-media {\\n        justify-content: center;\\n    }\\n\\n    .acsmc_panel.acsmc_single-media .acsmc_media {\\n        flex: 1;\\n        max-width: 100%;\\n    }\\n\\n    \/* =====================\\n       Switch Video Component\\n       ===================== *\/\\n    .acsmc_switch_video {\\n        width: 100%;\\n        margin-top: 40px;\\n        display: flex;\\n        flex-direction: column;\\n        align-items: center;\\n        background: #fff;\\n        color: #000;\\n        \/* padding: 20px; *\/\\n        \/* border-radius: 12px; *\/\\n    }\\n\\n    .acsmc_switch_video .acsmc_bigtitle {\\n        margin-bottom: 30px;\\n    }\\n\\n    .acsmc_sv_tabs {\\n        display: flex;\\n        gap: 16px;\\n        margin-bottom: 30px;\\n        justify-content: center;\\n        flex-wrap: wrap;\\n    }\\n\\n    .acsmc_sv_tab {\\n        padding: 10px 24px;\\n        border-radius: 50px;\\n        font-weight: 600;\\n        font-size: 16px;\\n        cursor: pointer;\\n        transition: all 0.3s ease;\\n        border: 1px solid #ddd;\\n        background: #000;\\n        \/* ← 原为 #fff *\/\\n        color: #fff;\\n        \/* ← 原为 #000 *\/\\n    }\\n\\n    .acsmc_precision-wrapper:not(.acsmc_precision-light) .acsmc_sv_tab {\\n        background: #fff;\\n        \/* ← 原为 #333 *\/\\n        color: #000;\\n        \/* ← 原为 #fff *\/\\n        border-color: #ccc;\\n        \/* 浅一点更和谐，可保持 #444 也可 *\/\\n    }\\n\\n    .acsmc_sv_tab.active {\\n        background: #fff;\\n        \/* ← 原为 #000 *\/\\n        color: #000;\\n        \/* ← 原为 #fff *\/\\n        border-color: #000;\\n    }\\n\\n    .acsmc_precision-wrapper:not(.acsmc_precision-light) .acsmc_sv_tab.active {\\n        background: #000;\\n        \/* ← 原为 #fff *\/\\n        color: #fff;\\n        \/* ← 原为 #000 *\/\\n        border-color: #000;\\n    }\\n\\n    .acsmc_switch_video .acsmc_sv_tab {\\n        background: #000;\\n        \/* ← 原为 #fff *\/\\n        color: #fff;\\n        \/* ← 原为 #000 *\/\\n        border-color: #ddd;\\n    }\\n\\n    .acsmc_switch_video .acsmc_sv_tab.active {\\n        background: #fff;\\n        \/* ← 原为 #000 *\/\\n        color: #000;\\n        \/* ← 原为 #fff *\/\\n        border-color: #000;\\n    }\\n\\n    .acsmc_sv_content {\\n        width: 100%;\\n        max-width: 1200px;\\n        position: relative;\\n        border-radius: 16px;\\n        overflow: hidden;\\n        aspect-ratio: 16\/9;\\n        background: #000;\\n    }\\n\\n    .acsmc_sv_item {\\n        position: absolute;\\n        top: 0;\\n        left: 0;\\n        width: 100%;\\n        height: 100%;\\n        opacity: 0;\\n        transition: opacity 0.5s ease;\\n        pointer-events: none;\\n    }\\n\\n    .acsmc_sv_item.active {\\n        opacity: 1;\\n        pointer-events: auto;\\n        position: relative;\\n        \/* Ensure it takes up space if needed, but absolute is fine for stacking *\/\\n        z-index: 1;\\n    }\\n\\n    .acsmc_sv_item img,\\n    .acsmc_sv_item video {\\n        width: 100%;\\n        height: 100%;\\n        object-fit: cover;\\n        display: block;\\n    }\\n\\n    @media (max-width: 768px) {\\n        .acsmc_sv_tabs {\\n            gap: 10px;\\n            margin-bottom: 20px;\\n        }\\n\\n        .acsmc_sv_tab {\\n            padding: 8px 16px;\\n            font-size: 14px;\\n        }\\n\\n        .acsmc_switch_video {\\n            margin-top: 20px;\\n            margin-bottom: 20px;\\n        }\\n    }\\n\\n    .acsmc_panel.acsmc_special-center {\\n        \/* special-center 保持居中但不占满视口，和其它 panel 一致 *\/\\n        display: flex;\\n        flex-direction: column;\\n        justify-content: center;\\n        align-items: center;\\n        gap: 24px;\\n        \/* padding: 40px 5%; *\/\\n        min-height: auto;\\n        box-sizing: border-box;\\n    }\\n\\n    .acsmc_panel.acsmc_special-center .acsmc_text {\\n        flex: 0 0 45%;\\n        \/* max-width: 50%; *\/\\n        text-align: center;\\n        padding: 20px;\\n        display: flex;\\n        flex-direction: column;\\n        justify-content: center;\\n        \/* 文本垂直居中（关键） *\/\\n    }\\n\\n    .acsmc_panel.acsmc_special-center .acsmc_media {\\n        flex: 0 0 45%;\\n        max-width: 100%;\\n        max-height: 720px;\\n        display: flex;\\n        justify-content: center;\\n        align-items: center;\\n        \/* 媒体垂直居中（关键） *\/\\n    }\\n\\n    .acsmc_panel.acsmc_special-center .acsmc_media img,\\n    .acsmc_panel.acsmc_special-center .acsmc_media video {\\n        width: 100%;\\n        height: auto;\\n        \/* max-height: 60vh; *\/\\n        border-radius: 12px;\\n    }\\n\\n    \/* 移动端样式优化 *\/\\n    @media (max-width: 768px) {\\n        .acsmc_bigtitle {\\n            font-size: 24px;\\n            margin-bottom: 20px;\\n            padding-top: 0;\\n        }\\n\\n        .acsmc_panel .acsmc_text p {\\n            font-size: 14px;\\n        }\\n\\n        .acsmc_panel .acsmc_text h3 {\\n            font-size: 36px;\\n            \/* 手机端二级标题 36px *\/\\n        }\\n\\n        \/* 整体滚动区改为自动高度 *\/\\n        .acsmc_scroll-gallery_3 {\\n            height: auto;\\n        }\\n\\n        \/* panel 在移动端的基础样式 *\/\\n        .acsmc_panel {\\n            position: relative !important;\\n            height: auto;\\n            display: flex;\\n            \/* flex-direction: column !important; *\/\\n            \/* 强制所有panel在移动端上下布局 *\/\\n            justify-content: flex-start;\\n            align-items: center;\\n            padding: 5% 4%;\\n        }\\n\\n        \/* 前三个panel的移动端样式 *\/\\n        .acsmc_panel:nth-child(-n+3) {\\n            min-height: auto;\\n            padding: 30px 4%;\\n            margin-bottom: 12px;\\n            \/* 缩小间距 *\/\\n        }\\n\\n        \/* 第四个panel开始的移动端样式 *\/\\n        .acsmc_panel:nth-child(n+4) {\\n            \/* min-height: 100vh; *\/\\n            justify-content: center;\\n            opacity: 0;\\n            transform: translateY(20px);\\n            transition: opacity 0.6s ease-out, transform 0.6s ease-out;\\n        }\\n\\n        \/* 激活状态的动画效果 *\/\\n        .acsmc_panel.acsmc_active {\\n            opacity: 1;\\n            transform: translateY(0);\\n        }\\n\\n        .acsmc_panel:not(.acsmc_special-center) .acsmc_text,\\n        .acsmc_panel:not(.acsmc_special-center) .acsmc_media {\\n            flex: none;\\n            width: 100%;\\n            max-width: 100%;\\n            \/* padding: 0 16px; *\/\\n            text-align: center;\\n        }\\n\\n        .acsmc_panel:not(.acsmc_special-center) .acsmc_media {\\n            margin-top: 16px;\\n        }\\n\\n        .acsmc_panel:not(.acsmc_special-center) .acsmc_media img,\\n        .acsmc_panel:not(.acsmc_special-center) .acsmc_media video {\\n            width: 100%;\\n            \/* height: 60vh; *\/\\n            object-fit: cover;\\n            border-radius: 12px;\\n            max-height: none;\\n        }\\n\\n        .acsmc_panel:not(.acsmc_special-center) .acsmc_media img {\\n            object-fit: contain;\\n        }\\n\\n        .acsmc_media-2col {\\n            flex-direction: column;\\n        }\\n\\n        .acsmc_media-2col .acsmc_media-item {\\n            max-width: 100%;\\n        }\\n\\n        .acsmc_panel.acsmc_single-media {\\n            padding-left: 0;\\n            padding-right: 0;\\n        }\\n\\n        \/* 保留并强化 special-center 在移动端的全屏覆盖行为（如果已存在则为冗余安全覆盖） *\/\\n        \/* 修改 special-center 在移动端的样式 *\/\\n        .acsmc_panel.acsmc_special-center {\\n            padding: 20px 0;\\n            height: auto;\\n            \/* min-height: 100vh; *\/\\n            display: flex;\\n            flex-direction: column;\\n            justify-content: flex-start;\\n            align-items: center;\\n            position: relative;\\n            gap: 20px;\\n        }\\n\\n        .acsmc_panel.acsmc_special-center .acsmc_text {\\n            position: relative;\\n            \/* 改为相对定位 *\/\\n            left: auto;\\n            top: auto;\\n            transform: none;\\n            width: 100%;\\n            padding: 16px;\\n            max-width: 90%;\\n            z-index: 2;\\n            text-align: center;\\n            color: #333;\\n            \/* 恢复正常文字颜色 *\/\\n            order: 1;\\n            \/* 文字放在上面 *\/\\n        }\\n\\n        .acsmc_panel.acsmc_special-center .acsmc_media {\\n            width: 100%;\\n            height: auto;\\n            max-height: 60vh;\\n            \/* 限制视频高度 *\/\\n            display: flex;\\n            justify-content: center;\\n            align-items: center;\\n            order: 2;\\n            \/* 媒体放在下面 *\/\\n            \/* padding: 0 16px; *\/\\n        }\\n\\n        .acsmc_panel.acsmc_special-center .acsmc_media img,\\n        .acsmc_panel.acsmc_special-center .acsmc_media video {\\n            width: 100%;\\n            height: auto;\\n            max-height: 60vh;\\n            object-fit: contain;\\n            border-radius: 12px;\\n        }\\n\\n        .acsmc_panel.acsmc_special-center .acsmc_text {\\n            \/* position: absolute;\\n            left: 50%;\\n            top: 50%;\\n            transform: translate(-50%, -50%); *\/\\n            z-index: 2;\\n            text-align: center;\\n            color: #fff;\\n        }\\n\\n        .acsmc_panel .acsmc_media img,\\n        .acsmc_panel .acsmc_media video {\\n            width: 100%;\\n            \/* height: 400px; *\/\\n            \/* max-height: 80vh; *\/\\n        }\\n\\n        .acsmc_introTitle {\\n            font-weight: 700;\\n            font-size: 22px;\\n            \/* 移动端保持一级标题 50px *\/\\n            line-height: 136%;\\n            letter-spacing: 0%;\\n            text-align: center;\\n            -webkit-background-clip: text;\\n            background-clip: text;\\n            color: transparent;\\n            margin-bottom: 60px;\\n            padding: 0 20px;\\n            \/* 移动端添加两边间距 *\/\\n        }\\n\\n        .acsmc_intro-subtitle {\\n            font-weight: 600;\\n            font-size: 22px;\\n            line-height: 150%;\\n            text-align: center;\\n            color: #fff;\\n            margin-bottom: 12px;\\n        }\\n\\n        .acsmc_intro-body {\\n            font-size: 14px;\\n            line-height: 160%;\\n            text-align: center;\\n            margin: 0 16px 32px;\\n        }\\n\\n        .acsmc_intro-images {\\n            flex-direction: column;\\n            height: auto;\\n        }\\n\\n        .acsmc_intro-left {\\n            order: 2;\\n        }\\n\\n        .rich-text__text p,\\n        .image-with-text__text p {\\n            font-size: 14px !important;\\n        }\\n\\n        .image-with-text__heading,\\n        .banner__heading,\\n        h3 {\\n            font-size: 22px !important;\\n        }\\n    }\\n\\n    @media (max-width: 768px) {\\n        .acsmc_precision-wrapper .acsmc_intro {\\n            padding-top: 16px !important;\\n        }\\n\\n        .acsmc_precision-wrapper .acsmc_introTitle {\\n            margin-top: 20px !important;\\n            margin-bottom: 12px !important;\\n        }\\n\\n        .acsmc_precision-wrapper .acsmc_intro-subtitle {\\n            margin-bottom: 6px !important;\\n        }\\n\\n        .acsmc_precision-wrapper .acsmc_intro-body {\\n            margin: 0 12px 12px !important;\\n        }\\n\\n        .acsmc_precision-wrapper .acsmc_scroll-gallery_3 {\\n            padding: 8px 0 !important;\\n        }\\n\\n        .acsmc_precision-wrapper .acsmc_panel {\\n            padding: 0 !important;\\n            margin: 0 0 12px !important;\\n            \/* 缩小间距 *\/\\n        }\\n\\n        .acsmc_precision-wrapper .acsmc_panel .acsmc_text {\\n            margin-bottom: 8px !important;\\n        }\\n\\n        \/* 兼容 special-center 的紧凑样式 *\/\\n        .acsmc_precision-wrapper .acsmc_panel.acsmc_special-center {\\n            gap: 12px !important;\\n            padding: 10px 0 !important;\\n        }\\n\\n        .acsmc_precision-wrapper .acsmc_panel.acsmc_special-center .acsmc_text {\\n            padding: 12px !important;\\n        }\\n\\n        .acsmc_precision-wrapper .acsmc_panel.acsmc_special-center .acsmc_media {\\n            max-height: none !important;\\n        }\\n    }\\n\\n    \/* media 纵向堆叠模式 *\/\\n    .acsmc_panel.acsmc_media-stack {\\n        flex-direction: column;\\n        align-items: center;\\n    }\\n\\n    .acsmc_panel.acsmc_media-stack .acsmc_text {\\n        width: 100%;\\n        max-width: 860px;\\n        order: 1;\\n    }\\n\\n    .acsmc_panel.acsmc_media-stack .acsmc_media {\\n        width: 100%;\\n        max-width: 1200px;\\n        margin-top: 24px;\\n        order: 2;\\n    }\\n\\n    \/* 多个 media 永远上下排列 *\/\\n    .acsmc_panel.acsmc_media-stack .acsmc_media-2col {\\n        flex-direction: column;\\n    }\\n\u003c\/style\u003e\\n\\n\u003c!-- \u003cscript src=\\\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/gsap\/3.12.5\/gsap.min.js\\\"\u003e\u003c\/script\u003e\\n\u003cscript src=\\\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/gsap\/3.12.5\/ScrollTrigger.min.js\\\"\u003e\u003c\/script\u003e --\u003e\\n\\n\u003cscript\u003e\\n    document.addEventListener(\\\"DOMContentLoaded\\\", () =\u003e {\\n        \/\/ gsap.registerPlugin(ScrollTrigger);\\n        const logoJson = {\\n            media: \\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/ace-gen-2-PC.jpg?v=1767785181\\\",\\n            mobImg: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/ace-gen-2-M-1_e40595b3-2e87-4eb9-a2c4-15ab5b2340c6.jpg?v=1767785180`,\\n        }\\n\\n        const logoEl = document.querySelector('.acsmc_logoImg');\\n        if (logoEl) {\\n            const isMobile = window.matchMedia('(max-width: 768px)').matches;\\n            const src = isMobile \u0026\u0026 logoJson.mobImg ? logoJson.mobImg : logoJson.media;\\n            logoEl.setAttribute('src', src);\\n        }\\n\\n        const imgJson = [\\n            {\\n                title: ``,\\n                text: ``,\\n                media: \\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Shorter-Distance-52-PC-EN.jpg?v=1767785181\\\",\\n                mobImg: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Shorter-Distance-52-M.jpg?v=1767785180`,\\n                media2: \\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Purge-Length-Decreased-81-PC-EN.jpg?v=1767785181\\\",\\n                mobImg2: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Purge-Length-Decreased-81-M.jpg?v=1767946209`,\\n            },\\n            {\\n                title: ``,\\n                text: ``,\\n                mediaArr: [\\n                    `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Dragon-PC-EN.jpg?v=1767785180`,\\n                    `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/4-Color-Cuboid-PC-EN.jpg?v=1767785179`,\\n                    `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/4-Color-Spinning-Top-PC-EN.jpg?v=1767945017`,\\n                ],\\n                mobArr: [\\n                    `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Dragon-M.jpg?v=1767785181`,\\n                    `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/4-Color-Cuboid-M.jpg?v=1767785180`, `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/4-Color-Spinning-Top-M.jpg?v=1767944996`\\n                ],\\n                isSwiper: true\\n            },\\n            {\\n                title: ``,\\n                text: ``,\\n                media: \\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0921\/8385\/5398\/files\/KXC_Sale_Point_Color_pc.jpg?v=1773912160\\\",\\n                mobImg: `https:\/\/cdn.shopify.com\/s\/files\/1\/0921\/8385\/5398\/files\/KXC_Sale_Point_Color_m.jpg?v=1773912160`,\\n                fullImage: true\\n            },\\n            {\\n                bigtitle: `Mixing it Up without Messing it Up: Soft\/Hard Multi-Material Printing`,\\n                title: \\\"\\\",\\n                text: `@ACE_GEN_2 has an adaptive extrusion force compensater, it constantly and automatically adjusts the extrusion force based on the filament's hardness, enabling seamless transitions between different materials.`,\\n                textImg: \\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/feed-pla-tpu-filament-8.jpg?v=1767871435\\\",\\n                media: \\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/soft-hard-pla-tpu.jpg?v=1767785181\\\",\\n                mobImg: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/soft-hard-pla-tpu.jpg?v=1767785181`,\\n            },\\n            \/\/ {\\n            \/\/     type: 'switch_video',\\n            \/\/     bigtitle: ``,\\n            \/\/     tabs: [\\n            \/\/         { title: \\\"PLA+TPU\\\", media: `https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/193e9f5229c84812b5157876b9fba342.mp4` },\\n            \/\/         { title: \\\"PLA+PVA\\\", media: `https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/6509a056687648d48d269059b4b37857.mp4` },\\n            \/\/         { title: \\\"TPU+TPU\\\", media: `https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/10f3d27b2b6f4030bacd968206f355a8.mp4` },\\n            \/\/     ]\\n            \/\/ },\\n        ];\\n\\n        const container = document.querySelector(\\\".acsmc_scroll-gallery_3\\\");\\n\\n        \/\/ 动态渲染 panel\\n        imgJson.forEach((item, i) =\u003e {\\n            const panel = document.createElement(\\\"div\\\");\\n\\n            \/\/ Handle switch_video type\\n            if (item.type === 'switch_video') {\\n                panel.className = 'acsmc_switch_video';\\n\\n                let tabsHtml = '';\\n                let contentHtml = '';\\n\\n                item.tabs.forEach((tab, idx) =\u003e {\\n                    const isActive = idx === 0 ? 'active' : '';\\n                    tabsHtml += `\u003cdiv class=\\\"acsmc_sv_tab ${isActive}\\\" data-index=\\\"${idx}\\\"\u003e${tab.title}\u003c\/div\u003e`;\\n\\n                    const mediaUrl = tab.media;\\n                    const isVideo = typeof mediaUrl === 'string' \u0026\u0026 mediaUrl.endsWith('.mp4');\\n\\n                    contentHtml += `\\n                        \u003cdiv class=\\\"acsmc_sv_item ${isActive}\\\" data-index=\\\"${idx}\\\"\u003e\\n                             ${isVideo\\n                            ? `\u003cvideo autoplay preload=\\\"none\\\" muted loop playsinline data-src=\\\"${mediaUrl}\\\"\u003e\u003c\/video\u003e`\\n                            : `\u003cimg loading=\\\"lazy\\\" src=\\\"${mediaUrl}\\\" alt=\\\"${tab.title}\\\"\u003e`}\\n                        \u003c\/div\u003e\\n                    `;\\n                });\\n\\n                panel.innerHTML = `\\n                    \u003cdiv class=\\\"acsmc_bigtitle\\\"\u003e${item.bigtitle}\u003c\/div\u003e\\n                    \u003cdiv class=\\\"acsmc_sv_tabs\\\"\u003e${tabsHtml}\u003c\/div\u003e\\n                    \u003cdiv class=\\\"acsmc_sv_content\\\"\u003e${contentHtml}\u003c\/div\u003e\\n                `;\\n\\n                \/\/ Add click listeners for tabs\\n                const tabs = panel.querySelectorAll('.acsmc_sv_tab');\\n                const contents = panel.querySelectorAll('.acsmc_sv_item');\\n\\n                tabs.forEach(tab =\u003e {\\n                    tab.addEventListener('click', () =\u003e {\\n                        const index = tab.getAttribute('data-index');\\n\\n                        tabs.forEach(t =\u003e t.classList.remove('active'));\\n                        tab.classList.add('active');\\n\\n                        contents.forEach(c =\u003e {\\n                            c.classList.remove('active');\\n                            \/\/ Pause videos in inactive tabs\\n                            const vid = c.querySelector('video');\\n                            if (vid) vid.pause();\\n\\n                            if (c.getAttribute('data-index') === index) {\\n                                c.classList.add('active');\\n                                \/\/ Play video in active tab if loaded\\n                                const vid = c.querySelector('video');\\n                                if (vid \u0026\u0026 vid.getAttribute('src')) {\\n                                    vid.play().catch(() =\u003e { });\\n                                } else if (vid \u0026\u0026 vid.getAttribute('data-src')) {\\n                                    \/\/ Lazy load logic will handle it if observed, \\n                                    \/\/ but here we might want to force load if clicked\\n                                    vid.setAttribute('src', vid.getAttribute('data-src'));\\n                                    vid.addEventListener('loadeddata', () =\u003e {\\n                                        vid.play().catch(() =\u003e { });\\n                                    }, { once: true });\\n                                }\\n                            }\\n                        });\\n                    });\\n                });\\n\\n                container.appendChild(panel);\\n                return; \/\/ Skip standard panel logic\\n            }\\n\\n            \/\/ Standard Panel Logic\\n            \/\/ 使 scroll-gallery 从“图片在左”开始：\\n            \/\/ - 其余偶数索引 (0,4,...) 使用 reverse 使媒体在左，文字在右\\n            \/\/ 第0,2个panel（第1,3个）显示为左图右文，第1个panel（第2个）显示为左文右图\\n            const isReverse = i \u003c 3 ? i % 2 === 1 : (i % 2 === 0);\\n\\n            const hasBigTitle = !!item.bigtitle;\\n            const hasMedia2 = !!item.media2\\n                || (Array.isArray(item.mediaList) \u0026\u0026 item.mediaList.length \u003e= 2)\\n                || (Array.isArray(item.mediaArr) \u0026\u0026 item.mediaArr.length \u003e= 2);\\n            const hideText = item.fullImage === true;\\n\\n            let panelClass = `acsmc_panel ${isReverse ? \\\"acsmc_reverse\\\" : \\\"\\\"}`;\\n            if (hasBigTitle) panelClass += \\\" acsmc_has-bigtitle\\\";\\n            if (hideText) panelClass += \\\" acsmc_single-media\\\";\\n            if (item.isSwiper || hasMedia2) {\\n                panelClass += \\\" acsmc_media-stack\\\";\\n            }\\n\\n            panel.className = panelClass.trim();\\n\\n            const isMobile = window.matchMedia('(max-width: 768px)').matches;\\n            const mediaUrl = (isMobile \u0026\u0026 item.mobImg) ? item.mobImg : item.media;\\n            const isVideo = typeof mediaUrl === 'string' \u0026\u0026 mediaUrl.endsWith('.mp4');\\n\\n            let mediaHtml = '';\\n            if (hasMedia2) {\\n                const list = Array.isArray(item.mediaList)\\n                    ? item.mediaList\\n                    : (Array.isArray(item.mediaArr) ? item.mediaArr : [item.media, item.media2].filter(Boolean));\\n                const listMob = Array.isArray(item.mobList)\\n                    ? item.mobList\\n                    : (Array.isArray(item.mobArr) ? item.mobArr : [item.mobImg, item.mobImg2].filter(Boolean));\\n                \/\/ 当 isSwiper 为 true 且为移动端时，优先使用 mobArr（若存在），否则尝试长度匹配的 mob 列表，最后回退到桌面列表\\n                let sources;\\n                if (isMobile \u0026\u0026 item.isSwiper === true \u0026\u0026 Array.isArray(listMob) \u0026\u0026 listMob.length) {\\n                    sources = listMob;\\n                } else if (isMobile \u0026\u0026 Array.isArray(listMob) \u0026\u0026 listMob.length === list.length) {\\n                    sources = listMob;\\n                } else {\\n                    sources = list;\\n                }\\n\\n                if (item.isSwiper === true \u0026\u0026 !isMobile) {\\n                    mediaHtml = `\\n                      \u003cdiv class=\\\"acsmc_media\\\"\u003e\\n                        \u003cdiv class=\\\"swiper\\\"\u003e\\n                          \u003cdiv class=\\\"swiper-wrapper\\\"\u003e\\n                            ${sources.map((src) =\u003e {\\n                        const isVid = typeof src === 'string' \u0026\u0026 src.endsWith('.mp4');\\n                        return `\\n                                  \u003cdiv class=\\\"swiper-slide\\\"\u003e\\n                                    ${isVid\\n                                ? `\u003cvideo autoplay preload=\\\"none\\\" muted loop playsinline data-src=\\\"${src}\\\"\u003e\u003c\/video\u003e`\\n                                : `\u003cimg loading=\\\"lazy\\\" decoding=\\\"async\\\" fetchpriority=\\\"low\\\" src=\\\"${src}\\\" alt=\\\"${item.title}\\\"\u003e`}\\n                                  \u003c\/div\u003e\\n                                `;\\n                    }).join('')}\\n                          \u003c\/div\u003e\\n                          \u003cdiv class=\\\"swiper-pagination ac_gallery-dots\\\"\u003e\u003c\/div\u003e\\n                        \u003c\/div\u003e\\n                      \u003c\/div\u003e\\n                    `;\\n                } else {\\n                    \/\/ 移动端或非 swiper 的场景，使用竖向（或 2 列）媒体列表，并且 sources 在上面已优先选取了 mobArr（若适用）\\n                    mediaHtml = `\\n                      \u003cdiv class=\\\"acsmc_media acsmc_media-2col\\\"\u003e\\n                        ${sources.map((src) =\u003e {\\n                        const isVid = typeof src === 'string' \u0026\u0026 src.endsWith('.mp4');\\n                        return isVid\\n                            ? `\u003cdiv class=\\\"acsmc_media-item\\\"\u003e\u003cvideo autoplay preload=\\\"none\\\" muted loop playsinline data-src=\\\"${src}\\\"\u003e\u003c\/video\u003e\u003c\/div\u003e`\\n                            : `\u003cdiv class=\\\"acsmc_media-item\\\"\u003e\u003cimg loading=\\\"lazy\\\" decoding=\\\"async\\\" fetchpriority=\\\"low\\\" src=\\\"${src}\\\" alt=\\\"${item.title}\\\"\u003e\u003c\/div\u003e`;\\n                    }).join('')}\\n                      \u003c\/div\u003e\\n                    `;\\n                }\\n            } else {\\n                mediaHtml = `\\n                  \u003cdiv class=\\\"acsmc_media\\\"\u003e\\n                    ${isVideo\\n                        ? `\u003cvideo autoplay preload=\\\"none\\\" muted loop playsinline data-src=\\\"${mediaUrl}\\\"\u003e\u003c\/video\u003e`\\n                        : `\u003cimg loading=\\\"lazy\\\" decoding=\\\"async\\\" fetchpriority=\\\"low\\\" src=\\\"${mediaUrl}\\\" alt=\\\"${item.title}\\\"\u003e`}\\n                  \u003c\/div\u003e\\n                `;\\n            }\\n\\n            let contentHtml = '';\\n            const isLastPanel = i === imgJson.length - 1;\\n            if (hasBigTitle \u0026\u0026 !isLastPanel) {\\n                contentHtml += `\u003cdiv class=\\\"acsmc_bigtitle\\\"\u003e${item.bigtitle}\u003c\/div\u003e`;\\n            }\\n\\n            const hasTextBlock = (!!item.title || !!item.text || !!item.textImg || (Array.isArray(item.textImgList) \u0026\u0026 item.textImgList.length \u003e 0));\\n            const processedText = item.text\\n                ? item.text.replace(\/@ACE_GEN_2\/g, `\u003cimg class=\\\"acsmc_inline-logo\\\" src=\\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/ACE-GEN-2.png?v=1767844851\\\" alt=\\\"ACE GEN 2\\\"\u003e`)\\n                : '';\\n            const textBlockHtml = (!hideText \u0026\u0026 hasTextBlock) ? `\\n              \u003cdiv class=\\\"acsmc_text\\\"\u003e\\n                ${isLastPanel \u0026\u0026 hasBigTitle ? `\u003cdiv class=\\\"acsmc_bigtitle\\\"\u003e${item.bigtitle}\u003c\/div\u003e` : ``}\\n                ${item.title ? `\u003ch3\u003e${item.title}\u003c\/h3\u003e` : ``}\\n                ${item.text ? `\u003cp\u003e${processedText}\u003c\/p\u003e` : ``}\\n                ${item.textImg ? `\u003cimg class=\\\"acsmc_textImg\\\" loading=\\\"lazy\\\" decoding=\\\"async\\\" fetchpriority=\\\"low\\\" src=\\\"${item.textImg}\\\" alt=\\\"${item.title}\\\"\u003e` : ``}\\n                ${Array.isArray(item.textImgList) \u0026\u0026 item.textImgList.length \u003e 0 ? `\\n                    \u003cdiv class=\\\"acsmc_textImgList\\\"\u003e\\n                      ${item.textImgList.map((src) =\u003e `\u003cimg loading=\\\"lazy\\\" decoding=\\\"async\\\" fetchpriority=\\\"low\\\" src=\\\"${src}\\\" alt=\\\"${item.title}\\\"\u003e`).join('')}\\n                    \u003c\/div\u003e\\n                ` : ``}\\n              \u003c\/div\u003e\\n            ` : '';\\n\\n            if (isLastPanel) {\\n                contentHtml += mediaHtml + textBlockHtml;\\n            } else {\\n                contentHtml += textBlockHtml + mediaHtml;\\n            }\\n\\n            panel.innerHTML = contentHtml;\\n            container.appendChild(panel);\\n            \/\/ 立即标记为已激活，页面不再依赖 GSAP 动画\\n            panel.classList.add('acsmc_active');\\n\\n            \/\/ 条件性去除 padding：当是纯媒体、swiper 或 media-stack（常见需要占满宽度的布局）时，移除默认 padding 以节省空间\\n            if (hideText || item.isSwiper === true || hasMedia2) {\\n                panel.classList.add('acsmc_no-padding');\\n            }\\n\\n            \/\/ 初始化 Swiper 轮播\\n            const swipers = panel.querySelectorAll('.swiper');\\n            swipers.forEach(swiperEl =\u003e {\\n                const paginationEl = swiperEl.querySelector('.swiper-pagination');\\n                const instance = new Swiper(swiperEl, {\\n                    loop: false,\\n                    slidesPerView: 1,\\n                    spaceBetween: 0,\\n                    pagination: {\\n                        el: paginationEl,\\n                        clickable: true\\n                    }\\n                });\\n                function playActiveVideo() {\\n                    const active = swiperEl.querySelector('.swiper-slide.swiper-slide-active');\\n                    if (!active) return;\\n                    const vid = active.querySelector('video');\\n                    if (vid) {\\n                        if (!vid.getAttribute('src') \u0026\u0026 vid.getAttribute('data-src')) {\\n                            vid.setAttribute('src', vid.getAttribute('data-src'));\\n                            vid.addEventListener('loadeddata', () =\u003e { try { vid.play(); } catch (_) { } }, { once: true });\\n                        } else {\\n                            try { vid.play(); } catch (_) { }\\n                        }\\n                    }\\n                }\\n                function pauseAllVideos() {\\n                    swiperEl.querySelectorAll('video').forEach(v =\u003e {\\n                        try { v.pause(); } catch (_) { }\\n                    });\\n                }\\n                instance.on('init', () =\u003e {\\n                    playActiveVideo();\\n                });\\n                instance.on('slideChange', () =\u003e {\\n                    pauseAllVideos();\\n                    playActiveVideo();\\n                });\\n                \/\/ 手动触发一次\\n                playActiveVideo();\\n            });\\n        });\\n        \/\/ 懒加载视频：进入视口时再设置 src 并播放\\n        const lazyVideos = container.querySelectorAll('video[data-src]');\\n        if ('IntersectionObserver' in window) {\\n            const io = new IntersectionObserver((entries) =\u003e {\\n                entries.forEach(entry =\u003e {\\n                    if (entry.isIntersecting) {\\n                        const v = entry.target;\\n                        if (!v.getAttribute('src')) {\\n                            v.setAttribute('src', v.getAttribute('data-src'));\\n                            v.addEventListener('loadeddata', () =\u003e {\\n                                try { v.play(); } catch (_) { }\\n                            }, { once: true });\\n                        }\\n                        io.unobserve(v);\\n                    }\\n                });\\n            }, { root: null, rootMargin: '200px 0px', threshold: 0.1 });\\n            lazyVideos.forEach(v =\u003e io.observe(v));\\n        } else {\\n            lazyVideos.forEach(v =\u003e {\\n                v.setAttribute('src', v.getAttribute('data-src'));\\n            });\\n        }\\n        \/\/ 移除所有 GSAP\/ScrollTrigger 的特效逻辑（需求变更：不需要滚动特效）\\n    });\\n\u003c\/script\u003e\",\n        \"color_scheme\": \"\",\n        \"padding_top\": 0,\n        \"padding_bottom\": 0\n      }\n    },\n    \"custom_liquid_nnnxiF\": {\n      \"type\": \"custom-liquid\",\n      \"name\": \"t:sections.custom-liquid.presets.name\",\n      \"settings\": {\n        \"custom_liquid\": \"\\n  \u003cmeta charset='\\\"UTF-8\\\"'\u003e\\n  \u003cmeta name='\\\"viewport\\\"' content='\\\"width=device-width,' initial-scale='1.0\\\"'\u003e\\n\\n\u003cstyle\u003e\\n  .ackxNew_switch_video {\\n    width: 100%;\\n    display: flex;\\n    flex-direction: column;\\n    align-items: center;\\n    color: #fff;\\n    background: #000;\\n    padding-bottom: 20px;\\n  }\\n\\n  .ackxNew_switch_video .ackxNew_bigtitle {\\n    width: 100%;\\n    text-align: center;\\n    font-weight: 700;\\n    font-size: 32px;\\n    margin-bottom: 30px;\\n  }\\n\\n  .ackxNew_sv_tabs {\\n    display: flex;\\n    gap: 24px;\\n    margin-top: 16px;\\n    justify-content: center;\\n    flex-wrap: wrap;\\n  }\\n\\n  .ackxNew_sv_tab {\\n    padding: 10px 24px;\\n    font-weight: 600;\\n    font-size: 16px;\\n    cursor: pointer;\\n    transition: all 0.3s ease;\\n    color: #aaa;\\n    border-bottom: 2px solid transparent;\\n  }\\n\\n  .ackxNew_sv_tab.active {\\n    color: #fff;\\n    border-bottom-color: #fff;\\n  }\\n\\n  .ackxNew_sv_content {\\n    width: 100%;\\n    max-width: 1200px;\\n    position: relative;\\n    border-radius: 16px;\\n    overflow: hidden;\\n    aspect-ratio: 16\/9;\\n    background: #000;\\n    box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.08) inset;\\n  }\\n\\n  .ackxNew_sv_item {\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    width: 100%;\\n    height: 100%;\\n    opacity: 0;\\n    transition: opacity 0.5s ease;\\n    pointer-events: none;\\n  }\\n\\n  .ackxNew_sv_item.active {\\n    opacity: 1;\\n    pointer-events: auto;\\n    position: relative;\\n    z-index: 1;\\n  }\\n\\n  .ackxNew_sv_item img,\\n  .ackxNew_sv_item video {\\n    width: 100%;\\n    height: 100%;\\n    object-fit: cover;\\n    display: block;\\n  }\\n\\n  .ackxNew_sv_overlay {\\n    position: absolute;\\n    left: 24px;\\n    bottom: 24px;\\n    color: #fff;\\n    z-index: 2;\\n    max-width: 60%;\\n  }\\n\\n  .ackxNew_sv_overlay h3 {\\n    margin: 0 0 8px 0;\\n    font-size: 20px;\\n    font-weight: 700;\\n    color: #fff;\\n  }\\n\\n  .ackxNew_sv_overlay p {\\n    margin: 0 0 6px 0;\\n    font-size: 14px;\\n    line-height: 1.6;\\n  }\\n\\n  .ackxNew_sv_overlay .credit {\\n    opacity: 0.9;\\n    font-size: 12px;\\n  }\\n\\n  .ackxNew_sv_item::after {\\n    content: \\\"\\\";\\n    position: absolute;\\n    left: 0;\\n    right: 0;\\n    bottom: 0;\\n    height: 35%;\\n    background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.6) 60%, rgba(0, 0, 0, 0.8) 100%);\\n    pointer-events: none;\\n    z-index: 1;\\n  }\\n\\n  @media (max-width: 768px) {\\n    .ackxNew_sv_tabs {\\n      gap: 12px;\\n      margin-top: 12px;\\n    }\\n\\n    .ackxNew_sv_tab {\\n      padding: 8px 16px;\\n      font-size: 14px;\\n    }\\n\\n    .ackxNew_switch_video {\\n      \/* margin-top: 20px;\\n      margin-bottom: 20px; *\/\\n    }\\n  }\\n\u003c\/style\u003e\\n\u003csection id='\\\"sv\\\"' class='\\\"ackxNew_switch_video\\\"'\u003e\u003c\/section\u003e\\n\u003cscript\u003e\\n  document.addEventListener(\\\"DOMContentLoaded\\\", function () {\\n    var data = {\\n      tabs: [\\n        { title: \\\"PLA+TPU\\\", media: \\\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/87f2022fa38f499b865805dc9a422aa6.mp4\\\", head: \\\"Soft- \u0026 Hard-Material Mixed Printing\\\", sub: \\\"PLA+TPU(68D)\\\", credit: \\\"Model from: @Anycubic\\\" },\\n        { title: \\\"PLA+PVA\\\", media: \\\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ddf2c6535128491faf88bc54a46641e5.mp4\\\", head: \\\"Soft- \u0026 Hard-Material Mixed Printing\\\", sub: \\\"PLA+PVA\\\", credit: \\\"Model from: @Anycubic\\\" },\\n        { title: \\\"TPU+TPU\\\", media: \\\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/10f3d27b2b6f4030bacd968206f355a8.mp4\\\", head: \\\"Soft- \u0026 Hard-Material Mixed Printing\\\", sub: \\\"TPU+TPU\\\", credit: \\\"Model from: @Anycubic\\\" }\\n      ]\\n    };\\n    var panel = document.getElementById(\\\"sv\\\");\\n    var tabsHtml = \\\"\\\";\\n    var contentHtml = \\\"\\\";\\n    data.tabs.forEach(function (tab, idx) {\\n      var isActive = idx === 0 ? \\\"active\\\" : \\\"\\\";\\n      tabsHtml += '\u003cdiv class=\\\"ackxNew_sv_tab ' + isActive + '\\\" data-index=\\\"' + idx + '\\\"\u003e' + tab.title + \\\"\u003c\/div\u003e\\\";\\n      var mediaUrl = tab.media;\\n      var isVideo = typeof mediaUrl === \\\"string\\\" \u0026\u0026 mediaUrl.endsWith(\\\".mp4\\\");\\n      var overlay = '\u003cdiv class=\\\"ackxNew_sv_overlay\\\"\u003e' +\\n        (tab.head ? '\u003ch3\u003e' + tab.head + '\u003c\/h3\u003e' : '') +\\n        (tab.sub ? '\u003cp\u003e' + tab.sub + '\u003c\/p\u003e' : '') +\\n        (tab.credit ? '\u003cp class=\\\"credit\\\"\u003e' + tab.credit + '\u003c\/p\u003e' : '') +\\n        '\u003c\/div\u003e';\\n      contentHtml += '\u003cdiv class=\\\"ackxNew_sv_item ' + isActive + '\\\" data-index=\\\"' + idx + '\\\"\u003e' + (isVideo ? '\u003cvideo autoplay preload=\\\"none\\\" muted loop playsinline data-src=\\\"' + mediaUrl + '\\\"\u003e\u003c\/video\u003e' : '\u003cimg loading=\\\"lazy\\\" src=\\\"' + mediaUrl + '\\\" alt=\\\"' + tab.title + '\\\"\u003e') + overlay + \\\"\u003c\/div\u003e\\\";\\n    });\\n    panel.innerHTML = '\u003cdiv class=\\\"ackxNew_sv_content\\\"\u003e' + contentHtml + \\\"\u003c\/div\u003e\\\" + '\u003cdiv class=\\\"ackxNew_sv_tabs\\\"\u003e' + tabsHtml + \\\"\u003c\/div\u003e\\\";\\n    var tabs = panel.querySelectorAll(\\\".ackxNew_sv_tab\\\");\\n    var contents = panel.querySelectorAll(\\\".ackxNew_sv_item\\\");\\n    tabs.forEach(function (tab) {\\n      tab.addEventListener(\\\"click\\\", function () {\\n        var index = tab.getAttribute(\\\"data-index\\\");\\n        tabs.forEach(function (t) { t.classList.remove(\\\"active\\\"); });\\n        tab.classList.add(\\\"active\\\");\\n        contents.forEach(function (c) {\\n          c.classList.remove(\\\"active\\\");\\n          var vid = c.querySelector(\\\"video\\\");\\n          if (vid) vid.pause();\\n          if (c.getAttribute(\\\"data-index\\\") === index) {\\n            c.classList.add(\\\"active\\\");\\n            var v = c.querySelector(\\\"video\\\");\\n            if (v \u0026\u0026 v.getAttribute(\\\"src\\\")) {\\n              v.play().catch(function () { });\\n            } else if (v \u0026\u0026 v.getAttribute(\\\"data-src\\\")) {\\n              v.setAttribute(\\\"src\\\", v.getAttribute(\\\"data-src\\\"));\\n              v.addEventListener(\\\"loadeddata\\\", function () {\\n                v.play().catch(function () { });\\n              }, { once: true });\\n            }\\n          }\\n        });\\n      });\\n    });\\n    var lazyVideos = panel.querySelectorAll(\\\"video[data-src]\\\");\\n    if (\\\"IntersectionObserver\\\" in window) {\\n      var io = new IntersectionObserver(function (entries) {\\n        entries.forEach(function (entry) {\\n          if (entry.isIntersecting) {\\n            var v = entry.target;\\n            if (!v.getAttribute(\\\"src\\\")) {\\n              v.setAttribute(\\\"src\\\", v.getAttribute(\\\"data-src\\\"));\\n              v.addEventListener(\\\"loadeddata\\\", function () {\\n                try { v.play(); } catch (_) { }\\n              }, { once: true });\\n            }\\n            io.unobserve(v);\\n          }\\n        });\\n      }, { root: null, rootMargin: \\\"200px 0px\\\", threshold: 0.1 });\\n      lazyVideos.forEach(function (v) { io.observe(v); });\\n    } else {\\n      lazyVideos.forEach(function (v) {\\n        v.setAttribute(\\\"src\\\", v.getAttribute(\\\"data-src\\\"));\\n      });\\n    }\\n    var first = panel.querySelector('.ackxNew_sv_item.active video');\\n    if (first \u0026\u0026 first.getAttribute('data-src')) {\\n      first.setAttribute('src', first.getAttribute('data-src'));\\n      first.addEventListener('loadeddata', function () {\\n        try { first.play(); } catch (_) { }\\n      }, { once: true });\\n    }\\n  });\\n\u003c\/script\u003e\",\n        \"color_scheme\": \"\",\n        \"padding_top\": 0,\n        \"padding_bottom\": 0\n      }\n    },\n    \"custom_liquid_dDzryf\": {\n      \"type\": \"custom-liquid\",\n      \"name\": \"t:sections.custom-liquid.presets.name\",\n      \"settings\": {\n        \"custom_liquid\": \"\u003cdiv id='\\\"precision-section\\\"' class='\\\"ac_precision-wrapper\\\"'\u003e\\n    \u003cdiv class='\\\"page-width\\\"' style='\\\"margin-bottom:'\u003e\\n        \u003c!-- 第一个新section（图片为背景，文字内嵌到图片中） --\u003e\\n        \u003csection class='\\\"ac_intro' ac_intro-hero style='\\\"padding:'\u003e\\n            \u003c!-- PC端图片 --\u003e\\n            \u003cdiv class='\\\"ac_intro-image' pc-only style='\\\"margin:'\u003e\\n                \u003cimg src='\\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Top-Mounted-Spool-Holder-PC.jpg?v=1767785181\\\"\\n' alt='\\\"Top-Mounted' spool holder class='\\\"intro-image\\\"'\u003e\\n                \u003cdiv class='\\\"ac_intro-overlay\\\"'\u003e\\n                    \u003ch2 class='\\\"ac_introTitle\\\"'\u003eTop-Mounted Spool Holder\u003csup style='\\\"font-weight:'\u003e[3]\u003c\/sup\u003e:\u003cbr\u003e\\n                        Frees Up More Space\u003c\/h2\u003e\\n                    \u003cdiv class='\\\"ac_intro-text\\\"'\u003e\\n                        \u003cp class='\\\"ac_intro-paragraph\\\"' style='\\\"text-align:' center\u003eIt's a simple yet elegant solution for\\n                            a clutterless workspace\\n                            that boosts your creativity.\u003c\/p\u003e\\n                    \u003c\/div\u003e\\n                \u003c\/div\u003e\\n            \u003c\/div\u003e\\n            \u003c!-- 移动端图片 --\u003e\\n            \u003cdiv class='\\\"ac_intro-image' mobile-only\u003e\\n                \u003cimg src='\\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Top-Mounted-Spool-Holder-M.jpg?v=1767785181\\\"\\n' alt='\\\"Top-Mounted' spool holder class='\\\"intro-image\\\"'\u003e\\n                \u003cdiv class='\\\"ac_intro-overlay\\\"'\u003e\\n                    \u003ch2 class='\\\"ac_introTitle\\\"'\u003eTop-Mounted Spool Holder[3]: Frees Up More Space\u003c\/h2\u003e\\n                    \u003cdiv class='\\\"ac_intro-text\\\"'\u003e\\n                        \u003cp class='\\\"ac_intro-paragraph\\\"'\u003eIt's a simple yet elegant solution for a clutterless workspace\\n                            that boosts your creativity.\u003c\/p\u003e\\n                    \u003c\/div\u003e\\n                \u003c\/div\u003e\\n            \u003c\/div\u003e\\n        \u003c\/section\u003e\\n\\n        \u003c!-- 第二个新section --\u003e\\n        \u003csection class='\\\"ac_intro\\\"'\u003e\\n            \u003ch2 class='\\\"ac_introTitle\\\"'\u003eIt's a Fast \u0026amp; Smooth Sailing: Complete Benchy in 14mins\u003c\/h2\u003e\\n            \u003cdiv class='\\\"ac_intro-text\\\"'\u003e\\n                \u003cp class='\\\"ac_intro-paragraph\\\"'\u003ePrint 12 times faster and save up to 80% print time.\u003c\/p\u003e\\n            \u003c\/div\u003e\\n            \u003c!-- PC端图片 --\u003e\\n            \u003cdiv class='\\\"ac_intro-image' pc-only\u003e\\n                \u003cimg src='\\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/kobra-x-Benchy-PC.jpg?v=1767785181\\\"\\n' alt='\\\"Complete' benchy in class='\\\"intro-image\\\"'\u003e\\n            \u003c\/div\u003e\\n            \u003c!-- 移动端图片 --\u003e\\n            \u003cdiv class='\\\"ac_intro-image' mobile-only\u003e\\n                \u003cimg src='\\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/kobra-x-Benchy-M.jpg?v=1767785180\\\"\\n' alt='\\\"Complete' benchy in class='\\\"intro-image\\\"'\u003e\\n            \u003c\/div\u003e\\n        \u003c\/section\u003e\\n\\n        \u003c!-- 原有的section --\u003e\\n        \u003csection class='\\\"ac_intro\\\"' style='\\\"padding:'\u003e\\n            \u003ch2 class='\\\"ac_introTitle\\\"'\u003eLeviQ3.0: First Layer is Top-Tier\u003c\/h2\u003e\\n            \u003cdiv class='\\\"ac_intro-gallery\\\"'\u003e\\n                \u003c!-- PC端图片 --\u003e\\n                \u003cdiv class='\\\"ac_intro-image' pc-only\u003e\\n                    \u003cimg src='\\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Auto-Leveling-PC.jpg?v=1767785182\\\"\\n' alt='\\\"LeviQ3.0\\\"' class='\\\"intro-image\\\"'\u003e\\n                \u003c\/div\u003e\\n                \u003c!-- 移动端图片 --\u003e\\n                \u003cdiv class='\\\"ac_intro-image' mobile-only\u003e\\n                    \u003cimg src='\\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Auto-Leveling-M.jpg?v=1767871608\\\"\\n' alt='\\\"LeviQ3.0\\\"' class='\\\"intro-image\\\"'\u003e\\n                \u003c\/div\u003e\\n            \u003c\/div\u003e\\n        \u003c\/section\u003e\\n\\n        \u003csection class='\\\"ac_scroll-gallery\\\"'\u003e\u003c\/section\u003e\\n    \u003c\/div\u003e\\n\u003c\/div\u003e\\n\\n\u003cstyle\u003e\\n    .ac_precision-wrapper {\\n        width: 100%;\\n        overflow: hidden;\\n        background: #000;\\n        color: #fff;\\n    }\\n\\n    .ac_intro {\\n        display: flex;\\n        flex-direction: column;\\n        justify-content: flex-start;\\n        align-items: center;\\n        padding: 40px 0;\\n        position: relative;\\n    }\\n\\n    .ac_intro-text {\\n        width: 100%;\\n        max-width: 1080px;\\n        margin: 0 auto;\\n        padding: 0 20px;\\n        text-align: center;\\n    }\\n\\n    .ac_intro-text p,\\n    .ac_intro-paragraph {\\n        font-size: 18px;\\n        line-height: 1.7;\\n        color: #bbb;\\n        margin-bottom: 0;\\n    }\\n\\n    .ac_introTitle {\\n        color: #fff;\\n        font-weight: 700;\\n        font-size: 32px;\\n        line-height: 136%;\\n        letter-spacing: 0%;\\n        text-align: center;\\n        margin-top: 0;\\n        margin-bottom: 20px;\\n    }\\n\\n    \/* 添加section之间的分隔线（可选） *\/\\n    .ac_intro+.ac_intro {\\n        \/* border-top: 1px solid rgba(255, 255, 255, 0.1); *\/\\n    }\\n\\n    \/* =====================\\n       图片显示控制\\n    ===================== *\/\\n    .ac_intro-image {\\n        width: 100%;\\n        max-width: 1400px;\\n        margin: 30px auto 0;\\n        text-align: center;\\n        position: relative;\\n    }\\n\\n    .ac_intro-image .intro-image {\\n        width: 100%;\\n        height: auto;\\n        border-radius: 12px;\\n        object-fit: cover;\\n    }\\n\\n    \/* 图片内嵌文字样式（hero） *\/\\n    .ac_intro-hero .ac_intro-overlay {\\n        position: absolute;\\n        inset: 0;\\n        \/* display: flex; *\/\\n        justify-content: flex-end;\\n        align-items: center;\\n        padding: 24px;\\n        box-sizing: border-box;\\n    }\\n\\n    .ac_intro-hero .ac_intro-overlay h2 {\\n        text-align: center !important;\\n    }\\n\\n    .ac_intro-hero .ac_intro-overlay .ac_introTitle,\\n    .ac_intro-hero .ac_intro-overlay .ac_intro-text p {\\n        color: #fff;\\n        text-align: left;\\n    }\\n\\n    .ac_intro-hero .ac_intro-overlay .ac_introTitle {\\n        margin: 0 0 12px 0;\\n    }\\n\\n    .ac_intro-hero .ac_intro-overlay .ac_intro-text {\\n        max-width: 720px;\\n    }\\n\\n    \/* PC端和移动端图片显示控制 *\/\\n    .pc-only {\\n        display: block;\\n    }\\n\\n    .mobile-only {\\n        display: none;\\n    }\\n\\n    \/* =====================\\n   滚动内容区\\n===================== *\/\\n    .ac_scroll-gallery {\\n        position: relative;\\n        height: auto;\\n    }\\n\\n    \/* 所有 panel 统一为紧凑、无特效的布局 *\/\\n    .ac_panel {\\n        position: relative;\\n        min-height: auto;\\n        padding: 40px 0;\\n        background: #000;\\n        z-index: 1;\\n        display: flex;\\n        align-items: center;\\n        justify-content: space-between;\\n        opacity: 1;\\n        transform: none;\\n        transition: none;\\n    }\\n\\n    .ac_panel.ac_has-border {\\n        background: #121417;\\n        border: 1px solid rgba(255, 255, 255, 0.12);\\n        border-radius: 16px;\\n        padding: 24px;\\n        box-sizing: border-box;\\n        overflow: hidden;\\n        gap: 16px;\\n    }\\n\\n    .ac_panel.ac_has-border .ac_text p {\\n        color: #fff;\\n    }\\n\\n    .ac_orange {\\n        color: #FF6A00;\\n    }\\n\\n    .ac_metric {\\n        color: #FF6A00;\\n        font-weight: 700;\\n        font-size: 26px;\\n        margin-top: 20px;\\n    }\\n\\n    .ac_panel.ac_active {\\n        opacity: 1;\\n        transform: translateY(0);\\n        z-index: 2;\\n    }\\n\\n    .ac_panel.ac_reverse {\\n        flex-direction: row-reverse;\\n    }\\n\\n    .ac_panel .ac_text {\\n        flex: 0.45;\\n        padding: 20px;\\n        font-weight: 400;\\n        font-style: Regular;\\n        font-size: 20px;\\n        line-height: 150%;\\n        letter-spacing: 0%;\\n    }\\n\\n    .ac_panel .ac_text h3 {\\n        margin-bottom: 20px;\\n        font-weight: 700;\\n        font-size: 32px;\\n        line-height: 140%;\\n        letter-spacing: 0%;\\n        color: #fff;\\n    }\\n\\n    .ac_panel .ac_text p {\\n        font-size: 18px;\\n        color: #bbb;\\n        line-height: 1.6;\\n    }\\n\\n    .ac_panel p.ac_tips {\\n        font-size: 16px;\\n        line-height: 1.5;\\n        margin-top: 6px;\\n        color: #888;\\n    }\\n\\n    .ac_panel strong {\\n        color: #fff;\\n    }\\n\\n    .ac_panel .ac_media {\\n        flex: 0.5;\\n        text-align: center;\\n    }\\n\\n    .ac_panel .ac_media img,\\n    .ac_panel .ac_media video {\\n        width: 100%;\\n        border-radius: 12px;\\n        object-fit: cover;\\n        max-height: 80vh;\\n    }\\n\\n    \/* ===== 特殊处理：标题panel垂直居中显示 ===== *\/\\n    .ac_panel.ac_special-center {\\n        display: flex;\\n        flex-direction: column;\\n        justify-content: center;\\n        align-items: center;\\n        gap: 24px;\\n        padding: 0;\\n        min-height: auto;\\n        box-sizing: border-box;\\n    }\\n\\n    .ac_panel.ac_special-center .ac_text {\\n        flex: 0 0 45%;\\n        text-align: center;\\n        padding: 20px;\\n        display: flex;\\n        flex-direction: column;\\n        justify-content: center;\\n    }\\n\\n    .ac_panel.ac_special-center .ac_media {\\n        flex: 0 0 45%;\\n        max-width: 100%;\\n        max-height: 720px;\\n        display: flex;\\n        justify-content: center;\\n        align-items: center;\\n    }\\n\\n    .ac_panel.ac_special-center .ac_media img,\\n    .ac_panel.ac_special-center .ac_media video {\\n        width: 100%;\\n        height: auto;\\n        border-radius: 12px;\\n    }\\n\\n    .ackx_small-text {\\n        font-size: 28px;\\n    }\\n\\n    \/* 移动端样式优化 *\/\\n    @media (max-width: 768px) {\\n        .ac_intro {\\n            padding: 10px 0;\\n        }\\n\\n        .ac_intro-hero .ac_intro-overlay {\\n            justify-content: center;\\n            align-items: flex-end;\\n            padding: 0;\\n        }\\n\\n        .ac_intro-hero .ac_intro-overlay .ac_intro-text {\\n            max-width: 92%;\\n        }\\n\\n        .ac_introTitle {\\n            font-size: 28px;\\n            margin-bottom: 15px;\\n        }\\n\\n        .ac_intro-text p,\\n        .ac_intro-paragraph {\\n            font-size: 16px;\\n        }\\n\\n        \/* 移动端图片显示控制 *\/\\n        .pc-only {\\n            display: none;\\n        }\\n\\n        .mobile-only {\\n            display: block;\\n        }\\n\\n        .ac_intro-image {\\n            margin: 20px auto 0;\\n        }\\n\\n        .ac_intro-image .intro-image {\\n            object-fit: contain;\\n        }\\n\\n        .ac_panel .ac_text p {\\n            font-size: 14px;\\n        }\\n\\n        .ac_panel p.ac_tips {\\n            font-size: 14px;\\n        }\\n\\n        .ac_panel .ac_text h3 {\\n            font-size: 36px;\\n        }\\n\\n        .ac_scroll-gallery {\\n            height: auto;\\n        }\\n\\n        .ac_panel {\\n            position: relative !important;\\n            height: auto;\\n            display: flex;\\n            flex-direction: column !important;\\n            justify-content: flex-start;\\n            align-items: center;\\n            padding: 10px 0;\\n        }\\n\\n        .ac_panel.ac_has-border {\\n            gap: 12px;\\n            border: none;\\n            padding: 0;\\n            background: transparent;\\n        }\\n\\n        .ac_panel:nth-child(-n+3) {\\n            min-height: auto;\\n            margin-bottom: 10px;\\n        }\\n\\n        .ac_panel:nth-child(n+4) {\\n            justify-content: center;\\n            opacity: 0;\\n            transform: translateY(20px);\\n            transition: opacity 0.6s ease-out, transform 0.6s ease-out;\\n        }\\n\\n        .ac_panel.ac_active {\\n            opacity: 1;\\n            transform: translateY(0);\\n        }\\n\\n        .ac_panel:not(.ac_special-center) .ac_text,\\n        .ac_panel:not(.ac_special-center) .ac_media {\\n            flex: none;\\n            width: 100%;\\n            max-width: 100%;\\n            padding: 0;\\n            text-align: center;\\n        }\\n\\n        .ac_panel:not(.ac_special-center) .ac_media {\\n            margin-top: 16px;\\n        }\\n\\n        .ac_panel:not(.ac_special-center) .ac_media img,\\n        .ac_panel:not(.ac_special-center) .ac_media video {\\n            width: 100%;\\n            object-fit: cover;\\n            border-radius: 12px;\\n            max-height: none;\\n        }\\n\\n        .ac_panel:not(.ac_special-center) .ac_media img {\\n            object-fit: contain;\\n        }\\n\\n        .ac_panel.ac_special-center {\\n            padding-top: 20px;\\n            height: auto;\\n            display: flex;\\n            flex-direction: column;\\n            justify-content: flex-start;\\n            align-items: center;\\n            position: relative;\\n            gap: 20px;\\n        }\\n\\n        .ac_panel.ac_special-center .ac_text {\\n            position: relative;\\n            left: auto;\\n            top: auto;\\n            transform: none;\\n            width: 100%;\\n            padding: 0;\\n            max-width: 90%;\\n            z-index: 2;\\n            text-align: center;\\n            color: #333;\\n            order: 1;\\n        }\\n\\n        .ac_panel.ac_special-center .ac_media {\\n            width: 100%;\\n            height: auto;\\n            max-height: 60vh;\\n            display: flex;\\n            justify-content: center;\\n            align-items: center;\\n            order: 2;\\n        }\\n\\n        .ac_panel.ac_special-center .ac_media img,\\n        .ac_panel.ac_special-center .ac_media video {\\n            width: 100%;\\n            height: auto;\\n            max-height: 60vh;\\n            object-fit: contain;\\n            border-radius: 12px;\\n        }\\n\\n        .ac_panel .ac_media img,\\n        .ac_panel .ac_media video {\\n            width: 100%;\\n            max-height: 80vh;\\n        }\\n\\n        .ac_introTitle {\\n            font-weight: 700;\\n            font-size: 28px;\\n            line-height: 136%;\\n            letter-spacing: 0%;\\n            text-align: center;\\n            color: #fff;\\n            padding: 0;\\n        }\\n\\n        .ac_intro-text {\\n            padding: 0 16px;\\n        }\\n\\n        .ac_intro-text p {\\n            font-size: 16px;\\n        }\\n\\n        .ackx_small-text {\\n            font-size: 24px;\\n        }\\n    }\\n\u003c\/style\u003e\\n\\n\u003cscript\u003e\\n    document.addEventListener(\\\"DOMContentLoaded\\\", () =\u003e {\\n        const data = [\\n            {\\n                title: \\\"Precision Operation\\\",\\n                text: `\u003cspan class=\\\"ac_orange\\\"\u003eThe new-generation leveling algorithm optimizes X-, Y-, \u0026 Z-axis repeat precision\u003c\/span\u003e, integrates multi-point data modeling, and automatically corrects the smallest deviations, making every leveling process more efficient and precise.`,\\n                metric: `Repeat Precision \u003cbr\u003e\u003cspan class=\\\"ac_orange ackx_small-text\\\"\u003e\u0026lt; 0.02mm*\u003c\/span\u003e`,\\n                tips: `*Data provided by Anycubic Lab`,\\n                media: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Precision-Operation.jpg?v=1767785181`,\\n                hasBorder: true,\\n            },\\n            {\\n                title: \\\"Even Heat Distribution\\\",\\n                text: `Improved overall thermal uniformity of the hotbed, maintaining consistent heat across the entire hotbed surface and superior flatness.\u003c\/span\u003e`,\\n                media: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/Even-Heat-Distribution.jpg?v=1767785179`,\\n                hasBorder: true,\\n            },\\n            {\\n                title: \\\"Auto-Leveling\\\",\\n                text: `49-point auto-leveling with 100% manual compensation-free operation.`,\\n                media: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/49-point.jpg?v=1767785181`,\\n                hasBorder: true,\\n            },\\n            {\\n                title: \\\"Automatic Calibration: Smooth Model Surfaces\\\",\\n                text: \\\"\\\",\\n                tips: \\\"\\\",\\n                media: ``,\\n                isTitle: true,\\n            },\\n            {\\n                title: \\\"Flow Dynamic Calibration:\\\",\\n                text: \\\"Kobra OS features built-in flow compensation, which dynamically coordinates speed and extrusion force in real-time, automatically adjusting the flow factor to enhance print quality.\\\",\\n                media: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/kobra-x-Flow-Dynamic-Calibration-13.jpg?v=1766568370`,\\n            },\\n            {\\n                title: \\\"Vibration Compensation:\\\",\\n                text: `Utilizing a built-in accelerometer, the system automatically detects resonant frequencies to eliminate ghosting on printed models.`,\\n                media: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/kobra-x-vibration-compensation-14.jpg?v=1766568370`,\\n            },\\n            {\\n                title: \\\"Plug \u0026 Play is the Full Experience\\\",\\n                text: \\\"\\\",\\n                tips: \\\"\\\",\\n                media: ``,\\n                isTitle: true,\\n            },\\n            {\\n                title: \\\"Pop it off, Swap it On: Quick-Release Hotend\\\",\\n                text: \\\"It comes standard with a 0.4mm hardened steel nozzle, which can be replaced by simply opening the quick-release. Nozzles in 0.25mm\/0.6mm\/0.8mm sizes are also available for replacement, allowing flexible adaptation to various printing requirements.\\\",\\n                media: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/kobra-x-Quick-Release-hotend.jpg?v=1767785179`,\\n            },\\n            {\\n                title: \\\"Quiet? That's Such an Understatement[4]\\\",\\n                text: `Powered by a in-house motion control system that achieves active noise cancellation.\u003cbr\u003eStandard Mode: Operates at ≤48dB, comparable to the ambient noise of a typical quiet office.`,\\n                media: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/48db.jpg?v=1767856017`,\\n            },\\n            {\\n                title: \\\"260*260*260mm³ Build Volume:\\\",\\n                text: \\\"Print anything you want\\\",\\n                media: `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/bulid-volume.jpg?v=1767785181`,\\n            },\\n        ];\\n\\n        const container = document.querySelector(\\\".ac_scroll-gallery\\\");\\n\\n        \/\/ 动态渲染 panel\\n        data.forEach((item, i) =\u003e {\\n            const panel = document.createElement(\\\"div\\\");\\n            const isSpecial = item.isTitle === true;\\n            \/\/ 第0,2个panel（第1,3个）显示为左图右文，第1个panel（第2个）显示为左文右图\\n            const isReverse = (i \u003c 3 ? i % 2 === 1 : (i % 2 === 0));\\n            panel.className = `ac_panel ${isReverse ? \\\"ac_reverse\\\" : \\\"\\\"} ${isSpecial ? \\\"ac_special-center\\\" : \\\"\\\"} ${item.hasBorder ? \\\"ac_has-border\\\" : \\\"\\\"}`.trim();\\n\\n            let mediaContent = '';\\n            if (!isSpecial \u0026\u0026 item.media) {\\n                if (item.media.endsWith(\\\".mp4\\\")) {\\n                    mediaContent = `\u003cdiv class=\\\"ac_media\\\"\u003e\u003cvideo autoplay muted loop playsinline preload=\\\"none\\\" data-src=\\\"${item.media}\\\"\u003e\u003c\/video\u003e\u003c\/div\u003e`;\\n                } else {\\n                    mediaContent = `\u003cdiv class=\\\"ac_media\\\"\u003e\u003cimg loading=\\\"lazy\\\" decoding=\\\"async\\\" fetchpriority=\\\"low\\\" src=\\\"${item.media}\\\" alt=\\\"${item.title}\\\"\u003e\u003c\/div\u003e`;\\n                }\\n            }\\n\\n            let titleHTML = '';\\n            if (isSpecial) {\\n                titleHTML = `\u003ch2 class=\\\"ac_introTitle\\\"\u003e${item.title}\u003c\/h2\u003e`;\\n            } else {\\n                titleHTML = `\u003ch3\u003e${item.title}\u003c\/h3\u003e`;\\n            }\\n\\n            panel.innerHTML = `\\n                ${mediaContent}\\n                \u003cdiv class=\\\"ac_text\\\"\u003e\\n                    ${titleHTML}\\n                    \u003cp\u003e${item.text}\u003c\/p\u003e\\n                    ${item.metric ? `\u003cp class=\\\"ac_metric\\\"\u003e${item.metric}\u003c\/p\u003e` : ''}\\n                    ${item.tips ? `\u003cp class=\\\"ac_tips\\\"\u003e${item.tips}\u003c\/p\u003e` : ''}\\n                \u003c\/div\u003e\\n            `;\\n\\n            container.appendChild(panel);\\n            panel.classList.add('ac_active');\\n        });\\n\\n        \/\/ 懒加载视频\\n        const lazyVideos = document.querySelectorAll('video[data-src]');\\n        if ('IntersectionObserver' in window) {\\n            const io = new IntersectionObserver((entries) =\u003e {\\n                entries.forEach(entry =\u003e {\\n                    if (entry.isIntersecting) {\\n                        const v = entry.target;\\n                        if (!v.getAttribute('src')) {\\n                            v.setAttribute('src', v.getAttribute('data-src'));\\n                            v.addEventListener('loadeddata', () =\u003e {\\n                                try { v.play(); } catch (_) { }\\n                            }, { once: true });\\n                        }\\n                        io.unobserve(v);\\n                    }\\n                });\\n            }, { root: null, rootMargin: '200px 0px', threshold: 0.1 });\\n            lazyVideos.forEach(v =\u003e io.observe(v));\\n        } else {\\n            lazyVideos.forEach(v =\u003e {\\n                if (!v.getAttribute('src')) v.setAttribute('src', v.getAttribute('data-src'));\\n                try { v.play(); } catch (_) { }\\n            });\\n        }\\n    });\\n\u003c\/script\u003e\",\n        \"color_scheme\": \"\",\n        \"padding_top\": 0,\n        \"padding_bottom\": 0\n      }\n    },\n    \"rich_text_thziCb\": {\n      \"type\": \"rich-text\",\n      \"blocks\": {\n        \"heading_K6nGbi\": {\n          \"type\": \"heading\",\n          \"settings\": {\n            \"heading\": \"\u003cp\u003eThe New Pro Leading the Game ACE 2 Pro\u003c\/p\u003e\",\n            \"heading_size\": \"h3\"\n          }\n        },\n        \"text_7VehKQ\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"\u003ch3\u003e19-Color Builts Legacy\u003c\/h3\u003e\"\n          }\n        },\n        \"text_fF8MrY\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"\u003cp\u003eStandard 7-color printing capability, expandable to 19 colors via a four-unit ACE 2 Pro configuration.\u003c\/p\u003e\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"heading_K6nGbi\",\n        \"text_7VehKQ\",\n        \"text_fF8MrY\"\n      ],\n      \"custom_css\": [\n        \"h2 {background: linear-gradient(90deg, #ffdfc0 0%, #e2995a 100%); -webkit-background-clip: text; \/* 支持 Webkit 内核浏览器 *\/ background-clip: text; color: transparent;}\"\n      ],\n      \"name\": \"t:sections.rich-text.presets.name\",\n      \"settings\": {\n        \"desktop_content_position\": \"center\",\n        \"desktop_content_width\": \"large\",\n        \"content_alignment\": \"center\",\n        \"enable_section_box_layout\": false,\n        \"color_scheme\": \"scheme-05959861-e693-495e-8470-63411927f9e9\",\n        \"full_width\": true,\n        \"padding_top\": 40,\n        \"padding_bottom\": 52,\n        \"padding_top_mobile\": 48,\n        \"padding_bottom_mobile\": 48\n      }\n    },\n    \"image_banner_CVdJgG\": {\n      \"type\": \"image-banner\",\n      \"blocks\": {\n        \"heading_mNxgEj\": {\n          \"type\": \"heading\",\n          \"settings\": {\n            \"heading\": \"Image banner\",\n            \"size\": \"h0\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"heading_mNxgEj\"\n      ],\n      \"name\": \"t:sections.image-banner.presets.name\",\n      \"settings\": {\n        \"layout\": \"full_bleed\",\n        \"image\": \"shopify:\/\/shop_images\/en-1225_613.jpg\",\n        \"image_mobile\": \"shopify:\/\/shop_images\/en-1600_1900.jpg\",\n        \"image_overlay_opacity\": 0,\n        \"image_height\": \"adapt\",\n        \"image_height_mobile\": \"adapt-mobile\",\n        \"desktop_content_position\": \"middle-center\",\n        \"desktop_content_alignment\": \"center\",\n        \"keep_ltr\": false,\n        \"elements_gap\": 30,\n        \"hide_when_empty_image\": false,\n        \"preload\": false,\n        \"enable_parallax_scrolling_effect\": false,\n        \"elements_gap_mobile\": 20,\n        \"mobile_content_alignment\": \"center\",\n        \"show_text_below_image\": true,\n        \"bg_color\": \"\",\n        \"color_text\": \"#ffffff\",\n        \"gradient_heading_desktop\": \"\",\n        \"color_button_text_1\": \"#000000\",\n        \"color_button_1\": \"#ffffff\",\n        \"button_1_opacity\": 5,\n        \"color_button_text_2\": \"#000000\",\n        \"color_button_2\": \"#ffffff\",\n        \"colors_badge_foreground\": \"#ffffff\",\n        \"colors_badge_background\": \"#f87171\",\n        \"color_countdown_foreground\": \"#000000\",\n        \"color_countdown_background\": \"#ffffff\",\n        \"color_text_mobile\": \"#ffffff\",\n        \"gradient_heading_mobile\": \"\",\n        \"color_button_text_1_mobile\": \"#000000\",\n        \"color_button_1_mobile\": \"#ffffff\",\n        \"color_button_text_2_mobile\": \"#000000\",\n        \"color_button_2_mobile\": \"#ffffff\",\n        \"colors_badge_foreground_mobile\": \"#ffffff\",\n        \"colors_badge_background_mobile\": \"#f87171\",\n        \"color_countdown_foreground_mobile\": \"#000000\",\n        \"color_countdown_background_mobile\": \"#ffffff\",\n        \"background_container_mobile\": \"#565656\",\n        \"gradient_background_container_mobile\": \"\",\n        \"padding_top\": 0,\n        \"padding_bottom\": 0,\n        \"padding_top_mobile\": 0,\n        \"padding_bottom_mobile\": 0\n      }\n    },\n    \"multicolumn_Rr4jf9\": {\n      \"type\": \"multicolumn\",\n      \"blocks\": {\n        \"column_3AwH78\": {\n          \"type\": \"column\",\n          \"settings\": {\n            \"image\": \"shopify:\/\/shop_images\/S1MC-_Smooth_and-Stable-Feeding_46e39330-a3ca-4b1f-9b27-af958bb8aa93.jpg\",\n            \"icon\": \"check\",\n            \"title\": \"‌Smooth and Stable Feeding‌\",\n            \"text\": \"\u003cp\u003eEngineered for maximum reliability, the new system features four independent brushless motors and a next-generation buffering mechanism. These components work together to ensure smooth, jam-free filament feed and retraction for every channel.\u003cbr\u003e\u003cbr\u003e*Please avoid using cardboard spools, as long-term use may interfere with the normal operation of the ACE 2 Pro due to cardboard spool quality issues.\u003c\/p\u003e\",\n            \"link_label\": \"\",\n            \"link\": \"\",\n            \"button_style\": \"solid\",\n            \"button_open_new_tab\": false,\n            \"card_color_text\": \"#191919\",\n            \"color_button_text\": \"#ffffff\",\n            \"color_button\": \"#2563eb\",\n            \"card_color_background\": \"#ffffff\",\n            \"card_color_background_gradient\": \"\"\n          }\n        },\n        \"column_BQ76XA\": {\n          \"type\": \"column\",\n          \"settings\": {\n            \"image\": \"shopify:\/\/shop_images\/ACE_2_Pro_Faster_Filament_Change_-en_c9fe7a0d-fcfb-431d-b316-e5d17c30322f.jpg\",\n            \"icon\": \"check\",\n            \"title\": \"‌Faster Filament Change‌\",\n            \"text\": \"\u003cp\u003eFilament loading speed increased by 100%, saving 47 minutes per 100 filament changes.\u003c\/p\u003e\",\n            \"link_label\": \"\",\n            \"link\": \"\",\n            \"button_style\": \"solid\",\n            \"button_open_new_tab\": false,\n            \"card_color_text\": \"#191919\",\n            \"color_button_text\": \"#ffffff\",\n            \"color_button\": \"#2563eb\",\n            \"card_color_background\": \"#ffffff\",\n            \"card_color_background_gradient\": \"\"\n          }\n        },\n        \"column_HqnJ8D\": {\n          \"type\": \"column\",\n          \"settings\": {\n            \"image\": \"shopify:\/\/shop_images\/S1MC-_Quiet-and-Durable-en_bba71b5a-370a-4224-a6ab-1a460b698746.jpg\",\n            \"icon\": \"check\",\n            \"title\": \"‌Quiet and Durable‌\",\n            \"text\": \"\u003cp\u003eOperates at under 48dB noise level, with independent brushless motors offering a lifespan of ≥5000 hours.\\t\u003c\/p\u003e\",\n            \"link_label\": \"\",\n            \"link\": \"\",\n            \"button_style\": \"solid\",\n            \"button_open_new_tab\": false,\n            \"card_color_text\": \"#191919\",\n            \"color_button_text\": \"#ffffff\",\n            \"color_button\": \"#2563eb\",\n            \"card_color_background\": \"#ffffff\",\n            \"card_color_background_gradient\": \"\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"column_3AwH78\",\n        \"column_BQ76XA\",\n        \"column_HqnJ8D\"\n      ],\n      \"name\": \"t:sections.promotion-cards.presets.name\",\n      \"settings\": {\n        \"text_align\": \"center\",\n        \"title\": \"Upgraded 4 Independent Brushless Motors\",\n        \"subtitle\": \"\",\n        \"heading_size\": \"h2\",\n        \"media_type\": \"image\",\n        \"media_width_desktop\": \"100\",\n        \"image_ratio\": \"adapt\",\n        \"text_position\": \"bottom\",\n        \"columns_desktop\": 3,\n        \"columns_tablet\": 3,\n        \"desktop_gap\": 30,\n        \"auto_fit\": false,\n        \"column_alignment\": \"left\",\n        \"enable_shadow\": true,\n        \"enable_image_shadow\": true,\n        \"background_transparent\": false,\n        \"button_label\": \"\",\n        \"button_link\": \"\",\n        \"button_open_new_tab\": false,\n        \"enable_section_box_layout\": false,\n        \"color_scheme\": \"\",\n        \"enable_parallax_scrolling_effect\": true,\n        \"background_image_overlay_color\": \"button\",\n        \"columns_mobile\": \"1\",\n        \"mobile_gap\": 30,\n        \"media_width_mobile\": \"100\",\n        \"swipe_on_mobile\": false,\n        \"text_boxes_border_thickness\": 0,\n        \"text_boxes_border_opacity\": 0,\n        \"text_boxes_radius\": 10,\n        \"padding_top\": 36,\n        \"padding_bottom\": 36\n      }\n    },\n    \"custom_liquid_AjEbGr\": {\n      \"type\": \"custom-liquid\",\n      \"name\": \"t:sections.custom-liquid.presets.name\",\n      \"settings\": {\n        \"custom_liquid\": \"\\n    \u003cmeta charset='\\\"UTF-8\\\"'\u003e\\n    \u003cmeta name='\\\"viewport\\\"' content='\\\"width=device-width,' initial-scale='1.0\\\"'\u003e\\n    \u003cstyle\u003e\\n\\n        .ac_precision-wrapper {\\n            width: 100%;\\n            overflow: hidden;\\n            background: #0a0d14;\\n            color: #fff;\\n            font-family: \\\"OPPO Sans 4.0\\\", sans-serif;\\n        }\\n\\n        .ac_intro {\\n            \/* height: 100vh; *\/\\n            display: flex;\\n            flex-direction: column;\\n            justify-content: flex-start;\\n            align-items: center;\\n            padding: 0;\\n            position: relative;\\n        }\\n\\n        .ac_introTitle {\\n            \/* background: linear-gradient(90deg, #0C62FF 0%, #9727FF 100%);\\n            -webkit-background-clip: text;\\n            background-clip: text;\\n            color: transparent; *\/\\n            color: #fff;\\n            font-family: \\\"OPPO Sans 4.0\\\", sans-serif;\\n            font-weight: 700;\\n            font-size: 32px;\\n            line-height: 136%;\\n            letter-spacing: 0%;\\n            text-align: center;\\n            margin-top: 60px;\\n            margin-bottom: 16px;\\n        }\\n\\n        .ac_intro-body {\\n            font-size: 16px;\\n            line-height: 160%;\\n            color: #bbb;\\n            text-align: center;\\n            max-width: 860px;\\n            \/* margin: 0 20px 24px; *\/\\n        }\\n\\n        .ac_intro-hero {\\n            width: 100%;\\n            margin: 0 auto 40px;\\n        }\\n\\n        .ac_intro-hero img {\\n            width: 100%;\\n            border-radius: 16px;\\n        }\\n\\n        .ac_intro-images {\\n            display: flex;\\n            justify-content: center;\\n            align-items: stretch;\\n            width: 100%;\\n            height: 50vh;\\n            gap: 20px;\\n        }\\n\\n        .ac_intro-left {\\n            \/* flex: 0.6; *\/\\n            max-height: 518px;\\n        }\\n\\n        .ac_intro-images img {\\n            width: 100%;\\n            height: 100%;\\n            border-radius: 16px;\\n            object-fit: cover;\\n        }\\n\\n        \/* 统一图片与视频样式，保证 intro-left 的视频与图片显示一致 *\/\\n        .ac_intro-images img,\\n        .ac_intro-images video,\\n        .ac_intro-left video,\\n        .ac_intro-right video {\\n            display: block;\\n            width: 100%;\\n            height: 100%;\\n            border-radius: 16px;\\n            object-fit: contain;\\n        }\\n\\n        \/* 若需要视频在容器内垂直居中，可以在父容器上这样设置（可选） *\/\\n        .ac_intro-images .ac_intro-left,\\n        .ac_intro-images .ac_intro-right {\\n            display: flex;\\n            align-items: center;\\n            justify-content: center;\\n        }\\n\\n        \/* =====================\\n   滚动内容区\\n===================== *\/\\n        .acsmc_scroll-gallery_2 {\\n            position: relative;\\n            height: auto;\\n        }\\n\\n        \/* 第二屏：图片左，文字右居中，滚动切换 *\/\\n        .ac_gallery {\\n            position: relative;\\n            \/* padding: 20px 5%; *\/\\n        }\\n\\n        .ac_gallery-title {\\n            font-family: \\\"OPPO Sans 4.0\\\", sans-serif;\\n            font-weight: 700;\\n            font-size: 32px;\\n            line-height: 140%;\\n            letter-spacing: 0%;\\n            color: #fff;\\n            text-align: center;\\n            margin-bottom: 60px;\\n        }\\n\\n        .ac_gallery-content {\\n            display: flex;\\n            align-items: center;\\n            justify-content: center;\\n            gap: 24px;\\n            max-width: 1400px;\\n            margin: 0 auto;\\n        }\\n\\n        .ac_gallery-image {\\n            flex: none;\\n            width: 94%;\\n            max-width: 1280px;\\n            position: relative;\\n            margin: 0 auto;\\n        }\\n\\n        .ac_gallery-image img {\\n            width: 100%;\\n            border-radius: 12px;\\n            \/* border: 1px solid #333; *\/\\n            transition: opacity 0.5s ease;\\n        }\\n\\n        .ac_gallery-overlay {\\n            position: absolute;\\n            left: 32px;\\n            top: 50%;\\n            transform: translateY(-50%);\\n            max-width: 35%;\\n            color: #fff;\\n            text-align: left;\\n        }\\n\\n        .ac_gallery-overlay h4 {\\n            color: #fff;\\n            font-size: 18px;\\n            font-weight: 400;\\n            margin-bottom: 8px;\\n        }\\n\\n        .ac_gallery-overlay p {\\n            font-size: 16px;\\n            line-height: 1.6;\\n            color: #bbb;\\n            margin: 0;\\n        }\\n\\n        .ac_gallery-text {\\n            flex: 0.4;\\n            display: flex;\\n            align-items: center;\\n            justify-content: center;\\n            text-align: center;\\n            min-height: 200px;\\n            padding: 16px;\\n        }\\n\\n        .ac_gallery-text p {\\n            font-size: 18px;\\n            color: #bbb;\\n            line-height: 1.6;\\n            max-width: 480px;\\n            margin: 0;\\n        }\\n\\n        .ac_gallery-dots {\\n            display: flex;\\n            justify-content: center;\\n            align-items: center;\\n            gap: 8px;\\n            margin-top: 16px;\\n        }\\n\\n        .ac_gallery-dots .dot {\\n            width: 32px;\\n            height: 4px;\\n            border-radius: 2px;\\n            background: #333;\\n        }\\n\\n        .ac_gallery-dots .dot.active {\\n            background: #fff;\\n        }\\n\\n        .s1mc_assist {\\n            position: relative;\\n            \/* padding: 20px 5%; *\/ \\n        }\\n\\n        .s1mc_assist-title {\\n            font-family: \\\"OPPO Sans 4.0\\\", sans-serif;\\n            font-weight: 700;\\n            font-size: 32px;\\n            line-height: 140%;\\n            letter-spacing: 0%;\\n            color: #fff;\\n            text-align: center;\\n            margin-bottom: 60px;\\n        }\\n\\n        .s1mc_assist-content {\\n            display: flex;\\n            align-items: stretch;\\n            justify-content: center;\\n            gap: 24px;\\n        }\\n\\n        .s1mc_assist-image {\\n            flex: 0.6;\\n        }\\n\\n        .s1mc_assist-image img {\\n            width: 100%;\\n            border-radius: 12px;\\n            border: 1px solid #333;\\n            transition: opacity 0.5s ease;\\n        }\\n\\n        .s1mc_assist-list {\\n            flex: 0.4;\\n            display: flex;\\n            flex-direction: column;\\n            gap: 16px;\\n            justify-content: center;\\n        }\\n\\n        .s1mc_assist-mobile-item {\\n            display: flex;\\n            flex-direction: column;\\n            gap: 12px;\\n            margin-bottom: 20px;\\n        }\\n\\n        .s1mc_assist-mobile-item:last-child {\\n            margin-bottom: 0;\\n        }\\n\\n        .s1mc_assist-item {\\n            border-left: 2px solid #333;\\n            padding-left: 12px;\\n        }\\n\\n        .s1mc_assist-item.active {\\n            border-left-color: #fff;\\n            border-left-width: 4px;\\n        }\\n\\n        .s1mc_assist-progress {\\n            width: 6px;\\n            background: rgba(255, 255, 255, 0.35);\\n            border-radius: 3px;\\n            position: relative;\\n            align-self: stretch;\\n        }\\n\\n        .s1mc_assist-progress .fill {\\n            position: absolute;\\n            left: 0;\\n            bottom: 0;\\n            width: 100%;\\n            height: 0;\\n            background: #fff;\\n            border-radius: 3px;\\n            transition: height 0.3s ease;\\n        }\\n\\n        .s1mc_assist-content {\\n            gap: 24px;\\n        }\\n\\n        .s1mc_assist-progress {\\n            flex: 0 0 6px;\\n        }\\n\\n        .s1mc_assist-item h4 {\\n            font-size: 22px;\\n            font-weight: 700;\\n            color: #bbb;\\n            margin: 0 0 6px;\\n        }\\n\\n        .s1mc_assist-item p {\\n            font-size: 16px;\\n            color: #777;\\n            margin: 0;\\n            margin-bottom: 12px;\\n        }\\n\\n        .s1mc_assist-item.active h4 {\\n            color: #fff;\\n        }\\n\\n        .s1mc_assist-item.active p {\\n            color: #bbb;\\n        }\\n\\n        @media (max-width: 768px) {\\n            .s1mc_assist-item h4 {\\n                font-size: 18px;\\n                color: #fff;\\n            }\\n\\n            .s1mc_assist-title {\\n                font-size: 22px;\\n            }\\n\\n            .s1mc_assist-content {\\n                flex-direction: column;\\n            }\\n\\n            .s1mc_assist-list {\\n                order: 1;\\n                flex: none;\\n                width: 100%;\\n            }\\n\\n            .s1mc_assist-image {\\n                order: 2;\\n                flex: none;\\n                width: 100%;\\n            }\\n        }\\n\\n\\n        \/* 所有 panel 统一为紧凑、无特效的布局 *\/\\n        .ac_panel {\\n            position: relative;\\n            min-height: auto;\\n            \/* padding: 20px 5%; *\/\\n            background: #0a0d14;\\n            z-index: 1;\\n            display: flex;\\n            align-items: center;\\n            justify-content: space-between;\\n            opacity: 1;\\n            transform: none;\\n            transition: none;\\n        }\\n\\n        .ac_panel.ac_active {\\n            opacity: 1;\\n            transform: translateY(0);\\n            z-index: 2;\\n        }\\n\\n        .ac_panel.ac_reverse {\\n            flex-direction: row-reverse;\\n        }\\n\\n        .ac_panel .ac_text {\\n            flex: 0.45;\\n            padding: 20px;\\n            font-family: OPPO Sans 4.0;\\n            font-weight: 400;\\n            font-style: Regular;\\n            font-size: 20px;\\n            line-height: 150%;\\n            letter-spacing: 0%;\\n        }\\n\\n        .ac_panel .ac_text h3 {\\n            margin-bottom: 20px;\\n            font-family: \\\"OPPO Sans 4.0\\\", sans-serif;\\n            font-weight: 700;\\n            font-size: 32px;\\n            line-height: 140%;\\n            letter-spacing: 0%;\\n            color: #fff;\\n        }\\n\\n        .ac_panel .ac_text p {\\n            font-size: 18px;\\n            color: #bbb;\\n            line-height: 1.6;\\n        }\\n\\n        .ac_panel strong {\\n            color: #fff;\\n        }\\n\\n        .ac_panel .ac_media {\\n            flex: 0.5;\\n            text-align: center;\\n        }\\n\\n        .ac_panel .ac_media img,\\n        .ac_panel .ac_media video {\\n            width: 100%;\\n            border-radius: 12px;\\n            object-fit: cover;\\n            max-height: 80vh;\\n        }\\n\\n        \/* ===== 特殊处理：第三个 panel 垂直居中显示 ===== *\/\\n        .ac_panel.ac_special-center {\\n            \/* special-center 保持居中但不占满视口，和其它 panel 一致 *\/\\n            display: flex;\\n            flex-direction: column;\\n            justify-content: center;\\n            align-items: center;\\n            gap: 24px;\\n            \/* padding: 20px 5%; *\/\\n            min-height: auto;\\n            box-sizing: border-box;\\n        }\\n\\n        .ac_panel.ac_special-center .ac_text {\\n            flex: 0 0 45%;\\n            \/* max-width: 50%; *\/\\n            text-align: center;\\n            padding: 20px;\\n            display: flex;\\n            flex-direction: column;\\n            justify-content: center;\\n            \/* 文本垂直居中（关键） *\/\\n        }\\n\\n        .ac_panel.ac_special-center .ac_media {\\n            flex: 0 0 45%;\\n            max-width: 100%;\\n            max-height: 720px;\\n            display: flex;\\n            justify-content: center;\\n            align-items: center;\\n            \/* 媒体垂直居中（关键） *\/\\n        }\\n\\n        .ac_panel.ac_special-center .ac_media img,\\n        .ac_panel.ac_special-center .ac_media video {\\n            width: 100%;\\n            height: auto;\\n            \/* max-height: 60vh; *\/\\n            border-radius: 12px;\\n        }\\n\\n        \/* 移动端样式优化 *\/\\n        @media (max-width: 768px) {\\n            .ac_panel .ac_text p {\\n                font-size: 14px;\\n            }\\n\\n            .ac_panel .ac_text h3 {\\n                font-size: 36px;\\n                \/* 手机端二级标题 36px *\/\\n            }\\n\\n            \/* 整体滚动区改为自动高度 *\/\\n            .acsmc_scroll-gallery_2 {\\n                height: auto;\\n            }\\n\\n            .ac_gallery-title {\\n                font-size: 28px;\\n            }\\n\\n            .ac_gallery-content {\\n                flex-direction: column;\\n            }\\n\\n            .ac_gallery-image,\\n            .ac_gallery-text {\\n                flex: none;\\n                width: 100%;\\n            }\\n\\n            .ac_gallery-text p {\\n                font-size: 16px;\\n                max-width: none;\\n            }\\n\\n            .ac_gallery-overlay {\\n                left: 16px;\\n                bottom: 16px;\\n                top: auto;\\n                transform: none;\\n                max-width: 80%;\\n            }\\n\\n            .ac_gallery-overlay h4 {\\n                font-size: 16px;\\n            }\\n\\n            .ac_gallery-overlay p {\\n                font-size: 14px;\\n            }\\n\\n            \/* panel 在移动端的基础样式 *\/\\n            .ac_panel {\\n                position: relative !important;\\n                height: auto;\\n                display: flex;\\n                flex-direction: column !important;\\n                \/* 强制所有panel在移动端上下布局 *\/\\n                justify-content: flex-start;\\n                align-items: center;\\n                padding: 5% 4%;\\n            }\\n\\n            \/* 前三个panel的移动端样式 *\/\\n            .ac_panel:nth-child(-n+3) {\\n                min-height: auto;\\n                padding: 30px 4%;\\n                margin-bottom: 20px;\\n            }\\n\\n            \/* 第四个panel开始的移动端样式 *\/\\n            .ac_panel:nth-child(n+4) {\\n                \/* min-height: 100vh; *\/\\n                justify-content: center;\\n                opacity: 0;\\n                transform: translateY(20px);\\n                transition: opacity 0.6s ease-out, transform 0.6s ease-out;\\n            }\\n\\n            \/* 激活状态的动画效果 *\/\\n            .ac_panel.ac_active {\\n                opacity: 1;\\n                transform: translateY(0);\\n            }\\n\\n            .ac_panel:not(.ac_special-center) .ac_text,\\n            .ac_panel:not(.ac_special-center) .ac_media {\\n                flex: none;\\n                width: 100%;\\n                max-width: 100%;\\n                \/* padding: 0 16px; *\/\\n                text-align: center;\\n            }\\n\\n            .ac_panel:not(.ac_special-center) .ac_media {\\n                margin-top: 16px;\\n            }\\n\\n            .ac_panel:not(.ac_special-center) .ac_media img,\\n            .ac_panel:not(.ac_special-center) .ac_media video {\\n                width: 100%;\\n                \/* height: 60vh; *\/\\n                object-fit: cover;\\n                border-radius: 12px;\\n                max-height: none;\\n            }\\n\\n            .ac_panel:not(.ac_special-center) .ac_media img {\\n                object-fit: contain;\\n            }\\n\\n            \/* 保留并强化 special-center 在移动端的全屏覆盖行为（如果已存在则为冗余安全覆盖） *\/\\n            \/* 修改 special-center 在移动端的样式 *\/\\n            .ac_panel.ac_special-center {\\n                padding: 20px 0;\\n                height: auto;\\n                \/* min-height: 100vh; *\/\\n                display: flex;\\n                flex-direction: column;\\n                justify-content: flex-start;\\n                align-items: center;\\n                position: relative;\\n                gap: 20px;\\n            }\\n\\n            .ac_panel.ac_special-center .ac_text {\\n                position: relative;\\n                \/* 改为相对定位 *\/\\n                left: auto;\\n                top: auto;\\n                transform: none;\\n                width: 100%;\\n                padding: 16px;\\n                max-width: 90%;\\n                z-index: 2;\\n                text-align: center;\\n                color: #333;\\n                \/* 恢复正常文字颜色 *\/\\n                order: 1;\\n                \/* 文字放在上面 *\/\\n            }\\n\\n            .ac_panel.ac_special-center .ac_media {\\n                width: 100%;\\n                height: auto;\\n                max-height: 60vh;\\n                \/* 限制视频高度 *\/\\n                display: flex;\\n                justify-content: center;\\n                align-items: center;\\n                order: 2;\\n                \/* 媒体放在下面 *\/\\n            }\\n\\n            .ac_panel.ac_special-center .ac_media img,\\n            .ac_panel.ac_special-center .ac_media video {\\n                width: 100%;\\n                height: auto;\\n                max-height: 60vh;\\n                object-fit: contain;\\n                border-radius: 12px;\\n            }\\n\\n            .ac_panel.ac_special-center .ac_text {\\n                \/* position: absolute;\\n            left: 50%;\\n            top: 50%;\\n            transform: translate(-50%, -50%); *\/\\n                z-index: 2;\\n                text-align: center;\\n                color: #fff;\\n            }\\n\\n            .ac_panel .ac_media img,\\n            .ac_panel .ac_media video {\\n                width: 100%;\\n                \/* height: 400px; *\/\\n                max-height: 80vh;\\n            }\\n\\n            .ac_introTitle {\\n                \/* background: linear-gradient(90deg, #0C62FF 0%, #9727FF 100%);\\n                -webkit-background-clip: text;\\n                background-clip: text;\\n                color: transparent; *\/\\n                color: #fff;\\n\\n                font-family: \\\"OPPO Sans 4.0\\\", sans-serif;\\n                font-weight: 700;\\n                font-size: 22px;\\n                \/* 移动端保持一级标题 50px *\/\\n                line-height: 136%;\\n                letter-spacing: 0%;\\n                text-align: center;\\n                margin-bottom: 20px;\\n                padding: 0 20px;\\n                \/* 移动端添加两边间距 *\/\\n            }\\n\\n            .ac_intro-images {\\n                flex-direction: column;\\n                height: auto;\\n            }\\n\\n            .ac_intro-left {\\n                order: 2;\\n            }\\n        }\\n    \u003c\/style\u003e\\n\\n\\n\u003cdiv id='\\\"precision-section\\\"' class='\\\"ac_precision-wrapper\\\"'\u003e\\n    \u003cdiv class='\\\"page-width\\\"'\u003e\\n        \u003c!-- 第一屏 --\u003e\\n        \u003csection class='\\\"ac_intro\\\"'\u003e\\n            \u003ch2 class='\\\"ac_introTitle\\\"'\u003e65℃ High-Temperature Drying While Printing\u003c\/h2\u003e\\n            \u003cp class='\\\"ac_intro-body\\\"'\u003eWant to print perfect models? Filament drying is key. The ACE 2 Pro supports\\n                simultaneous drying and printing, keeping the filaments as fresh as the day they came in.\u003c\/p\u003e\\n            \u003cdiv class='\\\"ac_intro-hero\\\"'\u003e\\n                \u003cimg src='\\\"https:\/\/cdn.shopify.com\/s\/files\/1\/0698\/1235\/5357\/files\/kobra-s1-max-combo-65_-high-temperature-drying-while-printing.jpg?v=1763376784\\\"\\n' alt='\\\"65℃' high-temperature drying while printing\u003e\\n            \u003c\/div\u003e\\n        \u003c\/section\u003e\\n\\n        \u003c!-- 滚屏展示区 --\u003e\\n        \u003csection class='\\\"acsmc_scroll-gallery_2\\\"'\u003e\u003c\/section\u003e\\n    \u003c\/div\u003e\\n\u003c\/div\u003e\\n\\n\u003cscript src='\\\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/gsap\/3.12.5\/gsap.min.js\\\"'\u003e\u003c\/script\u003e\\n\u003cscript src='\\\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/gsap\/3.12.5\/ScrollTrigger.min.js\\\"'\u003e\u003c\/script\u003e\\n\\n\u003cscript\u003e\\n    document.addEventListener(\\\"DOMContentLoaded\\\", () =\u003e {\\n        gsap.registerPlugin(ScrollTrigger);\\n\\n        const data = [{\\n            title: \\\"Active+Passive Moisture Control\\\",\\n            text: [\\n                `Built-in temperature and humidity sensors provide real-time monitoring of chamber conditions.`,\\n                `An electromagnetic valve actively removes moisture, keeping filaments dry.`,\\n                `Silicone sealing ring blocks external humidity for long-term anti-moisture protection.`\\n            ],\\n            pcImg: [\\n                `https:\/\/cdn.shopify.com\/s\/files\/1\/0698\/1235\/5357\/files\/s1mc-temperature-and-humidity-sensors-pc.jpg?v=1763705639`,\\n                `https:\/\/cdn.shopify.com\/s\/files\/1\/0698\/1235\/5357\/files\/s1mc-electromagnetic-valve-pc.jpg?v=1763705639`,\\n                `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/1225_613_b25e9739-ea71-432b-931c-7c6fe40e4c37.jpg?v=1768472481`\\n            ],\\n            mobImg: [\\n                `https:\/\/cdn.shopify.com\/s\/files\/1\/0698\/1235\/5357\/files\/s1mc-temperature-and-humidity-sensors-m.jpg?v=1763705640`, `https:\/\/cdn.shopify.com\/s\/files\/1\/0698\/1235\/5357\/files\/s1mc-electromagnetic-valve-m.jpg?v=1763705640`, `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/1900_1955.jpg?v=1768472592`\\n            ],\\n        }, {\\n            title: \\\"On-Board Intelligent Printing Assistant\\\",\\n            text: [\\n                [`Remaining Filament Estimation`, `Remaining filament display.`,],\\n                [`Auto-Filament Refill`, `Pre-sets color\/material profiles enable seamless refill when depleted.`,],\\n                [`Intelligent Identification`, `Auto-detects Anycubic filament parameters, eliminating manual configuration. `,]\\n            ],\\n            pcImg: [\\n                `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/ACE_2_Pro_Remaining_Filament_Estimation_9225f27b-e142-4d8c-86da-72241c15b498.jpg?v=1768467755`,\\n                `https:\/\/cdn.shopify.com\/s\/files\/1\/0698\/1235\/5357\/files\/kobra-s1-max-combo-auto-filament-refill.jpg?v=1763376785`, `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/ACE_2_Pro_Intelligent_Identification-en_03cb65e8-a0f0-49cf-b3de-70c53a0ab514.jpg?v=1768467815`\\n            ],\\n            mobImg: [``, ``, ``],\\n        }];\\n\\n        const container = document.querySelector(\\\".acsmc_scroll-gallery_2\\\");\\n\\n        \/\/ 构建第二屏结构（桌面滚动切换，移动端顺序展示）\\n        const gallery = document.createElement('section');\\n        gallery.className = 'ac_gallery';\\n        const isMobileGallery = window.matchMedia('(max-width: 768px)').matches;\\n        if (isMobileGallery) {\\n            const itemsHtml = [0, 1, 2].map((idx) =\u003e {\\n                const src = (data[0].mobImg \u0026\u0026 data[0].mobImg[idx]) ? (data[0].mobImg[idx] || data[0].pcImg[idx]) : data[0].pcImg[idx];\\n                const t = data[0].text[idx];\\n                const title = Array.isArray(t) ? (t[0] || '') : (t || '');\\n                const body = Array.isArray(t) ? (t[1] || '') : '';\\n                return `\\n                \u003cdiv class=\\\"ac_gallery-image\\\"\u003e\\n                  \u003cimg src=\\\"${src}\\\" alt=\\\"${title}\\\"\u003e\\n                  \u003cdiv class=\\\"ac_gallery-overlay\\\"\u003e\\n                    \u003ch4\u003e${title}\u003c\/h4\u003e\\n                    ${body ? `\u003cp\u003e${body}\u003c\/p\u003e` : ''}\\n                  \u003c\/div\u003e\\n                \u003c\/div\u003e`;\\n            }).join('');\\n            gallery.innerHTML = `\\n              \u003ch3 class=\\\"ac_gallery-title\\\"\u003e${data[0].title}\u003c\/h3\u003e\\n              \u003cdiv class=\\\"ac_gallery-content\\\"\u003e${itemsHtml}\u003c\/div\u003e\\n            `;\\n        } else {\\n            gallery.innerHTML = `\\n              \u003ch3 class=\\\"ac_gallery-title\\\"\u003e${data[0].title}\u003c\/h3\u003e\\n              \u003cdiv class=\\\"ac_gallery-content\\\"\u003e\\n                \u003cdiv class=\\\"ac_gallery-image\\\"\u003e\\n                  \u003cimg id=\\\"ac_gallery_img\\\" src=\\\"\\\" alt=\\\"${data[0].title}\\\"\u003e\\n                  \u003cdiv class=\\\"ac_gallery-overlay\\\"\u003e\\n                    \u003ch4 id=\\\"ac_gallery_text_title\\\"\u003e\u003c\/h4\u003e\\n                    \u003cp id=\\\"ac_gallery_text_body\\\"\u003e\u003c\/p\u003e\\n                  \u003c\/div\u003e\\n                \u003c\/div\u003e\\n              \u003c\/div\u003e\\n              \u003cdiv class=\\\"ac_gallery-dots\\\"\u003e\\n                \u003cspan class=\\\"dot\\\"\u003e\u003c\/span\u003e\\n                \u003cspan class=\\\"dot\\\"\u003e\u003c\/span\u003e\\n                \u003cspan class=\\\"dot\\\"\u003e\u003c\/span\u003e\\n              \u003c\/div\u003e\\n            `;\\n        }\\n        container.appendChild(gallery);\\n\\n        function getImgSrc(idx) {\\n            const isMobile = window.matchMedia('(max-width: 768px)').matches;\\n            const m = (data[0].mobImg \u0026\u0026 data[0].mobImg[idx]) ? data[0].mobImg[idx] : '';\\n            const p = (data[0].pcImg \u0026\u0026 data[0].pcImg[idx]) ? data[0].pcImg[idx] : '';\\n            return isMobile ? (m || p) : p;\\n        }\\n\\n        const imgEl = document.getElementById('ac_gallery_img');\\n        const textTitleEl = document.getElementById('ac_gallery_text_title');\\n        const textBodyEl = document.getElementById('ac_gallery_text_body');\\n        const dots = [...gallery.querySelectorAll('.dot')];\\n\\n        function setSlide(idx) {\\n            imgEl.style.opacity = '0';\\n            const nextSrc = getImgSrc(idx);\\n            imgEl.onload = () =\u003e { imgEl.style.opacity = '1'; };\\n            imgEl.src = nextSrc;\\n            const t = data[0].text[idx] || '';\\n            textTitleEl.textContent = Array.isArray(t) ? (t[0] || '') : t;\\n            textBodyEl.textContent = Array.isArray(t) ? (t[1] || '') : '';\\n            dots.forEach((d, i) =\u003e d.classList.toggle('active', i === idx));\\n        }\\n\\n        if (!isMobileGallery) setSlide(0);\\n\\n        \/\/ 桌面端启用滚动切换；移动端不使用 GSAP\\n        let tl;\\n        if (!isMobileGallery) {\\n            tl = gsap.timeline({\\n                scrollTrigger: {\\n                    trigger: gallery,\\n                    start: 'top top',\\n                    end: '+=4000',\\n                    scrub: true,\\n                    pin: true\\n                }\\n            });\\n\\n            tl.add(() =\u003e setSlide(0))\\n                .to({}, { duration: 1 })\\n                .add(() =\u003e setSlide(1))\\n                .to({}, { duration: 1 })\\n                .add(() =\u003e setSlide(2))\\n                .to({}, { duration: 0.5 });\\n        }\\n\\n        window.addEventListener('resize', () =\u003e {\\n            const current = dots.findIndex(d =\u003e d.classList.contains('active'));\\n            setSlide(current \u003c 0 ? 0 : current);\\n        });\\n\\n        const assist = {\\n            title: 'On-Board Intelligent Printing Assistant',\\n            text: [\\n                ['Remaining Filament Estimation', 'Remaining filament display.'],\\n                ['Auto-Filament Refill', 'Pre-sets color\/material profiles enable seamless refill when depleted.'],\\n                ['Intelligent Identification', 'Auto-detects Anycubic filament parameters, eliminating manual configuration.']\\n            ],\\n            pcImg: [\\n                `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/ACE_2_Pro_Remaining_Filament_Estimation_9225f27b-e142-4d8c-86da-72241c15b498.jpg?v=1768467755`,\\n                `https:\/\/cdn.shopify.com\/s\/files\/1\/0698\/1235\/5357\/files\/kobra-s1-max-combo-auto-filament-refill.jpg?v=1763376785`, `https:\/\/cdn.shopify.com\/s\/files\/1\/0245\/5519\/2380\/files\/ACE_2_Pro_Intelligent_Identification-en_03cb65e8-a0f0-49cf-b3de-70c53a0ab514.jpg?v=1768467815`\\n            ],\\n            mobImg: [``, ``, ``],\\n        };\\n\\n        const assistSection = document.createElement('section');\\n        assistSection.className = 's1mc_assist';\\n        const isMobileAssist = window.matchMedia('(max-width: 768px)').matches;\\n        if (isMobileAssist) {\\n            const mobileItems = assist.text.map((pair, i) =\u003e {\\n                const src = getAssistImg(i);\\n                return `\\n                  \u003cdiv class=\\\"s1mc_assist-mobile-item\\\"\u003e\\n                    \u003cdiv class=\\\"s1mc_assist-item\\\"\u003e\\n                      \u003ch4\u003e${pair[0]}\u003c\/h4\u003e\\n                      \u003cp\u003e${pair[1]}\u003c\/p\u003e\\n                    \u003c\/div\u003e\\n                    \u003cdiv class=\\\"s1mc_assist-image\\\"\u003e\\n                      \u003cimg src=\\\"${src}\\\" alt=\\\"${assist.title}\\\"\u003e\\n                    \u003c\/div\u003e\\n                  \u003c\/div\u003e`;\\n            }).join('');\\n            assistSection.innerHTML = `\\n              \u003ch3 class=\\\"s1mc_assist-title\\\"\u003e${assist.title}\u003c\/h3\u003e\\n              ${mobileItems}\\n            `;\\n        } else {\\n            assistSection.innerHTML = `\\n              \u003ch3 class=\\\"s1mc_assist-title\\\"\u003e${assist.title}\u003c\/h3\u003e\\n              \u003cdiv class=\\\"s1mc_assist-content\\\"\u003e\\n                \u003cdiv class=\\\"s1mc_assist-image\\\"\u003e\\n                  \u003cimg id=\\\"s1mc_assist_img\\\" src=\\\"\\\" alt=\\\"${assist.title}\\\"\u003e\\n                \u003c\/div\u003e\\n                \u003cdiv class=\\\"s1mc_assist-list\\\"\u003e\\n                  ${assist.text.map((pair, i) =\u003e `\\n                    \u003cdiv class=\\\"s1mc_assist-item${i === 0 ? ' active' : ''}\\\" data-idx=\\\"${i}\\\"\u003e\\n                      \u003ch4\u003e${pair[0]}\u003c\/h4\u003e\\n                      \u003cp\u003e${pair[1]}\u003c\/p\u003e\\n                    \u003c\/div\u003e`).join('')}\\n                \u003c\/div\u003e\\n              \u003c\/div\u003e\\n            `;\\n        }\\n        container.appendChild(assistSection);\\n\\n        function getAssistImg(idx) {\\n            const isMobile = window.matchMedia('(max-width: 768px)').matches;\\n            const m = assist.mobImg[idx] || '';\\n            const p = assist.pcImg[idx] || '';\\n            return isMobile ? (m || p) : p;\\n        }\\n\\n        if (!isMobileAssist) {\\n            const assistImgEl = document.getElementById('s1mc_assist_img');\\n            function setAssist(idx) {\\n                assistImgEl.style.opacity = '0';\\n                const nextSrc = getAssistImg(idx);\\n                assistImgEl.onload = () =\u003e { assistImgEl.style.opacity = '1'; };\\n                assistImgEl.src = nextSrc;\\n                assistSection.querySelectorAll('.s1mc_assist-item').forEach((el, i) =\u003e {\\n                    el.classList.toggle('active', i === idx);\\n                });\\n            }\\n            setAssist(0);\\n        }\\n\\n        let tl2;\\n        if (!isMobileAssist) {\\n            tl2 = gsap.timeline({\\n                scrollTrigger: {\\n                    trigger: assistSection,\\n                    start: 'top top',\\n                    end: '+=4000',\\n                    scrub: true,\\n                    pin: true\\n                }\\n            });\\n\\n            tl2.add(() =\u003e setAssist(0))\\n                .to({}, { duration: 1 })\\n                .add(() =\u003e setAssist(1))\\n                .to({}, { duration: 1 })\\n                .add(() =\u003e setAssist(2))\\n                .to({}, { duration: 0.5 });\\n        }\\n\\n        \/\/ 响应式：视口变化时切换图片源\\n        window.addEventListener('resize', () =\u003e {\\n            const current = dots.findIndex(d =\u003e d.classList.contains('active')) || 0;\\n            setSlide(current);\\n            \/\/ 如果切到移动端，移除 GSAP 固定\\n            const nowMobile = window.matchMedia('(max-width: 768px)').matches;\\n            if (nowMobile) {\\n                if (tl \u0026\u0026 tl.scrollTrigger) { tl.scrollTrigger.kill(); tl.kill(); tl = null; }\\n                if (tl2 \u0026\u0026 tl2.scrollTrigger) { tl2.scrollTrigger.kill(); tl2.kill(); tl2 = null; }\\n            }\\n        });\\n    });\\n\u003c\/script\u003e\",\n        \"color_scheme\": \"\",\n        \"padding_top\": 0,\n        \"padding_bottom\": 0\n      }\n    },\n    \"yg_grid_box_qRRtyf\": {\n      \"type\": \"yg-grid-box\",\n      \"blocks\": {\n        \"yg_slide_text_TEANap\": {\n          \"type\": \"yg-slide-text\",\n          \"settings\": {\n            \"column\": \"2\",\n            \"row\": \"1\",\n            \"order_mobile\": 0,\n            \"column_mobile\": \"2\",\n            \"row_mobile\": \"1\",\n            \"slide_color_background\": \"#191919\",\n            \"slide_image\": \"shopify:\/\/shop_images\/kobra-x-720p-camera-18.jpg\",\n            \"box_align\": \"center center\",\n            \"text_align\": \"left\",\n            \"box_align_mobile\": \"center center\",\n            \"text_align_mobile\": \"left\",\n            \"block_title\": \"\",\n            \"block_text\": \"720P Camera: Real-Time AI Monitoring\",\n            \"color\": \"#ffffff\"\n          }\n        },\n        \"item_c8yhnG\": {\n          \"type\": \"item\",\n          \"settings\": {\n            \"merge_style\": \"merge-right\",\n            \"column\": \"1\",\n            \"row\": \"1\",\n            \"order_mobile\": 0,\n            \"column_mobile\": \"1\",\n            \"row_mobile\": \"1\",\n            \"image\": \"shopify:\/\/shop_images\/Foreign-Object-Detection-18.jpg\",\n            \"image_mobile\": \"shopify:\/\/shop_images\/Foreign-Object-Detection-18.jpg\",\n            \"box_align\": \"center start\",\n            \"text_align\": \"center\",\n            \"box_align_mobile\": \"end end\",\n            \"text_align_mobile\": \"center\",\n            \"subhead\": \"Foreign Object Detection‌\",\n            \"title\": \"\",\n            \"des\": \"\",\n            \"tags\": \"\",\n            \"tags_color\": \"\",\n            \"tags_bg_color\": \"rgba(0,0,0,0)\",\n            \"btn_label\": \"\",\n            \"btn_link\": \"\",\n            \"btn_bg_color\": \"rgba(0,0,0,0)\",\n            \"btn_text_color\": \"rgba(0,0,0,0)\",\n            \"color\": \"#ffffff\",\n            \"highlight_color\": \"\"\n          }\n        },\n        \"item_GMJXPt\": {\n          \"type\": \"item\",\n          \"settings\": {\n            \"merge_style\": \"merge-left\",\n            \"column\": \"1\",\n            \"row\": \"1\",\n            \"order_mobile\": 0,\n            \"column_mobile\": \"1\",\n            \"row_mobile\": \"1\",\n            \"image\": \"shopify:\/\/shop_images\/kobra-x-Spaghetti-Detection-19.jpg\",\n            \"box_align\": \"end end\",\n            \"text_align\": \"center\",\n            \"box_align_mobile\": \"end end\",\n            \"text_align_mobile\": \"center\",\n            \"subhead\": \"\",\n            \"title\": \"\",\n            \"des\": \"\",\n            \"tags\": \"\",\n            \"tags_color\": \"\",\n            \"tags_bg_color\": \"\",\n            \"btn_label\": \"\",\n            \"btn_link\": \"\",\n            \"btn_bg_color\": \"\",\n            \"btn_text_color\": \"\",\n            \"color\": \"#ffffff\",\n            \"highlight_color\": \"\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"yg_slide_text_TEANap\",\n        \"item_c8yhnG\",\n        \"item_GMJXPt\"\n      ],\n      \"name\": \"YG Grid Box\",\n      \"settings\": {\n        \"title\": \"Intelligent Monitoring: It Checks all the Boxes\",\n        \"description\": \"720P Camera: Real-Time AI Monitoring The in-house algorithm and 720P camera detect anomalies and alert users instantly. ‌Foreign Object Detection‌: Automatically identifies debris in the printing area to prevent failures or damage. ‌Spaghetti Detection‌: AI-powered live monitoring prevents spaghetti.\",\n        \"heading_size\": \"h2\",\n        \"text_align\": \"center\",\n        \"show_view_all\": false,\n        \"view_all_label\": \"View all\",\n        \"view_all_link\": \"\",\n        \"enable_section_box_layout\": false,\n        \"color_scheme\": \"background-1\",\n        \"padding_top\": 28,\n        \"padding_bottom\": 12,\n        \"padding_top_mobile\": 24,\n        \"padding_bottom_mobile\": 12\n      }\n    },\n    \"image_with_text_A8MXrT\": {\n      \"type\": \"image-with-text\",\n      \"blocks\": {\n        \"heading_mxVJgA\": {\n          \"type\": \"heading\",\n          \"settings\": {\n            \"heading\": \"Object Skipping\",\n            \"heading_size\": \"h4\",\n            \"enable_bold_heading\": true\n          }\n        },\n        \"text_rt9xLd\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"\u003cp\u003eFaulty parts are skipped to ensure printing efficiency.\u003c\/p\u003e\",\n            \"text_style\": \"body\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"heading_mxVJgA\",\n        \"text_rt9xLd\"\n      ],\n      \"name\": \"t:sections.image-with-text.presets.name\",\n      \"settings\": {\n        \"grid_layout\": \"grid\",\n        \"image\": \"shopify:\/\/shop_images\/kobra-x-Object-Skipping-21.jpg\",\n        \"height\": \"adapt\",\n        \"desktop_image_width\": \"medium\",\n        \"layout\": \"text_first\",\n        \"desktop_content_position\": \"top\",\n        \"desktop_content_alignment\": \"left\",\n        \"content_layout\": \"no-overlap\",\n        \"hide_when_empty_image\": false,\n        \"preload\": false,\n        \"mobile_content_alignment\": \"left\",\n        \"padding_top\": 12,\n        \"padding_bottom\": 36,\n        \"padding_top_mobile\": 12,\n        \"padding_bottom_mobile\": 20,\n        \"color_heading\": \"#000000\",\n        \"gradient_heading\": \"\",\n        \"color_text\": \"#000000\",\n        \"color_highlight_text\": \"#da2127\",\n        \"color_caption\": \"#000000\",\n        \"color_countdown\": \"#000000\",\n        \"color_icon\": \"#000000\",\n        \"color_button_text\": \"#ffffff\",\n        \"color_button\": \"#000000\",\n        \"background_container\": \"#ffffff\",\n        \"gradient_background_container\": \"\",\n        \"background_section\": \"#ffffff\",\n        \"gradient_background_section\": \"\",\n        \"enable_parallax_scrolling_effect\": true,\n        \"overlay_color\": \"#1e40af\"\n      }\n    },\n    \"image_with_text_bytyDX\": {\n      \"type\": \"image-with-text\",\n      \"blocks\": {\n        \"heading_KgBTHj\": {\n          \"type\": \"heading\",\n          \"settings\": {\n            \"heading\": \"Auto-Resume, Auto-Recovery\",\n            \"heading_size\": \"h4\",\n            \"enable_bold_heading\": true\n          }\n        },\n        \"text_jP6QCb\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"\u003cp\u003eAfter power recovery, the system picks up where it left off and continues to print as if nothing had happened before.\u003c\/p\u003e\",\n            \"text_style\": \"body\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"heading_KgBTHj\",\n        \"text_jP6QCb\"\n      ],\n      \"name\": \"t:sections.image-with-text.presets.name\",\n      \"settings\": {\n        \"grid_layout\": \"grid\",\n        \"image\": \"shopify:\/\/shop_images\/kobra-x-Auto-Resume-Recovery-22.jpg\",\n        \"height\": \"adapt\",\n        \"desktop_image_width\": \"medium\",\n        \"layout\": \"image_first\",\n        \"desktop_content_position\": \"top\",\n        \"desktop_content_alignment\": \"left\",\n        \"content_layout\": \"no-overlap\",\n        \"hide_when_empty_image\": false,\n        \"preload\": false,\n        \"mobile_content_alignment\": \"left\",\n        \"padding_top\": 36,\n        \"padding_bottom\": 36,\n        \"padding_top_mobile\": 24,\n        \"padding_bottom_mobile\": 20,\n        \"color_heading\": \"#000000\",\n        \"gradient_heading\": \"\",\n        \"color_text\": \"#000000\",\n        \"color_highlight_text\": \"#da2127\",\n        \"color_caption\": \"#000000\",\n        \"color_countdown\": \"#000000\",\n        \"color_icon\": \"#000000\",\n        \"color_button_text\": \"#ffffff\",\n        \"color_button\": \"#000000\",\n        \"background_container\": \"#ffffff\",\n        \"gradient_background_container\": \"\",\n        \"background_section\": \"#ffffff\",\n        \"gradient_background_section\": \"\",\n        \"enable_parallax_scrolling_effect\": true,\n        \"overlay_color\": \"#1e40af\"\n      }\n    },\n    \"yg_download_grid_KPrBW3\": {\n      \"type\": \"yg-download-grid\",\n      \"blocks\": {\n        \"image_yLwtdB\": {\n          \"type\": \"image\",\n          \"settings\": {\n            \"icon_image\": \"shopify:\/\/shop_images\/Anycubic-Slicer-Next-Anycubic-APP-23.jpg\",\n            \"image_title\": \"Anycubic Slicer Next\",\n            \"image_text\": \"The Anycubic slicer[5] is preloaded with parameter sets for various materials, making it fully compatible with mainstream brands. Enjoy consistent, excellent results with just one click.\",\n            \"link_label\": \"\",\n            \"image_link\": \"\"\n          }\n        },\n        \"image_WKRqbj\": {\n          \"type\": \"image\",\n          \"settings\": {\n            \"icon_image\": \"shopify:\/\/shop_images\/kobra-x-remote-control-24.jpg\",\n            \"image_title\": \"Anycubic APP\",\n            \"image_text\": \"Monitor your prints from anywhere with the Anycubic App. Use remote viewing to check progress in real-time, or capture and share your journey with built-in time-lapse photography.\",\n            \"link_label\": \"Download Now \u0026gt;\",\n            \"image_link\": \"https:\/\/wiki.anycubic.com\/en\/software-and-app\/anycubic-photon-workshop\"\n          }\n        },\n        \"image_cjwkr6\": {\n          \"type\": \"image\",\n          \"settings\": {\n            \"icon_image\": \"shopify:\/\/shop_images\/Dual-Network-Support-25.jpg\",\n            \"image_title\": \"Dual-Network Support\",\n            \"image_text\": \"Dual-band Wi-Fi (2.4G\/5G) + LAN connectivity. Multiple connection options ensure rock-solid file transfers.\",\n            \"link_label\": \"\",\n            \"image_link\": \"\"\n          }\n        },\n        \"image_pmJFAR\": {\n          \"type\": \"image\",\n          \"settings\": {\n            \"icon_image\": \"shopify:\/\/shop_images\/Privacy-Protection-26.jpg\",\n            \"image_title\": \"‌Privacy Protection‌\",\n            \"image_text\": \"Seamless switching between IoT cloud platform and LAN modes with dual-layer security to safeguard your data privacy.\",\n            \"link_label\": \"\",\n            \"image_link\": \"\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"image_yLwtdB\",\n        \"image_WKRqbj\",\n        \"image_cjwkr6\",\n        \"image_pmJFAR\"\n      ],\n      \"name\": \"YG Dwnload Grid\",\n      \"settings\": {\n        \"title\": \"Anycubic 3D Printing Ecosystem\",\n        \"heading_size\": \"h2\",\n        \"text_align\": \"center\",\n        \"show_view_all\": false,\n        \"view_all_label\": \"View all\",\n        \"view_all_link\": \"\",\n        \"enable_section_box_layout\": false,\n        \"color_scheme\": \"\",\n        \"color_background\": \"#ffffff\",\n        \"item_color_background\": \"#f7f8fa\",\n        \"padding_top\": 40,\n        \"padding_bottom\": 0,\n        \"padding_top_mobile\": 28,\n        \"padding_bottom_mobile\": 0\n      }\n    },\n    \"rich_text_mdmErc\": {\n      \"type\": \"rich-text\",\n      \"blocks\": {\n        \"heading_fDGEUz\": {\n          \"type\": \"heading\",\n          \"settings\": {\n            \"heading\": \"\u003cp\u003e\u003cstrong\u003eAnycubic Print Guarantee\u003c\/strong\u003e\u003c\/p\u003e\",\n            \"heading_size\": \"h3\"\n          }\n        },\n        \"text_wWLk4m\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"\u003cp\u003eFor orders placed between Jan 15 and Feb 15, Package Protection Service is included at no extra cost, in addition to the Anycubic Print Guarantee for first prints. \u003c\/p\u003e\"\n          }\n        },\n        \"button_iY6j48\": {\n          \"type\": \"button\",\n          \"settings\": {\n            \"button_label\": \"Learn More\",\n            \"button_link\": \"https:\/\/www.anycubic.au\/blogs\/news\/standing-behind-your-first-print-introducing-the-anycubic-print-guarantee\",\n            \"button_style_1\": \"primary\",\n            \"button_open_new_tab_1\": false,\n            \"button_label_2\": \"\",\n            \"button_link_2\": \"\",\n            \"button_style_2\": \"primary\",\n            \"button_open_new_tab_2\": false\n          }\n        }\n      },\n      \"block_order\": [\n        \"heading_fDGEUz\",\n        \"text_wWLk4m\",\n        \"button_iY6j48\"\n      ],\n      \"disabled\": true,\n      \"name\": \"t:sections.rich-text.presets.name\",\n      \"settings\": {\n        \"desktop_content_position\": \"center\",\n        \"desktop_content_width\": \"large\",\n        \"content_alignment\": \"center\",\n        \"enable_section_box_layout\": false,\n        \"color_scheme\": \"\",\n        \"full_width\": true,\n        \"padding_top\": 40,\n        \"padding_bottom\": 52,\n        \"padding_top_mobile\": 48,\n        \"padding_bottom_mobile\": 48\n      }\n    },\n    \"image_with_text_7NAA8U\": {\n      \"type\": \"image-with-text\",\n      \"blocks\": {\n        \"heading_pKWQJp\": {\n          \"type\": \"heading\",\n          \"settings\": {\n            \"heading\": \"Packing List\",\n            \"heading_size\": \"h3\",\n            \"enable_bold_heading\": true\n          }\n        },\n        \"text_V3UwqN\": {\n          \"type\": \"text\",\n          \"settings\": {\n            \"text\": \"\u003cp\u003e1. Gantry Frame\u003cbr\u003e2. Printer Base \u003cbr\u003e3. Power Cord\u003cbr\u003e4. Spool Holder Shaft (4pcs)\u003cbr\u003e5. Spool Holder (2pcs)\u003cbr\u003e6. Purge Wiper \u0026amp; M3*8 (1pcs)\u003cbr\u003e7. M5*30 (8pcs)\u003cbr\u003e8. Cable Clip (1pcs)\u003cbr\u003e9. Teflon Tube (4pcs)\u003cbr\u003e10. Filament Samples\u003cbr\u003e11. Grease\u003cbr\u003e12. Nozzle Cleaner\u003cbr\u003e13. 4.0\/2.5\/2.0 \u0026amp; Magnet\u003cbr\u003e14. Decorative Cover (2pcs)\u003cbr\u003e15. Cable Cover\u003cbr\u003e16. Printing Board\u003cbr\u003e17. Application Brush\u003cbr\u003e18. User Manua\u003cbr\u003e19. ACE 2 Pro\u003c\/p\u003e\",\n            \"text_style\": \"body\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"heading_pKWQJp\",\n        \"text_V3UwqN\"\n      ],\n      \"name\": \"t:sections.image-with-text.presets.name\",\n      \"settings\": {\n        \"grid_layout\": \"grid\",\n        \"image\": \"shopify:\/\/shop_images\/KXC_List.jpg\",\n        \"height\": \"adapt\",\n        \"desktop_image_width\": \"large\",\n        \"layout\": \"text_first\",\n        \"desktop_content_position\": \"top\",\n        \"desktop_content_alignment\": \"left\",\n        \"content_layout\": \"no-overlap\",\n        \"hide_when_empty_image\": false,\n        \"preload\": false,\n        \"mobile_content_alignment\": \"left\",\n        \"padding_top\": 36,\n        \"padding_bottom\": 36,\n        \"padding_top_mobile\": 24,\n        \"padding_bottom_mobile\": 20,\n        \"color_heading\": \"#000000\",\n        \"gradient_heading\": \"\",\n        \"color_text\": \"#000000\",\n        \"color_highlight_text\": \"#da2127\",\n        \"color_caption\": \"#000000\",\n        \"color_countdown\": \"#000000\",\n        \"color_icon\": \"#000000\",\n        \"color_button_text\": \"#ffffff\",\n        \"color_button\": \"#000000\",\n        \"background_container\": \"#ffffff\",\n        \"gradient_background_container\": \"\",\n        \"background_section\": \"#ffffff\",\n        \"gradient_background_section\": \"\",\n        \"enable_parallax_scrolling_effect\": true,\n        \"overlay_color\": \"#1e40af\"\n      }\n    },\n    \"yg_product_info_EjrzM7\": {\n      \"type\": \"yg-product-info\",\n      \"custom_css\": [\n        \".yg-section-title {font-weight: 700;}\"\n      ],\n      \"name\": \"YG Product Info\",\n      \"settings\": {\n        \"enable_section_box_layout\": true,\n        \"metafields_handle\": \"specification\",\n        \"color_background\": \"#f7f8fa\",\n        \"title\": \"Specifications\",\n        \"heading_size\": \"h2\",\n        \"heading_alignment\": \"center\",\n        \"background\": \"#ffffff\",\n        \"layout_position\": \"row\",\n        \"padding_top\": 96,\n        \"padding_bottom\": 0,\n        \"padding_top_mobile\": 48,\n        \"padding_bottom_mobile\": 0\n      }\n    },\n    \"yg_product_compare_7McVtW\": {\n      \"type\": \"yg-product-compare\",\n      \"name\": \"YG product compare\",\n      \"settings\": {\n        \"title\": \"Kobra X Series Tech Specs\",\n        \"heading_size\": \"h2\",\n        \"products\": [\n          \"kobra-x-combo-3d-printer\",\n          \"kobra-x\",\n          \"kobra-3-v2\"\n        ],\n        \"collection\": \"\",\n        \"show_more_text\": \"Expand\",\n        \"show_less_text\": \"Contract\",\n        \"compare_button_text\": \"Compare 3D Printers\",\n        \"link\": \"\",\n        \"enable_section_box_layout\": true,\n        \"color_scheme\": \"scheme-27cea995-fe62-4585-89af-3a2a251ef1de\",\n        \"padding_top\": 0,\n        \"padding_bottom\": 96,\n        \"padding_top_mobile\": 0,\n        \"padding_bottom_mobile\": 48\n      }\n    },\n    \"1750386499b189b208\": {\n      \"type\": \"apps\",\n      \"blocks\": {\n        \"kudosi_ali_reviews_widget_box_fBMmi7\": {\n          \"type\": \"shopify:\/\/apps\/ali-reviews\/blocks\/widget-box\/bf2eea72-0400-4db1-8908-44b7418f9a88\",\n          \"settings\": {\n            \"product\": \"kobra-x\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"kudosi_ali_reviews_widget_box_fBMmi7\"\n      ],\n      \"settings\": {\n        \"include_margins\": true\n      }\n    },\n    \"yg_faq_LmBi6m\": {\n      \"type\": \"yg-faq\",\n      \"blocks\": {\n        \"collapsible_row_xRYPrU\": {\n          \"type\": \"collapsible_row\",\n          \"settings\": {\n            \"heading\": \"Q1: What do the [1][2][3][4][5] annotations in the product details mean?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eA‌：[1] Supports multicolor filament system for creations with 4+ colors, minimizing material waste; actual time savings may vary depending on user operation and environmental conditions.\u003cbr\u003e[2] Under ambient conditions of 25°C \/ 60% RH, the printer maintained good print quality during a continuous 24-hour test using PLA+PVA. It also supports multi-material printing with PLA+TPU (68D) at maximum settings. Data sourced from Anycubic Lab.\u003cbr\u003e[3] The top-mounted spool holder and filament form a natural damping system that absorbs vibrations, effectively minimizing machine oscillation during printing for improved results.\u003cbr\u003e[4] The noise level data above was measured by Anycubic Lab at 1 meter in front of the printer. Minor variations between measured and advertised noise levels are normal due to unit-to-unit differences.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_9xegGi\": {\n          \"type\": \"collapsible_row\",\n          \"settings\": {\n            \"heading\": \"Q2: What materials can the Kobra X Combo print with?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eA: Single material printing: PLA, PETG, TPU(95A\/64D\/68D), PVA, ABS;\u003cbr\u003eMulti-material printing: PLA + TPU(68D), PLA + PVA, TPU(68D) + TPU(68D)\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_U6ACzi\": {\n          \"type\": \"collapsible_row\",\n          \"settings\": {\n            \"heading\": \"Q3: What are the machine dimensions of the Kobra X Combo?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eA: The dimension of the Kobra X is: 455.4 x 445.3 x 461.3 mm³;\u003cbr\u003eThe dimension of the ACE 2 Pro is: 368 x 291.5 x 236.5 mm³;\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_7tGhNg\": {\n          \"type\": \"collapsible_row\",\n          \"settings\": {\n            \"heading\": \"Q4: What is the maximum number of colors supported by the Kobra X Combo?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eA: Start with 7-color printing. By combining four ACE 2 Pro to achieve 19-color printing.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_xBK9U3\": {\n          \"type\": \"collapsible_row\",\n          \"settings\": {\n            \"heading\": \"Q5: What equipment is required for 19-color printing?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eIt requires three 8-color filament hubs and one 2-color filament hub to achieve 19-color printing.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_VV9Di8\": {\n          \"type\": \"collapsible_row\",\n          \"settings\": {\n            \"heading\": \"Q6: What are the differences between the ACE 2 Pro and the first-generation ACE Pro?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eA: The ACE 2 Pro supports high-temperature drying at 65℃ while printing and features temperature and humidity detection, along with sealed storage and an electromagnetic valve that actively removes moisture. \u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_NAfPeY\": {\n          \"type\": \"collapsible_row\",\n          \"settings\": {\n            \"heading\": \"Q7: What is the ACE GEN 2 technology?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eA: ACE Gen2 is an integrated multicolor printing technology that combines filament feeding and multicolor switching functions, effectively reducing material change time, waste, and system complexity, delivering a more efficient and stable multicolor printing experience.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_86fKJf\": {\n          \"type\": \"collapsible_row\",\n          \"settings\": {\n            \"heading\": \"Q8: Is the Kobra X Combo compatible with the ACE Pro from the first-generation Kobra 3\/Kobra S1\/Kobra 3 Max?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eA: Kobra X Combo does not support ACE Pro.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_4QMnTP\": {\n          \"type\": \"collapsible_row\",\n          \"settings\": {\n            \"heading\": \"Q9: What is the material of the Kobra X Combo's hotend nozzle?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eA: Hardened steel. Kobra X Combo comes pre-installed with a 0.4mm hardened steel nozzle. It also supports optional 0.25mm brass and 0.6mm \/ 0.8mm hardened steel nozzles.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_Qi6URJ\": {\n          \"type\": \"collapsible_row\",\n          \"settings\": {\n            \"heading\": \"Q10: Does the Kobra X Combo support a multilingual interface?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eA: Now supports Chinese, English, German, Russian, Spanish, French, Italian, Korean, Japanese, and Portuguese.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_EmJAyg\": {\n          \"type\": \"collapsible_row\",\n          \"disabled\": true,\n          \"settings\": {\n            \"heading\": \"Q11: How does the deposit voucher work?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eA: \u003cbr\u003e1. Validity Period: Valid from January 15, 2025, to March 31, 2026 (Applicable to Early Bird and Fantastic Weeks pricing tiers).\u003cbr\u003e2. Applicable Product: Valid only for the Anycubic Kobra X purchased on the Australia official store.\u003cbr\u003e3. Usage Limit: Only one deposit voucher can be applied per order.  \u003cbr\u003e4. One-Time Use: Each voucher is single-use only and will be void after redemption.\u003cbr\u003e5. Non-Transferable: The voucher is bound to the email address used to place the deposit and cannot be transferred to another user.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_bN3VT4\": {\n          \"type\": \"collapsible_row\",\n          \"disabled\": true,\n          \"settings\": {\n            \"heading\": \"Q12: Do I still get a warranty if I pre-order?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eOf course! All pre-order units include our full after-sales service and warranty. Your warranty period only starts the day you receive the printer, so you don't lose any time while waiting for delivery.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_4EyVaA\": {\n          \"type\": \"collapsible_row\",\n          \"disabled\": true,\n          \"settings\": {\n            \"heading\": \"Q13: Where can I track my order status?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eThis page will contain your shipment info. You can also log into your account or contact our 24\/7 \u003ca href='\\\"https:\/\/www.anycubic.com\/en\/SupportCenter\/HelpForm\\\"' title='\\\"https:\/\/www.anycubic.com\/en\/SupportCenter\/HelpForm\\\"'\u003eCustomer Service\u003c\/a\u003e for a status update.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_tEzycD\": {\n          \"type\": \"collapsible_row\",\n          \"disabled\": true,\n          \"settings\": {\n            \"heading\": \"Q14: I'm ready to print! Where should I start?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003eVisit \u003ca href='\\\"https:\/\/www.makeronline.com\/en\/\\\"' title='\\\"https:\/\/www.makeronline.com\/en\/\\\"'\u003eMakeronline\u003c\/a\u003e! You can browse over 100,000 ready-to-print designs. The Kobra X supports one-click printing with pre-optimized profiles for the best results right out of the box.\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        },\n        \"collapsible_row_jkrFxX\": {\n          \"type\": \"collapsible_row\",\n          \"disabled\": true,\n          \"settings\": {\n            \"heading\": \"Q15: What do the [1][2][3][4][5] annotations in the product details mean?\",\n            \"icon\": \"none\",\n            \"row_content\": \"\u003cp\u003e‌[1] Supports multicolor filament system for creations with 4+ colors, minimizing material waste; actual time savings may vary depending on user operation and environmental conditions.\u003cbr\u003e[2] Under ambient conditions of 25°C \/ 60% RH, the printer maintained good print quality during a continuous 24-hour test using PLA+PVA. It also supports multi-material printing with PLA+TPU (68D) at maximum settings. Data sourced from Anycubic Lab.\u003cbr\u003e[3] The top-mounted spool holder and filament form a natural damping system that absorbs vibrations, effectively minimizing machine oscillation during printing for improved results.\u003cbr\u003e[4] The noise level data above was measured by Anycubic Lab at 1 meter in front of the printer. Minor variations between measured and advertised noise levels are normal due to unit-to-unit differences.\u003cbr\u003e[5] Data provided by Anycubic Lab\u003c\/p\u003e\",\n            \"page\": \"\"\n          }\n        }\n      },\n      \"block_order\": [\n        \"collapsible_row_xRYPrU\",\n        \"collapsible_row_9xegGi\",\n        \"collapsible_row_U6ACzi\",\n        \"collapsible_row_7tGhNg\",\n        \"collapsible_row_xBK9U3\",\n        \"collapsible_row_VV9Di8\",\n        \"collapsible_row_NAfPeY\",\n        \"collapsible_row_86fKJf\",\n        \"collapsible_row_4QMnTP\",\n        \"collapsible_row_Qi6URJ\",\n        \"collapsible_row_EmJAyg\",\n        \"collapsible_row_bN3VT4\",\n        \"collapsible_row_4EyVaA\",\n        \"collapsible_row_tEzycD\",\n        \"collapsible_row_jkrFxX\"\n      ],\n      \"name\": \"YG FAQ\",\n      \"settings\": {\n        \"section_width\": \"grid\",\n        \"title\": \"FAQs\",\n        \"subtitle\": \"\",\n        \"heading_size\": \"h2\",\n        \"enable_section_box_layout\": true,\n        \"color_scheme\": \"\",\n        \"open_first_collapsible_row\": false,\n        \"open_all_collapsible_row\": false,\n        \"hide_image_on_mobile\": false,\n        \"image_ratio\": \"adapt\",\n        \"desktop_layout\": \"image_second\",\n        \"block_title_size\": \"text-base\",\n        \"padding_top\": 80,\n        \"padding_bottom\": 80\n      }\n    }\n  },\n  \"order\": [\n    \"main\",\n    \"yg_anchor_tab_WHGK7n\",\n    \"video_HbrBV3\",\n    \"yg_image_list_dNVcBE\",\n    \"yg_image_switch_Mbnkk4\",\n    \"rich_text_4hyyiq\",\n    \"yg_slideshow_iY7dNR\",\n    \"yg_image_list_xLtBUq\",\n    \"custom_liquid_MJgjd8\",\n    \"custom_liquid_nnnxiF\",\n    \"custom_liquid_dDzryf\",\n    \"rich_text_thziCb\",\n    \"image_banner_CVdJgG\",\n    \"multicolumn_Rr4jf9\",\n    \"custom_liquid_AjEbGr\",\n    \"yg_grid_box_qRRtyf\",\n    \"image_with_text_A8MXrT\",\n    \"image_with_text_bytyDX\",\n    \"yg_download_grid_KPrBW3\",\n    \"rich_text_mdmErc\",\n    \"image_with_text_7NAA8U\",\n    \"yg_product_info_EjrzM7\",\n    \"yg_product_compare_7McVtW\",\n    \"1750386499b189b208\",\n    \"yg_faq_LmBi6m\"\n  ]\n}\n","brand":"ANYCUBIC","offers":[{"title":"Kobra X Combo (7 色) \/ 無","offer_id":48610739716352,"sku":"KBXCWH0A+ACC-R","price":78799.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo (7 色) \/ +PLA*4","offer_id":48610739749120,"sku":"KBXCWH0A+4HPL-R","price":87298.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo (7 色) \/ +PETG*4","offer_id":48610739781888,"sku":"KBXCWH0A+4HPE-R","price":86498.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo (7 色) \/ +PLA High Speed*4","offer_id":48610739814656,"sku":"KBXCWH0A+4HHS-R","price":87498.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo (7 色) \/ +PLA Special*4","offer_id":48610739880192,"sku":"KBXCWH0A+4HPT-R","price":87298.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo + ACE 2 Pro*1 (11 色) \/ 無","offer_id":48610740011264,"sku":"KBXCWH0A+DS20BK2A-R","price":113398.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo + ACE 2 Pro*1 (11 色) \/ +PLA*4","offer_id":48610740044032,"sku":"KBXCWH0A+4HPL+DS20BK2A-R","price":121897.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo + ACE 2 Pro*1 (11 色) \/ +PETG*4","offer_id":48610740076800,"sku":"KBXCWH0A+4HPE+DS20BK2A-R","price":121097.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo + ACE 2 Pro*1 (11 色) \/ +PLA High Speed*4","offer_id":48610740109568,"sku":"KBXCWH0A+4HHS+DS20BK2A-R","price":122097.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo + ACE 2 Pro*1 (11 色) \/ +PLA Special*4","offer_id":48610740175104,"sku":"KBXCWH0A+4HPT+DS20BK2A-R","price":121897.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo + ACE 2 Pro*3 (19 色) \/ 無","offer_id":48610740306176,"sku":"KBXCWH0A+3DS20BK2A-R","price":182596.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo + ACE 2 Pro*3 (19 色) \/ +PLA*4","offer_id":48610740338944,"sku":"KBXCWH0A+4HPL+3DS20BK2A-R","price":191095.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo + ACE 2 Pro*3 (19 色) \/ +PETG*4","offer_id":48610740371712,"sku":"KBXCWH0A+4HPE+3DS20BK2A-R","price":190295.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo + ACE 2 Pro*3 (19 色) \/ +PLA High Speed*4","offer_id":48610740404480,"sku":"KBXCWH0A+4HHS+3DS20BK2A-R","price":191295.0,"currency_code":"JPY","in_stock":true},{"title":"Kobra X Combo + ACE 2 Pro*3 (19 色) \/ +PLA Special*4","offer_id":48610740470016,"sku":"KBXCWH0A+4HPT+3DS20BK2A-R","price":191095.0,"currency_code":"JPY","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0819\/9343\/3344\/files\/KXC-1-JP.jpg?v=1788937989","url":"https:\/\/anycubic.jp\/products\/kobra-x-combo-3d-printer","provider":"ANYCUBIC-JP","version":"1.0","type":"link"}