{"title":"Personalised Dog Mats","description":"\u003cp\u003eGive your dog a place of their own with a personalised floor mat featuring their portrait and name. Each 60 x 40 cm mat is printed edge to edge and made to brighten doorways, kitchens and favourite indoor spots.\u003c\/p\u003e\u003cscript data-lp-mats-handoff=\"lp-personalised-dog-mats-handoff-v1-2026-08-21\"\u003e\n(()=\u003e{\n  const PRODUCT_HANDLE='personalised-dog-floor-mat',PRODUCT_KEY='builder-floor-mat--personalised-dog-floor-mat--v1';\n  const start=()=\u003e{\n    const params=new URLSearchParams(location.search),isCustom=params.get('custom')==='1';\n    const hasSignedProfile=params.get('collection')==='1'\u0026\u0026params.get('name')\u0026\u0026(\n      (isCustom\u0026\u0026params.get('dog')\u0026\u0026params.get('expires')\u0026\u0026params.get('signature'))||\n      (params.get('breed')\u0026\u0026params.get('colouring'))\n    );\n    if(!hasSignedProfile)return;\n    let profile=null;\n    try{profile=JSON.parse(localStorage.getItem('lpPetProfile')||'null')}catch(_){}\n    const name=(params.get('name')||profile?.name||'').trim().slice(0,18);\n    if(isCustom){\n      const dog=params.get('dog'),expires=params.get('expires'),signature=params.get('signature');\n      profile={...profile,name,breed:profile?.breed||'Your dog',colouring:profile?.colouring||'From your photo',customDogId:dog,customDogExpires:expires,customDogSignature:signature,previewUrl:'https:\/\/lp-personalisation-render-79f43f75.azurewebsites.net\/api\/custom-dogs\/'+encodeURIComponent(dog)+'?expires='+encodeURIComponent(expires)+'\u0026signature='+encodeURIComponent(signature)};\n      try{localStorage.setItem('lpPetProfile',JSON.stringify(profile))}catch(_){}\n    }\n    const pass=['collection','breed','colouring','name','custom','dog','expires','signature'];\n    const copyParams=url=\u003e{for(const key of pass){const value=params.get(key);if(value)url.searchParams.set(key,value)}return url};\n    const cards=()=\u003e[...document.querySelectorAll('#product-grid .grid__item')].filter(item=\u003eitem.querySelector('a[href*=\"\/products\/'+PRODUCT_HANDLE+'\"]'));\n    const patchLinks=()=\u003e{\n      for(const item of cards())for(const link of item.querySelectorAll('a[href*=\"\/products\/'+PRODUCT_HANDLE+'\"]')){\n        const url=copyParams(new URL(link.href,location.origin));\n        link.href=url.pathname+url.search;\n      }\n    };\n    patchLinks();\n    const observer=new MutationObserver(patchLinks);\n    const grid=document.querySelector('#product-grid');\n    if(grid)observer.observe(grid,{childList:true,subtree:true});\n    const dogId=isCustom?params.get('dog'):(params.get('breed')+'-'+params.get('colouring')).toLowerCase().replace(\/[^a-z0-9]+\/g,'-');\n    const customFields=isCustom?{customDogId:params.get('dog'),customDogExpires:String(params.get('expires')),customDogSignature:params.get('signature')}:{breedLabel:params.get('breed')||profile?.breed||''};\n    const endpoint='https:\/\/lp-personalisation-render-79f43f75.azurewebsites.net\/api\/visual-library';\n    const fields={dogId,petName:name,productKeys:PRODUCT_KEY,...customFields};\n    const lookup=async method=\u003e{\n      const url=new URL(endpoint);\n      if(method==='GET')for(const [key,value]of Object.entries(fields))if(value)url.searchParams.set(key,value);\n      const response=await fetch(url,{method,headers:method==='POST'?{'Content-Type':'application\/json'}:{},body:method==='POST'?JSON.stringify({...fields,productKeys:[PRODUCT_KEY],quality:'card',priority:'critical'}):undefined,cache:'no-store'});\n      const data=await response.json().catch(()=\u003enull);\n      return{response,data};\n    };\n    const apply=async manifest=\u003e{\n      const pack=manifest?.products?.[PRODUCT_KEY],imageUrl=pack?.collection||pack?.preview;\n      if(!imageUrl)return false;\n      const preload=new Image();preload.src=imageUrl;await preload.decode();\n      let applied=false;\n      for(const item of cards()){\n        const image=item.querySelector('.card__media img');if(!image)continue;\n        image.removeAttribute('srcset');image.removeAttribute('sizes');image.src=imageUrl;\n        image.alt=name+'’s personalised dog floor mat';item.dataset.personalisedPreview='ready';applied=true;\n      }\n      return applied;\n    };\n    (async()=\u003e{\n      let result=await lookup('GET').catch(()=\u003enull);\n      if(result?.response?.ok\u0026\u0026await apply(result.data))return;\n      await lookup('POST').catch(()=\u003enull);\n      for(let attempt=0;attempt\u003c45;attempt++){\n        await new Promise(resolve=\u003esetTimeout(resolve,1000));\n        result=await lookup('GET').catch(()=\u003enull);\n        if(result?.response?.ok\u0026\u0026await apply(result.data))return;\n      }\n      for(const item of cards())item.dataset.personalisedPreview='fallback';\n    })();\n  };\n  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start,{once:true});else start();\n})();\n\/* lp-personalised-dog-mats-handoff-v1-2026-08-21 *\/\n\u003c\/script\u003e","products":[{"product_id":"personalised-dog-floor-mat","title":"Personalised Dog Floor Mat","description":"\u003cp\u003eMake this personalised floor mat feel like it belongs to your dog, featuring your saved illustrated portrait and their name on a full-bleed design. A thoughtful way to add a familiar touch to an entrance, kitchen or pet corner, it turns your chosen layout into something that feels made just for them. Available in Light Grey or Cream, the look stays clean and easy to style while keeping your dog at the heart of it. A lovely gift for dog lovers, with a personal finish they will recognise straight away.\u003c\/p\u003e","brand":"Orderdesk","offers":[{"title":"60cm x 40cm \/ Light Grey","offer_id":58906016842073,"sku":"LP-FLOOR-MAT-60X40","price":19.95,"currency_code":"GBP","in_stock":true},{"title":"60cm x 40cm \/ Cream","offer_id":58906016874841,"sku":"LP-FLOOR-MAT-60X40","price":19.95,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1044\/8378\/3001\/files\/personalised-dog-floor-mat-cream-01-hallway_cb4098c6-7e7b-4a09-a5f4-8ddd5ff06059.webp?v=1787167999"},{"product_id":"autumn-pumpkin-ai-dog-floor-mat","title":"Autumn Pumpkin AI Dog Floor Mat","description":"\u003cp\u003eYour dog illustrated among autumn pumpkins and foliage, with their name on a delicate ribbon. A personalised full-bleed floor mat featuring your dog’s illustrated portrait and name. Create your Autumn Pumpkin portrait once and reuse the same design across matching Lucky Pup products. Made to order.\u003c\/p\u003e","brand":"Orderdesk","offers":[{"title":"60cm x 40cm","offer_id":59371068948825,"sku":"LP-FLOOR-MAT-60X40","price":19.95,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1044\/8378\/3001\/files\/floor-mat-5434ca3bd534-cream-01-hallway_a45d0d7e-8735-473d-83ab-0c9dc6b1e51a.webp?v=1789121599"},{"product_id":"personalised-dog-floor-mat-football-mascot","title":"Personalised Dog Floor Mat – Football Mascot","description":"\u003cp\u003eYour dog becomes the star of the match in a charming football mascot illustration, personalised with their name. A vintage football, burgundy scarf and celebratory pennants complete the design. Create your dog’s artwork once and use it across matching Football Mascot products. Made to order for your dog.\u003c\/p\u003e","brand":"Orderdesk","offers":[{"title":"60cm x 40cm","offer_id":59375750185305,"sku":"LP-FLOOR-MAT-60X40","price":19.95,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1044\/8378\/3001\/files\/floor-mat-02ec5ed54467-cream-01-hallway_e8d174a8-7a1f-458b-b85f-5fedb17a1aed.webp?v=1789148876"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1044\/8378\/3001\/collections\/personalised-dog-mats-collection.png?v=1787161170","url":"https:\/\/luckypup.co.uk\/collections\/personalised-dog-mats.oembed","provider":"Lucky Pup","version":"1.0","type":"link"}