{
  "version": 3,
  "sources": ["/cdn/shop/t/10/assets/certnz-home-v2.js?fix=20260706-home-search"],
  "sourcesContent": ["// ===== CONFIG =====\nconst CONFIG = {\n    LINZ_PROXY_URL: 'https://jtzbdneomwacqwvaqlbt.supabase.co/functions/v1/linz-property-search',\n    STORE_URL: 'https://certificateoftitle.nz',\n    PRODUCTS: {\n        record:      { variantId:'42338771468427', name:'Record of Title',    price:'$42.90', handle:'record-of-title-current-with-diagram' },\n        guaranteed:  { variantId:'42344182284427', name:'Guaranteed Search',  price:'$45.90', handle:'record-of-title-guaranteed-search' },\n        historical:  { variantId:'42344192278667', name:'Historical Title',   price:'$42.90', handle:'record-of-title-historical' },\n        instruments: { variantId:'42382781186187', name:'Instruments',        price:'$39.90', handle:'instruments-document' },\n        package:     { variantId:'42344216461451', name:'Diligence Package',  price:'$189.90', handle:'pre-purchase-diligence-package' },\n        legal:       { variantId:'42344214659211', name:'Legal Owner Search', price:'$65.90', handle:'legal-owner-search' },\n        survey:      { variantId:'42344210792587', name:'Survey Plans',       price:'$49.90', handle:'cadastral-survey-plan-title-sheet' },\n        expert:      { variantId:'42344219377803', name:'Expert Advice',      price:'$129.00', handle:'expert-advice' }\n    }\n};\n\nfunction linzUrl(resource, params) {\n    const url = new URL(CONFIG.LINZ_PROXY_URL);\n    url.searchParams.set('resource', resource);\n    Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined && value !== null && value !== '') url.searchParams.set(key, value);\n    });\n    return url.toString();\n}\n\n// ===== STATE =====\nlet selectedAddress = null, currentTitleRef = null, currentLegalDesc = null;\nlet propertyMap = null, parcelLayer = null, currentMarker = null;\nlet selectedParcelLayer = null, searchTimeout = null;\n\n// ===== LIVE COUNTER =====\nfunction updateOrders() {\n    const ordersCount = document.getElementById('ordersCount');\n    if (!ordersCount) return;\n    const h = new Date().getHours(), m = new Date().getMinutes();\n    const max = 232;\n    if (h < 6)  { ordersCount.textContent = '0'; return; }\n    if (h >= 22){ ordersCount.textContent = max; return; }\n    const progress = ((h - 6) * 60 + m) / (16 * 60);\n    const count = Math.min(max, Math.max(0, Math.floor(progress * max) + Math.floor(Math.random()*8) - 4));\n    ordersCount.textContent = count;\n}\nupdateOrders(); setInterval(updateOrders, 60000);\n\n// ===== ADDRESS SEARCH =====\nconst addrInput = document.getElementById('addressInput');\nconst dropdown  = document.getElementById('autocompleteDropdown');\nconst panel     = document.getElementById('propertyPanel');\n\n// Detect if input looks like a title reference\nfunction isTitleRef(q) {\n    // Patterns: SA64D/927, CT 1A/123, NA123/456, 123456, SA123, WN12A/345\n    return /^[A-Za-z]{1,3}\\s?\\d/i.test(q) || /^\\d{4,}$/.test(q);\n}\n\naddrInput.addEventListener('input', function() {\n    const q = this.value.trim();\n    clearTimeout(searchTimeout);\n    if (q.length < 2) { dropdown.classList.remove('show'); return; }\n    if (isTitleRef(q)) {\n        searchTimeout = setTimeout(() => searchTitleRef(q), 300);\n    } else {\n        if (q.length < 3) { dropdown.classList.remove('show'); return; }\n        searchTimeout = setTimeout(() => searchAddr(q), 300);\n    }\n});\naddrInput.addEventListener('focus', function() {\n    if (dropdown.children.length && this.value.length >= 3) dropdown.classList.add('show');\n});\ndocument.addEventListener('click', e => {\n    if (!e.target.closest('.search-input-wrapper')) dropdown.classList.remove('show');\n});\n\nasync function searchAddr(query) {\n    dropdown.innerHTML = '<div style=\"padding:16px;color:#999;text-align:center;font-size:13px\">Searching...</div>';\n    dropdown.classList.add('show');\n    try {\n        const url = linzUrl('addresses', { q: query });\n        const res = await fetch(url);\n        const data = await res.json();\n        const addrs = data.features.map(f => ({\n            address_id: f.properties.address_id,\n            full_address: f.properties.full_address,\n            territorial_authority: f.properties.territorial_authority,\n            lng: f.geometry.coordinates[0], lat: f.geometry.coordinates[1]\n        }));\n        if (!addrs.length) {\n            dropdown.innerHTML = '<div style=\"padding:16px;color:#999;text-align:center;font-size:13px\">No addresses found</div>';\n            return;\n        }\n        dropdown.innerHTML = addrs.map((a, i) => `\n            <div class=\"autocomplete-item\" onclick=\"selectAddr(${i})\">\n                <div class=\"address\">${a.full_address}</div>\n                <div class=\"locality\">${a.territorial_authority || ''}</div>\n            </div>`).join('');\n        window.addrResults = addrs;\n    } catch (e) {\n        console.error(e);\n        dropdown.innerHTML = '<div style=\"padding:16px;color:#e33;text-align:center;font-size:13px\">Search error. Try again.</div>';\n    }\n}\n\n// ===== TITLE REFERENCE SEARCH =====\nasync function searchTitleRef(query) {\n    dropdown.innerHTML = '<div style=\"padding:16px;color:#999;text-align:center;font-size:13px\">Searching titles...</div>';\n    dropdown.classList.add('show');\n    try {\n        const url = linzUrl('titles', { q: query });\n        const res = await fetch(url);\n        const data = await res.json();\n        const titles = data.features.map(f => ({\n            title_no: f.properties.title_no,\n            type: f.properties.type || '',\n            status: f.properties.status || '',\n            survey: f.properties.survey_reference || '',\n            geometry: f.geometry\n        }));\n        if (!titles.length) {\n            dropdown.innerHTML = '<div style=\"padding:16px;color:#999;text-align:center;font-size:13px\">No titles found. Try address search instead.</div>';\n            return;\n        }\n        dropdown.innerHTML = titles.map((t, i) => `\n            <div class=\"autocomplete-item\" onclick=\"selectTitle(${i})\">\n                <div class=\"address\" style=\"font-weight:600\">\uD83D\uDCC4 ${t.title_no}</div>\n                <div class=\"locality\">${t.type}${t.status ? ' \u2014 ' + t.status : ''}</div>\n            </div>`).join('');\n        window.titleResults = titles;\n    } catch (e) {\n        console.error(e);\n        dropdown.innerHTML = '<div style=\"padding:16px;color:#e33;text-align:center;font-size:13px\">Search error. Try again.</div>';\n    }\n}\n\nfunction selectTitle(i) {\n    const t = window.titleResults[i];\n    addrInput.value = t.title_no;\n    dropdown.classList.remove('show');\n    currentTitleRef = t.title_no;\n\n    // Find center of title geometry to show on map\n    if (t.geometry) {\n        let coords;\n        if (t.geometry.type === 'MultiPolygon') {\n            coords = t.geometry.coordinates[0][0];\n        } else if (t.geometry.type === 'Polygon') {\n            coords = t.geometry.coordinates[0];\n        } else {\n            coords = [t.geometry.coordinates];\n        }\n        // Calculate centroid\n        let latSum = 0, lngSum = 0;\n        coords.forEach(c => { lngSum += c[0]; latSum += c[1]; });\n        const lat = latSum / coords.length;\n        const lng = lngSum / coords.length;\n\n        // Create a fake address object to show on map\n        const fakeAddr = {\n            full_address: t.title_no + ' (' + t.type + ')',\n            territorial_authority: t.status,\n            lat: lat,\n            lng: lng\n        };\n        selectedAddress = fakeAddr;\n        showPanel(fakeAddr);\n    }\n\n    // Store title ref\n    try {\n        localStorage.setItem('certnz_titleRef', t.title_no);\n        localStorage.setItem('selectedTitleRef', t.title_no);\n        localStorage.setItem('certnz_timestamp', Date.now().toString());\n    } catch(e) {}\n}\n\nfunction selectAddr(i) {\n    const a = window.addrResults[i];\n    selectedAddress = a;\n    addrInput.value = a.full_address;\n    dropdown.classList.remove('show');\n    showPanel(a);\n}\n\ndocument.getElementById('searchBtn').addEventListener('click', () => {\n    if (selectedAddress) { showPanel(selectedAddress); return; }\n    const q = addrInput.value.trim();\n    if (isTitleRef(q)) {\n        if (window.titleResults?.length) { selectTitle(0); return; }\n        if (q.length >= 2) searchTitleRef(q).then(() => { if (window.titleResults?.length) selectTitle(0); });\n    } else {\n        if (window.addrResults?.length) { selectAddr(0); return; }\n        if (q.length >= 3) searchAddr(q).then(() => { if (window.addrResults?.length) selectAddr(0); });\n    }\n});\naddrInput.addEventListener('keypress', e => { if (e.key === 'Enter') document.getElementById('searchBtn').click(); });\n\n// ===== PROPERTY PANEL =====\nasync function showPanel(addr) {\n    panel.classList.add('show');\n    document.getElementById('propAddress').textContent = addr.full_address;\n    document.getElementById('propDistrict').textContent = addr.territorial_authority || '\u2014';\n    document.getElementById('titleRefValue').textContent = '...';\n    document.getElementById('propArea').textContent = '\u2014';\n    document.getElementById('propType').textContent = '\u2014';\n    document.getElementById('propStatus').textContent = '\u2014';\n    document.getElementById('propLegal').textContent = '';\n    document.getElementById('titleBadge').classList.remove('golden');\n\n    if (!propertyMap) {\n        propertyMap = L.map('propertyMap', { attributionControl:true, scrollWheelZoom:false }).setView([addr.lat, addr.lng], 18);\n        \n        // Create both tile layers\n        const streetLayer = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {\n            maxZoom: 19,\n            attribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n        });\n        const satelliteLayer = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {\n            maxZoom: 19,\n            attribution: 'Tiles &copy; Esri'\n        });\n        \n        // Add street layer by default\n        streetLayer.addTo(propertyMap);\n        \n        // Add toggle button\n        const toggleControl = L.control({ position: 'topright' });\n        toggleControl.onAdd = function() {\n            const div = L.DomUtil.create('div', 'leaflet-control-custom');\n            div.innerHTML = '<button id=\"mapToggle\" style=\"background:#fff;border:2px solid #dae0e7;border-radius:10px;padding:6px 12px;font-size:13px;font-weight:600;cursor:pointer;transition:all 0.2s;box-shadow:0 1px 3px rgba(0,0,0,.08);display:flex;align-items:center;gap:6px;color:#1e2328;font-family:Inter,-apple-system,sans-serif;\" onmouseover=\"this.style.borderColor=\\'#2d7d6e\\';this.style.boxShadow=\\'0 2px 8px rgba(45,125,110,.18)\\'\" onmouseout=\"this.style.borderColor=\\'#dae0e7\\';this.style.boxShadow=\\'0 1px 3px rgba(0,0,0,.08)\\'\"><span id=\"mapIcon\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#2d7d6e\" stroke-width=\"2\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"/><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\"/><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"/><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\"/></svg></span> <span id=\"mapLabel\">Map</span></button>';\n            \n            L.DomEvent.disableClickPropagation(div);\n            \n            div.querySelector('#mapToggle').addEventListener('click', function() {\n                const isSatellite = propertyMap.hasLayer(satelliteLayer);\n                const button = this;\n                const icon = button.querySelector('#mapIcon');\n                const label = button.querySelector('#mapLabel');\n                \n                if (isSatellite) {\n                    // Switch to street map\n                    propertyMap.removeLayer(satelliteLayer);\n                    propertyMap.addLayer(streetLayer);\n                    icon.innerHTML = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#2d7d6e\" stroke-width=\"2\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"/><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\"/><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"/><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\"/></svg>';\n                    label.textContent = 'Map';\n                } else {\n                    // Switch to satellite\n                    propertyMap.removeLayer(streetLayer);\n                    propertyMap.addLayer(satelliteLayer);\n                    icon.innerHTML = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#2d7d6e\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M2 12h20\"/><path d=\"M12 2a15 15 0 0 1 4 10 15 15 0 0 1-4 10 15 15 0 0 1-4-10A15 15 0 0 1 12 2z\"/></svg>';\n                    label.textContent = 'Satellite';\n                }\n            });\n            \n            return div;\n        };\n        toggleControl.addTo(propertyMap);\n        \n        propertyMap.on('moveend', () => { if (propertyMap.getZoom() >= 16) loadParcels(); });\n        propertyMap.on('zoomend', updateZoom);\n    } else {\n        propertyMap.setView([addr.lat, addr.lng], 18);\n    }\n    if (currentMarker) propertyMap.removeLayer(currentMarker);\n    currentMarker = L.marker([addr.lat, addr.lng]).addTo(propertyMap);\n    setTimeout(() => { propertyMap.invalidateSize(); loadParcels(); }, 100);\n    panel.scrollIntoView({ behavior:'smooth', block:'center' });\n}\n\nfunction updateZoom() {\n    const hint = document.getElementById('zoomHint');\n    if (propertyMap.getZoom() < 16) {\n        hint.classList.add('show');\n        if (parcelLayer) { propertyMap.removeLayer(parcelLayer); parcelLayer = null; }\n    } else hint.classList.remove('show');\n}\n\nfunction focusedParcelBbox(lng, lat) {\n    const delta = 0.0001;\n    return `${lng - delta},${lat - delta},${lng + delta},${lat + delta}`;\n}\n\nasync function loadParcels() {\n    if (propertyMap.getZoom() < 16) { updateZoom(); return; }\n    const b = propertyMap.getBounds();\n    const bbox = `${b.getWest()},${b.getSouth()},${b.getEast()},${b.getNorth()}`;\n    try {\n        const url = linzUrl('parcels', { bbox });\n        const data = await (await fetch(url)).json();\n        if (currentMarker) {\n            const ll = currentMarker.getLatLng();\n            const focusUrl = linzUrl('parcels', { bbox: focusedParcelBbox(ll.lng, ll.lat) });\n            const focusData = await (await fetch(focusUrl)).json();\n            const existingIds = new Set((data.features || []).map(feature => feature.properties?.id));\n            (focusData.features || []).forEach(feature => {\n                if (!existingIds.has(feature.properties?.id)) data.features.push(feature);\n            });\n        }\n        if (parcelLayer) propertyMap.removeLayer(parcelLayer);\n        if (data.features) data.features.sort((a,b) => (parseFloat(b.properties.calc_area)||999999999) - (parseFloat(a.properties.calc_area)||999999999));\n        parcelLayer = L.geoJSON(data, {\n            style: f => {\n                const a = parseFloat(f.properties.calc_area)||0;\n                return a > 10000\n                    ? { color:'#bbb', weight:1, fillColor:'#bbb', fillOpacity:.03 }\n                    : { color:'#0a0a0a', weight:1.5, fillColor:'#0a0a0a', fillOpacity:.04 };\n            },\n            onEachFeature: (f, layer) => {\n                layer.on('click', e => { L.DomEvent.stopPropagation(e); onParcel(f, layer); });\n                layer.on('mouseover', () => layer.setStyle({ fillOpacity:.1, weight:2 }));\n                layer.on('mouseout', () => {\n                    if (layer !== selectedParcelLayer) {\n                        const a = parseFloat(f.properties.calc_area)||0;\n                        layer.setStyle(a > 10000 ? { color:'#bbb',weight:1,fillOpacity:.03 } : { color:'#0a0a0a',weight:1.5,fillOpacity:.04 });\n                    }\n                });\n            }\n        }).addTo(propertyMap);\n\n        // FIX v2.3: Auto-select best parcel \u2014 prefer Primary with titles, skip Easements\n        if (currentMarker && data.features.length) {\n            const ll = currentMarker.getLatLng();\n            let best = null, bestF = null;\n            let fallbackBest = null, fallbackBestF = null;\n            parcelLayer.eachLayer(l => {\n                if (l.getBounds?.().contains(ll)) {\n                    const props = l.feature?.properties;\n                    const a = parseFloat(props?.calc_area)||0;\n                    const isEasement = props?.parcel_intent === 'Easement' || props?.topology_type === 'Secondary';\n                    const hasTitles = !!props?.titles;\n\n                    if (!isEasement && hasTitles) {\n                        // Primary parcel with direct title link = best candidate\n                        if (!best || a < (parseFloat(bestF?.properties?.calc_area)||999999999)) {\n                            best = l; bestF = l.feature;\n                        }\n                    } else if (!isEasement) {\n                        // Primary parcel without title = second choice\n                        if (!fallbackBest || a < (parseFloat(fallbackBestF?.properties?.calc_area)||999999999)) {\n                            fallbackBest = l; fallbackBestF = l.feature;\n                        }\n                    }\n                    // Easements are skipped entirely for auto-selection\n                }\n            });\n            const finalLayer = best || fallbackBest;\n            const finalFeature = bestF || fallbackBestF;\n            if (finalFeature && finalLayer) onParcel(finalFeature, finalLayer);\n        }\n    } catch (e) { console.error(e); }\n}\n\nasync function onParcel(feature, layer) {\n    const p = feature.properties;\n    const bounds = L.geoJSON(feature).getBounds();\n    const center = bounds.getCenter();\n\n    if (selectedParcelLayer) {\n        const a = parseFloat(selectedParcelLayer.feature?.properties?.calc_area)||0;\n        selectedParcelLayer.setStyle(a > 10000 ? { color:'#bbb',weight:1,fillOpacity:.03 } : { color:'#0a0a0a',weight:1.5,fillOpacity:.04 });\n    }\n    selectedParcelLayer = layer;\n    layer.setStyle({ color:'#0066ff', weight:3, fillColor:'#0066ff', fillOpacity:.08 });\n    document.getElementById('titleRefValue').textContent = '...';\n\n    try {\n        const addrUrl = linzUrl('addresses', { bbox: `${bounds.getWest()},${bounds.getSouth()},${bounds.getEast()},${bounds.getNorth()}` });\n        const addrData = await (await fetch(addrUrl)).json();\n        if (addrData.features?.length) {\n            const na = addrData.features[0].properties;\n            document.getElementById('propAddress').textContent = na.full_address || selectedAddress?.full_address || 'Unknown';\n            document.getElementById('propDistrict').textContent = na.territorial_authority || '\u2014';\n            addrInput.value = na.full_address || '';\n        }\n        // FIX v2.2: Use parcel's direct title link instead of BBOX query\n        // BBOX was returning titles from neighboring properties (confirmed bug)\n        // The parcels layer has a 'titles' field with accurate parcel-to-title mapping\n        let titleInfo = null;\n        if (p.titles) {\n            const titleNos = p.titles.split(',').map(t => t.trim()).filter(Boolean);\n            if (titleNos.length) {\n                try {\n                    const tUrl = linzUrl('titles', { titleNumbers: titleNos.join(',') });\n                    const tData = await (await fetch(tUrl)).json();\n                    const live = tData.features.filter(f => f.properties.status === 'LIVE');\n                    const freehold = live.filter(f => f.properties.type === 'Freehold');\n                    titleInfo = (freehold[0] || live[0] || tData.features[0])?.properties || null;\n                } catch(e) {\n                    // API failed but we still have the title number from parcel\n                    titleInfo = { title_no: titleNos[0], type: p.parcel_intent || '', status: '' };\n                }\n            }\n        }\n        // Fallback: BBOX query only when parcel has no direct title link\n        if (!titleInfo) {\n            const titles = await findTitles(bounds);\n            titleInfo = titles[0] || null;\n        }\n        currentTitleRef = titleInfo?.title_no || 'N/A';\n\n        // Persist to localStorage so product pages can pre-fill\n        try {\n            const addr = document.getElementById('propAddress')?.textContent || '';\n            if (addr && addr !== 'Loading...' && addr !== '\u2014') {\n                localStorage.setItem('certnz_address', addr);\n                localStorage.setItem('selectedAddress', addr);\n            }\n            if (currentTitleRef && currentTitleRef !== 'N/A') {\n                localStorage.setItem('certnz_titleRef', currentTitleRef);\n                localStorage.setItem('certnz_address', addr);\n                localStorage.setItem('selectedTitleRef', currentTitleRef);\n            }\n            if (currentLegalDesc) {\n                localStorage.setItem('certnz_legalDesc', currentLegalDesc);\n            }\n            localStorage.setItem('certnz_timestamp', Date.now().toString());\n        } catch(e) {}\n        currentLegalDesc = p.appellation || null;\n        document.getElementById('titleRefValue').textContent = currentTitleRef;\n        document.getElementById('titleBadge').classList.toggle('golden', currentTitleRef && currentTitleRef !== 'N/A');\n\n        let area = '\u2014';\n        if (p.calc_area) { const sqm = parseFloat(p.calc_area); area = sqm >= 10000 ? (sqm/10000).toFixed(2)+' ha' : sqm.toFixed(0)+' m\u00B2'; }\n        document.getElementById('propArea').textContent = area;\n        document.getElementById('propType').textContent = titleInfo?.type || p.parcel_intent || '\u2014';\n        document.getElementById('propStatus').textContent = titleInfo?.status || '\u2014';\n        document.getElementById('propLegal').textContent = p.appellation ? `Legal: ${p.appellation}` : '';\n        if (currentMarker) currentMarker.setLatLng(center);\n    } catch (e) {\n        console.error(e);\n        document.getElementById('titleRefValue').textContent = 'Error';\n    }\n}\n\nasync function findTitles(bounds) {\n    const bbox = `${bounds.getWest()},${bounds.getSouth()},${bounds.getEast()},${bounds.getNorth()}`;\n    const url = linzUrl('titles', { bbox });\n    const data = await (await fetch(url)).json();\n    return data.features.map(f => f.properties);\n}\n\n// ===== ADD TO CART =====\nfunction certnzAddToCart(productKey) {\n    const prod = CONFIG.PRODUCTS[productKey];\n    if (!prod || !prod.variantId) return;\n\n    // Get address from property panel, fallback to search input, then localStorage\n    let address = document.getElementById('propAddress')?.textContent || '';\n    if (!address || address === '\u2014' || address === 'Loading...' || address === 'Unknown') {\n        address = document.getElementById('addressInput')?.value || '';\n    }\n    if (!address) {\n        address = localStorage.getItem('certnz_address') || '';\n    }\n    const titleRef = currentTitleRef && currentTitleRef !== 'N/A' && currentTitleRef !== '...'\n        ? currentTitleRef\n        : (localStorage.getItem('certnz_titleRef') || localStorage.getItem('selectedTitleRef') || '');\n    const legalDesc = currentLegalDesc || localStorage.getItem('certnz_legalDesc') || '';\n    const manualLookup = (document.getElementById('manualLookupDetails')?.value || localStorage.getItem('certnz_manualLookup') || '').trim().slice(0, 220);\n\n    const properties = {};\n    if (address && address !== '\u2014' && address !== 'Loading...') properties['Property Address'] = address;\n    if (titleRef) properties['Title Reference'] = titleRef;\n    if (legalDesc) properties['Legal Description'] = legalDesc;\n    if (manualLookup) properties['Address Search Notes'] = manualLookup;\n\n    fetch('/cart/add.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({\n            id: prod.variantId,\n            quantity: 1,\n            properties: properties\n        })\n    })\n    .then(r => r.json())\n    .then(() => { window.location.href = '/cart'; })\n    .catch(err => {\n        console.error('Cart error:', err);\n        // Fallback: GET redirect\n        let url = '/cart/add?id=' + prod.variantId + '&quantity=1';\n        if (address && address !== '\u2014') url += '&properties[Property Address]=' + encodeURIComponent(address);\n        if (titleRef) url += '&properties[Title Reference]=' + encodeURIComponent(titleRef);\n        if (manualLookup) url += '&properties[Address Search Notes]=' + encodeURIComponent(manualLookup);\n        window.location.href = url;\n    });\n}\n\n// Product section buttons\ndocument.querySelectorAll('.panel-card-btn').forEach(btn => {\n    btn.addEventListener('click', function() {\n        if (!currentTitleRef || currentTitleRef === 'N/A' || currentTitleRef === '...') {\n            alert('Please select a property first by clicking on a parcel.');\n            return;\n        }\n        certnzAddToCart(this.dataset.product);\n    });\n});\n\n// Map panel \"Buy Now\" buttons \u2014 add to cart and go to cart\ndocument.querySelectorAll('.panel-card-buy').forEach(btn => {\n    btn.addEventListener('click', function(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        if (!currentTitleRef || currentTitleRef === 'N/A' || currentTitleRef === '...') {\n            const searchInput = document.getElementById('addressSearch');\n            if (searchInput) {\n                searchInput.scrollIntoView({ behavior: 'smooth', block: 'center' });\n                searchInput.focus();\n                searchInput.style.boxShadow = '0 0 0 3px rgba(4, 120, 87, 0.4)';\n                searchInput.setAttribute('placeholder', '\uD83D\uDC46 Type a property address first...');\n                setTimeout(() => {\n                    searchInput.style.boxShadow = '';\n                    searchInput.setAttribute('placeholder', 'Search property address...');\n                }, 3000);\n            }\n            return;\n        }\n        certnzAddToCart(this.dataset.product);\n    });\n});\n\n// ===== PRODUCTS SHOW ALL =====\nfunction toggleAllProducts() {\n    const more = document.getElementById('productsMore');\n    const premium = document.getElementById('productsPremium');\n    const btn = document.getElementById('showAllBtn');\n    const arrow = document.getElementById('showAllArrow');\n    const showing = more.classList.contains('show');\n    more.classList.toggle('show');\n    premium.classList.toggle('show');\n    btn.innerHTML = showing ? 'Show all 8 products <span id=\"showAllArrow\">\u2193</span>' : 'Show less <span id=\"showAllArrow\">\u2191</span>';\n}\n\n// ===== QUIZ =====\nfunction showQuizResult(el) {\n    const result = el.dataset.result;\n    document.getElementById('quizQuestions').style.display = 'none';\n    const map = { standard:'quizResultStandard', guaranteed:'quizResultGuaranteed', instruments:'quizResultInstruments', historical:'quizResultHistorical', package:'quizResultPackage' };\n    document.getElementById(map[result]).classList.add('show');\n}\nfunction resetQuiz() {\n    document.getElementById('quizQuestions').style.display = 'block';\n    document.querySelectorAll('.quiz-result').forEach(el => el.classList.remove('show'));\n}\n\n// ===== FAQ =====\nfunction toggleFaq(el) {\n    const item = el.parentElement;\n    const wasOpen = item.classList.contains('open');\n    document.querySelectorAll('.faq-item').forEach(i => i.classList.remove('open'));\n    if (!wasOpen) item.classList.add('open');\n}\n\n// ===== SMOOTH SCROLL =====\ndocument.querySelectorAll('a[href^=\"#\"]').forEach(a => {\n    a.addEventListener('click', function(e) {\n        e.preventDefault();\n        const t = document.querySelector(this.getAttribute('href'));\n        if (t) t.scrollIntoView({ behavior:'smooth', block:'start' });\n    });\n});\n\n// ===== STICKY CTA (show after scrolling past hero) =====\nif (window.innerWidth <= 768) {\n    const sticky = document.getElementById('stickyCta');\n    let stickyVisible = false;\n    window.addEventListener('scroll', () => {\n        const heroBottom = document.getElementById('hero').getBoundingClientRect().bottom;\n        if (heroBottom < 0 && !stickyVisible) { sticky.style.display = 'block'; stickyVisible = true; }\n        else if (heroBottom >= 0 && stickyVisible) { sticky.style.display = 'none'; stickyVisible = false; }\n    }, { passive:true });\n}\n\n// ===== EXIT INTENT =====\nlet exitShown = false;\ndocument.addEventListener('mouseout', e => {\n    if (e.clientY < 5 && !exitShown && !sessionStorage.getItem('exitDismissed')) {\n        document.getElementById('exitOverlay').classList.add('show');\n        exitShown = true;\n    }\n});\nfunction closeExit() {\n    document.getElementById('exitOverlay').classList.remove('show');\n    sessionStorage.setItem('exitDismissed', '1');\n}\ndocument.getElementById('exitOverlay').addEventListener('click', e => {\n    if (e.target === e.currentTarget) closeExit();\n});\n\nconsole.log('\uD83C\uDFE0 Certificate of Title NZ V2 \u2014 CRO Optimized');\n// v2.3 - BUGFIX: title lookup uses parcel.titles + auto-select skips Easements 2026-02-03\n"],
  "mappings": "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",
  "names": ["b"]
}
