{"id":132,"date":"2026-06-19T09:58:15","date_gmt":"2026-06-19T09:58:15","guid":{"rendered":"https:\/\/www.lockpro.io\/blog\/?page_id=132"},"modified":"2026-06-23T11:28:35","modified_gmt":"2026-06-23T11:28:35","slug":"free-shopify-store-analyzer","status":"publish","type":"page","link":"https:\/\/www.lockpro.io\/blog\/free-shopify-store-analyzer\/","title":{"rendered":"Free Shopify Store Analyzer (Pricing, Stock &amp; SEO Report)"},"content":{"rendered":"<div id=\"lp-xray-root\">\n  <style>\n    @import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&display=swap');\n\n    #lp-xray-root{\n      --ink:#1a1a1f; --sub:#6b6f76; --faint:#9498a0;\n      --paper:#ffffff; --surface:#fafafb; --mist:#f4f5f6;\n      --line:#e6e7ea; --line-2:#d9dbdf;\n      --green:#008060; --green-soft:#e6f4ef; --green-deep:#004c3f;\n      --amber:#b26b00; --amber-soft:#fbf1e0;\n      --red:#c4320a; --red-soft:#fbeae5;\n      --brand:#5b4ae0; --brand-soft:#ecebfb;\n      color:var(--ink);\n      font-family:'Inter',system-ui,-apple-system,sans-serif;\n      font-feature-settings:'cv05','ss01'; -webkit-font-smoothing:antialiased;\n      max-width:860px; margin:0 auto; padding:6px 0;\n    }\n    #lp-xray-root *{box-sizing:border-box;}\n    #lp-xray-root .tnum{font-variant-numeric:tabular-nums;}\n\n    .xc{background:var(--paper);border:1px solid var(--line);border-radius:18px;box-shadow:0 1px 2px rgba(20,20,30,.04);}\n    .pad{padding:26px 28px;}\n\n    .xeye{font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--green);margin:0 0 9px;}\n    .xh1{font-size:27px;line-height:1.12;font-weight:800;letter-spacing:-.02em;margin:0 0 8px;}\n    .xsub{font-size:15px;line-height:1.55;color:var(--sub);margin:0;max-width:54ch;}\n\n    .xform{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px;}\n    .xinput{flex:1;min-width:230px;height:52px;padding:0 16px;border:1px solid var(--line-2);border-radius:12px;\n      font-family:inherit;font-size:15px;color:var(--ink);background:var(--paper);outline:none;transition:.15s;}\n    .xinput:focus{border-color:var(--green);box-shadow:0 0 0 4px var(--green-soft);}\n    .xinput::placeholder{color:#a3a7ad;}\n    .xbtn{height:52px;padding:0 24px;border:none;border-radius:12px;background:var(--green);color:#fff;\n      font-family:inherit;font-weight:600;font-size:15px;cursor:pointer;display:inline-flex;align-items:center;gap:9px;transition:.12s;}\n    .xbtn:hover{background:#00735a;} .xbtn:active{transform:scale(.985);}\n    .xbtn[disabled]{opacity:.6;cursor:default;}\n    .xhint{font-size:13px;color:var(--sub);margin:13px 0 0;}\n    .xhint b{color:var(--green);cursor:pointer;font-weight:600;border-bottom:1px dashed var(--green);}\n    .xerr{font-size:14px;color:var(--red);margin:13px 0 0;line-height:1.5;display:none;}\n\n    .xscan{display:none;margin-top:24px;}\n    .xbar{height:4px;border-radius:4px;background:var(--mist);overflow:hidden;position:relative;}\n    .xbar::after{content:\"\";position:absolute;left:-40%;top:0;height:100%;width:40%;border-radius:4px;background:var(--green);animation:xsweep 1.05s ease-in-out infinite;}\n    @keyframes xsweep{to{left:100%}}\n    .xstatus{font-size:13.5px;color:var(--sub);margin-top:14px;min-height:18px;}\n\n    .xout{display:none;}\n    .xout.show{display:block;}\n    .xsec{margin-top:18px;animation:xrise .5s ease both;}\n    @keyframes xrise{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}\n\n    \/* hero *\/\n    .xhero-row{display:flex;align-items:center;justify-content:space-between;gap:22px;flex-wrap:wrap;}\n    .xhero-id{flex:1;min-width:240px;}\n    .xhrow{display:flex;align-items:center;gap:9px;margin-bottom:3px;}\n    .xfav{width:22px;height:22px;border-radius:5px;display:block;background:var(--mist);}\n    .xstore{font-size:13px;color:var(--green);font-weight:600;}\n    .xhero h2{font-size:24px;font-weight:800;letter-spacing:-.02em;margin:2px 0 6px;}\n    .xhero p{font-size:14.5px;color:var(--sub);margin:0 0 12px;}\n    .xpills{display:flex;gap:8px;flex-wrap:wrap;}\n    .xring{position:relative;flex:0 0 132px;width:132px;height:132px;}\n    .xring svg{width:132px;height:132px;transform:rotate(-90deg);display:block;}\n    .xring-t{fill:none;stroke:var(--line);stroke-width:9;}\n    .xring-f{fill:none;stroke:var(--rc);stroke-width:9;stroke-linecap:round;stroke-dasharray:289;stroke-dashoffset:289;transition:stroke-dashoffset 1.1s cubic-bezier(.22,1,.36,1);}\n    .xring-c{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;}\n    .xring-c span{font-weight:800;font-size:34px;line-height:1;color:var(--ink);}\n    .xring-c small{font-size:12px;color:var(--faint);margin-top:1px;}\n    .xring-c b{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--rc);margin-top:5px;}\n    .xscanned{font-size:12px;color:var(--faint);margin-top:14px;display:flex;align-items:center;gap:6px;}\n    .xscanned::before{content:\"\";width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 0 3px var(--green-soft);}\n    .xpill{font-size:12.5px;font-weight:600;padding:6px 12px;border-radius:999px;display:inline-flex;align-items:center;gap:6px;}\n    .xpill.g{background:var(--green-soft);color:var(--green-deep);}\n    .xpill.a{background:var(--amber-soft);color:var(--amber);}\n    .xpill.r{background:var(--red-soft);color:var(--red);}\n\n    .xstrip{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-top:20px;}\n    .xthumb{position:relative;border-radius:12px;overflow:hidden;background:var(--mist);aspect-ratio:1\/1;border:1px solid var(--line);}\n    .xthumb img{width:100%;height:100%;object-fit:cover;display:block;position:relative;z-index:1;}\n    .xthumb .xph{position:absolute;inset:0;display:grid;place-items:center;color:var(--faint);z-index:0;}\n    .xthumb .xcap{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(transparent,rgba(0,0,0,.62));color:#fff;font-size:11px;font-weight:500;padding:14px 8px 7px;line-height:1.2;}\n\n    \/* metric cards *\/\n    .xgrid4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}\n    .xmetric{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:15px 16px;}\n    .xmetric .ml{font-size:12px;color:var(--sub);font-weight:500;margin:0 0 7px;}\n    .xmetric .mv{font-size:23px;font-weight:700;letter-spacing:-.01em;line-height:1;}\n    .xmetric .mv small{font-size:13px;font-weight:500;color:var(--sub);}\n    .xmetric .mc{font-size:12px;font-weight:600;margin-top:6px;}\n    .mc.g{color:var(--green);} .mc.a{color:var(--amber);} .mc.r{color:var(--red);}\n\n    .xsec-h{display:flex;align-items:center;gap:9px;margin:0 0 4px;}\n    .xsec-h .ic{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;flex:0 0 30px;}\n    .xsec-h h3{font-size:17px;font-weight:700;letter-spacing:-.01em;margin:0;}\n    .xsec-note{font-size:13.5px;color:var(--sub);margin:2px 0 16px 39px;}\n\n    .xtwo{display:grid;grid-template-columns:1fr 1fr;gap:14px;}\n    .xstat-list{display:flex;flex-direction:column;gap:0;}\n    .xstat{display:flex;align-items:baseline;justify-content:space-between;padding:11px 0;border-top:1px solid var(--line);font-size:14px;}\n    .xstat:first-child{border-top:none;}\n    .xstat .k{color:var(--sub);} .xstat .v{font-weight:700;}\n    .xrec{display:flex;gap:12px;align-items:flex-start;padding:13px 0;border-top:1px solid var(--line);}\n    .xrec:first-of-type{border-top:none;}\n    .xrec-b{flex:0 0 auto;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:3px 10px;border-radius:999px;margin-top:1px;}\n    .xrec-t{font-size:14.5px;font-weight:600;margin:0 0 3px;letter-spacing:-.01em;}\n    .xrec-x{font-size:13.5px;color:var(--sub);margin:0;line-height:1.5;}\n    .xtier{margin-top:18px;}\n    .xtier-bar{display:flex;height:14px;border-radius:7px;overflow:hidden;background:var(--mist);}\n    .xtier-bar>div{height:100%;}\n    .xtier-leg{display:flex;flex-wrap:wrap;gap:14px;margin-top:12px;}\n    .xtier-leg span{font-size:12.5px;color:var(--sub);display:inline-flex;align-items:center;gap:6px;}\n    .xtier-leg i{width:10px;height:10px;border-radius:3px;display:inline-block;}\n    .xtier-cap{font-size:12.5px;color:var(--faint);margin:10px 0 0;}\n    .xbrow{display:flex;align-items:center;gap:10px;padding:5px 0;}\n    .xbn{flex:0 0 132px;font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}\n    .xbb{flex:1;height:8px;background:var(--mist);border-radius:5px;overflow:hidden;}\n    .xbb>span{display:block;height:100%;background:var(--green);border-radius:5px;}\n    .xbp{flex:0 0 38px;text-align:right;font-size:12.5px;font-weight:600;font-variant-numeric:tabular-nums;}\n    @media(max-width:680px){.xbn{flex-basis:92px;}}\n\n    \/* product highlight card *\/\n    .xprod{display:flex;gap:13px;align-items:center;border:1px solid var(--line);border-radius:14px;padding:11px;background:var(--paper);transition:.15s;text-decoration:none;color:inherit;}\n    .xprod:hover{border-color:var(--line-2);box-shadow:0 3px 10px rgba(20,20,30,.06);transform:translateY(-1px);}\n    .xprod .xpi{width:62px;height:62px;border-radius:10px;overflow:hidden;background:var(--mist);flex:0 0 62px;position:relative;}\n    .xprod .xpi img{width:100%;height:100%;object-fit:cover;position:relative;z-index:1;}\n    .xprod .xpi .xph{position:absolute;inset:0;display:grid;place-items:center;color:var(--faint);z-index:0;}\n    .xprod .xtag{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;margin:0 0 3px;}\n    .xprod .xnm{font-size:14px;font-weight:600;margin:0 0 3px;line-height:1.25;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;}\n    .xprod .xpr{font-size:13px;color:var(--sub);}\n    .xprod .xpr s{color:var(--faint);margin-right:5px;}\n    .xprod .xpr b{color:var(--green);font-weight:600;}\n\n    .xsold{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:14px;}\n    .xsold .xthumb .xcap{font-size:11px;}\n\n    .xtags{display:flex;flex-wrap:wrap;gap:7px;margin-top:4px;}\n    .xtags span{font-size:12.5px;background:var(--mist);color:var(--ink);padding:5px 11px;border-radius:8px;}\n\n    \/* lockpro cta *\/\n    .xcta{background:var(--ink);border-radius:16px;padding:26px 28px;color:#fff;margin-top:18px;}\n    .xcta .xeye{color:#b9b4f5;}\n    .xcta h3{font-size:20px;font-weight:700;letter-spacing:-.01em;margin:0 0 8px;color:#fff;}\n    .xcta p{font-size:14.5px;line-height:1.6;color:#c7c9d4;margin:0 0 18px;max-width:60ch;}\n    .xcta a{display:inline-flex;align-items:center;gap:8px;background:#fff;color:var(--ink);font-weight:600;font-size:15px;\n      text-decoration:none;padding:13px 22px;border-radius:11px;transition:.12s;}\n    .xcta a:hover{transform:translateY(-1px);}\n\n    .xrescan{display:block;margin:20px auto 4px;background:none;border:none;color:var(--sub);font-size:13.5px;cursor:pointer;text-decoration:underline;text-underline-offset:3px;}\n    .xnote{font-size:12px;color:var(--faint);text-align:center;margin-top:14px;}\n\n    @media(max-width:680px){\n      .xgrid4{grid-template-columns:repeat(2,1fr);}\n      .xstrip{grid-template-columns:repeat(3,1fr);}\n      .xtwo{grid-template-columns:1fr;}\n      .xsold{grid-template-columns:repeat(2,1fr);}\n      .pad{padding:22px 18px;}\n    }\n    @media(prefers-reduced-motion:reduce){.xsec{animation:none;}.xbar::after{animation:none;left:0;width:100%;opacity:.5;}}\n  <\/style>\n\n  <div class=\"xc pad\">\n    <p class=\"xeye\">LockPro \u00b7 store x-ray<\/p>\n    <h1 class=\"xh1\">See what your Shopify store really looks like<\/h1>\n    <p class=\"xsub\">Paste any Shopify store URL. We read the public catalog and hand back a full report \u2014 pricing, live stock, freshness, SEO health, and where the wholesale opportunity is. No signup.<\/p>\n\n    <div class=\"xform\">\n      <input class=\"xinput\" id=\"x-url\" type=\"text\" placeholder=\"yourstore.com\" autocomplete=\"off\" spellcheck=\"false\" \/>\n      <button class=\"xbtn\" id=\"x-go\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><path d=\"m21 21-4.3-4.3\"\/><\/svg>\n        Run X-ray\n      <\/button>\n    <\/div>\n    <p class=\"xhint\" id=\"x-hint\">Works on any public Shopify store \u00b7 no signup, instant results.<\/p>\n    <p class=\"xerr\" id=\"x-err\"><\/p>\n\n    <div class=\"xscan\" id=\"x-scan\">\n      <div class=\"xbar\"><\/div>\n      <div class=\"xstatus tnum\" id=\"x-status\">Connecting\u2026<\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"xout\" id=\"x-out\"><\/div>\n<\/div>\n\n<script>\n(function(){\n  \"use strict\";\n  var CONFIG = {\n    PROXY_URL: \"https:\/\/www.lockpro.io\/blog\/wp-json\/lockpro\/v1\/scan\",\n    LOCKPRO_APP_URL: \"https:\/\/apps.shopify.com\/lockpro-b2b-access-control\",\n    HIGH_VALUE_THRESHOLD: 75\n  };\n\n  var $=function(i){return document.getElementById(i);};\n  var elUrl=$(\"x-url\"),elGo=$(\"x-go\"),elErr=$(\"x-err\"),elHint=$(\"x-hint\"),\n      elScan=$(\"x-scan\"),elStatus=$(\"x-status\"),elOut=$(\"x-out\");\n\n  var msgs=[\"Connecting to store\u2026\",\"Reading the catalog\u2026\",\"Pulling product images\u2026\",\"Checking prices & stock\u2026\",\"Scoring store health\u2026\"];\n  var tmr=null;\n  function startStatus(){var i=0;elStatus.textContent=msgs[0];tmr=setInterval(function(){i=(i+1)%msgs.length;elStatus.textContent=msgs[i];},620);}\n  function stopStatus(){if(tmr){clearInterval(tmr);tmr=null;}}\n\n  function norm(raw){var s=(raw||\"\").trim().toLowerCase();if(!s)return\"\";return s.replace(\/^https?:\\\/\\\/\/,\"\").replace(\/^www\\.\/,\"\").replace(\/\\\/.*$\/,\"\");}\n  var CURCODE=\"\";\n  function nf(x){return Number(x||0).toLocaleString();}\n  function pct(x){return Math.round(Number(x||0))+\"%\";}\n  function money(x){x=Number(x||0);if(CURCODE){try{return new Intl.NumberFormat(undefined,{style:\"currency\",currency:CURCODE,maximumFractionDigits:0}).format(x);}catch(e){}}return x.toLocaleString(undefined,{maximumFractionDigits:0});}\n  function esc(s){return String(s==null?\"\":s).replace(\/[&<>\"]\/g,function(c){return({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\"}[c]);});}\n  function ago(iso){if(!iso)return\"\u2014\";var d=Math.floor((Date.now()-new Date(iso).getTime())\/86400000);if(d<1)return\"today\";if(d<2)return\"yesterday\";if(d<31)return d+\" days ago\";if(d<365)return Math.round(d\/30)+\" months ago\";return Math.round(d\/365*10)\/10+\" yrs ago\";}\n\n  var BOX='<svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3.3 7 12 12l8.7-5\"\/><path d=\"M12 22V12\"\/><path d=\"M21 16V8a2 2 0 0 0-1-1.7l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.7l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\"\/><\/svg>';\n\n  function thumb(p,cap,cls){\n    cls=cls||\"xthumb\";\n    var img=p&&p.image?'<img decoding=\"async\" src=\"'+esc(p.image)+'\" alt=\"'+esc(p.title||\"\")+'\" loading=\"lazy\" onerror=\"this.style.display=\\'none\\'\">':'';\n    var ph='<div class=\"xph\">'+BOX+'<\/div>';\n    var c=cap?'<div class=\"xcap\">'+esc(p&&p.title?p.title:cap)+'<\/div>':'';\n    return '<div class=\"'+cls+'\">'+ph+img+c+'<\/div>';\n  }\n  function prodCard(p,tag,tagColor){\n    if(!p)return\"\";\n    var img=p.image?'<img decoding=\"async\" src=\"'+esc(p.image)+'\" alt=\"\" loading=\"lazy\" onerror=\"this.style.display=\\'none\\'\">':\"\";\n    var price=p.was?('<s>'+money(p.was)+'<\/s> <b>'+money(p.price)+'<\/b>'+(p.discount_pct?(' \u00b7 '+Math.round(p.discount_pct)+'% off'):\"\")):money(p.price);\n    return '<a class=\"xprod\" href=\"'+esc(p.url||\"#\")+'\" target=\"_blank\" rel=\"noopener\">'+\n      '<div class=\"xpi\"><div class=\"xph\">'+BOX+'<\/div>'+img+'<\/div>'+\n      '<div><p class=\"xtag\" style=\"color:'+tagColor+'\">'+esc(tag)+'<\/p>'+\n      '<p class=\"xnm\">'+esc(p.title||\"Untitled\")+'<\/p><p class=\"xpr\">'+price+'<\/p><\/div><\/a>';\n  }\n  function metric(label,val,sub,chip,chipCls){\n    return '<div class=\"xmetric\"><p class=\"ml\">'+label+'<\/p><div class=\"mv tnum\">'+val+(sub?' <small>'+sub+'<\/small>':\"\")+'<\/div>'+\n      (chip?'<div class=\"mc '+chipCls+'\">'+chip+'<\/div>':\"\")+'<\/div>';\n  }\n  function secHead(icon,bg,fg,title,note){\n    return '<div class=\"xsec-h\"><div class=\"ic\" style=\"background:'+bg+';color:'+fg+'\">'+icon+'<\/div><h3>'+title+'<\/h3><\/div>'+\n      (note?'<p class=\"xsec-note\">'+note+'<\/p>':\"\");\n  }\n\n  function ctaCopy(d){\n    var w=d.readiness.wholesale_language;\n    if(w>0)return{h:\"You're already selling wholesale \u2014 the hard way.\",p:\"We found \"+w+\" product\"+(w===1?\"\":\"s\")+\" using bulk, case, or wholesale language. Right now every retail shopper sees those B2B prices. LockPro hides them and reveals real wholesale pricing only to buyers you approve.\"};\n    if(d.readiness.score>=70)return{h:\"Your catalog is wholesale-ready.\",p:\"Organized SKUs, real depth, and price points that work for B2B. The missing piece is showing wholesale pricing only to approved buyers \u2014 which is exactly what LockPro does, on the store you already have.\"};\n    return{h:\"Want to open a wholesale channel?\",p:\"LockPro lets you hide prices, gate collections, and reveal B2B pricing to approved buyers \u2014 no second storefront, no Shopify Plus.\"};\n  }\n\n  function buildRecs(d){\n    var p=d.price, av=d.availability, ct=d.content, fr=d.freshness, r=d.readiness, out=[];\n    if(av.products_sold_out_pct>=30) out.push({sev:3,t:\"Clear out your sold-out dead weight\",x:nf(av.products_sold_out)+\" products (\"+pct(av.products_sold_out_pct)+\") are out of stock. Sold-out pages still pull traffic but rarely convert \u2014 hide them, add back-in-stock alerts, or restock your bestsellers.\"});\n    else if(av.products_sold_out_pct>=10) out.push({sev:2,t:\"Some products are sold out\",x:nf(av.products_sold_out)+\" products (\"+pct(av.products_sold_out_pct)+\") are unavailable. Add back-in-stock alerts so you don't lose those buyers.\"});\n    if(ct.desc_pct<70) out.push({sev:ct.desc_pct<40?3:2,t:\"Fill in product descriptions\",x:\"Only \"+pct(ct.desc_pct)+\" of products have real description text. Pages with proper copy rank better on Google and convert more \u2014 start with your bestsellers.\"});\n    if(ct.desc_pct>=70 && ct.avg_desc_len<150) out.push({sev:1,t:\"Your descriptions are thin\",x:\"Most products have a description, but they average just \"+nf(ct.avg_desc_len)+\" characters. A few solid sentences each helps both SEO and conversions.\"});\n    if(p.on_sale_pct>=60) out.push({sev:2,t:\"Rethink blanket discounting\",x:pct(p.on_sale_pct)+\" of the catalog is on sale (avg \"+pct(p.avg_discount_pct)+\" off). Permanent sitewide discounts train shoppers to wait and quietly erode your margin.\"});\n    if(ct.no_image_count>0) out.push({sev:ct.no_image_count>5?2:1,t:nf(ct.no_image_count)+\" product\"+(ct.no_image_count===1?\"\":\"s\")+\" with no image\",x:\"Products without a photo almost never sell. Add at least one image to each.\"});\n    if(fr.added_90===0) out.push({sev:2,t:\"Your catalog looks stale\",x:\"No new products in the last 90 days. Fresh listings signal an active store to both shoppers and Google.\"});\n    if(ct.title_ok_pct<50) out.push({sev:1,t:\"Tighten your product titles\",x:\"Only \"+pct(ct.title_ok_pct)+\" of titles sit in the 20\u201370 character SEO sweet spot. Clear, keyword-led titles help search ranking.\"});\n    if(r.wholesale_language>0) out.push({sev:2,t:\"You're selling wholesale the hard way\",x:\"We found \"+r.wholesale_language+\" product\"+(r.wholesale_language===1?\"\":\"s\")+\" using B2B or bulk language with prices visible to everyone. Gate them so only approved buyers see wholesale pricing \u2014 that's what LockPro does.\"});\n    out.sort(function(a,b){return b.sev-a.sev;});\n    return out.slice(0,5);\n  }\n  function recsCard(d){\n    var list=buildRecs(d); if(!list.length) return \"\";\n    var rows=list.map(function(r){\n      var col=r.sev>=3?\"var(--red)\":r.sev>=2?\"var(--amber)\":\"var(--green)\";\n      var bg =r.sev>=3?\"var(--red-soft)\":r.sev>=2?\"var(--amber-soft)\":\"var(--green-soft)\";\n      var lab=r.sev>=3?\"Fix\":r.sev>=2?\"Improve\":\"Polish\";\n      return '<div class=\"xrec\"><span class=\"xrec-b\" style=\"background:'+bg+';color:'+col+'\">'+lab+'<\/span>'+\n             '<div><p class=\"xrec-t\">'+esc(r.t)+'<\/p><p class=\"xrec-x\">'+esc(r.x)+'<\/p><\/div><\/div>';\n    }).join(\"\");\n    var icon='<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 18h6M10 22h4M12 2a7 7 0 0 0-4 12.7c.6.5 1 1.3 1 2.1V17h6v-.2c0-.8.4-1.6 1-2.1A7 7 0 0 0 12 2Z\"\/><\/svg>';\n    return '<div class=\"xc pad xsec\">'+secHead(icon,\"var(--amber-soft)\",\"var(--amber)\",\"What to improve\",\"Prioritized actions from what we found \u2014 start at the top.\")+rows+'<\/div>';\n  }\n  function seoRow(label,val,st,tip){\n    var col=st===\"good\"?\"var(--green)\":st===\"warn\"?\"var(--amber)\":\"var(--red)\";\n    return '<div class=\"xstat\" style=\"align-items:flex-start;\"><span class=\"k\">'+label+(tip?'<br><span style=\"font-size:12.5px;color:var(--faint);line-height:1.4;display:inline-block;margin-top:2px;\">'+tip+'<\/span>':\"\")+'<\/span>'+\n           '<span class=\"v tnum\" style=\"color:'+col+';white-space:nowrap;padding-left:14px;\">'+val+'<\/span><\/div>';\n  }\n\n  function tierBar(d){\n    var t=d.tiers; if(!t) return \"\";\n    var seg=function(p,col,lab){ return p>0?'<div style=\"width:'+p+'%;background:'+col+'\" title=\"'+lab+' '+p+'%\"><\/div>':\"\"; };\n    var maxp=Math.max(t.budget_pct,t.mid_pct,t.premium_pct);\n    var cap=maxp>=85?\"Tightly clustered \u2014 this store is priced around one level.\":\"Spread across budget, mid and premium price points.\";\n    return '<div class=\"xtier\">'+\n      '<div class=\"xtier-bar\">'+seg(t.budget_pct,\"var(--brand)\",\"Budget\")+seg(t.mid_pct,\"var(--green)\",\"Mid\")+seg(t.premium_pct,\"var(--ink)\",\"Premium\")+'<\/div>'+\n      '<div class=\"xtier-leg\">'+\n        '<span><i style=\"background:var(--brand)\"><\/i>Budget \u00b7 under '+money(t.lo)+' \u00b7 '+t.budget_pct+'%<\/span>'+\n        '<span><i style=\"background:var(--green)\"><\/i>Mid \u00b7 '+money(t.lo)+'\u2013'+money(t.hi)+' \u00b7 '+t.mid_pct+'%<\/span>'+\n        '<span><i style=\"background:var(--ink)\"><\/i>Premium \u00b7 over '+money(t.hi)+' \u00b7 '+t.premium_pct+'%<\/span>'+\n      '<\/div>'+\n      '<p class=\"xtier-cap\">'+cap+'<\/p>'+\n    '<\/div>';\n  }\n  function catalogCard(d){\n    var b=d.brands||{mode:\"none\"}, w=d.weight, inner=\"\";\n    if(b.mode===\"single\"){\n      inner='<p style=\"font-size:14px;margin:0 0 4px;\"><b>Single-brand store<\/b><\/p>'+\n        '<p style=\"font-size:13.5px;color:var(--sub);margin:0;\">Sells its own label \u2014 <b>'+esc(b.leader)+'<\/b> ('+b.leader_pct+'% of catalog). No third-party brands to gate.<\/p>';\n    } else if(b.mode===\"multi\"){\n      var bars=b.top.map(function(t){return '<div class=\"xbrow\"><span class=\"xbn\">'+esc(t.name)+'<\/span><span class=\"xbb\"><span style=\"width:'+Math.max(3,t.pct)+'%\"><\/span><\/span><span class=\"xbp\">'+t.pct+'%<\/span><\/div>';}).join(\"\");\n      inner='<p style=\"font-size:13.5px;color:var(--sub);margin:0 0 12px;\"><b>'+b.distinct+' brands<\/b> \u00b7 top 5 make up <b>'+b.top5_pct+'%<\/b>'+(b.coverage_pct<100?' \u00b7 brand set on '+b.coverage_pct+'% of products':'')+'<\/p>'+bars;\n    }\n    var wblock=\"\";\n    if(w){\n      var fg=function(g){return g>=1000?(Math.round(g\/100)\/10)+\" kg\":g+\" g\";};\n      wblock='<div style=\"border-top:1px solid var(--line);margin-top:16px;padding-top:14px;\">'+\n        '<p style=\"font-size:13px;color:var(--sub);margin:0 0 6px;font-weight:600;\">Shipping weight<\/p><div class=\"xstat-list\">'+\n        '<div class=\"xstat\"><span class=\"k\">Average product weight<\/span><span class=\"v tnum\">'+fg(w.avg_g)+'<\/span><\/div>'+\n        (w.heaviest?'<div class=\"xstat\"><span class=\"k\">Heaviest \u2014 '+esc(w.heaviest.title)+'<\/span><span class=\"v tnum\">'+fg(w.heaviest.grams)+'<\/span><\/div>':\"\")+\n        (w.lightest?'<div class=\"xstat\"><span class=\"k\">Lightest \u2014 '+esc(w.lightest.title)+'<\/span><span class=\"v tnum\">'+fg(w.lightest.grams)+'<\/span><\/div>':\"\")+\n        '<\/div><\/div>';\n    }\n    if(!inner&&!wblock) return \"\";\n    return '<div class=\"xc pad xsec\">'+secHead('<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 7h18M3 12h18M3 17h18\"\/><\/svg>',\"var(--mist)\",\"var(--ink)\",\"Brand mix & logistics\",\"\")+inner+wblock+'<\/div>';\n  }\n\n  function blogCard(d){\n    var b=d.blog; if(!b) return \"\";\n    var ic='<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 4h11a2 2 0 0 1 2 2v14l-4-3-4 3V6a2 2 0 0 0-2-2H4z\"\/><path d=\"M9 8h4M9 12h4\"\/><\/svg>';\n    if(!b.has_blog){\n      return '<div class=\"xc pad xsec\">'+secHead(ic,\"var(--brand-soft)\",\"var(--brand)\",\"Content & blog\",\"\")+\n        '<p style=\"font-size:14px;margin:0 0 4px;\"><b>No blog detected<\/b><\/p>'+\n        '<p style=\"font-size:13.5px;color:var(--sub);margin:0;\">A blog is one of the cheapest ways to win Google traffic \u2014 most stores that rank for buyer questions get there through content.<\/p><\/div>';\n    }\n    var l=b.latest||{};\n    var img=l.image?'<img decoding=\"async\" src=\"'+esc(l.image)+'\" alt=\"\" loading=\"lazy\" onerror=\"this.style.display=\\'none\\'\">':\"\";\n    return '<div class=\"xc pad xsec\">'+secHead(ic,\"var(--brand-soft)\",\"var(--brand)\",\"Content & blog\",\n      \"Runs a blog with \"+nf(b.count)+(b.count===1?\" post\":\" posts\")+\" \u2014 good for organic traffic.\")+\n      '<a class=\"xprod\" href=\"'+esc(l.url||\"#\")+'\" target=\"_blank\" rel=\"noopener\">'+\n        '<div class=\"xpi\"><div class=\"xph\">'+BOX+'<\/div>'+img+'<\/div>'+\n        '<div><p class=\"xtag\" style=\"color:var(--brand)\">Latest post'+(l.date?' \u00b7 '+ago(l.date):\"\")+'<\/p>'+\n        '<p class=\"xnm\">'+esc(l.title||\"Untitled\")+'<\/p><p class=\"xpr\">Read on their blog \u2192<\/p><\/div><\/a>'+\n    '<\/div>';\n  }\n\n  function render(d){\n    CURCODE=d.currency||\"\";\n    var p=d.price, av=d.availability, fr=d.freshness, ct=d.content, as=d.assortment, h=d.highlights||{}, cta=ctaCopy(d);\n\n    var freshPill = fr.added_30>0 ? '<span class=\"xpill g\"><span>\u25cf<\/span> Active store<\/span>'\n                  : fr.added_90>0 ? '<span class=\"xpill a\"><span>\u25cf<\/span> Slowing down<\/span>'\n                                  : '<span class=\"xpill r\"><span>\u25cf<\/span> Looks dormant<\/span>';\n    var stockPill = av.products_sold_out_pct>20 ? '<span class=\"xpill r\"><span>\u25cf<\/span> '+pct(av.products_sold_out_pct)+' sold out<\/span>'\n                  : av.products_sold_out_pct>0  ? '<span class=\"xpill a\"><span>\u25cf<\/span> '+pct(av.products_sold_out_pct)+' sold out<\/span>'\n                                                : '<span class=\"xpill g\"><span>\u25cf<\/span> Well stocked<\/span>';\n    var seoPill = ct.score>=70 ? '<span class=\"xpill g\"><span>\u25cf<\/span> Strong content<\/span>'\n                : ct.score>=45 ? '<span class=\"xpill a\"><span>\u25cf<\/span> Content gaps<\/span>'\n                               : '<span class=\"xpill r\"><span>\u25cf<\/span> Thin content<\/span>';\n\n    var strip=\"\";\n    (d.spotlight||[]).slice(0,5).forEach(function(s){strip+=thumb(s,true);});\n\n    var soldOut=\"\";\n    (h.sold_out||[]).slice(0,4).forEach(function(s){soldOut+=thumb(s,true);});\n\n    var hsc=(d.health&&d.health.score)||0, hlabel=(d.health&&d.health.label)||\"\";\n    var ringCol=hsc>=75?\"var(--green)\":hsc>=50?\"var(--amber)\":\"var(--red)\";\n\n    var html=''+\n    '<div class=\"xc pad xsec\"><div class=\"xhero\">'+\n      '<div class=\"xhero-row\">'+\n        '<div class=\"xhero-id\">'+\n          '<div class=\"xhrow\"><img decoding=\"async\" class=\"xfav\" src=\"https:\/\/www.google.com\/s2\/favicons?domain='+esc(d.shop)+'&sz=64\" alt=\"\" onerror=\"this.style.visibility=\\'hidden\\'\"><span class=\"xstore tnum\">'+esc(d.shop)+'<\/span><\/div>'+\n          '<h2>Store X-ray<\/h2>'+\n          '<p class=\"tnum\">'+nf(d.products)+' products \u00b7 '+nf(d.variants)+' variants \u00b7 '+as.product_types+' categories \u00b7 '+as.vendors+' brand'+(as.vendors===1?\"\":\"s\")+'<\/p>'+\n          '<div class=\"xpills\">'+freshPill+stockPill+seoPill+'<\/div>'+\n        '<\/div>'+\n        '<div class=\"xring\" style=\"--rc:'+ringCol+'\">'+\n          '<svg viewBox=\"0 0 110 110\"><circle class=\"xring-t\" cx=\"55\" cy=\"55\" r=\"46\"\/><circle class=\"xring-f\" id=\"x-ring\" cx=\"55\" cy=\"55\" r=\"46\"\/><\/svg>'+\n          '<div class=\"xring-c\"><span id=\"x-hsc\">0<\/span><small>\/100<\/small><b>'+esc(hlabel)+'<\/b><\/div>'+\n        '<\/div>'+\n      '<\/div>'+\n      (strip?'<div class=\"xstrip\">'+strip+'<\/div>':\"\")+\n      '<p class=\"xscanned\">Scanned live just now \u00b7 '+nf(d.products)+(d.capped?'+':'')+' published products read'+(d.capped?' (analysis based on first '+nf(d.products)+')':'')+'<\/p>'+\n    '<\/div><\/div>'+\n\n    '<div class=\"xsec xgrid4\">'+\n      metric(\"Typical price\",money(p.median),(CURCODE||\"store currency\"),\"half \"+money(p.p25)+\"\u2013\"+money(p.p75),\"\")+\n      metric(\"On sale now\",pct(p.on_sale_pct),\"\",(p.avg_discount_pct?(\"avg \"+pct(p.avg_discount_pct)+\" off\"):\"\"),\"a\")+\n      metric(\"Sold out\",pct(av.products_sold_out_pct),\"\",nf(av.products_sold_out)+\" products\",av.products_sold_out_pct>15?\"r\":\"g\")+\n      metric(\"Added \u00b7 30d\",nf(fr.added_30),\"\",\"newest \"+ago(fr.newest_at),\"g\")+\n    '<\/div>'+\n\n    recsCard(d)+\n\n    \/* pricing *\/\n    '<div class=\"xc pad xsec\">'+\n      secHead('<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"\/><\/svg>',\n        \"var(--green-soft)\",\"var(--green-deep)\",\"Pricing & discounts\",\"All figures in the store\\u2019s own currency \\u2014 a single outlier can\\u2019t skew the typical price.\")+\n      '<div class=\"xtwo\"><div class=\"xstat-list\">'+\n        '<div class=\"xstat\"><span class=\"k\">Typical (median) price<\/span><span class=\"v tnum\">'+money(p.median)+'<\/span><\/div>'+\n        '<div class=\"xstat\"><span class=\"k\">Half of products priced between<\/span><span class=\"v tnum\">'+money(p.p25)+' \u2013 '+money(p.p75)+'<\/span><\/div>'+\n        '<div class=\"xstat\"><span class=\"k\">Full range (lowest \u2013 highest)<\/span><span class=\"v tnum\">'+money(p.min)+' \u2013 '+money(p.max)+'<\/span><\/div>'+\n        '<div class=\"xstat\"><span class=\"k\">On sale right now<\/span><span class=\"v tnum\">'+pct(p.on_sale_pct)+(p.avg_discount_pct?(' \u00b7 avg '+pct(p.avg_discount_pct)+' off'):\"\")+'<\/span><\/div>'+\n        '<div class=\"xstat\"><span class=\"k\">Charm pricing (\u202699 \/ \u202695)<\/span><span class=\"v tnum\">'+pct(p.charm_pct)+' of products<\/span><\/div>'+\n      '<\/div><div style=\"display:flex;flex-direction:column;gap:10px;justify-content:center\">'+\n        prodCard(h.priciest,\"Priciest product\",\"var(--ink)\")+\n        prodCard(h.best_deal,\"Biggest deal right now\",\"var(--green)\")+\n      '<\/div><\/div>'+\n      tierBar(d)+\n    '<\/div>'+\n\n    \/* availability *\/\n    '<div class=\"xc pad xsec\">'+\n      secHead('<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3.3 7 12 12l8.7-5\"\/><path d=\"M12 22V12\"\/><path d=\"M21 16V8a2 2 0 0 0-1-1.7l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.7l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\"\/><\/svg>',\n        \"var(--amber-soft)\",\"var(--amber)\",\"Live availability\",\n        (av.products_sold_out>0?(nf(av.products_sold_out)+' products ('+pct(av.products_sold_out_pct)+') are sold out right now \\u2014 sales you may be missing.'):'Everything in the public catalog is in stock right now.'))+\n      (soldOut?'<div class=\"xsold\">'+soldOut+'<\/div>':'')+\n    '<\/div>'+\n\n    \/* freshness *\/\n    '<div class=\"xc pad xsec\">'+\n      secHead('<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 22a10 10 0 1 0-10-10\"\/><path d=\"M12 6v6l4 2\"\/><path d=\"M2 12 5 9l3 3\"\/><\/svg>',\n        \"var(--brand-soft)\",\"var(--brand)\",\"Catalog freshness\",\"How active is this store, and how old is the catalog?\")+\n      '<div class=\"xtwo\"><div class=\"xstat-list\">'+\n        '<div class=\"xstat\"><span class=\"k\">Added in last 30 days<\/span><span class=\"v tnum\">'+nf(fr.added_30)+'<\/span><\/div>'+\n        '<div class=\"xstat\"><span class=\"k\">Added in last 90 days<\/span><span class=\"v tnum\">'+nf(fr.added_90)+'<\/span><\/div>'+\n        '<div class=\"xstat\"><span class=\"k\">Newest product<\/span><span class=\"v\">'+ago(fr.newest_at)+'<\/span><\/div>'+\n        '<div class=\"xstat\"><span class=\"k\">Catalog age (oldest listing)<\/span><span class=\"v\">'+(fr.store_age_days?(Math.round(fr.store_age_days\/30.4)+\" months\"):\"\u2014\")+'<\/span><\/div>'+\n      '<\/div><div style=\"display:flex;align-items:center\">'+\n        prodCard(h.newest,\"Latest addition\",\"var(--brand)\")+\n      '<\/div><\/div>'+\n    '<\/div>'+\n\n    \/* content & seo *\/\n    '<div class=\"xc pad xsec\">'+\n      secHead('<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 4h16v16H4z\"\/><path d=\"m8 12 2.5 2.5L16 9\"\/><\/svg>',\n        \"var(--green-soft)\",\"var(--green-deep)\",\"Content & SEO health\",\"Score \"+ct.score+\"\/100 \u2014 these are some of the easiest wins for Google ranking.\")+\n      '<div class=\"xstat-list\">'+\n        seoRow(\"Products with a description\",pct(ct.desc_pct),ct.desc_pct>=70?\"good\":ct.desc_pct>=40?\"warn\":\"bad\",ct.desc_pct<70?\"Write copy for the rest \u2014 it helps both SEO and conversions.\":\"\")+\n        seoRow(\"Average description length\",nf(ct.avg_desc_len)+\" chars\",ct.avg_desc_len>=300?\"good\":ct.avg_desc_len>=100?\"warn\":\"bad\",ct.avg_desc_len<300?\"Fuller descriptions give Google and shoppers more to work with \u2014 aim for a few solid sentences.\":\"\")+\n        seoRow(\"Titles in the 20\u201370 char sweet spot\",pct(ct.title_ok_pct),ct.title_ok_pct>=60?\"good\":ct.title_ok_pct>=35?\"warn\":\"bad\",ct.title_ok_pct<60?\"Clear, keyword-led titles of moderate length rank best.\":\"\")+\n        seoRow(\"Products with 2+ images\",pct(ct.multi_img_pct),ct.multi_img_pct>=60?\"good\":ct.multi_img_pct>=30?\"warn\":\"bad\",\"\")+\n        seoRow(\"Products with no image\",nf(ct.no_image_count),ct.no_image_count===0?\"good\":ct.no_image_count<=5?\"warn\":\"bad\",ct.no_image_count>0?\"Imageless products rarely sell \u2014 add at least one photo each.\":\"\")+\n      '<\/div>'+\n    '<\/div>'+\n\n    catalogCard(d)+\n    blogCard(d)+\n\n    \/* lockpro cta *\/\n    '<div class=\"xcta xsec\"><p class=\"xeye\">Wholesale readiness \u00b7 '+esc(d.readiness.label)+' ('+d.readiness.score+'\/100)<\/p>'+\n      '<h3>'+esc(cta.h)+'<\/h3><p>'+esc(cta.p)+'<\/p>'+\n      '<a href=\"'+esc(CONFIG.LOCKPRO_APP_URL)+'\" target=\"_blank\" rel=\"noopener\">Try LockPro free '+\n      '<svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14\"\/><path d=\"m13 6 6 6-6 6\"\/><\/svg><\/a>'+\n    '<\/div>'+\n\n    '<button class=\"xrescan\" id=\"x-rescan\">Run X-ray on another store<\/button>'+\n    '<p class=\"xnote\">Based on '+nf(d.products)+(d.capped?'+':'')+' published products. Reads only public catalog data \u2014 no inventory counts, sales, or customer data.<\/p>';\n\n    elOut.innerHTML=html;\n    elOut.classList.add(\"show\");\n    (function(){\n      var ring=$(\"x-ring\"), num=$(\"x-hsc\");\n      var reduce=window.matchMedia&&matchMedia(\"(prefers-reduced-motion:reduce)\").matches;\n      var off=289*(1-Math.max(0,Math.min(100,hsc))\/100);\n      if(ring){ if(reduce){ring.style.strokeDashoffset=String(off);} else { requestAnimationFrame(function(){requestAnimationFrame(function(){ring.style.strokeDashoffset=String(off);});}); } }\n      if(num){ if(reduce){num.textContent=hsc;} else { var st=null; (function tick(ts){ if(!st)st=ts; var pr=Math.min(1,(ts-st)\/1000); num.textContent=Math.round(pr*hsc); if(pr<1)requestAnimationFrame(tick); })(performance.now()); requestAnimationFrame(function(t){}); } }\n    })();\n    $(\"x-rescan\").addEventListener(\"click\",reset);\n    elOut.scrollIntoView({behavior:\"smooth\",block:\"start\"});\n  }\n\n  function reset(){elOut.classList.remove(\"show\");elOut.innerHTML=\"\";elUrl.value=\"\";elHint.style.display=\"block\";elUrl.focus();}\n\n  function run(shop,demo){\n    elErr.style.display=\"none\";elOut.classList.remove(\"show\");elOut.innerHTML=\"\";elHint.style.display=\"none\";\n    elGo.disabled=true;elScan.style.display=\"block\";startStatus();\n    var done=function(d){stopStatus();elScan.style.display=\"none\";elGo.disabled=false;render(d);};\n    if(demo||!CONFIG.PROXY_URL){setTimeout(function(){done(DEMO());},1900);return;}\n    fetch(CONFIG.PROXY_URL+(CONFIG.PROXY_URL.indexOf(\"?\")===-1?\"?\":\"&\")+\"shop=\"+encodeURIComponent(shop),{headers:{Accept:\"application\/json\"}})\n      .then(function(r){return r.json();})\n      .then(function(d){if(!d||d.ok===false)throw new Error(d&&d.error||\"fail\");done(d);})\n      .catch(function(e){stopStatus();elScan.style.display=\"none\";elGo.disabled=false;\n        elErr.textContent=(e&&e.message===\"rate-limited\")?\"That's a lot of scans in a short time \u2014 give it a minute.\":\"We couldn't read a public catalog at that URL. Either it's not a Shopify store, or its product feed is turned off. Check the address and try again.\";\n        elErr.style.display=\"block\";});\n  }\n\n  function go(){var s=norm(elUrl.value);if(!s||s.indexOf(\".\")===-1){elErr.textContent=\"Enter a store address, like yourstore.com.\";elErr.style.display=\"block\";return;}elUrl.value=s;run(s,false);}\n  elGo.addEventListener(\"click\",go);\n  elUrl.addEventListener(\"keydown\",function(e){if(e.key===\"Enter\")go();});\n\n  function DEMO(){\n    var im=function(seed){return \"https:\/\/picsum.photos\/seed\/\"+seed+\"\/300\/300\";};\n    return {ok:true,shop:\"sample-furniture-co.com\",currency:\"USD\",products:214,variants:603,\n      price:{min:24,max:1290,median:189,avg:241,p05:39,p25:89,p75:420,p95:640,on_sale_pct:31,avg_discount_pct:22,charm_pct:58},\n      availability:{products_sold_out:19,products_sold_out_pct:9},\n      freshness:{newest_at:new Date(Date.now()-3*86400000).toISOString(),added_30:12,added_90:34,store_age_days:1280},\n      content:{score:82,desc_pct:88,avg_desc_len:540,title_ok_pct:72,multi_img_pct:80,avg_images:3.4,no_image_count:6},\n      assortment:{vendors:9,product_types:11},\n      health:{score:78,label:\"Healthy\"},\n      tiers:{budget:64,mid:108,premium:42,budget_pct:30,mid_pct:51,premium_pct:19,lo:95,hi:378},\n      brands:{mode:\"multi\",distinct:9,top:[{name:\"Northwind\",pct:22},{name:\"Acme Home\",pct:18},{name:\"Globex\",pct:14},{name:\"Initech\",pct:9},{name:\"Umbra\",pct:7}],top5_pct:70,coverage_pct:100},\n      weight:{avg_g:680,heaviest:{title:\"Oak Dining Table\",grams:24000},lightest:{title:\"Linen Napkin Set\",grams:120}},\n      capped:false,\n      blog:{has_blog:true,count:42,latest:{title:\"How To Choose Your First Pair Of IEMs\",url:\"#\",image:\"https:\/\/picsum.photos\/seed\/blogpost\/200\/200\",date:new Date(Date.now()-6*86400000).toISOString()}},\n      readiness:{score:82,label:\"Wholesale-ready\",wholesale_language:17},\n      spotlight:[{title:\"Oak Lounge Chair\",image:im(\"chair1\")},{title:\"Walnut Dining Table\",image:im(\"table2\")},{title:\"Brass Floor Lamp\",image:im(\"lamp3\")},{title:\"Linen Armchair\",image:im(\"chair4\")},{title:\"Oak Sideboard\",image:im(\"store5\")}],\n      highlights:{\n        priciest:{title:\"Solid Walnut Dining Set (8-seat)\",image:im(\"table2\"),price:1290,url:\"#\"},\n        best_deal:{title:\"Brass Floor Lamp\",image:im(\"lamp3\"),price:118,was:189,discount_pct:38,url:\"#\"},\n        newest:{title:\"Linen Accent Armchair\",image:im(\"chair4\"),price:340,url:\"#\"},\n        sold_out:[{title:\"Oak Bar Stool\",image:im(\"stool6\")},{title:\"Marble Side Table\",image:im(\"marble7\")},{title:\"Velvet Ottoman\",image:im(\"otto8\")},{title:\"Rattan Pendant\",image:im(\"rattan9\")}]\n      }};\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-132","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.lockpro.io\/blog\/wp-json\/wp\/v2\/pages\/132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lockpro.io\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lockpro.io\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lockpro.io\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lockpro.io\/blog\/wp-json\/wp\/v2\/comments?post=132"}],"version-history":[{"count":2,"href":"https:\/\/www.lockpro.io\/blog\/wp-json\/wp\/v2\/pages\/132\/revisions"}],"predecessor-version":[{"id":143,"href":"https:\/\/www.lockpro.io\/blog\/wp-json\/wp\/v2\/pages\/132\/revisions\/143"}],"wp:attachment":[{"href":"https:\/\/www.lockpro.io\/blog\/wp-json\/wp\/v2\/media?parent=132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}