{"job_id":"20260624212643-5bd684140efa","status":"done","id":"20260624212643-5bd684140efa","user_id":126,"page_id":4201,"html":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Flower Store<\/title>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        :root {\n            --primary: #d9467a;\n            --primary-light: #f472b6;\n            --primary-dark: #a21c4f;\n            --accent: #fbbf24;\n            --accent-light: #fde68a;\n            --bg: #fdf2f8;\n            --bg-alt: #fff1f2;\n            --surface: rgba(255, 255, 255, 0.75);\n            --surface-glass: rgba(255, 255, 255, 0.5);\n            --text: #1f1a1c;\n            --text-muted: #6b5b5f;\n            --border: rgba(217, 70, 122, 0.15);\n            --shadow: 0 8px 32px rgba(217, 70, 122, 0.08);\n            --shadow-hover: 0 16px 48px rgba(217, 70, 122, 0.15);\n            --radius: 20px;\n            --radius-sm: 12px;\n            --font: 'Segoe UI', system-ui, -apple-system, sans-serif;\n        }\n\n        body {\n            font-family: var(--font);\n            background: var(--bg);\n            color: var(--text);\n            min-height: 100vh;\n            line-height: 1.6;\n            overflow-x: hidden;\n        }\n\n        \/* Decorative background *\/\n        body::before {\n            content: '';\n            position: fixed;\n            top: -50%;\n            left: -50%;\n            width: 200%;\n            height: 200%;\n            background: radial-gradient(circle at 20% 30%, rgba(249, 168, 212, 0.12) 0%, transparent 50%),\n                        radial-gradient(circle at 80% 70%, rgba(251, 191, 36, 0.08) 0%, transparent 50%);\n            pointer-events: none;\n            z-index: 0;\n        }\n\n        #ai-store-root {\n            position: relative;\n            z-index: 1;\n            max-width: 1280px;\n            margin: 0 auto;\n            padding: 0 24px 60px;\n        }\n\n        \/* Header \/ Nav *\/\n        .store-header {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            padding: 20px 0;\n            border-bottom: 1px solid var(--border);\n            backdrop-filter: blur(12px);\n            background: var(--surface-glass);\n            margin-bottom: 48px;\n            border-radius: 0 0 var(--radius) var(--radius);\n            padding: 20px 32px;\n            position: sticky;\n            top: 0;\n            z-index: 10;\n        }\n\n        .store-logo {\n            display: flex;\n            align-items: center;\n            gap: 12px;\n            text-decoration: none;\n            color: var(--text);\n        }\n\n        .store-logo img {\n            height: 48px;\n            width: auto;\n            border-radius: 12px;\n            object-fit: contain;\n            transition: transform 0.3s ease;\n        }\n\n        .store-logo img:hover {\n            transform: scale(1.05);\n        }\n\n        .store-logo span {\n            font-size: 1.5rem;\n            font-weight: 700;\n            background: linear-gradient(135deg, var(--primary), var(--accent));\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n            background-clip: text;\n        }\n\n        .store-nav {\n            display: flex;\n            gap: 24px;\n            align-items: center;\n        }\n\n        .store-nav a {\n            text-decoration: none;\n            color: var(--text-muted);\n            font-weight: 500;\n            font-size: 0.95rem;\n            transition: color 0.3s ease;\n            position: relative;\n        }\n\n        .store-nav a::after {\n            content: '';\n            position: absolute;\n            bottom: -4px;\n            left: 0;\n            width: 0;\n            height: 2px;\n            background: var(--primary);\n            transition: width 0.3s ease;\n        }\n\n        .store-nav a:hover {\n            color: var(--primary);\n        }\n\n        .store-nav a:hover::after {\n            width: 100%;\n        }\n\n        \/* Hero Section *\/\n        .hero {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            gap: 48px;\n            padding: 48px 0 64px;\n            position: relative;\n        }\n\n        .hero::before {\n            content: '';\n            position: absolute;\n            top: -40px;\n            right: -40px;\n            width: 300px;\n            height: 300px;\n            background: radial-gradient(circle, rgba(249, 168, 212, 0.2), transparent 70%);\n            pointer-events: none;\n        }\n\n        .hero-content {\n            flex: 1;\n            max-width: 600px;\n        }\n\n        .hero-badge {\n            display: inline-block;\n            background: var(--primary);\n            color: white;\n            padding: 6px 16px;\n            border-radius: 50px;\n            font-size: 0.85rem;\n            font-weight: 600;\n            letter-spacing: 0.5px;\n            margin-bottom: 20px;\n            box-shadow: 0 4px 12px rgba(217, 70, 122, 0.3);\n            animation: fadeInUp 0.6s ease;\n        }\n\n        .hero h1 {\n            font-size: 3.5rem;\n            font-weight: 800;\n            line-height: 1.15;\n            margin-bottom: 20px;\n            background: linear-gradient(135deg, var(--primary-dark), var(--primary), var(--accent));\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n            background-clip: text;\n            animation: fadeInUp 0.6s ease 0.1s both;\n        }\n\n        .hero p {\n            font-size: 1.15rem;\n            color: var(--text-muted);\n            margin-bottom: 32px;\n            max-width: 480px;\n            animation: fadeInUp 0.6s ease 0.2s both;\n        }\n\n        .hero-cta {\n            display: inline-flex;\n            align-items: center;\n            gap: 12px;\n            background: linear-gradient(135deg, var(--primary), var(--primary-dark));\n            color: white;\n            padding: 16px 36px;\n            border-radius: 50px;\n            font-weight: 600;\n            font-size: 1rem;\n            text-decoration: none;\n            box-shadow: 0 8px 24px rgba(217, 70, 122, 0.3);\n            transition: all 0.3s ease;\n            animation: fadeInUp 0.6s ease 0.3s both;\n        }\n\n        .hero-cta:hover {\n            transform: translateY(-3px);\n            box-shadow: 0 12px 32px rgba(217, 70, 122, 0.4);\n        }\n\n        .hero-visual {\n            flex: 1;\n            max-width: 480px;\n            position: relative;\n        }\n\n        .hero-visual::before {\n            content: '';\n            display: block;\n            padding-bottom: 100%;\n            background: linear-gradient(135deg, var(--primary-light), var(--accent-light));\n            border-radius: 50%;\n            opacity: 0.15;\n            position: absolute;\n            width: 100%;\n            height: 100%;\n            transform: scale(0.9);\n        }\n\n        .hero-visual img {\n            width: 100%;\n            height: auto;\n            border-radius: var(--radius);\n            box-shadow: var(--shadow-hover);\n            object-fit: cover;\n            aspect-ratio: 1;\n            position: relative;\n            z-index: 1;\n            transition: transform 0.5s ease;\n        }\n\n        .hero-visual img:hover {\n            transform: scale(1.02);\n        }\n\n        \/* Section Headers *\/\n        .section-header {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            margin-bottom: 32px;\n            padding-top: 16px;\n        }\n\n        .section-header h2 {\n            font-size: 2rem;\n            font-weight: 700;\n            position: relative;\n        }\n\n        .section-header h2::after {\n            content: '';\n            position: absolute;\n            bottom: -8px;\n            left: 0;\n            width: 60px;\n            height: 4px;\n            background: linear-gradient(90deg, var(--primary), var(--accent));\n            border-radius: 4px;\n        }\n\n        .section-link {\n            color: var(--primary);\n            text-decoration: none;\n            font-weight: 600;\n            font-size: 0.95rem;\n            transition: color 0.3s ease;\n        }\n\n        .section-link:hover {\n            color: var(--primary-dark);\n        }\n\n        \/* Product Grid *\/\n        .product-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n            gap: 28px;\n            margin-bottom: 64px;\n        }\n\n        .product-card {\n            background: var(--surface);\n            backdrop-filter: blur(12px);\n            border-radius: var(--radius);\n            overflow: hidden;\n            border: 1px solid var(--border);\n            box-shadow: var(--shadow);\n            transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n            animation: fadeInUp 0.5s ease both;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .product-card:hover {\n            transform: translateY(-8px);\n            box-shadow: var(--shadow-hover);\n            border-color: var(--primary-light);\n        }\n\n        .product-card-image {\n            position: relative;\n            overflow: hidden;\n            aspect-ratio: 4\/3;\n            background: linear-gradient(135deg, #fce4ec, #f3e5f5);\n        }\n\n        .product-card-image img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            transition: transform 0.6s ease;\n        }\n\n        .product-card:hover .product-card-image img {\n            transform: scale(1.08);\n        }\n\n        .product-card-badge {\n            position: absolute;\n            top: 12px;\n            left: 12px;\n            background: var(--accent);\n            color: #1f1a1c;\n            padding: 4px 12px;\n            border-radius: 50px;\n            font-size: 0.75rem;\n            font-weight: 700;\n            letter-spacing: 0.3px;\n            box-shadow: 0 2px 8px rgba(0,0,0,0.1);\n        }\n\n        .product-card-body {\n            padding: 20px 20px 24px;\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .product-card-title {\n            font-size: 1.2rem;\n            font-weight: 700;\n            margin-bottom: 8px;\n            color: var(--text);\n        }\n\n        .product-card-desc {\n            font-size: 0.9rem;\n            color: var(--text-muted);\n            line-height: 1.5;\n            margin-bottom: 16px;\n            flex: 1;\n            display: -webkit-box;\n            -webkit-line-clamp: 3;\n            -webkit-box-orient: vertical;\n            overflow: hidden;\n        }\n\n        .product-card-footer {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            padding-top: 12px;\n            border-top: 1px solid var(--border);\n        }\n\n        .product-card-price {\n            font-size: 1.4rem;\n            font-weight: 800;\n            color: var(--primary-dark);\n        }\n\n        .product-card-price .currency {\n            font-size: 0.9rem;\n            font-weight: 600;\n            color: var(--text-muted);\n        }\n\n        .product-card-btn {\n            background: linear-gradient(135deg, var(--primary), var(--primary-dark));\n            color: white;\n            border: none;\n            padding: 10px 20px;\n            border-radius: 50px;\n            font-weight: 600;\n            font-size: 0.85rem;\n            cursor: pointer;\n            transition: all 0.3s ease;\n            box-shadow: 0 4px 12px rgba(217, 70, 122, 0.2);\n        }\n\n        .product-card-btn:hover {\n            transform: scale(1.05);\n            box-shadow: 0 6px 20px rgba(217, 70, 122, 0.35);\n        }\n\n        \/* CTA \/ Details Section *\/\n        .cta-section {\n            background: linear-gradient(135deg, var(--primary-dark), var(--primary));\n            border-radius: var(--radius);\n            padding: 56px 48px;\n            color: white;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            gap: 40px;\n            box-shadow: 0 16px 48px rgba(217, 70, 122, 0.2);\n            margin-top: 32px;\n            position: relative;\n            overflow: hidden;\n        }\n\n        .cta-section::before {\n            content: '';\n            position: absolute;\n            top: -50%;\n            right: -20%;\n            width: 400px;\n            height: 400px;\n            background: radial-gradient(circle, rgba(255,255,255,0.08), transparent 70%);\n            pointer-events: none;\n        }\n\n        .cta-content h3 {\n            font-size: 2rem;\n            font-weight: 700;\n            margin-bottom: 12px;\n        }\n\n        .cta-content p {\n            font-size: 1.05rem;\n            opacity: 0.9;\n            max-width: 480px;\n            line-height: 1.6;\n        }\n\n        .cta-button {\n            background: white;\n            color: var(--primary-dark);\n            padding: 16px 40px;\n            border-radius: 50px;\n            font-weight: 700;\n            font-size: 1rem;\n            text-decoration: none;\n            transition: all 0.3s ease;\n            white-space: nowrap;\n            box-shadow: 0 8px 24px rgba(0,0,0,0.15);\n        }\n\n        .cta-button:hover {\n            transform: translateY(-3px);\n            box-shadow: 0 12px 32px rgba(0,0,0,0.2);\n        }\n\n        \/* Store Info *\/\n        .store-info {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n            gap: 24px;\n            margin-top: 48px;\n            padding: 32px;\n            background: var(--surface);\n            backdrop-filter: blur(12px);\n            border-radius: var(--radius);\n            border: 1px solid var(--border);\n        }\n\n        .store-info-item {\n            display: flex;\n            align-items: center;\n            gap: 12px;\n            color: var(--text-muted);\n            font-size: 0.95rem;\n        }\n\n        .store-info-item strong {\n            color: var(--text);\n            font-weight: 600;\n        }\n\n        \/* Animations *\/\n        @keyframes fadeInUp {\n            from {\n                opacity: 0;\n                transform: translateY(30px);\n            }\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        .product-card:nth-child(1) { animation-delay: 0.05s; }\n        .product-card:nth-child(2) { animation-delay: 0.1s; }\n        .product-card:nth-child(3) { animation-delay: 0.15s; }\n        .product-card:nth-child(4) { animation-delay: 0.2s; }\n        .product-card:nth-child(5) { animation-delay: 0.25s; }\n        .product-card:nth-child(6) { animation-delay: 0.3s; }\n\n        \/* Responsive *\/\n        @media (max-width: 768px) {\n            #ai-store-root {\n                padding: 0 16px 40px;\n            }\n\n            .store-header {\n                padding: 16px 20px;\n                flex-direction: column;\n                gap: 12px;\n            }\n\n            .store-nav {\n                gap: 16px;\n                flex-wrap: wrap;\n                justify-content: center;\n            }\n\n            .hero {\n                flex-direction: column;\n                padding: 24px 0 40px;\n                gap: 32px;\n            }\n\n            .hero h1 {\n                font-size: 2.2rem;\n            }\n\n            .hero-visual {\n                max-width: 100%;\n            }\n\n            .hero-visual img {\n                aspect-ratio: 16\/9;\n            }\n\n            .product-grid {\n                grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n                gap: 20px;\n            }\n\n            .cta-section {\n                flex-direction: column;\n                text-align: center;\n                padding: 36px 24px;\n            }\n\n            .cta-content p {\n                max-width: 100%;\n            }\n\n            .store-info {\n                grid-template-columns: 1fr 1fr;\n                padding: 20px;\n            }\n        }\n\n        @media (max-width: 480px) {\n            .store-header {\n                padding: 12px 16px;\n            }\n\n            .store-logo span {\n                font-size: 1.2rem;\n            }\n\n            .hero h1 {\n                font-size: 1.8rem;\n            }\n\n            .product-grid {\n                grid-template-columns: 1fr;\n            }\n\n            .store-info {\n                grid-template-columns: 1fr;\n            }\n        }\n    <\/style>\n\n<script>window.AI_STORE_DATA_URL = \"\/page\/flowerstore\/ai-store-data\";<\/script>\n<\/head>\n<body>\n    <div id=\"ai-store-root\">\n        <!-- Header will be dynamically populated -->\n        <!-- Hero will be dynamically populated -->\n        <!-- Products will be dynamically populated -->\n        <!-- CTA will be dynamically populated -->\n        <!-- Store info will be dynamically populated -->\n    <\/div>\n\n    \n<script>(function(){if(!window.AI_STORE_DATA_URL){return;}fetch(window.AI_STORE_DATA_URL,{credentials:\"same-origin\"}).then(function(r){return r.json();}).then(function(data){window.__AI_STORE_DATA__=data;}).catch(function(){});})();<\/script>\n<script>\r\n(function(){\r\n    if (window.__AI_STORE_RUNTIME_RESCUE__) { return; }\r\n    window.__AI_STORE_RUNTIME_RESCUE__ = 1;\r\n\r\n    function esc(v){\r\n        return String(v == null ? '' : v).replace(\/[&<>\"']\/g, function(s){\r\n            return ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'})[s];\r\n        });\r\n    }\r\n\r\n    function text(v){\r\n        var s = String(v == null ? '' : v);\r\n        try {\r\n            var ta = document.createElement('textarea');\r\n            ta.innerHTML = s;\r\n            s = ta.value || s;\r\n        } catch (e) {}\r\n        return s.replace(\/<[^>]*>\/g, ' ').replace(\/\\s+\/g, ' ').trim();\r\n    }\r\n\r\n    function safeHtml(v){\r\n        var s = String(v == null ? '' : v);\r\n        if (!s) { return ''; }\r\n\r\n        try {\r\n            var ta = document.createElement('textarea');\r\n            ta.innerHTML = s;\r\n            s = ta.value || s;\r\n        } catch (e) {}\r\n\r\n        var tmp = document.createElement('div');\r\n        tmp.innerHTML = s;\r\n\r\n        var allowed = {\r\n            A: 1, B: 1, STRONG: 1, I: 1, EM: 1, U: 1,\r\n            P: 1, BR: 1, UL: 1, OL: 1, LI: 1, SPAN: 1, DIV: 1\r\n        };\r\n\r\n        var nodes = tmp.querySelectorAll('*');\r\n        for (var i = 0; i < nodes.length; i++) {\r\n            var node = nodes[i];\r\n            var tag = String(node.tagName || '').toUpperCase();\r\n            if (!allowed[tag]) {\r\n                var textNode = document.createTextNode(node.textContent || '');\r\n                if (node.parentNode) {\r\n                    node.parentNode.replaceChild(textNode, node);\r\n                }\r\n                continue;\r\n            }\r\n\r\n            var attrs = Array.prototype.slice.call(node.attributes || []);\r\n            for (var j = 0; j < attrs.length; j++) {\r\n                var attr = attrs[j];\r\n                var name = String(attr.name || '').toLowerCase();\r\n                if (tag === 'A' && name === 'href') {\r\n                    continue;\r\n                }\r\n                node.removeAttribute(attr.name);\r\n            }\r\n\r\n            if (tag === 'A') {\r\n                var href = String(node.getAttribute('href') || '').trim();\r\n                if (!\/^(https?:|mailto:|tel:|\\\/|#)\/i.test(href)) {\r\n                    node.setAttribute('href', '#');\r\n                }\r\n                node.setAttribute('target', '_blank');\r\n                node.setAttribute('rel', 'noopener noreferrer');\r\n            }\r\n        }\r\n\r\n        return String(tmp.innerHTML || '').trim();\r\n    }\r\n\r\n    function rootEl(){\r\n        return document.getElementById('ai-store-root');\r\n    }\r\n\r\n    function hasBrokenTemplateArtifacts(el){\r\n        if (!el) { return false; }\r\n\r\n        var html = String(el.innerHTML || '');\r\n        if (!html) { return false; }\r\n\r\n        \/\/ Detect un-evaluated template fragments such as \"+ esc(title) +\" or src=\"' + esc(logo) + '\".\r\n        if (\/(\\+\\s*esc\\s*\\()|(esc\\s*\\([^\\)]*\\)\\s*\\+)|([\"']\\s*\\+\\s*[a-zA-Z_$][\\w$]*\\s*\\+)\/i.test(html)) {\r\n            return true;\r\n        }\r\n\r\n        try {\r\n            var badImg = el.querySelector('img[src*=\"esc(\"]') || el.querySelector('img[src*=\"+ \"]') || el.querySelector('img[src*=\" +\"]') || el.querySelector('img[src*=\"+\"]');\r\n            if (badImg) {\r\n                return true;\r\n            }\r\n        } catch (e) {}\r\n\r\n        return false;\r\n    }\r\n\r\n    function hasRenderableContent(el){\r\n        if (!el) { return false; }\r\n        if (hasBrokenTemplateArtifacts(el)) { return false; }\r\n        var rawText = String(el.textContent || '').toLowerCase();\r\n        if (rawText.indexOf('loading products') !== -1 || rawText.indexOf('loading address') !== -1 || rawText.indexOf('loading email') !== -1) {\r\n            return false;\r\n        }\r\n        \/\/ Raw markup-like text in content means broken rendering, not valid UI.\r\n        if (\/(<\\\/?\\s*(ul|ol|li|a|strong|em|p|br)\\b|&lt;\\\/?\\s*(ul|ol|li|a|strong|em|p|br)\\b)\/i.test(rawText)) {\r\n            return false;\r\n        }\r\n        try {\r\n            if (el.querySelector('.ai-rescue-card,[data-product-id],.product-card,.product-item,[class*=\"product-card\"],[class*=\"product-item\"]')) {\r\n                return true;\r\n            }\r\n        } catch (e) {}\r\n        try {\r\n            if ((rawText.indexOf('products') !== -1 || rawText.indexOf('featured') !== -1)\r\n                && !el.querySelector('img,[class*=\"media\"],figure,.card,.product')) {\r\n                return false;\r\n            }\r\n        } catch (e2) {}\r\n        if (el.querySelector('img,video,canvas,svg,iframe,a,button,input,select,textarea,article,section,main')) {\r\n            return true;\r\n        }\r\n        var t = text(el.textContent || '');\r\n        return t.length > 300;\r\n    }\r\n\r\n    function pickImages(p){\r\n        var out = [];\r\n        if (!p || typeof p !== 'object') { return out; }\r\n        var list = [p.image1, p.image2, p.image3, p.image4, p.image];\r\n        if (Array.isArray(p.images)) {\r\n            list = list.concat(p.images);\r\n        }\r\n        for (var i = 0; i < list.length; i++) {\r\n            var val = String(list[i] || '').trim();\r\n            if (val && out.indexOf(val) === -1) {\r\n                out.push(val);\r\n            }\r\n        }\r\n        return out;\r\n    }\r\n\r\n    function ensureRoot(){\r\n        var el = rootEl();\r\n        if (el) { return el; }\r\n        el = document.createElement('div');\r\n        el.id = 'ai-store-root';\r\n        if (document.body) {\r\n            document.body.appendChild(el);\r\n        }\r\n        return el;\r\n    }\r\n\r\n    function renderFallback(data){\r\n        var root = ensureRoot();\r\n        if (!root || hasRenderableContent(root)) { return; }\r\n\r\n        var store = (data && data.store) || {};\r\n        var products = (data && data.products && Array.isArray(data.products))\r\n            ? data.products\r\n            : ((data && data.products_sample && Array.isArray(data.products_sample)) ? data.products_sample : []);\r\n        var logo = String(store.theme2_logo || store.logo || '').trim();\r\n        var title = text(store.title || store.name || 'Store');\r\n        var descHtml = safeHtml(store.description || '');\r\n        var contact = text(store.contact || store.business_contact || '');\r\n        var email = text(store.email || store.business_email || '');\r\n\r\n        var cards = '';\r\n        for (var i = 0; i < products.length; i++) {\r\n            var p = products[i] || {};\r\n            var name = text(p.product_name || p.name || p.title || ('Product ' + (i + 1)));\r\n            var pdHtml = safeHtml(p.product_description || p.description || p.body || '');\r\n            var price = text(p.price || 'Price on request');\r\n            var currency = text(p.currency || '');\r\n            var imgs = pickImages(p);\r\n            var img = imgs.length ? imgs[0] : '';\r\n            var productUrl = text(p.product_url || p.url || p.link || '');\r\n            var priceText = (currency ? (currency + ' ') : '') + price;\r\n\r\n            cards += '<article class=\"ai-rescue-card\">'\r\n                + '<div class=\"ai-rescue-media\">'\r\n                + (img ? ('<img src=\"' + esc(img) + '\" alt=\"' + esc(name) + '\">') : '<div class=\"ai-rescue-placeholder\">No image<\/div>')\r\n                + '<\/div>'\r\n                + '<div class=\"ai-rescue-body\">'\r\n                + '<h3>' + esc(name) + '<\/h3>'\r\n                + (pdHtml ? ('<div class=\"ai-rescue-rich\">' + pdHtml + '<\/div>') : '')\r\n                + '<div class=\"ai-rescue-price\">' + esc(priceText) + '<\/div>'\r\n                + (productUrl ? ('<a class=\"ai-rescue-link view-product-btn\" href=\"' + esc(productUrl) + '\">View product<\/a>') : '')\r\n                + '<\/div>'\r\n                + '<\/article>';\r\n        }\r\n\r\n        root.innerHTML = ''\r\n            + '<style id=\"ai-store-runtime-rescue-style\">'\r\n            + '.ai-rescue-wrap{max-width:1200px;margin:0 auto;padding:22px;font-family:Segoe UI,Tahoma,Arial,sans-serif;color:#16263f}'\r\n            + '.ai-rescue-head{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding:16px;border:1px solid #dfe8f6;border-radius:14px;background:#fff}'\r\n            + '.ai-rescue-brand{display:flex;align-items:center;gap:12px;min-width:0}'\r\n            + '.ai-rescue-brand img{width:68px;height:68px;object-fit:contain;border-radius:10px;border:1px solid #e5ecf8;background:#fff}'\r\n            + '.ai-rescue-title{margin:0;font-size:28px;line-height:1.2}'\r\n            + '.ai-rescue-desc{margin:6px 0 0;color:#4a5f7e}'\r\n            + '.ai-rescue-meta{display:flex;gap:8px;flex-wrap:wrap}'\r\n            + '.ai-rescue-chip{padding:6px 10px;border:1px solid #d8e4f6;border-radius:999px;background:#f6f9ff;font-size:12px;color:#2d4568}'\r\n            + '.ai-rescue-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin-top:16px}'\r\n            + '.ai-rescue-card{border:1px solid #dfe8f6;border-radius:14px;overflow:hidden;background:#fff;box-shadow:0 8px 22px rgba(9,33,70,.08)}'\r\n            + '.ai-rescue-media{height:180px;background:#f4f7fd;display:grid;place-items:center}'\r\n            + '.ai-rescue-media img{width:100%;height:100%;object-fit:cover}'\r\n            + '.ai-rescue-placeholder{font-size:12px;color:#6f84a2}'\r\n            + '.ai-rescue-body{padding:12px}'\r\n            + '.ai-rescue-body h3{margin:0 0 6px;font-size:18px}'\r\n            + '.ai-rescue-body p{margin:0 0 10px;color:#4a5f7e;font-size:13px;line-height:1.5}'\r\n            + '.ai-rescue-rich{margin:0 0 10px;color:#4a5f7e;font-size:13px;line-height:1.55}'\r\n            + '.ai-rescue-rich p{margin:0 0 8px}'\r\n            + '.ai-rescue-rich ul,.ai-rescue-rich ol{margin:0 0 8px 18px;padding:0}'\r\n            + '.ai-rescue-rich li{margin:0 0 4px}'\r\n            + '.ai-rescue-price{font-weight:700;color:#0f2d56;margin-bottom:10px}'\r\n            + '.ai-rescue-link{display:inline-block;padding:8px 12px;border-radius:999px;background:#e63946;color:#fff;text-decoration:none;font-size:12px;font-weight:700;box-shadow:0 6px 16px rgba(230,57,70,.25)}'\r\n            + '.ai-rescue-link:hover{background:#ff4d5a;color:#fff;text-decoration:none}'\r\n            + '.ai-rescue-empty{margin-top:16px;padding:14px;border:1px dashed #d5e2f5;border-radius:12px;background:#fff;color:#4a5f7e}'\r\n            + '@media (max-width:768px){.ai-rescue-title{font-size:22px}}'\r\n            + '<\/style>'\r\n            + '<div class=\"ai-rescue-wrap\">'\r\n            + '<header class=\"ai-rescue-head\">'\r\n            + '<div class=\"ai-rescue-brand\">'\r\n            + (logo ? ('<img src=\"' + esc(logo) + '\" alt=\"Store logo\">') : '')\r\n            + '<div>'\r\n            + '<h1 class=\"ai-rescue-title\">' + esc(title) + '<\/h1>'\r\n            + (descHtml ? ('<div class=\"ai-rescue-desc ai-rescue-rich\">' + descHtml + '<\/div>') : '')\r\n            + '<\/div>'\r\n            + '<\/div>'\r\n            + '<div class=\"ai-rescue-meta\">'\r\n            + (contact ? ('<span class=\"ai-rescue-chip\">' + esc(contact) + '<\/span>') : '')\r\n            + (email ? ('<span class=\"ai-rescue-chip\">' + esc(email) + '<\/span>') : '')\r\n            + '<\/div>'\r\n            + '<\/header>'\r\n            + (cards ? ('<section class=\"ai-rescue-grid\">' + cards + '<\/section>') : '<div class=\"ai-rescue-empty\">No products available yet.<\/div>')\r\n            + '<\/div>';\r\n    }\r\n\r\n    function run(){\r\n        var root = ensureRoot();\r\n        if (!root) { return; }\r\n        if (!window.AI_STORE_DATA_URL) { return; }\r\n        if (window.__AI_STORE_RESCUE_FETCH_INFLIGHT__) { return; }\r\n        if (window.__AI_STORE_RESCUE_FETCH_DONE__) { return; }\r\n\r\n        \/\/ If the page has already rendered normally, skip rescue work.\r\n        if (window.__storeLoaded && hasRenderableContent(root)) { return; }\r\n\r\n        \/\/ Reuse prefetched data when available to avoid race conditions where\r\n        \/\/ data is loaded but model-rendered UI never mounts.\r\n        if (window.__AI_STORE_DATA__) {\r\n            if (!hasRenderableContent(root)) {\r\n                renderFallback(window.__AI_STORE_DATA__ || {});\r\n            }\r\n            window.__AI_STORE_RESCUE_FETCH_DONE__ = 1;\r\n            return;\r\n        }\r\n\r\n        window.__AI_STORE_RESCUE_FETCH_INFLIGHT__ = 1;\r\n\r\n        fetch(window.AI_STORE_DATA_URL, {credentials:'same-origin'})\r\n            .then(function(r){ return r.json(); })\r\n            .then(function(data){\r\n                var target = ensureRoot();\r\n                if (!hasRenderableContent(target)) {\r\n                    renderFallback(data || {});\r\n                }\r\n                window.__AI_STORE_RESCUE_FETCH_DONE__ = 1;\r\n            })\r\n            .catch(function(){})\r\n            .finally(function(){\r\n                window.__AI_STORE_RESCUE_FETCH_INFLIGHT__ = 0;\r\n            });\r\n    }\r\n\r\n    if (document.readyState === 'loading') {\r\n        document.addEventListener('DOMContentLoaded', function(){\r\n            setTimeout(run, 450);\r\n        });\r\n    } else {\r\n        setTimeout(run, 450);\r\n    }\r\n})();\r\n<\/script>\n<script>\r\n(function(){\r\n    if (window.__AI_STORE_PRODUCT_SAFETY__) { return; }\r\n    window.__AI_STORE_PRODUCT_SAFETY__ = 1;\r\n\r\n    function esc(v){\r\n        return String(v == null ? '' : v).replace(\/[&<>\"']\/g, function(s){\r\n            return ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'})[s];\r\n        });\r\n    }\r\n\r\n    function text(v){\r\n        return String(v == null ? '' : v).replace(\/<[^>]*>\/g, ' ').replace(\/\\s+\/g, ' ').trim();\r\n    }\r\n\r\n    function safeRichHtml(v){\r\n        var s = String(v == null ? '' : v);\r\n        if (!s) { return ''; }\r\n\r\n        var tmp = document.createElement('div');\r\n        tmp.innerHTML = s;\r\n\r\n        var allowed = {\r\n            A: 1, B: 1, STRONG: 1, I: 1, EM: 1, U: 1,\r\n            P: 1, BR: 1, UL: 1, OL: 1, LI: 1, SPAN: 1, DIV: 1\r\n        };\r\n\r\n        var nodes = tmp.querySelectorAll('*');\r\n        for (var i = 0; i < nodes.length; i++) {\r\n            var node = nodes[i];\r\n            var tag = String(node.tagName || '').toUpperCase();\r\n            if (!allowed[tag]) {\r\n                var textNode = document.createTextNode(node.textContent || '');\r\n                if (node.parentNode) {\r\n                    node.parentNode.replaceChild(textNode, node);\r\n                }\r\n                continue;\r\n            }\r\n\r\n            var attrs = Array.prototype.slice.call(node.attributes || []);\r\n            for (var j = 0; j < attrs.length; j++) {\r\n                var attr = attrs[j];\r\n                var name = String(attr.name || '').toLowerCase();\r\n                if (tag === 'A' && name === 'href') {\r\n                    continue;\r\n                }\r\n                node.removeAttribute(attr.name);\r\n            }\r\n\r\n            if (tag === 'A') {\r\n                var href = String(node.getAttribute('href') || '').trim();\r\n                if (!\/^(https?:|mailto:|tel:|\\\/|#)\/i.test(href)) {\r\n                    node.setAttribute('href', '#');\r\n                }\r\n                node.setAttribute('target', '_blank');\r\n                node.setAttribute('rel', 'noopener noreferrer');\r\n            }\r\n        }\r\n\r\n        return String(tmp.innerHTML || '').trim();\r\n    }\r\n\r\n    function rootEl(){\r\n        return document.getElementById('ai-store-root');\r\n    }\r\n\r\n    function hasProductCards(root){\r\n        if (!root) { return false; }\r\n        var sel = '.ai-premium-card,.product-card,[data-product-card],article[class*=\"product\"],.product-item';\r\n        return !!root.querySelector(sel);\r\n    }\r\n\r\n    function hasLoadingPlaceholder(root){\r\n        if (!root) { return false; }\r\n        var t = String(root.textContent || '').toLowerCase();\r\n        return t.indexOf('loading inventory') >= 0 || t.indexOf('loading products') >= 0 || t.indexOf('loading catalog') >= 0;\r\n    }\r\n\r\n    function pickImages(p){\r\n        var out = [];\r\n        var list = [p && p.image1, p && p.image2, p && p.image3, p && p.image4, p && p.image];\r\n        if (Array.isArray(p && p.images)) {\r\n            list = list.concat(p.images);\r\n        }\r\n        for (var i = 0; i < list.length; i++) {\r\n            var val = String(list[i] || '').trim();\r\n            if (val && out.indexOf(val) === -1) {\r\n                out.push(val);\r\n            }\r\n        }\r\n        return out;\r\n    }\r\n\r\n    function pickContainer(root){\r\n        if (!root) { return null; }\r\n        var candidates = root.querySelectorAll('section,div,main,article');\r\n        for (var i = 0; i < candidates.length; i++) {\r\n            var el = candidates[i];\r\n            var t = String(el.textContent || '').toLowerCase();\r\n            if (t.indexOf('featured') >= 0 || t.indexOf('product') >= 0 || t.indexOf('inventory') >= 0 || t.indexOf('vehicle') >= 0) {\r\n                var grid = el.querySelector('[class*=\"grid\"],[class*=\"products\"],[class*=\"inventory\"],.row,ul');\r\n                return grid || el;\r\n            }\r\n        }\r\n        return root;\r\n    }\r\n\r\n    function ensureStyle(){\r\n        if (document.getElementById('ai-product-safety-style')) { return; }\r\n        var style = document.createElement('style');\r\n        style.id = 'ai-product-safety-style';\r\n        style.textContent = ''\r\n            + '.ai-product-safety-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-top:12px}'\r\n            + '.ai-product-safety-card{border:1px solid rgba(207,220,243,.45);border-radius:14px;overflow:hidden;background:rgba(12,20,36,.35);backdrop-filter:blur(2px)}'\r\n            + '.ai-product-safety-media{height:150px;background:rgba(255,255,255,.04);display:grid;place-items:center}'\r\n            + '.ai-product-safety-media img{width:100%;height:100%;object-fit:cover;display:block}'\r\n            + '.ai-product-safety-body{padding:12px}'\r\n            + '.ai-product-safety-title{margin:0 0 6px;font-size:16px;color:#fff}'\r\n            + '.ai-product-safety-desc{margin:0 0 8px;font-size:12px;line-height:1.45;color:#b7c5de}'\r\n            + '.ai-product-safety-desc p{margin:0 0 6px}'\r\n            + '.ai-product-safety-desc ul,.ai-product-safety-desc ol{margin:0 0 6px 18px;padding:0}'\r\n            + '.ai-product-safety-desc li{margin:0 0 3px}'\r\n            + '.ai-product-safety-price{font-weight:700;color:#ffd06b;font-size:15px}'\r\n            + '.ai-product-safety-actions{margin-top:8px}'\r\n            + '.ai-product-safety-link{display:inline-block;padding:8px 12px;border-radius:999px;background:#e63946;color:#fff;text-decoration:none;font-size:12px;font-weight:700;box-shadow:0 6px 16px rgba(230,57,70,.25)}'\r\n            + '.ai-product-safety-link:hover{background:#ff4d5a;color:#fff;text-decoration:none}';\r\n        document.head.appendChild(style);\r\n    }\r\n\r\n    function renderProducts(root, data){\r\n        var products = Array.isArray(data && data.products) ? data.products : [];\r\n        if (!products.length || !root) { return; }\r\n        if (root.getAttribute('data-ai-product-safety-rendered') === '1') { return; }\r\n\r\n        ensureStyle();\r\n\r\n        var cards = [];\r\n        for (var i = 0; i < products.length; i++) {\r\n            var p = products[i] || {};\r\n            var name = text(p.product_name || p.name || p.title || ('Product ' + (i + 1)));\r\n            var descHtml = safeRichHtml(p.product_description || p.description || p.body || '');\r\n            var price = text(p.price || 'Price on request');\r\n            var currency = text(p.currency || '');\r\n            var imgs = pickImages(p);\r\n            var img = imgs.length ? imgs[0] : '';\r\n            var productUrl = text(p.product_url || p.url || p.link || '');\r\n\r\n            cards.push(''\r\n                + '<article class=\"ai-product-safety-card\" data-product-card=\"1\">'\r\n                + '<div class=\"ai-product-safety-media\">' + (img ? ('<img src=\"' + esc(img) + '\" alt=\"' + esc(name) + '\">') : '<span style=\"color:#9db0ce;font-size:12px\">No image<\/span>') + '<\/div>'\r\n                + '<div class=\"ai-product-safety-body\">'\r\n                + '<h3 class=\"ai-product-safety-title\">' + esc(name || 'Product') + '<\/h3>'\r\n                + (descHtml ? ('<div class=\"ai-product-safety-desc\">' + descHtml + '<\/div>') : '')\r\n                + '<div class=\"ai-product-safety-price\">' + esc((currency ? currency + ' ' : '') + price) + '<\/div>'\r\n                + (productUrl ? ('<div class=\"ai-product-safety-actions\"><a class=\"ai-product-safety-link view-product-btn\" href=\"' + esc(productUrl) + '\" target=\"_blank\" rel=\"noopener noreferrer\">View product<\/a><\/div>') : '')\r\n                + '<\/div>'\r\n                + '<\/article>');\r\n        }\r\n\r\n        if (!cards.length) { return; }\r\n\r\n        var container = pickContainer(root);\r\n        if (!container) { container = root; }\r\n\r\n        var old = container.querySelector('.ai-product-safety-grid');\r\n        if (old) { old.remove(); }\r\n\r\n        var wrap = document.createElement('div');\r\n        wrap.className = 'ai-product-safety-grid';\r\n        wrap.innerHTML = cards.join('');\r\n        container.appendChild(wrap);\r\n\r\n        var countBadge = document.getElementById('product-count-badge');\r\n        if (countBadge) {\r\n            countBadge.textContent = String(products.length) + ' plans';\r\n        }\r\n\r\n        root.setAttribute('data-ai-product-safety-rendered', '1');\r\n    }\r\n\r\n    function run(){\r\n        if (!window.AI_STORE_DATA_URL) { return; }\r\n        var root = rootEl();\r\n        if (!root) { return; }\r\n        if (hasProductCards(root) && !hasLoadingPlaceholder(root)) { return; }\r\n\r\n        if (window.__AI_STORE_DATA__) {\r\n            renderProducts(root, window.__AI_STORE_DATA__ || {});\r\n            return;\r\n        }\r\n\r\n        fetch(window.AI_STORE_DATA_URL, {credentials:'same-origin'})\r\n            .then(function(r){ return r.json(); })\r\n            .then(function(data){\r\n                var fresh = rootEl();\r\n                if (!fresh) { return; }\r\n                if (hasProductCards(fresh) && !hasLoadingPlaceholder(fresh)) { return; }\r\n                renderProducts(fresh, data || {});\r\n            })\r\n            .catch(function(){});\r\n    }\r\n\r\n    if (document.readyState === 'loading') {\r\n        document.addEventListener('DOMContentLoaded', function(){\r\n            setTimeout(run, 500);\r\n            setTimeout(run, 1800);\r\n        });\r\n    } else {\r\n        setTimeout(run, 500);\r\n        setTimeout(run, 1800);\r\n    }\r\n})();\r\n<\/script>\n<\/body>\n<\/html>","duration_ms":37005,"finished_at":"2026-06-24T21:27:20-04:00","updated_at":"2026-06-24T21:27:20-04:00"}