{"title":"New Arrivals","description":"\u003cp\u003eShop our newest additions to our collection\u003c\/p\u003e","products":[{"product_id":"personalized-dog-collar","title":"Personalized Pet Collar","description":"\u003cscript data-sp-upright-mini\u003e(function(){function f(){document.querySelectorAll('#sp-collar-builder .sp-real-letter').forEach(function(i){var p=i.parentNode;if(p\u0026\u0026i.alt){p.setAttribute('data-letter',i.alt);i.style.display='none'}})}setInterval(f,300);setTimeout(f,500);setTimeout(f,1500)})();\u003c\/script\u003e\u003cstyle data-sp-upright-letter-preview\u003e#sp-collar-builder .sp-preview-slot .sp-real-letter{display:none!important}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece:not(.has-charm){transform:none!important}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece:not(.has-charm)::after{content:attr(data-letter);font-family:Arial Black,Arial,sans-serif;font-size:13px;font-weight:900;color:#e9ecec;-webkit-text-stroke:.45px #5d666c;text-shadow:0 -1px 0 #fff,1px 0 0 #8a9297,-1px 0 0 #cdd3d7,0 1px 0 #59636a,0 2px 2px rgba(0,0,0,.25)}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-black.has-piece:not(.has-charm)::after{color:#111;-webkit-text-stroke:.35px #6f767b;text-shadow:0 -1px 0 #3a3a3a,0 1px 0 #7c858b,0 2px 2px rgba(0,0,0,.28)}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-small.has-piece:not(.has-charm)::after{font-size:11px}\u003c\/style\u003e\u003cscript data-sp-visual-name-order\u003e(function(){var c=0;function e(s){return String(s).replace(\/[\u0026\u003c\u003e]\/g,function(x){return{'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;'}[x]})}function d(){var R=document.getElementById('sp-collar-builder'),I=R\u0026\u0026R.querySelector('#sp-pet-name');if(!R||!I)return;var n=I.value.toUpperCase().replace(\/[^A-Z]\/g,'').slice(0,10);if(!n)return;var a=Array(10).fill(''),s=Math.max(0,Math.floor((10-n.length)\/2));n.split('').forEach(function(x,i){a[s+i]=x});R.querySelectorAll('.sp-hole').forEach(function(h,i){var l=a[i];h.className='sp-hole '+(l?'':'is-empty');h.setAttribute('aria-label','Hole '+(i+1)+(l?': '+l:''));h.innerHTML=l?'\u003cspan class=\"sp-layout-chip\"\u003e'+e(l)+'\u003c\/span\u003e\u003cspan class=\"sp-hole-number\"\u003e'+(i+1)+'\u003c\/span\u003e':'\u003cspan class=\"sp-hole-number\"\u003e'+(i+1)+'\u003c\/span\u003e'});var T=R.querySelector('[data-sp-layout-tray]');if(T)T.innerHTML=n.split('').map(function(l){return'\u003cbutton type=\"button\" class=\"sp-layout-piece\"\u003e\u003cspan class=\"sp-layout-chip\"\u003e'+e(l)+'\u003c\/span\u003e\u003c\/button\u003e'}).join('');R.querySelectorAll('[data-sp-preview-name] .sp-preview-slot').forEach(function(x,i){var l=a[i];if(x.classList.contains('has-charm'))return;x.className='sp-preview-slot '+(l?'has-piece':'is-empty');if(l){x.setAttribute('data-letter',l);x.textContent=''}else{x.removeAttribute('data-letter');x.textContent=''}})}function b(){var R=document.getElementById('sp-collar-builder'),I=R\u0026\u0026R.querySelector('#sp-pet-name');if(!I)return;if(!I.dataset.visualOrder){I.dataset.visualOrder=1;I.addEventListener('input',function(){setTimeout(d,80);setTimeout(d,400)});I.addEventListener('change',function(){setTimeout(d,80);setTimeout(d,400)})}d()}document.addEventListener('DOMContentLoaded',b);var t=setInterval(function(){b();if(++c\u003e20)clearInterval(t)},300)})();\u003c\/script\u003e\u003cscript data-sp-real-letter-preview\u003e(function(){var R=document.getElementById('sp-collar-builder');function q(s,p){return(p||document).querySelector(s)}function qa(s,p){return[].slice.call((p||document).querySelectorAll(s))}var U={Silver:'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/168_aa55a61c-84e0-4386-8125-82415a99b5f2.png?v=1782479450',Black:'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/170_6eb3e3c0-ef5a-4b2f-888f-7f4118018f3c.png?v=1782479450','Silver 11mm':'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/169_b55b69a4-36f8-4876-88f8-538f10ce4f3d.png?v=1782479450'},P={A:[.16,.26],B:[.27,.25],C:[.385,.26],D:[.52,.255],E:[.645,.24],F:[.785,.255],G:[.92,.25],H:[.15,.41],I:[.265,.415],J:[.385,.4],K:[.515,.395],L:[.625,.4],M:[.75,.395],N:[.895,.4],O:[.12,.595],P:[.27,.598],Q:[.4,.59],R:[.535,.59],S:[.66,.572],T:[.792,.57],U:[.908,.575],V:[.125,.795],W:[.305,.79],X:[.465,.778],Y:[.61,.77],Z:[.758,.768]},C={},I={};function st(){var x=q('input[name=\"sp-letter-style\"]:checked',R);return x?x.value:'Silver'}function img(s,cb){if(I[s])return cb(I[s]);var im=new Image;im.crossOrigin='anonymous';im.onload=function(){I[s]=im;cb(im)};im.src=U[s]||U.Silver}function cut(s,l,cb){var k=s+'|'+l;if(C[k])return cb(C[k]);img(s,function(im){try{var p=P[l]||P.A,w=im.naturalWidth,h=im.naturalHeight,c=document.createElement('canvas'),cw=s=='Silver 11mm'?230:300,ch=s=='Silver 11mm'?300:360,sw=cw,sh=ch,sx=Math.max(0,p[0]*w-sw\/2),sy=Math.max(0,p[1]*h-sh\/2);c.width=90;c.height=108;var x=c.getContext('2d');x.drawImage(im,sx,sy,sw,sh,0,0,c.width,c.height);var d=x.getImageData(0,0,c.width,c.height),a=d.data;for(var i=0;i\u003ca.length;i+=4){var r=a[i],g=a[i+1],b=a[i+2],m=Math.max(r,g,b),n=Math.min(r,g,b);if((r\u003e232\u0026\u0026g\u003e226\u0026\u0026b\u003e214)||(m\u003e242\u0026\u0026m-n\u003c30))a[i+3]=0}x.putImageData(d,0,0);C[k]=c.toDataURL('image\/png');cb(C[k])}catch(e){cb('')}})}function apply(){R=document.getElementById('sp-collar-builder');if(!R)return;var s=st();qa('[data-sp-preview-name] .sp-preview-slot.has-piece:not(.has-charm)',R).forEach(function(el){var l=(el.textContent||'').trim().charAt(0).toUpperCase();if(!\/^[A-Z]$\/.test(l)||el.dataset.real==s+l)return;el.dataset.real=s+l;cut(s,l,function(src){if(src)el.innerHTML='\u003cimg class=\"sp-real-letter\" alt=\"'+l+'\" src=\"'+src+'\"\u003e'})})}function boot(){R=document.getElementById('sp-collar-builder');if(!R)return;var css=document.createElement('style');css.textContent='#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot .sp-real-letter{width:23px;height:27px;object-fit:contain;filter:drop-shadow(0 1px 1px rgba(0,0,0,.25))}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-small .sp-real-letter{width:18px;height:22px}';document.head.appendChild(css);if(window.MutationObserver)new MutationObserver(function(){setTimeout(apply,20)}).observe(R,{childList:true,subtree:true,characterData:true});R.addEventListener('input',function(){setTimeout(apply,80)},true);R.addEventListener('change',function(){setTimeout(apply,80)},true);R.addEventListener('click',function(){setTimeout(apply,80);setTimeout(apply,300)},true);setTimeout(apply,300);setTimeout(apply,1000);setTimeout(apply,2200)}document.addEventListener('DOMContentLoaded',boot);setTimeout(boot,300);setTimeout(boot,1200)})();\u003c\/script\u003e\"'\"'\u003cscript data-sp-letter-reference-move\u003e(function(){function m(){var r=document.querySelector('[data-sp-letter-reference]'),b=document.getElementById('sp-collar-builder'),f=b\u0026\u0026b.querySelector('.sp-builder-fieldset');if(r\u0026\u0026f\u0026\u0026r.parentNode!==b)f.after(r)}document.addEventListener('DOMContentLoaded',m);setTimeout(m,300);setTimeout(m,1200);setTimeout(m,2500)})();\u003c\/script\u003e\u003cstyle data-sp-letter-reference-style\u003e#sp-collar-builder .sp-letter-reference{margin:12px 0 14px;padding:12px;border:1px solid #eee5d9;border-radius:8px;background:#fffaf2}#sp-collar-builder .sp-letter-reference-head{display:flex;justify-content:space-between;gap:10px;margin-bottom:10px}#sp-collar-builder .sp-letter-reference-head strong{font-size:13px}#sp-collar-builder .sp-letter-reference-head span{font-size:12px;color:#6c6256;text-align:right}#sp-collar-builder .sp-letter-reference-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}#sp-collar-builder .sp-letter-reference figure{margin:0}#sp-collar-builder .sp-letter-reference img{display:block;width:100%;aspect-ratio:1.25\/1;object-fit:contain;border-radius:6px;border:1px solid #eee5d9;background:#f8f3ea}#sp-collar-builder .sp-letter-reference figcaption{margin-top:6px;font-size:12px;font-weight:700;text-align:center}\u003c\/style\u003e\u003cdiv class=\"sp-letter-reference\" data-sp-letter-reference\u003e\n\u003cdiv class=\"sp-letter-reference-head\"\u003e\n\u003cstrong\u003eLetter style reference\u003c\/strong\u003e\u003cspan\u003eReal letter photos for each finish.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-letter-reference-grid\"\u003e\n\u003cfigure\u003e\u003cimg src=\"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/168_aa55a61c-84e0-4386-8125-82415a99b5f2.png?v=1782479450\" alt=\"Silver collar letters\" loading=\"lazy\"\u003e\u003cfigcaption\u003eSilver\u003c\/figcaption\u003e\u003c\/figure\u003e\u003cfigure\u003e\u003cimg src=\"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/170_6eb3e3c0-ef5a-4b2f-888f-7f4118018f3c.png?v=1782479450\" alt=\"Black collar letters\" loading=\"lazy\"\u003e\u003cfigcaption\u003eBlack\u003c\/figcaption\u003e\u003c\/figure\u003e\u003cfigure\u003e\u003cimg src=\"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/169_b55b69a4-36f8-4876-88f8-538f10ce4f3d.png?v=1782479450\" alt=\"Silver 11mm collar letters\" loading=\"lazy\"\u003e\u003cfigcaption\u003eSilver 11mm\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003cdiv class=\"sp-product-description\"\u003e\n\u003cp\u003eCreate a collar that feels made for your pet. Choose the collar colour and size, then personalize it with slide-on letters and optional charms.\u003c\/p\u003e\n\u003ch3\u003eDetails\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvailable in multiple colours and sizes.\u003c\/li\u003e\n\u003cli\u003eCompatible with collar letter add-ons and charm add-ons.\u003c\/li\u003e\n\u003cli\u003eUse the builder below to add the collar and matching letter inventory in one step.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003cdiv data-charm-handle=\"collar-charm-add-on\" data-letter-handle=\"collar-letter-add-on\" class=\"sp-collar-builder\" id=\"sp-collar-builder\"\u003e\n\u003cdiv class=\"sp-builder-header\"\u003e\n\u003cp class=\"sp-builder-kicker\"\u003ePersonalized collar studio\u003c\/p\u003e\n\u003ch3\u003eDesign their signature collar\u003c\/h3\u003e\n\u003cp\u003eBuild the collar as a complete set: choose the name, match the letter finish, then add a charm by photo.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv data-sp-studio-preview=\"\" class=\"sp-studio-preview\"\u003e\n\u003cdiv class=\"sp-preview-stage\"\u003e\n\u003cdiv data-sp-preview-collar=\"\" class=\"sp-preview-collar\"\u003e\n\u003cdiv class=\"sp-preview-strap\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-ring sp-preview-ring-left\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-ring sp-preview-ring-right\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-buckle\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv data-sp-preview-name=\"\" class=\"sp-preview-name\"\u003e\u003cspan\u003eYOURPET\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv hidden=\"\" data-sp-preview-charm=\"\" class=\"sp-preview-charm\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-meta\"\u003e\n\u003cstrong data-sp-preview-title=\"\"\u003eYour pet's collar\u003c\/strong\u003e \u003cspan data-sp-preview-subtitle=\"\"\u003eChoose size and colour above, then personalize below.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-builder-field\"\u003e\n\u003clabel for=\"sp-pet-name\"\u003ePet name or initials\u003c\/label\u003e \u003cinput autocomplete=\"off\" placeholder=\"LUNA\" maxlength=\"10\" type=\"text\" class=\"sp-builder-input\" id=\"sp-pet-name\"\u003e \u003csmall\u003eLetters A-Z only. Each letter is added separately so inventory stays accurate.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cfieldset class=\"sp-builder-field sp-builder-fieldset\"\u003e\n\u003clegend\u003eLetter style\u003c\/legend\u003e\n\u003cdiv aria-label=\"Letter style\" role=\"radiogroup\" class=\"sp-style-options\"\u003e\n\u003clabel class=\"sp-style-option is-selected\"\u003e \u003cinput checked value=\"Silver\" name=\"sp-letter-style\" type=\"radio\"\u003e \u003cspan class=\"sp-style-swatch sp-style-silver\"\u003e\u003c\/span\u003e \u003cspan\u003eSilver\u003c\/span\u003e \u003c\/label\u003e \u003clabel class=\"sp-style-option\"\u003e \u003cinput value=\"Black\" name=\"sp-letter-style\" type=\"radio\"\u003e \u003cspan class=\"sp-style-swatch sp-style-black\"\u003e\u003c\/span\u003e \u003cspan\u003eBlack\u003c\/span\u003e \u003c\/label\u003e \u003clabel class=\"sp-style-option\"\u003e \u003cinput value=\"Silver 11mm\" name=\"sp-letter-style\" type=\"radio\"\u003e \u003cspan class=\"sp-style-swatch sp-style-silver-small\"\u003e\u003c\/span\u003e \u003cspan\u003eSilver 11mm\u003c\/span\u003e \u003c\/label\u003e\n\u003c\/div\u003e\n\u003c\/fieldset\u003e\n\u003cdiv aria-live=\"polite\" class=\"sp-letter-preview\"\u003e\u003cspan class=\"sp-preview-empty\"\u003eType a name to preview letters.\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv data-sp-layout-planner=\"\" class=\"sp-layout-planner\"\u003e\n\u003cdiv class=\"sp-layout-head\"\u003e\n\u003cstrong\u003eCollar hole layout\u003c\/strong\u003e \u003csmall data-sp-layout-summary=\"\"\u003eChoose letters and charms to arrange the collar.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cdiv aria-label=\"Personalization limits\" class=\"sp-layout-rules\"\u003e\n\u003cspan\u003eLetters only: max 10\u003c\/span\u003e \u003cspan\u003eCharms only: max 8\u003c\/span\u003e \u003cspan\u003eLetters + charms: max 8 total\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv aria-label=\"Collar hole layout\" data-sp-hole-track=\"\" class=\"sp-hole-track\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv aria-label=\"Selected letters and charms\" data-sp-layout-tray=\"\" class=\"sp-layout-tray\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cp role=\"status\" data-sp-layout-message=\"\" class=\"sp-layout-message\"\u003e \u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-builder-field\"\u003e\n\u003clabel\u003eCharm add-on\u003c\/label\u003e\n\u003cdiv class=\"sp-charm-story\"\u003e\n\u003cstrong\u003eMake it feel like theirs.\u003c\/strong\u003e \u003cspan\u003eStart with a curated pick, or open the full charm library when you want to browse every photo.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-charm-picker\"\u003e\n\u003cdiv data-sp-selected-charm=\"\" class=\"sp-selected-charm\"\u003e\n\u003cdiv data-sp-selected-charm-thumb=\"\" class=\"sp-selected-charm-thumb\"\u003e-\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cstrong data-sp-selected-charm-name=\"\"\u003eNo charm selected\u003c\/strong\u003e \u003csmall data-sp-selected-charm-note=\"\"\u003eOptional finishing touch.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton aria-expanded=\"false\" data-sp-charm-toggle=\"\" class=\"sp-charm-toggle\" type=\"button\"\u003e Browse charms \u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv aria-live=\"polite\" data-sp-featured-charms=\"\" class=\"sp-featured-charms\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv hidden=\"\" data-sp-charm-panel=\"\" class=\"sp-charm-panel\"\u003e\n\u003cdiv class=\"sp-charm-panel-head\"\u003e\n\u003cdiv\u003e\n\u003cstrong\u003eCharm library\u003c\/strong\u003e \u003csmall data-sp-charm-count=\"\"\u003eLoading charm photos...\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cbutton data-sp-charm-clear=\"\" class=\"sp-charm-clear\" type=\"button\"\u003eNo charm\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv aria-label=\"Charm categories\" data-sp-charm-tabs=\"\" class=\"sp-charm-tabs\"\u003e\n\u003cbutton data-category=\"all\" class=\"is-active\" type=\"button\"\u003eAll\u003c\/button\u003e \u003cbutton data-category=\"heart\" type=\"button\"\u003eHeart\u003c\/button\u003e \u003cbutton data-category=\"cross\" type=\"button\"\u003eCross\u003c\/button\u003e \u003cbutton data-category=\"gem\" type=\"button\"\u003eGem\u003c\/button\u003e \u003cbutton data-category=\"flower\" type=\"button\"\u003eFlower\u003c\/button\u003e \u003cbutton data-category=\"star\" type=\"button\"\u003eStar\u003c\/button\u003e \u003cbutton data-category=\"other\" type=\"button\"\u003eOther\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv aria-live=\"polite\" data-sp-charm-grid=\"\" class=\"sp-charm-grid\"\u003e\n\u003cp class=\"sp-charm-loading\"\u003eLoading charm photos...\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton data-sp-builder-submit=\"\" class=\"sp-builder-submit\" type=\"button\"\u003e Add personalized set to cart \u003c\/button\u003e\n\u003cp role=\"status\" data-sp-builder-message=\"\" class=\"sp-builder-message\"\u003e \u003c\/p\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n  .sp-collar-builder {\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 18px;\n    margin: 18px 0;\n    background: #fffdf8;\n    color: #252525;\n  }\n\n  .sp-native-personalizer-hidden {\n    display: none !important;\n  }\n\n  body.sp-collar-gallery-intro media-gallery slideshow-slide,\n  body.sp-collar-gallery-intro media-gallery .slideshow-controls__thumbnail {\n    display: none !important;\n  }\n\n  body.sp-collar-gallery-intro media-gallery slideshow-slide[data-sp-intro-media],\n  body.sp-collar-gallery-intro media-gallery .slideshow-controls__thumbnail[data-sp-intro-media] {\n    display: block !important;\n  }\n\n  body.sp-collar-gallery-color-mode media-gallery slideshow-slide[data-sp-intro-media],\n  body.sp-collar-gallery-color-mode media-gallery .slideshow-controls__thumbnail[data-sp-intro-media] {\n    display: none !important;\n  }\n\n  body.sp-collar-gallery-color-mode media-gallery slideshow-slide:not([data-sp-intro-media]) {\n    display: flex !important;\n  }\n\n  body.sp-collar-gallery-color-mode media-gallery .slideshow-controls__thumbnail:not([data-sp-intro-media]) {\n    display: block !important;\n  }\n\n  .sp-builder-header {\n    border-bottom: 1px solid rgba(35, 35, 35, 0.1);\n    padding-bottom: 14px;\n    margin-bottom: 16px;\n  }\n\n  .sp-builder-kicker {\n    margin: 0 0 6px;\n    font-size: 12px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: #7b6c58;\n  }\n\n  .sp-builder-header h3 {\n    margin: 0 0 6px;\n    font-size: 22px;\n    line-height: 1.2;\n  }\n\n  .sp-builder-header p,\n  .sp-builder-field small,\n  .sp-selected-charm small,\n  .sp-builder-guide p,\n  .sp-builder-message {\n    margin: 0;\n    font-size: 13px;\n    line-height: 1.45;\n    color: #6c6256;\n  }\n\n  .sp-studio-preview {\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 8px;\n    overflow: hidden;\n    background: #f7f3ea;\n    margin: 16px 0;\n  }\n\n  .sp-preview-stage {\n    min-height: 184px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 22px 18px;\n    background:\n      linear-gradient(90deg, rgba(35, 35, 35, 0.035) 1px, transparent 1px),\n      linear-gradient(180deg, rgba(35, 35, 35, 0.035) 1px, transparent 1px),\n      radial-gradient(circle at 22% 18%, rgba(255, 255, 255, 0.92), transparent 34%),\n      linear-gradient(135deg, #fffaf2, #eadfcf);\n    background-size: 22px 22px, 22px 22px, auto, auto;\n  }\n\n  .sp-preview-collar {\n    position: relative;\n    width: min(100%, 470px);\n    height: 116px;\n    transition: width 0.18s ease, height 0.18s ease;\n  }\n\n  .sp-preview-collar.is-xs {\n    width: min(72%, 330px);\n    height: 96px;\n  }\n\n  .sp-preview-collar.is-s {\n    width: min(82%, 380px);\n    height: 104px;\n  }\n\n  .sp-preview-collar.is-m {\n    width: min(92%, 430px);\n    height: 112px;\n  }\n\n  .sp-preview-collar.is-l {\n    width: min(100%, 470px);\n    height: 116px;\n  }\n\n  .sp-preview-collar.is-xl {\n    width: min(100%, 520px);\n    height: 124px;\n  }\n\n  .sp-preview-strap {\n    position: absolute;\n    left: 6%;\n    right: 6%;\n    top: 42px;\n    height: 30px;\n    border-radius: 999px;\n    background: #f8f6ef;\n    border: 1px solid rgba(35, 35, 35, 0.22);\n    box-shadow: inset 0 3px 10px rgba(255, 255, 255, 0.65), inset 0 -4px 10px rgba(0, 0, 0, 0.12);\n  }\n\n  .sp-preview-collar.is-xs .sp-preview-strap {\n    left: 10%;\n    right: 10%;\n    top: 40px;\n    height: 22px;\n  }\n\n  .sp-preview-collar.is-s .sp-preview-strap {\n    left: 8%;\n    right: 8%;\n    top: 41px;\n    height: 25px;\n  }\n\n  .sp-preview-collar.is-m .sp-preview-strap {\n    top: 42px;\n    height: 28px;\n  }\n\n  .sp-preview-collar.is-xl .sp-preview-strap {\n    left: 5%;\n    right: 5%;\n    top: 43px;\n    height: 34px;\n  }\n\n  .sp-preview-ring,\n  .sp-preview-buckle {\n    position: absolute;\n    top: 36px;\n    width: 20px;\n    height: 36px;\n    border: 4px solid #c7c9cc;\n    border-radius: 7px;\n    background: rgba(255, 255, 255, 0.42);\n    box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.9), 0 2px 5px rgba(0, 0, 0, 0.12);\n  }\n\n  .sp-preview-ring-left {\n    left: 9%;\n  }\n\n  .sp-preview-ring-right {\n    right: 9%;\n  }\n\n  .sp-preview-buckle {\n    left: 15%;\n    width: 38px;\n  }\n\n  .sp-preview-name {\n    position: absolute;\n    left: 50%;\n    top: 33px;\n    transform: translateX(-50%);\n    display: flex;\n    gap: 3px;\n    align-items: center;\n    justify-content: center;\n    min-height: 54px;\n    max-width: 66%;\n    padding: 0 8px;\n    white-space: nowrap;\n  }\n\n  .sp-preview-name span {\n    position: relative;\n    min-width: 19px;\n    height: 28px;\n    border-radius: 0;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    font-family: \"Arial Rounded MT Bold\", \"Arial Black\", \"Helvetica Neue\", sans-serif;\n    font-weight: 900;\n    font-size: 18px;\n    line-height: 1;\n    letter-spacing: 0;\n    border: 0;\n    background: transparent;\n    color: #eceeee;\n    -webkit-text-stroke: 1.25px #565d64;\n    text-shadow:\n      0 -1px 0 #ffffff,\n      1px 0 0 #858d94,\n      -1px 0 0 #cbd0d5,\n      0 2px 0 #656d75,\n      0 3px 3px rgba(0, 0, 0, 0.24);\n    filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.22));\n  }\n\n  .sp-preview-name.is-black span {\n    color: #111;\n    -webkit-text-stroke: 1.25px #777e86;\n    text-shadow:\n      0 -1px 0 #333,\n      1px 0 0 #a5abb1,\n      -1px 0 0 #4b5055,\n      0 2px 0 #757c84,\n      0 3px 3px rgba(0, 0, 0, 0.3);\n    filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.28));\n  }\n\n  .sp-preview-name.is-small span {\n    min-width: 15px;\n    height: 23px;\n    font-size: 15px;\n    -webkit-text-stroke-width: 0.9px;\n  }\n\n  .sp-preview-name span.has-letter-art,\n  .sp-letter-chip.has-letter-art {\n    color: transparent;\n    -webkit-text-stroke: 0;\n    text-shadow: none;\n  }\n\n  .sp-preview-name span.has-letter-art {\n    min-width: 24px;\n    width: 24px;\n    height: 30px;\n  }\n\n  .sp-preview-name.is-small span.has-letter-art {\n    min-width: 17px;\n    width: 17px;\n    height: 22px;\n  }\n\n  .sp-preview-collar.is-xs .sp-preview-name {\n    top: 31px;\n    transform: translateX(-50%) scale(0.82);\n  }\n\n  .sp-preview-collar.is-s .sp-preview-name {\n    top: 32px;\n    transform: translateX(-50%) scale(0.9);\n  }\n\n  .sp-preview-collar.is-xl .sp-preview-name {\n    top: 35px;\n    transform: translateX(-50%) scale(1.08);\n  }\n\n  .sp-preview-name span.has-letter-art img,\n  .sp-letter-chip.has-letter-art img {\n    display: block;\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n    filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.18));\n  }\n\n  .sp-preview-name span.has-letter-art img {\n    --sp-preview-letter-rotate: 0deg;\n    transform: rotate(var(--sp-preview-letter-rotate)) scale(0.88);\n    transform-origin: center;\n  }\n\n  .sp-preview-name span.sp-preview-layout-charm {\n    width: 26px;\n    min-width: 26px;\n    height: 26px;\n    border-radius: 50%;\n    overflow: hidden;\n    background: rgba(255, 255, 255, 0.74);\n    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\n  }\n\n  .sp-preview-name.is-small span.sp-preview-layout-charm {\n    width: 20px;\n    min-width: 20px;\n    height: 20px;\n  }\n\n  .sp-preview-name span.sp-preview-layout-charm img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  .sp-preview-charm {\n    position: absolute;\n    right: 20%;\n    top: 70px;\n    width: 48px;\n    height: 48px;\n    border-radius: 50%;\n    overflow: hidden;\n    background: #fff;\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    box-shadow: 0 5px 12px rgba(0, 0, 0, 0.18);\n  }\n\n  .sp-preview-charm img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n\n  .sp-preview-meta {\n    display: flex;\n    justify-content: space-between;\n    gap: 10px;\n    padding: 11px 14px;\n    background: #fff;\n    border-top: 1px solid rgba(35, 35, 35, 0.08);\n  }\n\n  .sp-preview-meta span {\n    color: #6c6256;\n    font-size: 12px;\n    text-align: right;\n  }\n\n  .sp-builder-field {\n    margin: 14px 0;\n  }\n\n  .sp-builder-field label,\n  .sp-builder-fieldset legend {\n    display: block;\n    margin-bottom: 7px;\n    font-size: 14px;\n    font-weight: 650;\n  }\n\n  .sp-builder-fieldset {\n    border: 0;\n    padding: 0;\n  }\n\n  .sp-builder-input {\n    width: 100%;\n    min-height: 44px;\n    border: 1px solid rgba(35, 35, 35, 0.18);\n    border-radius: 6px;\n    padding: 10px 12px;\n    background: #fff;\n    color: #252525;\n    font: inherit;\n  }\n\n  .sp-hidden-select {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    overflow: hidden !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n  }\n\n  .sp-style-options {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 8px;\n  }\n\n  .sp-style-option {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    min-height: 44px;\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    border-radius: 6px;\n    padding: 9px 10px;\n    cursor: pointer;\n    background: #fff;\n    font-size: 13px;\n  }\n\n  .sp-style-option input {\n    position: absolute;\n    opacity: 0;\n    pointer-events: none;\n  }\n\n  .sp-style-option.is-selected {\n    border-color: #202020;\n    box-shadow: inset 0 0 0 1px #202020;\n  }\n\n  .sp-style-swatch {\n    width: 18px;\n    height: 18px;\n    border-radius: 50%;\n    border: 1px solid rgba(35, 35, 35, 0.22);\n    flex: 0 0 auto;\n  }\n\n  .sp-style-silver {\n    background: linear-gradient(135deg, #f7f8fa, #9aa1a8 48%, #ffffff);\n  }\n\n  .sp-style-black {\n    background: linear-gradient(135deg, #4b4b4b, #050505 55%, #777);\n  }\n\n  .sp-style-silver-small {\n    background: linear-gradient(135deg, #ffffff, #c7ccd2 50%, #eef2f5);\n  }\n\n  .sp-letter-preview {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 9px;\n    min-height: 48px;\n    align-items: center;\n    margin: 12px 0;\n  }\n\n  .sp-letter-chip {\n    min-width: 34px;\n    height: 42px;\n    border-radius: 7px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0 4px;\n    background: linear-gradient(180deg, #fffdfa, #f4eee4);\n    color: #eceeee;\n    font-family: \"Arial Rounded MT Bold\", \"Arial Black\", \"Helvetica Neue\", sans-serif;\n    font-size: 26px;\n    font-weight: 900;\n    line-height: 1;\n    letter-spacing: 0;\n    -webkit-text-stroke: 1.25px #565d64;\n    text-shadow:\n      0 -1px 0 #ffffff,\n      1px 0 0 #858d94,\n      -1px 0 0 #cbd0d5,\n      0 2px 0 #656d75,\n      0 3px 3px rgba(0, 0, 0, 0.22);\n    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85), 0 2px 5px rgba(0, 0, 0, 0.08);\n  }\n\n  .sp-letter-preview.is-black .sp-letter-chip {\n    color: #111;\n    -webkit-text-stroke: 1.25px #777e86;\n    text-shadow:\n      0 -1px 0 #333,\n      1px 0 0 #a5abb1,\n      -1px 0 0 #4b5055,\n      0 2px 0 #757c84,\n      0 3px 3px rgba(0, 0, 0, 0.26);\n  }\n\n  .sp-letter-preview.is-small .sp-letter-chip {\n    min-width: 30px;\n    height: 38px;\n    font-size: 23px;\n    -webkit-text-stroke-width: 0.9px;\n  }\n\n  .sp-letter-chip.has-letter-art {\n    min-width: 42px;\n    width: 42px;\n    padding: 4px;\n  }\n\n  .sp-letter-preview.is-small .sp-letter-chip.has-letter-art {\n    min-width: 36px;\n    width: 36px;\n    height: 38px;\n  }\n\n  .sp-layout-planner {\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 8px;\n    padding: 14px;\n    margin: 14px 0 18px;\n    background: #fff;\n  }\n\n  .sp-layout-head {\n    display: flex;\n    justify-content: space-between;\n    gap: 10px;\n    align-items: flex-start;\n    margin-bottom: 12px;\n  }\n\n  .sp-layout-head strong {\n    font-size: 14px;\n  }\n\n  .sp-layout-head small,\n  .sp-layout-message {\n    margin: 0;\n    font-size: 12px;\n    line-height: 1.4;\n    color: #6c6256;\n    text-align: right;\n  }\n\n  .sp-layout-rules {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin: -2px 0 14px;\n  }\n\n  .sp-layout-rules span {\n    display: inline-flex;\n    align-items: center;\n    min-height: 28px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 999px;\n    padding: 5px 9px;\n    background: #fbf8f1;\n    color: #5f564d;\n    font-size: 11px;\n    font-weight: 700;\n    line-height: 1.25;\n  }\n\n  .sp-hole-track {\n    display: grid;\n    grid-template-columns: repeat(10, minmax(0, 1fr));\n    gap: 7px;\n  }\n\n  .sp-hole {\n    position: relative;\n    min-width: 0;\n    appearance: none;\n    aspect-ratio: 1;\n    border: 1px solid rgba(35, 35, 35, 0.18);\n    border-radius: 999px;\n    background: #faf7ef;\n    color: #282520;\n    font: inherit;\n    font-size: 12px;\n    font-weight: 700;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    transition: border-color 0.16s ease, box-shadow 0.16s ease, background 0.16s ease;\n  }\n\n  .sp-hole::after {\n    content: attr(data-hole);\n    position: absolute;\n    bottom: -15px;\n    left: 50%;\n    transform: translateX(-50%);\n    font-size: 9px;\n    font-weight: 500;\n    color: #9a8f82;\n  }\n\n  .sp-hole:hover {\n    border-color: rgba(35, 35, 35, 0.42);\n  }\n\n  .sp-hole.is-target {\n    border-color: #202020;\n    box-shadow: 0 0 0 3px rgba(32, 32, 32, 0.12);\n  }\n\n  .sp-hole.is-filled {\n    background: #f3eadc;\n    box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.68);\n  }\n\n  .sp-hole.is-charm {\n    color: #7c4f22;\n  }\n\n  .sp-hole img {\n    width: 78%;\n    height: 78%;\n    object-fit: cover;\n    border-radius: 50%;\n    pointer-events: none;\n  }\n\n  .sp-layout-tray {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-top: 22px;\n    padding: 10px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 8px;\n    background: #fffdfa;\n  }\n\n  .sp-layout-piece {\n    display: inline-flex;\n    align-items: center;\n    gap: 4px;\n    padding: 3px;\n    border: 1px solid rgba(35, 35, 35, 0.08);\n    border-radius: 999px;\n    background: #fff;\n  }\n\n  .sp-layout-chip {\n    min-width: 38px;\n    height: 38px;\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    border-radius: 999px;\n    background: #f8f3ea;\n    color: #282520;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0 10px;\n    font-size: 12px;\n    font-weight: 800;\n    line-height: 1;\n    cursor: grab;\n    transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;\n  }\n\n  .sp-layout-chip:active {\n    cursor: grabbing;\n  }\n\n  .sp-layout-chip.is-active {\n    border-color: #202020;\n    box-shadow: 0 0 0 3px rgba(32, 32, 32, 0.12);\n    transform: translateY(-1px);\n  }\n\n  .sp-layout-chip.is-placed {\n    background: #f2eadf;\n  }\n\n  .sp-layout-chip img {\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    object-fit: cover;\n    display: block;\n    pointer-events: none;\n  }\n\n  .sp-layout-remove {\n    width: 30px;\n    height: 30px;\n    flex: 0 0 30px;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 999px;\n    background: #f7f3ea;\n    color: #5f3a31;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0;\n    font-size: 16px;\n    font-weight: 800;\n    line-height: 1;\n    cursor: pointer;\n  }\n\n  .sp-layout-remove:hover {\n    border-color: rgba(95, 58, 49, 0.42);\n    background: #efe3d5;\n  }\n\n  .sp-layout-message {\n    min-height: 17px;\n    margin-top: 18px;\n    text-align: left;\n  }\n\n  .sp-layout-message.is-error {\n    color: #9f2f2f;\n  }\n\n  .sp-charm-picker {\n    display: grid;\n    grid-template-columns: 1fr auto;\n    gap: 10px;\n    align-items: stretch;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 10px;\n    background: #fff;\n  }\n\n  .sp-charm-story {\n    display: grid;\n    gap: 2px;\n    margin: 0 0 8px;\n    padding: 10px 12px;\n    border-left: 3px solid #202020;\n    background: #f7f3ea;\n    border-radius: 6px;\n  }\n\n  .sp-charm-story strong {\n    font-size: 13px;\n    line-height: 1.3;\n  }\n\n  .sp-charm-story span {\n    color: #6c6256;\n    font-size: 12px;\n    line-height: 1.4;\n  }\n\n  .sp-selected-charm {\n    display: flex;\n    gap: 10px;\n    align-items: center;\n    min-width: 0;\n  }\n\n  .sp-selected-charm-thumb {\n    width: 48px;\n    height: 48px;\n    border-radius: 7px;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    background: #f7f3ea;\n    color: #8a8175;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n    flex: 0 0 auto;\n  }\n\n  .sp-selected-charm-thumb img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n\n  .sp-selected-charm strong {\n    display: block;\n    font-size: 14px;\n    line-height: 1.25;\n  }\n\n  .sp-charm-toggle {\n    min-height: 48px;\n    border: 0;\n    border-radius: 6px;\n    background: #202020;\n    color: #fff;\n    padding: 0 14px;\n    cursor: pointer;\n    font: inherit;\n    font-weight: 700;\n    white-space: nowrap;\n  }\n\n  .sp-featured-charms {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: 8px;\n    margin-top: 10px;\n  }\n\n  .sp-featured-charm {\n    position: relative;\n    min-height: 124px;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 7px;\n    background: #fff;\n    cursor: pointer;\n    text-align: left;\n    font: inherit;\n    color: inherit;\n    overflow: hidden;\n  }\n\n  .sp-featured-charm.is-selected {\n    border-color: #202020;\n    box-shadow: inset 0 0 0 1px #202020;\n  }\n\n  .sp-charm-qty {\n    position: absolute;\n    top: 6px;\n    right: 6px;\n    min-width: 24px;\n    height: 24px;\n    border-radius: 999px;\n    padding: 0 7px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    background: #202020;\n    color: #fff;\n    font-size: 11px;\n    font-weight: 800;\n    line-height: 1;\n    box-shadow: 0 2px 7px rgba(0, 0, 0, 0.22);\n    pointer-events: none;\n  }\n\n  .sp-featured-charm img,\n  .sp-featured-charm .sp-charm-empty-thumb {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    border-radius: 6px;\n    object-fit: cover;\n    background: #f7f3ea;\n    border: 1px solid rgba(35, 35, 35, 0.08);\n  }\n\n  .sp-featured-charm span {\n    display: block;\n    margin-top: 6px;\n    font-size: 11px;\n    line-height: 1.25;\n    color: #252525;\n  }\n\n  .sp-charm-panel {\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    margin-top: 10px;\n    padding: 12px;\n    background: #fff;\n  }\n\n  .sp-charm-panel-head {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n    gap: 12px;\n    margin-bottom: 10px;\n  }\n\n  .sp-charm-panel-head strong,\n  .sp-charm-panel-head small {\n    display: block;\n  }\n\n  .sp-charm-panel-head small {\n    margin-top: 2px;\n    color: #6c6256;\n    font-size: 12px;\n  }\n\n  .sp-charm-clear {\n    min-height: 34px;\n    border: 1px solid rgba(35, 35, 35, 0.16);\n    border-radius: 6px;\n    padding: 7px 10px;\n    background: #fff;\n    color: #252525;\n    cursor: pointer;\n    font: inherit;\n    font-size: 12px;\n    white-space: nowrap;\n  }\n\n  .sp-charm-tabs {\n    display: flex;\n    gap: 6px;\n    overflow-x: auto;\n    padding: 10px 0 2px;\n  }\n\n  .sp-charm-tabs button {\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    border-radius: 999px;\n    min-height: 34px;\n    padding: 7px 11px;\n    background: #fff;\n    color: #252525;\n    cursor: pointer;\n    font: inherit;\n    font-size: 12px;\n    white-space: nowrap;\n  }\n\n  .sp-charm-tabs button.is-active {\n    background: #202020;\n    border-color: #202020;\n    color: #fff;\n  }\n\n  .sp-charm-grid {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: 8px;\n    max-height: 460px;\n    overflow: auto;\n    padding: 8px 2px 2px;\n    margin-top: 10px;\n  }\n\n  .sp-charm-card {\n    position: relative;\n    display: grid;\n    gap: 6px;\n    align-content: start;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 7px;\n    background: #fff;\n    cursor: pointer;\n    text-align: left;\n    font: inherit;\n    color: inherit;\n  }\n\n  .sp-charm-card.is-selected {\n    border-color: #202020;\n    box-shadow: inset 0 0 0 1px #202020;\n  }\n\n  .sp-charm-card img,\n  .sp-charm-empty-thumb {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    border-radius: 6px;\n    object-fit: cover;\n    background: #f7f3ea;\n    border: 1px solid rgba(35, 35, 35, 0.08);\n  }\n\n  .sp-charm-empty-thumb {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: #8a8175;\n    font-size: 22px;\n  }\n\n  .sp-charm-card span {\n    font-size: 11px;\n    line-height: 1.25;\n    min-height: 28px;\n  }\n\n  .sp-charm-loading,\n  .sp-charm-empty {\n    grid-column: 1 \/ -1;\n    margin: 0;\n    color: #6c6256;\n    font-size: 13px;\n  }\n\n  .sp-builder-guide {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    border-top: 1px solid rgba(35, 35, 35, 0.1);\n    padding-top: 14px;\n    margin-top: 14px;\n  }\n\n  .sp-guide-toggle {\n    border: 1px solid rgba(35, 35, 35, 0.18);\n    border-radius: 6px;\n    background: #fff;\n    min-height: 38px;\n    padding: 8px 12px;\n    cursor: pointer;\n    font: inherit;\n    white-space: nowrap;\n  }\n\n  .sp-guide-panel {\n    margin-top: 12px;\n  }\n\n  .sp-guide-images {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 8px;\n  }\n\n  .sp-guide-card {\n    display: grid;\n    gap: 7px;\n  }\n\n  .sp-guide-card img {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    object-fit: cover;\n    border-radius: 6px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    background: #f7f3ea;\n  }\n\n  .sp-guide-card span {\n    color: #252525;\n    font-size: 12px;\n    font-weight: 700;\n    line-height: 1.25;\n  }\n\n  .sp-builder-submit {\n    width: 100%;\n    min-height: 48px;\n    border: 0;\n    border-radius: 6px;\n    margin-top: 16px;\n    background: #202020;\n    color: #fff;\n    font: inherit;\n    font-weight: 700;\n    cursor: pointer;\n  }\n\n  .sp-builder-submit[disabled] {\n    opacity: 0.55;\n    cursor: wait;\n  }\n\n  .sp-builder-message {\n    margin-top: 10px;\n  }\n\n  .sp-builder-message.is-error {\n    color: #b42318;\n  }\n\n  .sp-builder-message.is-success {\n    color: #087443;\n  }\n\n  @media (max-width: 640px) {\n    .sp-style-options,\n    .sp-guide-images {\n      grid-template-columns: 1fr;\n    }\n\n    .sp-charm-picker {\n      grid-template-columns: 1fr;\n    }\n\n    .sp-featured-charms {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n\n    .sp-charm-grid {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      max-height: 430px;\n    }\n\n    .sp-preview-meta {\n      display: block;\n    }\n\n    .sp-preview-meta span {\n      display: block;\n      margin-top: 3px;\n      text-align: left;\n    }\n\n    .sp-layout-head {\n      display: block;\n    }\n\n    .sp-layout-head small {\n      display: block;\n      margin-top: 3px;\n      text-align: left;\n    }\n\n    .sp-layout-rules {\n      margin-top: 10px;\n      margin-bottom: 16px;\n    }\n\n    .sp-layout-rules span {\n      min-height: 30px;\n      font-size: 11px;\n    }\n\n    .sp-hole-track {\n      grid-template-columns: repeat(5, minmax(42px, 1fr));\n      gap: 18px 8px;\n      padding-bottom: 4px;\n    }\n\n    .sp-hole {\n      min-height: 42px;\n      font-size: 13px;\n    }\n\n    .sp-hole::after {\n      bottom: -14px;\n      font-size: 10px;\n    }\n\n    .sp-layout-tray {\n      flex-wrap: nowrap;\n      overflow-x: auto;\n      -webkit-overflow-scrolling: touch;\n      scroll-snap-type: x proximity;\n      margin-top: 24px;\n      padding: 10px 8px;\n    }\n\n    .sp-layout-chip {\n      flex: 0 0 auto;\n      min-width: 46px;\n      height: 46px;\n      scroll-snap-align: start;\n      font-size: 14px;\n    }\n\n    .sp-layout-chip img {\n      width: 34px;\n      height: 34px;\n    }\n\n    .sp-layout-piece {\n      flex: 0 0 auto;\n      gap: 5px;\n      padding: 4px;\n    }\n\n    .sp-layout-remove {\n      width: 36px;\n      height: 36px;\n      flex-basis: 36px;\n      font-size: 18px;\n    }\n  }\n\u003c\/style\u003e\n\u003cp\u003e \u003c\/p\u003e\u003cscript data-sp-collar-studio-placement-fix\u003e(function(){function m(){var b=document.getElementById('sp-collar-builder'),o=document.querySelector('.free-collar-customizer');if(b){if(o){o.replaceWith(b);b.setAttribute('data-sp-moved','1')}}}m();window.addEventListener('load',m)})();\u003c\/script\u003e\u003cscript data-sp-collar-color-sync\u003e(function(){var m={white:'rgb(212,211,202)',yellow:'rgb(213,217,108)',black:'rgb(56,57,60)',magenta:'rgb(223,101,150)',pink:'rgb(235,176,199)',blue:'rgb(159,224,233)',purple:'rgb(127,92,143)',gold:'rgb(238,194,69)',orange:'rgb(219,165,113)',green:'rgb(104,185,121)'};function g(){var a=document.querySelectorAll('input[type=radio]'),i=0,r;for(;i\u003ca.length;i++){r=a[i];if(r.checked){if(r.name){if(r.name.toLowerCase().indexOf('color-')==0)return r.value.toLowerCase()}}}}function f(){var s=document.querySelector('.sp-preview-strap'),v=g();if(s){if(m[v]){s.style.background=m[v];s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.1),inset 0 14px 20px rgba(255,255,255,.35)'}}}document.addEventListener('change',f);window.addEventListener('load',f);setTimeout(f,500);f()})();\u003c\/script\u003e\u003cscript data-sp-collar-color-master\u003e(function(){var m={white:'rgb(212,211,202)',yellow:'rgb(213,217,108)',black:'rgb(56,57,60)',magenta:'rgb(223,101,150)',pink:'rgb(235,176,199)',blue:'rgb(159,224,233)',purple:'rgb(127,92,143)',gold:'rgb(238,194,69)',orange:'rgb(219,165,113)',green:'rgb(104,185,121)'};function c(){var r=document.querySelector('input[type=radio][name^=\"Color-\"]:checked');return r\u0026\u0026r.value?r.value.toLowerCase():''}function f(){var s=document.querySelector('.sp-preview-strap'),v=c();if(s){if(m[v]){s.style.backgroundColor=m[v];s.style.backgroundImage='none';s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.12),inset 0 14px 20px rgba(255,255,255,.25)'}}}document.addEventListener('change',f);window.addEventListener('load',f);setTimeout(f,100);setTimeout(f,1000);setInterval(f,300)})();\u003c\/script\u003e\u003cstyle data-sp-hole-polish\u003e\n#sp-collar-builder .sp-hole-track {\n  gap: 9px;\n  align-items: center;\n}\n#sp-collar-builder .sp-hole {\n  width: 34px;\n  height: 34px;\n  min-width: 34px;\n  border-radius: 999px;\n  border: 1px solid #ded6ca;\n  background: linear-gradient(180deg, #fffdf8, #f7f1e8);\n  box-shadow: 0 1px 2px rgba(35, 35, 35, 0.06), inset 0 1px 0 rgba(255, 255, 255, 0.9);\n  color: transparent;\n  font-size: 0;\n  line-height: 1;\n  position: relative;\n  display: inline-flex !important;\n  align-items: center;\n  justify-content: center;\n}\n#sp-collar-builder .sp-hole .sp-hole-number {\n  display: none !important;\n}\n#sp-collar-builder .sp-hole.is-empty::after {\n  content: \"\";\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 5px;\n  height: 5px;\n  border-radius: 50%;\n  transform: translate(-50%, -50%);\n  background: #cfc6ba;\n  opacity: 0.9;\n}\n#sp-collar-builder .sp-hole:not(.is-empty) {\n  width: 42px;\n  height: 42px;\n  min-width: 42px;\n  border-color: #c9bdae;\n  background: #fffaf2;\n  box-shadow: 0 0 0 4px #f8f1e7, 0 3px 9px rgba(35, 35, 35, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.95);\n}\n#sp-collar-builder .sp-hole:not(.is-empty)::after {\n  display: none;\n}\n#sp-collar-builder .sp-hole .sp-layout-chip {\n  width: 32px;\n  height: 32px;\n  border: 0;\n  background: transparent;\n  box-shadow: none;\n  color: #29241f;\n  font-size: 13px;\n  font-weight: 700;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n}\n#sp-collar-builder .sp-hole .sp-preview-layout-charm img,\n#sp-collar-builder .sp-hole .sp-layout-chip img {\n  width: 30px;\n  height: 30px;\n  object-fit: contain;\n}\n#sp-collar-builder .sp-hole.is-selected {\n  outline: 2px solid #8f7a5d;\n  outline-offset: 3px;\n}\n@media (max-width: 520px) {\n  #sp-collar-builder .sp-hole-track { gap: 6px; }\n  #sp-collar-builder .sp-hole { width: 29px; height: 29px; min-width: 29px; }\n  #sp-collar-builder .sp-hole:not(.is-empty) { width: 36px; height: 36px; min-width: 36px; box-shadow: 0 0 0 3px #f8f1e7, 0 2px 7px rgba(35,35,35,.08); }\n}\n\u003c\/style\u003e\n\u003cstyle data-sp-preview-hole-sync\u003e\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] {\n  left: 50%;\n  top: 43px;\n  width: 58%;\n  max-width: 58%;\n  min-height: 30px;\n  padding: 0;\n  transform: translateX(-50%);\n  display: grid !important;\n  grid-template-columns: repeat(10, minmax(0, 1fr));\n  gap: 4px;\n  align-items: center;\n  justify-items: center;\n  pointer-events: none;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot {\n  width: 20px;\n  height: 24px;\n  min-width: 0;\n  border: 0 !important;\n  background: transparent !important;\n  box-shadow: none !important;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  position: relative;\n  color: #f8f7f1;\n  font-size: 13px;\n  line-height: 1;\n  font-weight: 900;\n  text-shadow: 0 1px 1px rgba(0,0,0,.52), 0 0 1px rgba(0,0,0,.62);\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-empty::after {\n  content: \"\";\n  width: 4px;\n  height: 4px;\n  border-radius: 999px;\n  background: rgba(65, 75, 72, .42);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.35), 0 1px 0 rgba(255,255,255,.45);\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece {\n  width: 23px;\n  height: 25px;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece::before,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-charm::before {\n  display: none !important;\n  content: none !important;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot \u003e span,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot \u003e img,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot * {\n  position: relative;\n  z-index: 1;\n  background: transparent !important;\n  box-shadow: none !important;\n  border: 0 !important;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-charm img,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot .sp-preview-layout-charm img {\n  width: 22px;\n  height: 22px;\n  object-fit: contain;\n  border-radius: 0 !important;\n  mix-blend-mode: multiply;\n  filter: drop-shadow(0 1px 1px rgba(0,0,0,.28));\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-black {\n  color: #101010;\n  text-shadow: 0 1px 0 rgba(255,255,255,.45), 0 0 1px rgba(255,255,255,.35);\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-small {\n  font-size: 11px;\n}\n@media (max-width: 520px) {\n  #sp-collar-builder .sp-preview-name[data-sp-hole-preview] { width: 64%; max-width: 64%; gap: 2px; }\n  #sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot { width: 15px; height: 20px; font-size: 10px; }\n  #sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece { width: 17px; height: 20px; }\n}\n\u003c\/style\u003e\n\u003cscript data-sp-collar-builder-clean\u003e\n(function(){\n  var R=document.getElementById('sp-collar-builder');\n  if(!R || R.dataset.spCleanBuilderReady) return;\n  R.dataset.spCleanBuilderReady='1';\n  var q=function(s,p){return (p||R).querySelector(s)};\n  var a=function(s,p){return Array.prototype.slice.call((p||R).querySelectorAll(s))};\n  var LETTERS={}, CHARMS=[], selectedCharm=null, layout=[], selectedIndex=null, ready=false, lastSig='';\n  function esc(v){return String(v==null?'':v).replace(\/[\u0026\u003c\u003e\"']\/g,function(c){return {'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;','\"':'\u0026quot;',\"'\":'\u0026#39;'}[c]})}\n  function style(){var x=q('input[name=\"sp-letter-style\"]:checked');return x?x.value:'Silver'}\n  function name(){var i=q('#sp-pet-name');if(!i)return'';var max=selectedCharm?7:10;var v=i.value.toUpperCase().replace(\/[^A-Z]\/g,'').slice(0,max);if(i.value!==v)i.value=v;return v}\n  function key(s,l){return s+'|'+l}\n  function letterVariant(s,l){return LETTERS[key(s,l)]||LETTERS[key('Silver',l)]||null}\n  function chip(p){if(!p)return'';if(p.type==='charm')return '\u003cspan class=\"sp-layout-chip sp-preview-layout-charm\"\u003e\u003cimg alt=\"\" src=\"'+esc(p.img)+'\"\u003e\u003c\/span\u003e';return '\u003cspan class=\"sp-layout-chip '+(p.style==='Black'?'is-black ':'')+(p.style.indexOf('11mm')\u003e-1?'is-small':'')+'\"\u003e'+esc(p.letter)+'\u003c\/span\u003e'}\n  function pieces(){var s=style();var arr=name().split('').map(function(l,i){var v=letterVariant(s,l);return {type:'letter',uid:'L'+i+l,letter:l,style:s,variant:v\u0026\u0026v.id}});if(selectedCharm)arr.push({type:'charm',uid:'C'+selectedCharm.id,variant:selectedCharm.id,img:selectedCharm.img,title:selectedCharm.title});return arr}\n  function syncLayout(arr){var old={};layout.forEach(function(p,i){if(p)old[p.uid]=i});var next=Array(10).fill(null);var start=Math.max(0,Math.floor((10-arr.length)\/2));var cursor=start;arr.forEach(function(p){var oldIndex=old[p.uid];if(oldIndex!=null \u0026\u0026 !next[oldIndex]) next[oldIndex]=p;else{while(next[cursor])cursor++;if(cursor\u003c10)next[cursor]=p}});layout=next;selectedIndex=null}\n  function render(){var arr=pieces(), sig=arr.map(function(p){return p.uid+':'+(p.variant||'')}).join('|');if(sig!==lastSig){syncLayout(arr);lastSig=sig}var n=name(), s=style();a('.sp-style-option').forEach(function(l){var input=l.querySelector('input');l.classList.toggle('is-selected',!!input\u0026\u0026input.checked)});var collar=q('[data-sp-preview-collar]');if(collar){collar.classList.toggle('has-charm',!!selectedCharm)}var pn=q('[data-sp-preview-name]');if(pn){pn.classList.toggle('is-black',s==='Black');pn.classList.toggle('is-small',s.indexOf('11mm')\u003e-1);pn.innerHTML=(n||'YOURPET').split('').map(function(l){return '\u003cspan\u003e'+esc(l)+'\u003c\/span\u003e'}).join('')+(selectedCharm?'\u003cspan class=\"sp-preview-layout-charm\"\u003e\u003cimg alt=\"\" src=\"'+esc(selectedCharm.img)+'\"\u003e\u003c\/span\u003e':'')}var lp=q('.sp-letter-preview');if(lp)lp.innerHTML=n?arr.filter(function(p){return p.type==='letter'}).map(chip).join(''):'\u003cspan class=\"sp-preview-empty\"\u003eType a name to preview letters.\u003c\/span\u003e';var track=q('[data-sp-hole-track]');if(track){track.innerHTML=layout.map(function(p,i){return '\u003cbutton type=\"button\" class=\"sp-hole '+(p?'':'is-empty')+(selectedIndex===i?' is-selected':'')+'\" data-i=\"'+i+'\" aria-label=\"Hole '+(i+1)+(p?': '+(p.type==='letter'?p.letter:p.title):'')+'\"\u003e'+chip(p)+'\u003cspan class=\"sp-hole-number\"\u003e'+(i+1)+'\u003c\/span\u003e\u003c\/button\u003e'}).join('')}var tray=q('[data-sp-layout-tray]');if(tray)tray.innerHTML=layout.filter(Boolean).map(function(p){return '\u003cbutton type=\"button\" class=\"sp-layout-piece\" data-piece=\"'+esc(p.uid)+'\"\u003e'+chip(p)+'\u003c\/button\u003e'}).join('');var msg=q('[data-sp-layout-message]');if(msg)msg.textContent=arr.length?'Tap a letter or charm, then tap a hole to move it.':'';var sum=q('[data-sp-layout-summary]');if(sum)sum.textContent=n?'Arrange letters and charms on the collar holes.':'Type a name, then arrange letters and charms.';renderSelectedCharm()}\n  function category(t){t=t.toLowerCase();if(t.indexOf('heart')\u003e-1)return'Heart';if(t.indexOf('cross')\u003e-1)return'Cross';if(t.indexOf('gem')\u003e-1||t.indexOf('diamond')\u003e-1)return'Gem';if(t.indexOf('flower')\u003e-1)return'Flower';if(t.indexOf('star')\u003e-1)return'Star';return'Other'}\n  function charmCard(c,cls){return '\u003cbutton type=\"button\" class=\"'+cls+(selectedCharm\u0026\u0026selectedCharm.id===c.id?' is-selected':'')+'\" data-c=\"'+esc(c.id)+'\"\u003e\u003cimg alt=\"\" src=\"'+esc(c.img)+'\"\u003e\u003cspan\u003e'+esc(c.title.replace(\/ Charm$\/,''))+'\u003c\/span\u003e\u003c\/button\u003e'}\n  function renderCharms(filter){filter=filter||'All';var list=CHARMS.filter(function(c){return filter==='All'||c.category===filter});var count=q('[data-sp-charm-count]');if(count)count.textContent=list.length+' charms';var grid=q('[data-sp-charm-grid]');if(grid)grid.innerHTML=list.length?list.map(function(c){return charmCard(c,'sp-charm-card')}).join(''):'\u003cp class=\"sp-charm-loading\"\u003eNo charms in this category.\u003c\/p\u003e';var featured=q('[data-sp-featured-charms]');if(featured)featured.innerHTML=CHARMS.slice(0,6).map(function(c){return charmCard(c,'sp-featured-charm')}).join('');a('[data-sp-charm-tabs] button').forEach(function(b){b.classList.toggle('is-active',b.textContent.trim()===filter)});a('[data-c]').forEach(function(b){b.onclick=function(){selectedCharm=CHARMS.find(function(c){return c.id===b.dataset.c})||null;render();renderCharms(filter)}})}\n  function renderSelectedCharm(){var t=q('[data-sp-selected-charm-thumb]'), n=q('[data-sp-selected-charm-name]'), note=q('[data-sp-selected-charm-note]');if(t)t.innerHTML=selectedCharm?'\u003cimg alt=\"\" src=\"'+esc(selectedCharm.img)+'\"\u003e':'-';if(n)n.textContent=selectedCharm?selectedCharm.title:'No charm selected';if(note)note.textContent=selectedCharm?'Added to the collar layout.':'Optional finishing touch.'}\n  function variantId(){var x=document.querySelector('form[action*=\"\/cart\/add\"] input[name=\"id\"], product-form input[name=\"id\"], input.product-variant-id');return (x\u0026\u0026x.value)||new URLSearchParams(location.search).get('variant')||''}\n  function say(t,bad){var m=q('[data-sp-builder-message]');if(m){m.textContent=t;m.className='sp-builder-message '+(bad?'is-error':'is-success')}}\n  function add(){if(!ready)return say('Please wait for letters and charms to load.',true);var n=name();if(!n)return say('Please type a pet name first.',true);var id=variantId();if(!id)return say('Please choose collar size and colour first.',true);var used=layout.filter(Boolean);var missing=used.filter(function(p){return !p.variant});if(missing.length)return say('One selected letter or charm is unavailable. Please choose another option.',true);var props={'Pet name':n,'Letter style':style(),'Collar layout':used.map(function(p,i){return (i+1)+': '+(p.type==='letter'?p.letter:p.title)}).join(', ')};var items=[{id:+id,quantity:1,properties:props}], counts={};used.forEach(function(p){counts[p.variant]=(counts[p.variant]||0)+1});Object.keys(counts).forEach(function(k){items.push({id:+k,quantity:counts[k]})});say('Adding personalized set...');fetch('\/cart\/add.js',{method:'POST',headers:{'Content-Type':'application\/json','Accept':'application\/json'},body:JSON.stringify({items:items})}).then(function(r){if(!r.ok)throw new Error('cart');return r.json()}).then(function(){say('Personalized set added to cart.')}).catch(function(){say('Could not add everything. Please try again.',true)})}\n  R.addEventListener('click',function(e){var h=e.target.closest('.sp-hole');if(h\u0026\u0026R.contains(h)){var i=+h.dataset.i;if(selectedIndex==null){if(layout[i]){selectedIndex=i;render()}}else{var tmp=layout[i];layout[i]=layout[selectedIndex];layout[selectedIndex]=tmp;selectedIndex=null;render()}return}var piece=e.target.closest('[data-piece]');if(piece\u0026\u0026R.contains(piece)){var uid=piece.dataset.piece;var idx=layout.findIndex(function(p){return p\u0026\u0026p.uid===uid});if(idx\u003e-1){selectedIndex=idx;render()}}});\n  function boot(){var input=q('#sp-pet-name');if(input){input.addEventListener('input',render);input.addEventListener('change',render);input.addEventListener('keyup',render)}a('input[name=\"sp-letter-style\"]').forEach(function(r){r.addEventListener('change',render)});var toggle=q('[data-sp-charm-toggle]'),panel=q('[data-sp-charm-panel]');if(toggle\u0026\u0026panel)toggle.onclick=function(){panel.hidden=!panel.hidden;toggle.setAttribute('aria-expanded',String(!panel.hidden))};var clear=q('[data-sp-charm-clear]');if(clear)clear.onclick=function(){selectedCharm=null;render();renderCharms()};a('[data-sp-charm-tabs] button').forEach(function(b){b.onclick=function(){renderCharms(b.textContent.trim())}});var submit=q('[data-sp-builder-submit]');if(submit)submit.onclick=add;Promise.all([fetch('\/products\/collar-letter-add-on.js').then(function(r){return r.json()}),fetch('\/products\/collar-charm-add-on.js').then(function(r){return r.json()})]).then(function(data){data[0].variants.forEach(function(v){var parts=v.title.split(' '), l=parts.pop(), s=parts.join(' ');if(\/^[A-Z]$\/.test(l))LETTERS[key(s,l)]={id:v.id,available:v.available}});CHARMS=data[1].variants.filter(function(v){return v.available\u0026\u0026v.featured_image\u0026\u0026v.featured_image.src}).map(function(v){return {id:String(v.id),title:v.title,img:v.featured_image.src,category:category(v.title)}});ready=true;renderCharms();render()}).catch(function(){ready=true;render();say('Charm photos could not load. Please refresh the page.',true)})}\n  boot();\n})();\n\u003c\/script\u003e\n\u003cscript data-sp-preview-hole-sync\u003e\n(function(){\n  var R=document.getElementById('sp-collar-builder');\n  if(!R || R.dataset.spPreviewHoleSync) return;\n  R.dataset.spPreviewHoleSync='1';\n  var cache={};\n  function esc(v){return String(v||'').replace(\/[\u0026\u003c\u003e\"']\/g,function(c){return {'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;','\"':'\u0026quot;',\"'\":'\u0026#39;'}[c]})}\n  function makeTransparent(src, cb){\n    if(!src) return cb(src);\n    if(cache[src]) return cb(cache[src]);\n    var img=new Image();\n    img.crossOrigin='anonymous';\n    img.onload=function(){\n      try{\n        var c=document.createElement('canvas'), w=img.naturalWidth||img.width, h=img.naturalHeight||img.height;\n        c.width=w; c.height=h;\n        var x=c.getContext('2d');\n        x.drawImage(img,0,0,w,h);\n        var d=x.getImageData(0,0,w,h), p=d.data;\n        for(var i=0;i\u003cp.length;i+=4){\n          var r=p[i], g=p[i+1], b=p[i+2], max=Math.max(r,g,b), min=Math.min(r,g,b);\n          if((r\u003e232\u0026\u0026g\u003e226\u0026\u0026b\u003e214) || (max\u003e242 \u0026\u0026 max-min\u003c28)) p[i+3]=0;\n        }\n        x.putImageData(d,0,0);\n        cache[src]=c.toDataURL('image\/png');\n        cb(cache[src]);\n      }catch(e){cache[src]=src;cb(src)}\n    };\n    img.onerror=function(){cache[src]=src;cb(src)};\n    img.src=src;\n  }\n  function cleanCharmImages(root){\n    Array.prototype.slice.call(root.querySelectorAll('.sp-preview-slot.has-charm img')).forEach(function(img){\n      var src=img.getAttribute('src');\n      if(!src || img.dataset.spTransparentCharm) return;\n      img.dataset.spTransparentCharm='1';\n      makeTransparent(src,function(out){img.src=out});\n    });\n  }\n  function sync(){\n    var preview=R.querySelector('[data-sp-preview-name]'), holes=[].slice.call(R.querySelectorAll('.sp-hole'));\n    if(!preview || holes.length\u003c10) return;\n    preview.setAttribute('data-sp-hole-preview','');\n    preview.innerHTML=holes.slice(0,10).map(function(h){\n      var chip=h.querySelector('.sp-layout-chip'), cls='sp-preview-slot', html='';\n      if(!chip){cls+=' is-empty'}else{\n        cls+=' has-piece';\n        if(chip.classList.contains('is-black')) cls+=' is-black';\n        if(chip.classList.contains('is-small')) cls+=' is-small';\n        if(chip.querySelector('img')) cls+=' has-charm';\n        html=chip.innerHTML || esc(chip.textContent.trim());\n      }\n      return '\u003cspan class=\"'+cls+'\"\u003e'+html+'\u003c\/span\u003e';\n    }).join('');\n    cleanCharmImages(preview);\n  }\n  var track=R.querySelector('[data-sp-hole-track]');\n  if(track \u0026\u0026 window.MutationObserver){new MutationObserver(function(){setTimeout(sync,0)}).observe(track,{childList:true,subtree:true,characterData:true,attributes:true})}\n  R.addEventListener('click',function(){setTimeout(sync,40);setTimeout(sync,180);setTimeout(sync,700)},true);\n  R.addEventListener('input',function(){setTimeout(sync,40);setTimeout(sync,180);setTimeout(sync,700)},true);\n  R.addEventListener('change',function(){setTimeout(sync,40);setTimeout(sync,180);setTimeout(sync,700)},true);\n  window.addEventListener('load',function(){setTimeout(sync,300);setTimeout(sync,1200)});\n  setTimeout(sync,100);setTimeout(sync,600);setTimeout(sync,1600);\n})();\n\u003c\/script\u003e\n\n","brand":"SpoiledPaws","offers":[{"title":"L - 2.5cm x 50cm \/ White","offer_id":46592545325217,"sku":"SP-COL-001","price":26.99,"currency_code":"NZD","in_stock":true},{"title":"XS - 1.0cm x 30cm \/ Yellow","offer_id":46592545357985,"sku":"SP-COL-002","price":19.99,"currency_code":"NZD","in_stock":true},{"title":"XL - 3.0cm x 60cm \/ Black","offer_id":46592545390753,"sku":"SP-COL-003","price":28.99,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 50cm \/ Magenta","offer_id":46592545423521,"sku":"SP-COL-004","price":26.99,"currency_code":"NZD","in_stock":true},{"title":"XS - 1.0cm x 30cm \/ White","offer_id":46592545456289,"sku":"SP-COL-005","price":19.99,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 50cm \/ Pink","offer_id":46592545489057,"sku":"SP-COL-006","price":26.99,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 42cm \/ Magenta","offer_id":46592545521825,"sku":"SP-COL-007","price":24.99,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 42cm \/ Yellow","offer_id":46592545554593,"sku":"SP-COL-008","price":24.99,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 50cm \/ Blue","offer_id":46592545587361,"sku":"SP-COL-009","price":26.99,"currency_code":"NZD","in_stock":true},{"title":"1.5S - 1.5cm x 30cm \/ Yellow","offer_id":46614733226145,"sku":"SP-COL-010","price":22.99,"currency_code":"NZD","in_stock":true},{"title":"XL - 3.0cm x 60cm \/ Purple","offer_id":46614733258913,"sku":"SP-COL-011","price":28.99,"currency_code":"NZD","in_stock":true},{"title":"XL - 3.0cm x 60cm \/ Gold","offer_id":46614733291681,"sku":"SP-COL-012","price":28.99,"currency_code":"NZD","in_stock":true},{"title":"1.5S - 1.5cm x 30cm \/ Pink","offer_id":46614733324449,"sku":"SP-COL-013","price":22.99,"currency_code":"NZD","in_stock":true},{"title":"1.5M - 1.5cm x 37cm \/ Gold","offer_id":46614733357217,"sku":"SP-COL-014","price":23.99,"currency_code":"NZD","in_stock":true},{"title":"XL - 3.0cm x 60cm \/ Pink","offer_id":46614733389985,"sku":"SP-COL-015","price":28.99,"currency_code":"NZD","in_stock":true},{"title":"1.5S - 1.5cm x 30cm \/ Orange","offer_id":46614733422753,"sku":"SP-COL-016","price":22.99,"currency_code":"NZD","in_stock":true},{"title":"1.5M - 1.5cm x 37cm \/ Pink","offer_id":46614733455521,"sku":"SP-COL-017","price":23.99,"currency_code":"NZD","in_stock":true},{"title":"1.5S - 1.5cm x 30cm \/ Magenta","offer_id":46614733488289,"sku":"SP-COL-018","price":22.99,"currency_code":"NZD","in_stock":true},{"title":"XL - 3.0cm x 60cm \/ Blue","offer_id":46614733521057,"sku":"SP-COL-019","price":28.99,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 42cm \/ Black","offer_id":46614733553825,"sku":"SP-COL-020","price":24.99,"currency_code":"NZD","in_stock":true},{"title":"1.5M - 1.5cm x 37cm \/ Orange","offer_id":46614733586593,"sku":"SP-COL-021","price":23.99,"currency_code":"NZD","in_stock":true},{"title":"1.5M - 1.5cm x 37cm \/ Blue","offer_id":46614733619361,"sku":"SP-COL-022","price":23.99,"currency_code":"NZD","in_stock":true},{"title":"XS - 1.0cm x 30cm \/ Green","offer_id":46614733652129,"sku":"SP-COL-023","price":19.99,"currency_code":"NZD","in_stock":true},{"title":"XS - 1.0cm x 30cm \/ Pink","offer_id":46614733684897,"sku":"SP-COL-024","price":19.99,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 42cm \/ Orange","offer_id":46614733717665,"sku":"SP-COL-025","price":24.99,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 50cm \/ Orange","offer_id":46614733750433,"sku":"SP-COL-026","price":26.99,"currency_code":"NZD","in_stock":true},{"title":"1.5M - 1.5cm x 37cm \/ Purple","offer_id":46614733783201,"sku":"SP-COL-027","price":23.99,"currency_code":"NZD","in_stock":true},{"title":"1.5M - 1.5cm x 37cm \/ Black","offer_id":46614733815969,"sku":"SP-COL-028","price":23.99,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 50cm \/ Purple","offer_id":46614733848737,"sku":"SP-COL-029","price":26.99,"currency_code":"NZD","in_stock":true},{"title":"XL - 3.0cm x 60cm \/ Magenta","offer_id":46614733881505,"sku":"SP-COL-030","price":28.99,"currency_code":"NZD","in_stock":true},{"title":"1.5S - 1.5cm x 30cm \/ Blue","offer_id":46614733914273,"sku":"SP-COL-031","price":22.99,"currency_code":"NZD","in_stock":true},{"title":"XS - 1.0cm x 30cm \/ Magenta","offer_id":46614733947041,"sku":"SP-COL-032","price":19.99,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 50cm \/ Gold","offer_id":46614733979809,"sku":"SP-COL-033","price":26.99,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 42cm \/ Gold","offer_id":46614734012577,"sku":"SP-COL-034","price":24.99,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 42cm \/ Purple","offer_id":46614734045345,"sku":"SP-COL-035","price":24.99,"currency_code":"NZD","in_stock":true},{"title":"XS - 1.0cm x 30cm \/ Orange","offer_id":46614734078113,"sku":"SP-COL-036","price":19.99,"currency_code":"NZD","in_stock":true},{"title":"XL - 3.0cm x 60cm \/ Orange","offer_id":46614734110881,"sku":"SP-COL-037","price":28.99,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 50cm \/ Black","offer_id":46614734143649,"sku":"SP-COL-038","price":26.99,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 42cm \/ Blue","offer_id":46614734176417,"sku":"SP-COL-039","price":24.99,"currency_code":"NZD","in_stock":true},{"title":"1.5M - 1.5cm x 37cm \/ White","offer_id":46614734209185,"sku":"SP-COL-040","price":23.99,"currency_code":"NZD","in_stock":true},{"title":"XL - 3.0cm x 60cm \/ White","offer_id":46614734241953,"sku":"SP-COL-041","price":28.99,"currency_code":"NZD","in_stock":true},{"title":"XS - 1.0cm x 30cm \/ Purple","offer_id":46614734274721,"sku":"SP-COL-042","price":19.99,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 50cm \/ Green","offer_id":46614734307489,"sku":"SP-COL-043","price":26.99,"currency_code":"NZD","in_stock":true},{"title":"XS - 1.0cm x 30cm \/ Black","offer_id":46614734340257,"sku":"SP-COL-044","price":19.99,"currency_code":"NZD","in_stock":true},{"title":"1.5S - 1.5cm x 30cm \/ Black","offer_id":46614734373025,"sku":"SP-COL-045","price":22.99,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 50cm \/ Yellow","offer_id":46614734405793,"sku":"SP-COL-046","price":26.99,"currency_code":"NZD","in_stock":true},{"title":"1.5M - 1.5cm x 37cm \/ Yellow","offer_id":46614734438561,"sku":"SP-COL-047","price":23.99,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 42cm \/ White","offer_id":46614734471329,"sku":"SP-COL-048","price":24.99,"currency_code":"NZD","in_stock":true},{"title":"1.5M - 1.5cm x 37cm \/ Green","offer_id":46614734504097,"sku":"SP-COL-049","price":23.99,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 42cm \/ Green","offer_id":46614734536865,"sku":"SP-COL-050","price":24.99,"currency_code":"NZD","in_stock":true},{"title":"1.5S - 1.5cm x 30cm \/ Purple","offer_id":46614734569633,"sku":"SP-COL-054","price":22.99,"currency_code":"NZD","in_stock":true},{"title":"XL - 3.0cm x 60cm \/ Green","offer_id":46614734602401,"sku":"SP-COL-055","price":28.99,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 42cm \/ Pink","offer_id":46614734635169,"sku":"SP-COL-056","price":24.99,"currency_code":"NZD","in_stock":true},{"title":"1.5S - 1.5cm x 30cm \/ Gold","offer_id":46614734667937,"sku":"SP-COL-057","price":22.99,"currency_code":"NZD","in_stock":true},{"title":"1.5S - 1.5cm x 30cm \/ Green","offer_id":46614734700705,"sku":"SP-COL-058","price":22.99,"currency_code":"NZD","in_stock":true},{"title":"XS - 1.0cm x 30cm \/ Blue","offer_id":46614734733473,"sku":"SP-COL-059","price":19.99,"currency_code":"NZD","in_stock":true},{"title":"1.5M - 1.5cm x 37cm \/ Magenta","offer_id":46614734766241,"sku":"SP-COL-060","price":23.99,"currency_code":"NZD","in_stock":true},{"title":"XS - 1.0cm x 30cm \/ Gold","offer_id":46614734799009,"sku":"SP-COL-061","price":19.99,"currency_code":"NZD","in_stock":true},{"title":"1.5S - 1.5cm x 30cm \/ White","offer_id":46614734831777,"sku":"SP-COL-062","price":22.99,"currency_code":"NZD","in_stock":true},{"title":"XL - 3.0cm x 60cm \/ Yellow","offer_id":46614734864545,"sku":"SP-COL-063","price":28.99,"currency_code":"NZD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/4_47da99d6-7b20-4767-818b-eeac0f717cd9.png?v=1783004035"},{"product_id":"personalized-dog-collar-style-2","title":"Chunky Personalized Pet Collar","description":"\u003cscript data-sp-upright-mini\u003e(function(){function f(){document.querySelectorAll('#sp-collar-builder .sp-real-letter').forEach(function(i){var p=i.parentNode;if(p\u0026\u0026i.alt){p.setAttribute('data-letter',i.alt);i.style.display='none'}})}setInterval(f,300);setTimeout(f,500);setTimeout(f,1500)})();\u003c\/script\u003e\u003cstyle data-sp-upright-letter-preview\u003e#sp-collar-builder .sp-preview-slot .sp-real-letter{display:none!important}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece:not(.has-charm){transform:none!important}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece:not(.has-charm)::after{content:attr(data-letter);font-family:Arial Black,Arial,sans-serif;font-size:13px;font-weight:900;color:#e9ecec;-webkit-text-stroke:.45px #5d666c;text-shadow:0 -1px 0 #fff,1px 0 0 #8a9297,-1px 0 0 #cdd3d7,0 1px 0 #59636a,0 2px 2px rgba(0,0,0,.25)}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-black.has-piece:not(.has-charm)::after{color:#111;-webkit-text-stroke:.35px #6f767b;text-shadow:0 -1px 0 #3a3a3a,0 1px 0 #7c858b,0 2px 2px rgba(0,0,0,.28)}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-small.has-piece:not(.has-charm)::after{font-size:11px}\u003c\/style\u003e\u003cscript data-sp-visual-name-order\u003e(function(){var c=0;function e(s){return String(s).replace(\/[\u0026\u003c\u003e]\/g,function(x){return{'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;'}[x]})}function d(){var R=document.getElementById('sp-collar-builder'),I=R\u0026\u0026R.querySelector('#sp-pet-name');if(!R||!I)return;var n=I.value.toUpperCase().replace(\/[^A-Z]\/g,'').slice(0,10);if(!n)return;var a=Array(10).fill(''),s=Math.max(0,Math.floor((10-n.length)\/2));n.split('').forEach(function(x,i){a[s+i]=x});R.querySelectorAll('.sp-hole').forEach(function(h,i){var l=a[i];h.className='sp-hole '+(l?'':'is-empty');h.setAttribute('aria-label','Hole '+(i+1)+(l?': '+l:''));h.innerHTML=l?'\u003cspan class=\"sp-layout-chip\"\u003e'+e(l)+'\u003c\/span\u003e\u003cspan class=\"sp-hole-number\"\u003e'+(i+1)+'\u003c\/span\u003e':'\u003cspan class=\"sp-hole-number\"\u003e'+(i+1)+'\u003c\/span\u003e'});var T=R.querySelector('[data-sp-layout-tray]');if(T)T.innerHTML=n.split('').map(function(l){return'\u003cbutton type=\"button\" class=\"sp-layout-piece\"\u003e\u003cspan class=\"sp-layout-chip\"\u003e'+e(l)+'\u003c\/span\u003e\u003c\/button\u003e'}).join('');R.querySelectorAll('[data-sp-preview-name] .sp-preview-slot').forEach(function(x,i){var l=a[i];if(x.classList.contains('has-charm'))return;x.className='sp-preview-slot '+(l?'has-piece':'is-empty');if(l){x.setAttribute('data-letter',l);x.textContent=''}else{x.removeAttribute('data-letter');x.textContent=''}})}function b(){var R=document.getElementById('sp-collar-builder'),I=R\u0026\u0026R.querySelector('#sp-pet-name');if(!I)return;if(!I.dataset.visualOrder){I.dataset.visualOrder=1;I.addEventListener('input',function(){setTimeout(d,80);setTimeout(d,400)});I.addEventListener('change',function(){setTimeout(d,80);setTimeout(d,400)})}d()}document.addEventListener('DOMContentLoaded',b);var t=setInterval(function(){b();if(++c\u003e20)clearInterval(t)},300)})();\u003c\/script\u003e\u003cscript data-sp-real-letter-preview\u003e(function(){var R=document.getElementById('sp-collar-builder');function q(s,p){return(p||document).querySelector(s)}function qa(s,p){return[].slice.call((p||document).querySelectorAll(s))}var U={Silver:'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/168_aa55a61c-84e0-4386-8125-82415a99b5f2.png?v=1782479450',Black:'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/170_6eb3e3c0-ef5a-4b2f-888f-7f4118018f3c.png?v=1782479450','Silver 11mm':'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/169_b55b69a4-36f8-4876-88f8-538f10ce4f3d.png?v=1782479450'},P={A:[.16,.26],B:[.27,.25],C:[.385,.26],D:[.52,.255],E:[.645,.24],F:[.785,.255],G:[.92,.25],H:[.15,.41],I:[.265,.415],J:[.385,.4],K:[.515,.395],L:[.625,.4],M:[.75,.395],N:[.895,.4],O:[.12,.595],P:[.27,.598],Q:[.4,.59],R:[.535,.59],S:[.66,.572],T:[.792,.57],U:[.908,.575],V:[.125,.795],W:[.305,.79],X:[.465,.778],Y:[.61,.77],Z:[.758,.768]},C={},I={};function st(){var x=q('input[name=\"sp-letter-style\"]:checked',R);return x?x.value:'Silver'}function img(s,cb){if(I[s])return cb(I[s]);var im=new Image;im.crossOrigin='anonymous';im.onload=function(){I[s]=im;cb(im)};im.src=U[s]||U.Silver}function cut(s,l,cb){var k=s+'|'+l;if(C[k])return cb(C[k]);img(s,function(im){try{var p=P[l]||P.A,w=im.naturalWidth,h=im.naturalHeight,c=document.createElement('canvas'),cw=s=='Silver 11mm'?230:300,ch=s=='Silver 11mm'?300:360,sw=cw,sh=ch,sx=Math.max(0,p[0]*w-sw\/2),sy=Math.max(0,p[1]*h-sh\/2);c.width=90;c.height=108;var x=c.getContext('2d');x.drawImage(im,sx,sy,sw,sh,0,0,c.width,c.height);var d=x.getImageData(0,0,c.width,c.height),a=d.data;for(var i=0;i\u003ca.length;i+=4){var r=a[i],g=a[i+1],b=a[i+2],m=Math.max(r,g,b),n=Math.min(r,g,b);if((r\u003e232\u0026\u0026g\u003e226\u0026\u0026b\u003e214)||(m\u003e242\u0026\u0026m-n\u003c30))a[i+3]=0}x.putImageData(d,0,0);C[k]=c.toDataURL('image\/png');cb(C[k])}catch(e){cb('')}})}function apply(){R=document.getElementById('sp-collar-builder');if(!R)return;var s=st();qa('[data-sp-preview-name] .sp-preview-slot.has-piece:not(.has-charm)',R).forEach(function(el){var l=(el.textContent||'').trim().charAt(0).toUpperCase();if(!\/^[A-Z]$\/.test(l)||el.dataset.real==s+l)return;el.dataset.real=s+l;cut(s,l,function(src){if(src)el.innerHTML='\u003cimg class=\"sp-real-letter\" alt=\"'+l+'\" src=\"'+src+'\"\u003e'})})}function boot(){R=document.getElementById('sp-collar-builder');if(!R)return;var css=document.createElement('style');css.textContent='#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot .sp-real-letter{width:23px;height:27px;object-fit:contain;filter:drop-shadow(0 1px 1px rgba(0,0,0,.25))}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-small .sp-real-letter{width:18px;height:22px}';document.head.appendChild(css);if(window.MutationObserver)new MutationObserver(function(){setTimeout(apply,20)}).observe(R,{childList:true,subtree:true,characterData:true});R.addEventListener('input',function(){setTimeout(apply,80)},true);R.addEventListener('change',function(){setTimeout(apply,80)},true);R.addEventListener('click',function(){setTimeout(apply,80);setTimeout(apply,300)},true);setTimeout(apply,300);setTimeout(apply,1000);setTimeout(apply,2200)}document.addEventListener('DOMContentLoaded',boot);setTimeout(boot,300);setTimeout(boot,1200)})();\u003c\/script\u003e\"'\"'\u003cscript data-sp-letter-reference-move\u003e(function(){function m(){var r=document.querySelector('[data-sp-letter-reference]'),b=document.getElementById('sp-collar-builder'),f=b\u0026\u0026b.querySelector('.sp-builder-fieldset');if(r\u0026\u0026f\u0026\u0026r.parentNode!==b)f.after(r)}document.addEventListener('DOMContentLoaded',m);setTimeout(m,300);setTimeout(m,1200);setTimeout(m,2500)})();\u003c\/script\u003e\u003cstyle data-sp-letter-reference-style\u003e#sp-collar-builder .sp-letter-reference{margin:12px 0 14px;padding:12px;border:1px solid #eee5d9;border-radius:8px;background:#fffaf2}#sp-collar-builder .sp-letter-reference-head{display:flex;justify-content:space-between;gap:10px;margin-bottom:10px}#sp-collar-builder .sp-letter-reference-head strong{font-size:13px}#sp-collar-builder .sp-letter-reference-head span{font-size:12px;color:#6c6256;text-align:right}#sp-collar-builder .sp-letter-reference-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}#sp-collar-builder .sp-letter-reference figure{margin:0}#sp-collar-builder .sp-letter-reference img{display:block;width:100%;aspect-ratio:1.25\/1;object-fit:contain;border-radius:6px;border:1px solid #eee5d9;background:#f8f3ea}#sp-collar-builder .sp-letter-reference figcaption{margin-top:6px;font-size:12px;font-weight:700;text-align:center}\u003c\/style\u003e\u003cdiv class=\"sp-letter-reference\" data-sp-letter-reference\u003e\n\u003cdiv class=\"sp-letter-reference-head\"\u003e\n\u003cstrong\u003eLetter style reference\u003c\/strong\u003e\u003cspan\u003eReal letter photos for each finish.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-letter-reference-grid\"\u003e\n\u003cfigure\u003e\u003cimg src=\"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/168_aa55a61c-84e0-4386-8125-82415a99b5f2.png?v=1782479450\" alt=\"Silver collar letters\" loading=\"lazy\"\u003e\u003cfigcaption\u003eSilver\u003c\/figcaption\u003e\u003c\/figure\u003e\u003cfigure\u003e\u003cimg src=\"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/170_6eb3e3c0-ef5a-4b2f-888f-7f4118018f3c.png?v=1782479450\" alt=\"Black collar letters\" loading=\"lazy\"\u003e\u003cfigcaption\u003eBlack\u003c\/figcaption\u003e\u003c\/figure\u003e\u003cfigure\u003e\u003cimg src=\"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/169_b55b69a4-36f8-4876-88f8-538f10ce4f3d.png?v=1782479450\" alt=\"Silver 11mm collar letters\" loading=\"lazy\"\u003e\u003cfigcaption\u003eSilver 11mm\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003cdiv class=\"sp-product-description\"\u003e\n\u003cp\u003eA playful chunky collar made for a bolder personalized look. Choose your colour, then style it with letters and charms to create a one-of-a-kind collar.\u003c\/p\u003e\n\u003ch3\u003eDetails\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOne size design.\u003c\/li\u003e\n\u003cli\u003eAvailable in selected colours.\u003c\/li\u003e\n\u003cli\u003eUse the builder below to add the collar and matching letter inventory in one step.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"sp-collar-builder\" class=\"sp-collar-builder\" data-letter-handle=\"collar-letter-add-on\" data-charm-handle=\"collar-charm-add-on\"\u003e\n\u003cdiv class=\"sp-builder-header\"\u003e\n\u003cp class=\"sp-builder-kicker\"\u003ePersonalized collar studio\u003c\/p\u003e\n\u003ch3\u003eDesign their signature collar\u003c\/h3\u003e\n\u003cp\u003eBuild the collar as a complete set: choose the name, match the letter finish, then add a charm by photo.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-studio-preview\" data-sp-studio-preview=\"\"\u003e\n\u003cdiv class=\"sp-preview-stage\"\u003e\n\u003cdiv class=\"sp-preview-collar\" data-sp-preview-collar=\"\"\u003e\n\u003cdiv class=\"sp-preview-strap\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-ring sp-preview-ring-left\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-ring sp-preview-ring-right\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-buckle\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-name\" data-sp-preview-name=\"\"\u003e\u003cspan\u003eYOURPET\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-charm\" data-sp-preview-charm=\"\" hidden=\"\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-meta\"\u003e\n\u003cstrong data-sp-preview-title=\"\"\u003eYour pet's collar\u003c\/strong\u003e \u003cspan data-sp-preview-subtitle=\"\"\u003eChoose size and colour above, then personalize below.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-builder-field\"\u003e\n\u003clabel for=\"sp-pet-name\"\u003ePet name or initials\u003c\/label\u003e \u003cinput id=\"sp-pet-name\" class=\"sp-builder-input\" type=\"text\" maxlength=\"10\" placeholder=\"LUNA\" autocomplete=\"off\"\u003e \u003csmall\u003eLetters A-Z only. Each letter is added separately so inventory stays accurate.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cfieldset class=\"sp-builder-field sp-builder-fieldset\"\u003e\n\u003clegend\u003eLetter style\u003c\/legend\u003e\n\u003cdiv class=\"sp-style-options\" role=\"radiogroup\" aria-label=\"Letter style\"\u003e\n\u003clabel class=\"sp-style-option is-selected\"\u003e \u003cinput type=\"radio\" name=\"sp-letter-style\" value=\"Silver\" checked\u003e \u003cspan class=\"sp-style-swatch sp-style-silver\"\u003e\u003c\/span\u003e \u003cspan\u003eSilver\u003c\/span\u003e \u003c\/label\u003e \u003clabel class=\"sp-style-option\"\u003e \u003cinput type=\"radio\" name=\"sp-letter-style\" value=\"Black\"\u003e \u003cspan class=\"sp-style-swatch sp-style-black\"\u003e\u003c\/span\u003e \u003cspan\u003eBlack\u003c\/span\u003e \u003c\/label\u003e \u003clabel class=\"sp-style-option\"\u003e \u003cinput type=\"radio\" name=\"sp-letter-style\" value=\"Silver 11mm\"\u003e \u003cspan class=\"sp-style-swatch sp-style-silver-small\"\u003e\u003c\/span\u003e \u003cspan\u003eSilver 11mm\u003c\/span\u003e \u003c\/label\u003e\n\u003c\/div\u003e\n\u003c\/fieldset\u003e\n\u003cdiv class=\"sp-letter-preview\" aria-live=\"polite\"\u003e\u003cspan class=\"sp-preview-empty\"\u003eType a name to preview letters.\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-layout-planner\" data-sp-layout-planner=\"\"\u003e\n\u003cdiv class=\"sp-layout-head\"\u003e\n\u003cstrong\u003eCollar hole layout\u003c\/strong\u003e \u003csmall data-sp-layout-summary=\"\"\u003eChoose letters and charms to arrange the collar.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-layout-rules\" aria-label=\"Personalization limits\"\u003e\n\u003cspan\u003eLetters only: max 10\u003c\/span\u003e \u003cspan\u003eCharms only: max 8\u003c\/span\u003e \u003cspan\u003eLetters + charms: max 8 total\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-hole-track\" data-sp-hole-track=\"\" aria-label=\"Collar hole layout\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-layout-tray\" data-sp-layout-tray=\"\" aria-label=\"Selected letters and charms\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cp class=\"sp-layout-message\" data-sp-layout-message=\"\" role=\"status\"\u003e \u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-builder-field\"\u003e\n\u003clabel\u003eCharm add-on\u003c\/label\u003e\n\u003cdiv class=\"sp-charm-story\"\u003e\n\u003cstrong\u003eMake it feel like theirs.\u003c\/strong\u003e \u003cspan\u003eStart with a curated pick, or open the full charm library when you want to browse every photo.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-charm-picker\"\u003e\n\u003cdiv class=\"sp-selected-charm\" data-sp-selected-charm=\"\"\u003e\n\u003cdiv class=\"sp-selected-charm-thumb\" data-sp-selected-charm-thumb=\"\"\u003e-\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cstrong data-sp-selected-charm-name=\"\"\u003eNo charm selected\u003c\/strong\u003e \u003csmall data-sp-selected-charm-note=\"\"\u003eOptional finishing touch.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"sp-charm-toggle\" data-sp-charm-toggle=\"\" aria-expanded=\"false\"\u003e Browse charms \u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-featured-charms\" data-sp-featured-charms=\"\" aria-live=\"polite\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cselect id=\"sp-charm-select\" class=\"sp-builder-input sp-hidden-select\" disabled aria-hidden=\"true\" tabindex=\"-1\"\u003e\n\u003coption value=\"\"\u003eLoading charms...\u003c\/option\u003e\n\u003c\/select\u003e\n\u003cdiv class=\"sp-charm-panel\" data-sp-charm-panel=\"\" hidden=\"\"\u003e\n\u003cdiv class=\"sp-charm-panel-head\"\u003e\n\u003cdiv\u003e\n\u003cstrong\u003eCharm library\u003c\/strong\u003e \u003csmall data-sp-charm-count=\"\"\u003eLoading charm photos...\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"sp-charm-clear\" data-sp-charm-clear=\"\"\u003eNo charm\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cinput id=\"sp-charm-search\" class=\"sp-builder-input\" type=\"search\" placeholder=\"Search by charm name\" autocomplete=\"off\" disabled\u003e\n\u003cdiv class=\"sp-charm-tabs\" data-sp-charm-tabs=\"\" aria-label=\"Charm categories\"\u003e\n\u003cbutton type=\"button\" class=\"is-active\" data-category=\"all\"\u003eAll\u003c\/button\u003e \u003cbutton type=\"button\" data-category=\"heart\"\u003eHeart\u003c\/button\u003e \u003cbutton type=\"button\" data-category=\"cross\"\u003eCross\u003c\/button\u003e \u003cbutton type=\"button\" data-category=\"gem\"\u003eGem\u003c\/button\u003e \u003cbutton type=\"button\" data-category=\"flower\"\u003eFlower\u003c\/button\u003e \u003cbutton type=\"button\" data-category=\"star\"\u003eStar\u003c\/button\u003e \u003cbutton type=\"button\" data-category=\"other\"\u003eOther\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-charm-grid\" data-sp-charm-grid=\"\" aria-live=\"polite\"\u003e\n\u003cp class=\"sp-charm-loading\"\u003eLoading charm photos...\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-builder-guide\"\u003e\n\u003cdiv\u003e\n\u003cstrong\u003eImage guide\u003c\/strong\u003e\n\u003cp\u003eLetter and charm photos are style references. The exact stock item is selected from your choices here.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"sp-guide-toggle\" aria-expanded=\"false\"\u003eView guide\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-guide-panel\" hidden=\"\"\u003e\n\u003cdiv class=\"sp-guide-images\" data-sp-guide-images=\"\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton type=\"button\" class=\"sp-builder-submit\" data-sp-builder-submit=\"\"\u003e Add personalized set to cart \u003c\/button\u003e\n\u003cp class=\"sp-builder-message\" data-sp-builder-message=\"\" role=\"status\"\u003e\u003cimg\u003e\u003c\/p\u003e\n\u003cp class=\"sp-builder-message\" data-sp-builder-message=\"\" role=\"status\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/Size-4.png?v=1782721604\" alt=\"\"\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n  .sp-collar-builder {\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 18px;\n    margin: 18px 0;\n    background: #fffdf8;\n    color: #252525;\n  }\n\n  .sp-native-personalizer-hidden {\n    display: none !important;\n  }\n\n  body.sp-collar-gallery-intro media-gallery slideshow-slide,\n  body.sp-collar-gallery-intro media-gallery .slideshow-controls__thumbnail {\n    display: none !important;\n  }\n\n  body.sp-collar-gallery-intro media-gallery slideshow-slide[data-sp-intro-media],\n  body.sp-collar-gallery-intro media-gallery .slideshow-controls__thumbnail[data-sp-intro-media] {\n    display: block !important;\n  }\n\n  body.sp-collar-gallery-color-mode media-gallery slideshow-slide[data-sp-intro-media],\n  body.sp-collar-gallery-color-mode media-gallery .slideshow-controls__thumbnail[data-sp-intro-media] {\n    display: none !important;\n  }\n\n  body.sp-collar-gallery-color-mode media-gallery slideshow-slide:not([data-sp-intro-media]) {\n    display: flex !important;\n  }\n\n  body.sp-collar-gallery-color-mode media-gallery .slideshow-controls__thumbnail:not([data-sp-intro-media]) {\n    display: block !important;\n  }\n\n  .sp-builder-header {\n    border-bottom: 1px solid rgba(35, 35, 35, 0.1);\n    padding-bottom: 14px;\n    margin-bottom: 16px;\n  }\n\n  .sp-builder-kicker {\n    margin: 0 0 6px;\n    font-size: 12px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: #7b6c58;\n  }\n\n  .sp-builder-header h3 {\n    margin: 0 0 6px;\n    font-size: 22px;\n    line-height: 1.2;\n  }\n\n  .sp-builder-header p,\n  .sp-builder-field small,\n  .sp-selected-charm small,\n  .sp-builder-guide p,\n  .sp-builder-message {\n    margin: 0;\n    font-size: 13px;\n    line-height: 1.45;\n    color: #6c6256;\n  }\n\n  .sp-studio-preview {\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 8px;\n    overflow: hidden;\n    background: #f7f3ea;\n    margin: 16px 0;\n  }\n\n  .sp-preview-stage {\n    min-height: 184px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 22px 18px;\n    background:\n      linear-gradient(90deg, rgba(35, 35, 35, 0.035) 1px, transparent 1px),\n      linear-gradient(180deg, rgba(35, 35, 35, 0.035) 1px, transparent 1px),\n      radial-gradient(circle at 22% 18%, rgba(255, 255, 255, 0.92), transparent 34%),\n      linear-gradient(135deg, #fffaf2, #eadfcf);\n    background-size: 22px 22px, 22px 22px, auto, auto;\n  }\n\n  .sp-preview-collar {\n    position: relative;\n    width: min(100%, 470px);\n    height: 116px;\n    transition: width 0.18s ease, height 0.18s ease;\n  }\n\n  .sp-preview-collar.is-xs {\n    width: min(72%, 330px);\n    height: 96px;\n  }\n\n  .sp-preview-collar.is-s {\n    width: min(82%, 380px);\n    height: 104px;\n  }\n\n  .sp-preview-collar.is-m {\n    width: min(92%, 430px);\n    height: 112px;\n  }\n\n  .sp-preview-collar.is-l {\n    width: min(100%, 470px);\n    height: 116px;\n  }\n\n  .sp-preview-collar.is-xl {\n    width: min(100%, 520px);\n    height: 124px;\n  }\n\n  .sp-preview-strap {\n    position: absolute;\n    left: 6%;\n    right: 6%;\n    top: 42px;\n    height: 30px;\n    border-radius: 999px;\n    background: #f8f6ef;\n    border: 1px solid rgba(35, 35, 35, 0.22);\n    box-shadow: inset 0 3px 10px rgba(255, 255, 255, 0.65), inset 0 -4px 10px rgba(0, 0, 0, 0.12);\n  }\n\n  .sp-preview-collar.is-xs .sp-preview-strap {\n    left: 10%;\n    right: 10%;\n    top: 40px;\n    height: 22px;\n  }\n\n  .sp-preview-collar.is-s .sp-preview-strap {\n    left: 8%;\n    right: 8%;\n    top: 41px;\n    height: 25px;\n  }\n\n  .sp-preview-collar.is-m .sp-preview-strap {\n    top: 42px;\n    height: 28px;\n  }\n\n  .sp-preview-collar.is-xl .sp-preview-strap {\n    left: 5%;\n    right: 5%;\n    top: 43px;\n    height: 34px;\n  }\n\n  .sp-preview-ring,\n  .sp-preview-buckle {\n    position: absolute;\n    top: 36px;\n    width: 20px;\n    height: 36px;\n    border: 4px solid #c7c9cc;\n    border-radius: 7px;\n    background: rgba(255, 255, 255, 0.42);\n    box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.9), 0 2px 5px rgba(0, 0, 0, 0.12);\n  }\n\n  .sp-preview-ring-left {\n    left: 9%;\n  }\n\n  .sp-preview-ring-right {\n    right: 9%;\n  }\n\n  .sp-preview-buckle {\n    left: 15%;\n    width: 38px;\n  }\n\n  .sp-preview-name {\n    position: absolute;\n    left: 50%;\n    top: 33px;\n    transform: translateX(-50%);\n    display: flex;\n    gap: 3px;\n    align-items: center;\n    justify-content: center;\n    min-height: 54px;\n    max-width: 66%;\n    padding: 0 8px;\n    white-space: nowrap;\n  }\n\n  .sp-preview-name span {\n    position: relative;\n    min-width: 19px;\n    height: 28px;\n    border-radius: 0;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    font-family: \"Arial Rounded MT Bold\", \"Arial Black\", \"Helvetica Neue\", sans-serif;\n    font-weight: 900;\n    font-size: 18px;\n    line-height: 1;\n    letter-spacing: 0;\n    border: 0;\n    background: transparent;\n    color: #eceeee;\n    -webkit-text-stroke: 1.25px #565d64;\n    text-shadow:\n      0 -1px 0 #ffffff,\n      1px 0 0 #858d94,\n      -1px 0 0 #cbd0d5,\n      0 2px 0 #656d75,\n      0 3px 3px rgba(0, 0, 0, 0.24);\n    filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.22));\n  }\n\n  .sp-preview-name.is-black span {\n    color: #111;\n    -webkit-text-stroke: 1.25px #777e86;\n    text-shadow:\n      0 -1px 0 #333,\n      1px 0 0 #a5abb1,\n      -1px 0 0 #4b5055,\n      0 2px 0 #757c84,\n      0 3px 3px rgba(0, 0, 0, 0.3);\n    filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.28));\n  }\n\n  .sp-preview-name.is-small span {\n    min-width: 15px;\n    height: 23px;\n    font-size: 15px;\n    -webkit-text-stroke-width: 0.9px;\n  }\n\n  .sp-preview-name span.has-letter-art,\n  .sp-letter-chip.has-letter-art {\n    color: transparent;\n    -webkit-text-stroke: 0;\n    text-shadow: none;\n  }\n\n  .sp-preview-name span.has-letter-art {\n    min-width: 24px;\n    width: 24px;\n    height: 30px;\n  }\n\n  .sp-preview-name.is-small span.has-letter-art {\n    min-width: 17px;\n    width: 17px;\n    height: 22px;\n  }\n\n  .sp-preview-collar.is-xs .sp-preview-name {\n    top: 31px;\n    transform: translateX(-50%) scale(0.82);\n  }\n\n  .sp-preview-collar.is-s .sp-preview-name {\n    top: 32px;\n    transform: translateX(-50%) scale(0.9);\n  }\n\n  .sp-preview-collar.is-xl .sp-preview-name {\n    top: 35px;\n    transform: translateX(-50%) scale(1.08);\n  }\n\n  .sp-preview-name span.has-letter-art img,\n  .sp-letter-chip.has-letter-art img {\n    display: block;\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n    filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.18));\n  }\n\n  .sp-preview-name span.has-letter-art img {\n    --sp-preview-letter-rotate: 0deg;\n    transform: rotate(var(--sp-preview-letter-rotate)) scale(0.88);\n    transform-origin: center;\n  }\n\n  .sp-preview-name span.sp-preview-layout-charm {\n    width: 26px;\n    min-width: 26px;\n    height: 26px;\n    border-radius: 50%;\n    overflow: hidden;\n    background: rgba(255, 255, 255, 0.74);\n    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\n  }\n\n  .sp-preview-name.is-small span.sp-preview-layout-charm {\n    width: 20px;\n    min-width: 20px;\n    height: 20px;\n  }\n\n  .sp-preview-name span.sp-preview-layout-charm img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  .sp-preview-charm {\n    position: absolute;\n    right: 20%;\n    top: 70px;\n    width: 48px;\n    height: 48px;\n    border-radius: 50%;\n    overflow: hidden;\n    background: #fff;\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    box-shadow: 0 5px 12px rgba(0, 0, 0, 0.18);\n  }\n\n  .sp-preview-charm img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n\n  .sp-preview-meta {\n    display: flex;\n    justify-content: space-between;\n    gap: 10px;\n    padding: 11px 14px;\n    background: #fff;\n    border-top: 1px solid rgba(35, 35, 35, 0.08);\n  }\n\n  .sp-preview-meta span {\n    color: #6c6256;\n    font-size: 12px;\n    text-align: right;\n  }\n\n  .sp-builder-field {\n    margin: 14px 0;\n  }\n\n  .sp-builder-field label,\n  .sp-builder-fieldset legend {\n    display: block;\n    margin-bottom: 7px;\n    font-size: 14px;\n    font-weight: 650;\n  }\n\n  .sp-builder-fieldset {\n    border: 0;\n    padding: 0;\n  }\n\n  .sp-builder-input {\n    width: 100%;\n    min-height: 44px;\n    border: 1px solid rgba(35, 35, 35, 0.18);\n    border-radius: 6px;\n    padding: 10px 12px;\n    background: #fff;\n    color: #252525;\n    font: inherit;\n  }\n\n  .sp-hidden-select {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    overflow: hidden !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n  }\n\n  .sp-style-options {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 8px;\n  }\n\n  .sp-style-option {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    min-height: 44px;\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    border-radius: 6px;\n    padding: 9px 10px;\n    cursor: pointer;\n    background: #fff;\n    font-size: 13px;\n  }\n\n  .sp-style-option input {\n    position: absolute;\n    opacity: 0;\n    pointer-events: none;\n  }\n\n  .sp-style-option.is-selected {\n    border-color: #202020;\n    box-shadow: inset 0 0 0 1px #202020;\n  }\n\n  .sp-style-swatch {\n    width: 18px;\n    height: 18px;\n    border-radius: 50%;\n    border: 1px solid rgba(35, 35, 35, 0.22);\n    flex: 0 0 auto;\n  }\n\n  .sp-style-silver {\n    background: linear-gradient(135deg, #f7f8fa, #9aa1a8 48%, #ffffff);\n  }\n\n  .sp-style-black {\n    background: linear-gradient(135deg, #4b4b4b, #050505 55%, #777);\n  }\n\n  .sp-style-silver-small {\n    background: linear-gradient(135deg, #ffffff, #c7ccd2 50%, #eef2f5);\n  }\n\n  .sp-letter-preview {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 9px;\n    min-height: 48px;\n    align-items: center;\n    margin: 12px 0;\n  }\n\n  .sp-letter-chip {\n    min-width: 34px;\n    height: 42px;\n    border-radius: 7px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0 4px;\n    background: linear-gradient(180deg, #fffdfa, #f4eee4);\n    color: #eceeee;\n    font-family: \"Arial Rounded MT Bold\", \"Arial Black\", \"Helvetica Neue\", sans-serif;\n    font-size: 26px;\n    font-weight: 900;\n    line-height: 1;\n    letter-spacing: 0;\n    -webkit-text-stroke: 1.25px #565d64;\n    text-shadow:\n      0 -1px 0 #ffffff,\n      1px 0 0 #858d94,\n      -1px 0 0 #cbd0d5,\n      0 2px 0 #656d75,\n      0 3px 3px rgba(0, 0, 0, 0.22);\n    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85), 0 2px 5px rgba(0, 0, 0, 0.08);\n  }\n\n  .sp-letter-preview.is-black .sp-letter-chip {\n    color: #111;\n    -webkit-text-stroke: 1.25px #777e86;\n    text-shadow:\n      0 -1px 0 #333,\n      1px 0 0 #a5abb1,\n      -1px 0 0 #4b5055,\n      0 2px 0 #757c84,\n      0 3px 3px rgba(0, 0, 0, 0.26);\n  }\n\n  .sp-letter-preview.is-small .sp-letter-chip {\n    min-width: 30px;\n    height: 38px;\n    font-size: 23px;\n    -webkit-text-stroke-width: 0.9px;\n  }\n\n  .sp-letter-chip.has-letter-art {\n    min-width: 42px;\n    width: 42px;\n    padding: 4px;\n  }\n\n  .sp-letter-preview.is-small .sp-letter-chip.has-letter-art {\n    min-width: 36px;\n    width: 36px;\n    height: 38px;\n  }\n\n  .sp-layout-planner {\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 8px;\n    padding: 14px;\n    margin: 14px 0 18px;\n    background: #fff;\n  }\n\n  .sp-layout-head {\n    display: flex;\n    justify-content: space-between;\n    gap: 10px;\n    align-items: flex-start;\n    margin-bottom: 12px;\n  }\n\n  .sp-layout-head strong {\n    font-size: 14px;\n  }\n\n  .sp-layout-head small,\n  .sp-layout-message {\n    margin: 0;\n    font-size: 12px;\n    line-height: 1.4;\n    color: #6c6256;\n    text-align: right;\n  }\n\n  .sp-layout-rules {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin: -2px 0 14px;\n  }\n\n  .sp-layout-rules span {\n    display: inline-flex;\n    align-items: center;\n    min-height: 28px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 999px;\n    padding: 5px 9px;\n    background: #fbf8f1;\n    color: #5f564d;\n    font-size: 11px;\n    font-weight: 700;\n    line-height: 1.25;\n  }\n\n  .sp-hole-track {\n    display: grid;\n    grid-template-columns: repeat(10, minmax(0, 1fr));\n    gap: 7px;\n  }\n\n  .sp-hole {\n    position: relative;\n    min-width: 0;\n    appearance: none;\n    aspect-ratio: 1;\n    border: 1px solid rgba(35, 35, 35, 0.18);\n    border-radius: 999px;\n    background: #faf7ef;\n    color: #282520;\n    font: inherit;\n    font-size: 12px;\n    font-weight: 700;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    transition: border-color 0.16s ease, box-shadow 0.16s ease, background 0.16s ease;\n  }\n\n  .sp-hole::after {\n    content: attr(data-hole);\n    position: absolute;\n    bottom: -15px;\n    left: 50%;\n    transform: translateX(-50%);\n    font-size: 9px;\n    font-weight: 500;\n    color: #9a8f82;\n  }\n\n  .sp-hole:hover {\n    border-color: rgba(35, 35, 35, 0.42);\n  }\n\n  .sp-hole.is-target {\n    border-color: #202020;\n    box-shadow: 0 0 0 3px rgba(32, 32, 32, 0.12);\n  }\n\n  .sp-hole.is-filled {\n    background: #f3eadc;\n    box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.68);\n  }\n\n  .sp-hole.is-charm {\n    color: #7c4f22;\n  }\n\n  .sp-hole img {\n    width: 78%;\n    height: 78%;\n    object-fit: cover;\n    border-radius: 50%;\n    pointer-events: none;\n  }\n\n  .sp-layout-tray {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-top: 22px;\n    padding: 10px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 8px;\n    background: #fffdfa;\n  }\n\n  .sp-layout-piece {\n    display: inline-flex;\n    align-items: center;\n    gap: 4px;\n    padding: 3px;\n    border: 1px solid rgba(35, 35, 35, 0.08);\n    border-radius: 999px;\n    background: #fff;\n  }\n\n  .sp-layout-chip {\n    min-width: 38px;\n    height: 38px;\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    border-radius: 999px;\n    background: #f8f3ea;\n    color: #282520;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0 10px;\n    font-size: 12px;\n    font-weight: 800;\n    line-height: 1;\n    cursor: grab;\n    transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;\n  }\n\n  .sp-layout-chip:active {\n    cursor: grabbing;\n  }\n\n  .sp-layout-chip.is-active {\n    border-color: #202020;\n    box-shadow: 0 0 0 3px rgba(32, 32, 32, 0.12);\n    transform: translateY(-1px);\n  }\n\n  .sp-layout-chip.is-placed {\n    background: #f2eadf;\n  }\n\n  .sp-layout-chip img {\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    object-fit: cover;\n    display: block;\n    pointer-events: none;\n  }\n\n  .sp-layout-remove {\n    width: 30px;\n    height: 30px;\n    flex: 0 0 30px;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 999px;\n    background: #f7f3ea;\n    color: #5f3a31;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0;\n    font-size: 16px;\n    font-weight: 800;\n    line-height: 1;\n    cursor: pointer;\n  }\n\n  .sp-layout-remove:hover {\n    border-color: rgba(95, 58, 49, 0.42);\n    background: #efe3d5;\n  }\n\n  .sp-layout-message {\n    min-height: 17px;\n    margin-top: 18px;\n    text-align: left;\n  }\n\n  .sp-layout-message.is-error {\n    color: #9f2f2f;\n  }\n\n  .sp-charm-picker {\n    display: grid;\n    grid-template-columns: 1fr auto;\n    gap: 10px;\n    align-items: stretch;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 10px;\n    background: #fff;\n  }\n\n  .sp-charm-story {\n    display: grid;\n    gap: 2px;\n    margin: 0 0 8px;\n    padding: 10px 12px;\n    border-left: 3px solid #202020;\n    background: #f7f3ea;\n    border-radius: 6px;\n  }\n\n  .sp-charm-story strong {\n    font-size: 13px;\n    line-height: 1.3;\n  }\n\n  .sp-charm-story span {\n    color: #6c6256;\n    font-size: 12px;\n    line-height: 1.4;\n  }\n\n  .sp-selected-charm {\n    display: flex;\n    gap: 10px;\n    align-items: center;\n    min-width: 0;\n  }\n\n  .sp-selected-charm-thumb {\n    width: 48px;\n    height: 48px;\n    border-radius: 7px;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    background: #f7f3ea;\n    color: #8a8175;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n    flex: 0 0 auto;\n  }\n\n  .sp-selected-charm-thumb img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n\n  .sp-selected-charm strong {\n    display: block;\n    font-size: 14px;\n    line-height: 1.25;\n  }\n\n  .sp-charm-toggle {\n    min-height: 48px;\n    border: 0;\n    border-radius: 6px;\n    background: #202020;\n    color: #fff;\n    padding: 0 14px;\n    cursor: pointer;\n    font: inherit;\n    font-weight: 700;\n    white-space: nowrap;\n  }\n\n  .sp-featured-charms {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: 8px;\n    margin-top: 10px;\n  }\n\n  .sp-featured-charm {\n    position: relative;\n    min-height: 124px;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 7px;\n    background: #fff;\n    cursor: pointer;\n    text-align: left;\n    font: inherit;\n    color: inherit;\n    overflow: hidden;\n  }\n\n  .sp-featured-charm.is-selected {\n    border-color: #202020;\n    box-shadow: inset 0 0 0 1px #202020;\n  }\n\n  .sp-charm-qty {\n    position: absolute;\n    top: 6px;\n    right: 6px;\n    min-width: 24px;\n    height: 24px;\n    border-radius: 999px;\n    padding: 0 7px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    background: #202020;\n    color: #fff;\n    font-size: 11px;\n    font-weight: 800;\n    line-height: 1;\n    box-shadow: 0 2px 7px rgba(0, 0, 0, 0.22);\n    pointer-events: none;\n  }\n\n  .sp-featured-charm img,\n  .sp-featured-charm .sp-charm-empty-thumb {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    border-radius: 6px;\n    object-fit: cover;\n    background: #f7f3ea;\n    border: 1px solid rgba(35, 35, 35, 0.08);\n  }\n\n  .sp-featured-charm span {\n    display: block;\n    margin-top: 6px;\n    font-size: 11px;\n    line-height: 1.25;\n    color: #252525;\n  }\n\n  .sp-charm-panel {\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    margin-top: 10px;\n    padding: 12px;\n    background: #fff;\n  }\n\n  .sp-charm-panel-head {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n    gap: 12px;\n    margin-bottom: 10px;\n  }\n\n  .sp-charm-panel-head strong,\n  .sp-charm-panel-head small {\n    display: block;\n  }\n\n  .sp-charm-panel-head small {\n    margin-top: 2px;\n    color: #6c6256;\n    font-size: 12px;\n  }\n\n  .sp-charm-clear {\n    min-height: 34px;\n    border: 1px solid rgba(35, 35, 35, 0.16);\n    border-radius: 6px;\n    padding: 7px 10px;\n    background: #fff;\n    color: #252525;\n    cursor: pointer;\n    font: inherit;\n    font-size: 12px;\n    white-space: nowrap;\n  }\n\n  .sp-charm-tabs {\n    display: flex;\n    gap: 6px;\n    overflow-x: auto;\n    padding: 10px 0 2px;\n  }\n\n  .sp-charm-tabs button {\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    border-radius: 999px;\n    min-height: 34px;\n    padding: 7px 11px;\n    background: #fff;\n    color: #252525;\n    cursor: pointer;\n    font: inherit;\n    font-size: 12px;\n    white-space: nowrap;\n  }\n\n  .sp-charm-tabs button.is-active {\n    background: #202020;\n    border-color: #202020;\n    color: #fff;\n  }\n\n  .sp-charm-grid {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: 8px;\n    max-height: 460px;\n    overflow: auto;\n    padding: 8px 2px 2px;\n    margin-top: 10px;\n  }\n\n  .sp-charm-card {\n    position: relative;\n    display: grid;\n    gap: 6px;\n    align-content: start;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 7px;\n    background: #fff;\n    cursor: pointer;\n    text-align: left;\n    font: inherit;\n    color: inherit;\n  }\n\n  .sp-charm-card.is-selected {\n    border-color: #202020;\n    box-shadow: inset 0 0 0 1px #202020;\n  }\n\n  .sp-charm-card img,\n  .sp-charm-empty-thumb {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    border-radius: 6px;\n    object-fit: cover;\n    background: #f7f3ea;\n    border: 1px solid rgba(35, 35, 35, 0.08);\n  }\n\n  .sp-charm-empty-thumb {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: #8a8175;\n    font-size: 22px;\n  }\n\n  .sp-charm-card span {\n    font-size: 11px;\n    line-height: 1.25;\n    min-height: 28px;\n  }\n\n  .sp-charm-loading,\n  .sp-charm-empty {\n    grid-column: 1 \/ -1;\n    margin: 0;\n    color: #6c6256;\n    font-size: 13px;\n  }\n\n  .sp-builder-guide {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    border-top: 1px solid rgba(35, 35, 35, 0.1);\n    padding-top: 14px;\n    margin-top: 14px;\n  }\n\n  .sp-guide-toggle {\n    border: 1px solid rgba(35, 35, 35, 0.18);\n    border-radius: 6px;\n    background: #fff;\n    min-height: 38px;\n    padding: 8px 12px;\n    cursor: pointer;\n    font: inherit;\n    white-space: nowrap;\n  }\n\n  .sp-guide-panel {\n    margin-top: 12px;\n  }\n\n  .sp-guide-images {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 8px;\n  }\n\n  .sp-guide-card {\n    display: grid;\n    gap: 7px;\n  }\n\n  .sp-guide-card img {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    object-fit: cover;\n    border-radius: 6px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    background: #f7f3ea;\n  }\n\n  .sp-guide-card span {\n    color: #252525;\n    font-size: 12px;\n    font-weight: 700;\n    line-height: 1.25;\n  }\n\n  .sp-builder-submit {\n    width: 100%;\n    min-height: 48px;\n    border: 0;\n    border-radius: 6px;\n    margin-top: 16px;\n    background: #202020;\n    color: #fff;\n    font: inherit;\n    font-weight: 700;\n    cursor: pointer;\n  }\n\n  .sp-builder-submit[disabled] {\n    opacity: 0.55;\n    cursor: wait;\n  }\n\n  .sp-builder-message {\n    margin-top: 10px;\n  }\n\n  .sp-builder-message.is-error {\n    color: #b42318;\n  }\n\n  .sp-builder-message.is-success {\n    color: #087443;\n  }\n\n  @media (max-width: 640px) {\n    .sp-style-options,\n    .sp-guide-images {\n      grid-template-columns: 1fr;\n    }\n\n    .sp-charm-picker {\n      grid-template-columns: 1fr;\n    }\n\n    .sp-featured-charms {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n\n    .sp-charm-grid {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      max-height: 430px;\n    }\n\n    .sp-preview-meta {\n      display: block;\n    }\n\n    .sp-preview-meta span {\n      display: block;\n      margin-top: 3px;\n      text-align: left;\n    }\n\n    .sp-layout-head {\n      display: block;\n    }\n\n    .sp-layout-head small {\n      display: block;\n      margin-top: 3px;\n      text-align: left;\n    }\n\n    .sp-layout-rules {\n      margin-top: 10px;\n      margin-bottom: 16px;\n    }\n\n    .sp-layout-rules span {\n      min-height: 30px;\n      font-size: 11px;\n    }\n\n    .sp-hole-track {\n      grid-template-columns: repeat(5, minmax(42px, 1fr));\n      gap: 18px 8px;\n      padding-bottom: 4px;\n    }\n\n    .sp-hole {\n      min-height: 42px;\n      font-size: 13px;\n    }\n\n    .sp-hole::after {\n      bottom: -14px;\n      font-size: 10px;\n    }\n\n    .sp-layout-tray {\n      flex-wrap: nowrap;\n      overflow-x: auto;\n      -webkit-overflow-scrolling: touch;\n      scroll-snap-type: x proximity;\n      margin-top: 24px;\n      padding: 10px 8px;\n    }\n\n    .sp-layout-chip {\n      flex: 0 0 auto;\n      min-width: 46px;\n      height: 46px;\n      scroll-snap-align: start;\n      font-size: 14px;\n    }\n\n    .sp-layout-chip img {\n      width: 34px;\n      height: 34px;\n    }\n\n    .sp-layout-piece {\n      flex: 0 0 auto;\n      gap: 5px;\n      padding: 4px;\n    }\n\n    .sp-layout-remove {\n      width: 36px;\n      height: 36px;\n      flex-basis: 36px;\n      font-size: 18px;\n    }\n  }\n\u003c\/style\u003e\n\u003cp\u003e \u003c\/p\u003e\u003cscript data-sp-collar-studio-placement-fix\u003e(function(){function m(){var b=document.getElementById('sp-collar-builder'),o=document.querySelector('.free-collar-customizer');if(b){if(o){o.replaceWith(b);b.setAttribute('data-sp-moved','1')}}}m();window.addEventListener('load',m)})();\u003c\/script\u003e\u003cscript data-sp-collar-color-sync\u003e(function(){var m={yellow:'rgb(192,172,115)',purple:'rgb(200,173,183)',green:'rgb(166,198,173)'};function g(){var a=document.querySelectorAll('input[type=radio]'),i=0,r;for(;i\u003ca.length;i++){r=a[i];if(r.checked){if(r.name){if(r.name.toLowerCase().indexOf('color-')==0)return r.value.toLowerCase()}}}}function f(){var s=document.querySelector('.sp-preview-strap'),v=g();if(s){if(m[v]){s.style.background=m[v];s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.1),inset 0 14px 20px rgba(255,255,255,.35)'}}}document.addEventListener('change',f);window.addEventListener('load',f);setTimeout(f,500);f()})();\u003c\/script\u003e\u003cscript data-sp-collar-photo-sync\u003e(function(){function p(){var a=document.querySelectorAll('media-gallery img,.product__media img,main img'),i=0,x,r,z=0;for(;i\u003ca.length;i++){r=a[i].getBoundingClientRect();if(r.width\u003e200){if(r.height\u003e200){if(r.width*r.height\u003ez){z=r.width*r.height;x=a[i]}}}}return x\u0026\u0026(x.currentSrc||x.src)}function f(){var s=document.querySelector('.sp-preview-strap'),u=p();if(s){if(u){s.style.background='center\/cover url(\"'+u+'\")';s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.12)'}}}document.addEventListener('change',function(){setTimeout(f,500)});window.addEventListener('load',f);setTimeout(f,900);f()})();\u003c\/script\u003e\"''\"'}}}})\u003cscript data-sp-collar-variant-photo-sync\u003e(function(){function m(){var s=document.scripts,i=0,j,d,v,o={};for(;i\u003cs.length;i++){try{d=JSON.parse(s[i].textContent)}catch(e){d=0}if(d){if(d.length){for(j=0;j\u003cd.length;j++){v=d[j];if(v.featured_image){if(v.option2){o[v.option2.toLowerCase()]=v.featured_image.src}else{if(v.option1){o[v.option1.toLowerCase()]=v.featured_image.src}}}}}}}return o}var a=m();function c(){var r=document.querySelector('input[type=radio][name^=\"Color-\"]:checked');return r\u0026\u0026r.value?r.value.toLowerCase():''}function f(){var s=document.querySelector('.sp-preview-strap'),v=c();if(s){if(a[v]){s.style.background='center\/cover url(\"'+a[v]+'\")';s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.12)'}}}document.addEventListener('change',function(){setTimeout(f,500)});window.addEventListener('load',f);setTimeout(f,1200);f()})();\u003c\/script\u003e\"''\"'}}}})\u003cscript data-sp-collar-direct-photo-sync\u003e(function(){var m={yellow:'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/122_32df1a93-2c53-4468-9250-21bf7e7949b3.png?v=1782524593',purple:'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/123_7d47435f-216a-4b48-8936-31721d17f912.png?v=1782524615',green:'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/121_d5b6d8b6-f68b-426c-ab39-166e2635ed28.png?v=1782524639'};function c(){var r=document.querySelector('input[type=radio][name^=\"Color-\"]:checked');return r\u0026\u0026r.value?r.value.toLowerCase():''}function f(){var s=document.querySelector('.sp-preview-strap'),v=c();if(s){if(m[v]){s.style.background='center\/cover url(\"'+m[v]+'\")';s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.12)'}}}document.addEventListener('change',function(){setTimeout(f,500)});window.addEventListener('load',f);setTimeout(f,1600);f()})();\u003c\/script\u003e\"''\"'}}}})\u003cscript data-sp-collar-picked-color-sync\u003e(function(){var m={yellow:'rgb(198,179,121)',purple:'rgb(192,165,179)',green:'rgb(162,198,173)'};function c(){var r=document.querySelector('input[type=radio][name^=\"Color-\"]:checked');return r\u0026\u0026r.value?r.value.toLowerCase():''}function f(){var s=document.querySelector('.sp-preview-strap'),v=c();if(s){if(m[v]){s.style.background=m[v];s.style.backgroundImage='none';s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.12),inset 0 14px 20px rgba(255,255,255,.25)'}}}document.addEventListener('change',function(){setTimeout(f,200)});window.addEventListener('load',f);setTimeout(f,1800);f()})();\u003c\/script\u003e\u003cscript data-sp-collar-picked-color-final\u003e(function(){var m={yellow:'rgb(198,179,121)',purple:'rgb(192,165,179)',green:'rgb(162,198,173)'};function c(){var r=document.querySelector('input[type=radio][name^=\"Color-\"]:checked');return r\u0026\u0026r.value?r.value.toLowerCase():''}function f(){var s=document.querySelector('.sp-preview-strap'),v=c();if(s){if(m[v]){s.style.background=m[v];s.style.backgroundImage='none';s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.12),inset 0 14px 20px rgba(255,255,255,.25)'}}}document.addEventListener('change',function(){setTimeout(f,900)});window.addEventListener('load',f);setTimeout(f,2600);f()})();\u003c\/script\u003e\u003cscript data-sp-collar-color-master\u003e(function(){var m={yellow:'rgb(198,179,121)',purple:'rgb(192,165,179)',green:'rgb(162,198,173)'};function c(){var r=document.querySelector('input[type=radio][name^=\"Color-\"]:checked');return r\u0026\u0026r.value?r.value.toLowerCase():''}function f(){var s=document.querySelector('.sp-preview-strap'),v=c();if(s){if(m[v]){s.style.backgroundColor=m[v];s.style.backgroundImage='none';s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.12),inset 0 14px 20px rgba(255,255,255,.25)'}}}document.addEventListener('change',f);window.addEventListener('load',f);setTimeout(f,100);setTimeout(f,1000);setInterval(f,300)})();\u003c\/script\u003e\n\u003cstyle data-sp-hole-polish\u003e\n#sp-collar-builder .sp-hole-track {\n  gap: 9px;\n  align-items: center;\n}\n#sp-collar-builder .sp-hole {\n  width: 34px;\n  height: 34px;\n  min-width: 34px;\n  border-radius: 999px;\n  border: 1px solid #ded6ca;\n  background: linear-gradient(180deg, #fffdf8, #f7f1e8);\n  box-shadow: 0 1px 2px rgba(35, 35, 35, 0.06), inset 0 1px 0 rgba(255, 255, 255, 0.9);\n  color: transparent;\n  font-size: 0;\n  line-height: 1;\n  position: relative;\n  display: inline-flex !important;\n  align-items: center;\n  justify-content: center;\n}\n#sp-collar-builder .sp-hole .sp-hole-number {\n  display: none !important;\n}\n#sp-collar-builder .sp-hole.is-empty::after {\n  content: \"\";\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 5px;\n  height: 5px;\n  border-radius: 50%;\n  transform: translate(-50%, -50%);\n  background: #cfc6ba;\n  opacity: 0.9;\n}\n#sp-collar-builder .sp-hole:not(.is-empty) {\n  width: 42px;\n  height: 42px;\n  min-width: 42px;\n  border-color: #c9bdae;\n  background: #fffaf2;\n  box-shadow: 0 0 0 4px #f8f1e7, 0 3px 9px rgba(35, 35, 35, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.95);\n}\n#sp-collar-builder .sp-hole:not(.is-empty)::after {\n  display: none;\n}\n#sp-collar-builder .sp-hole .sp-layout-chip {\n  width: 32px;\n  height: 32px;\n  border: 0;\n  background: transparent;\n  box-shadow: none;\n  color: #29241f;\n  font-size: 13px;\n  font-weight: 700;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n}\n#sp-collar-builder .sp-hole .sp-preview-layout-charm img,\n#sp-collar-builder .sp-hole .sp-layout-chip img {\n  width: 30px;\n  height: 30px;\n  object-fit: contain;\n}\n#sp-collar-builder .sp-hole.is-selected {\n  outline: 2px solid #8f7a5d;\n  outline-offset: 3px;\n}\n@media (max-width: 520px) {\n  #sp-collar-builder .sp-hole-track { gap: 6px; }\n  #sp-collar-builder .sp-hole { width: 29px; height: 29px; min-width: 29px; }\n  #sp-collar-builder .sp-hole:not(.is-empty) { width: 36px; height: 36px; min-width: 36px; box-shadow: 0 0 0 3px #f8f1e7, 0 2px 7px rgba(35,35,35,.08); }\n}\n\u003c\/style\u003e\n\u003cstyle data-sp-preview-hole-sync\u003e\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] {\n  left: 50%;\n  top: 43px;\n  width: 58%;\n  max-width: 58%;\n  min-height: 30px;\n  padding: 0;\n  transform: translateX(-50%);\n  display: grid !important;\n  grid-template-columns: repeat(10, minmax(0, 1fr));\n  gap: 4px;\n  align-items: center;\n  justify-items: center;\n  pointer-events: none;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot {\n  width: 20px;\n  height: 24px;\n  min-width: 0;\n  border: 0 !important;\n  background: transparent !important;\n  box-shadow: none !important;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  position: relative;\n  color: #f8f7f1;\n  font-size: 13px;\n  line-height: 1;\n  font-weight: 900;\n  text-shadow: 0 1px 1px rgba(0,0,0,.52), 0 0 1px rgba(0,0,0,.62);\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-empty::after {\n  content: \"\";\n  width: 4px;\n  height: 4px;\n  border-radius: 999px;\n  background: rgba(65, 75, 72, .42);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.35), 0 1px 0 rgba(255,255,255,.45);\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece {\n  width: 23px;\n  height: 25px;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece::before,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-charm::before {\n  display: none !important;\n  content: none !important;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot \u003e span,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot \u003e img,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot * {\n  position: relative;\n  z-index: 1;\n  background: transparent !important;\n  box-shadow: none !important;\n  border: 0 !important;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-charm img,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot .sp-preview-layout-charm img {\n  width: 22px;\n  height: 22px;\n  object-fit: contain;\n  border-radius: 0 !important;\n  mix-blend-mode: multiply;\n  filter: drop-shadow(0 1px 1px rgba(0,0,0,.28));\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-black {\n  color: #101010;\n  text-shadow: 0 1px 0 rgba(255,255,255,.45), 0 0 1px rgba(255,255,255,.35);\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-small {\n  font-size: 11px;\n}\n@media (max-width: 520px) {\n  #sp-collar-builder .sp-preview-name[data-sp-hole-preview] { width: 64%; max-width: 64%; gap: 2px; }\n  #sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot { width: 15px; height: 20px; font-size: 10px; }\n  #sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece { width: 17px; height: 20px; }\n}\n\u003c\/style\u003e\n\u003cscript data-sp-collar-builder-clean\u003e\n(function(){\n  var R=document.getElementById('sp-collar-builder');\n  if(!R || R.dataset.spCleanBuilderReady) return;\n  R.dataset.spCleanBuilderReady='1';\n  var q=function(s,p){return (p||R).querySelector(s)};\n  var a=function(s,p){return Array.prototype.slice.call((p||R).querySelectorAll(s))};\n  var LETTERS={}, CHARMS=[], selectedCharm=null, layout=[], selectedIndex=null, ready=false, lastSig='';\n  function esc(v){return String(v==null?'':v).replace(\/[\u0026\u003c\u003e\"']\/g,function(c){return {'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;','\"':'\u0026quot;',\"'\":'\u0026#39;'}[c]})}\n  function style(){var x=q('input[name=\"sp-letter-style\"]:checked');return x?x.value:'Silver'}\n  function name(){var i=q('#sp-pet-name');if(!i)return'';var max=selectedCharm?7:10;var v=i.value.toUpperCase().replace(\/[^A-Z]\/g,'').slice(0,max);if(i.value!==v)i.value=v;return v}\n  function key(s,l){return s+'|'+l}\n  function letterVariant(s,l){return LETTERS[key(s,l)]||LETTERS[key('Silver',l)]||null}\n  function chip(p){if(!p)return'';if(p.type==='charm')return '\u003cspan class=\"sp-layout-chip sp-preview-layout-charm\"\u003e\u003cimg alt=\"\" src=\"'+esc(p.img)+'\"\u003e\u003c\/span\u003e';return '\u003cspan class=\"sp-layout-chip '+(p.style==='Black'?'is-black ':'')+(p.style.indexOf('11mm')\u003e-1?'is-small':'')+'\"\u003e'+esc(p.letter)+'\u003c\/span\u003e'}\n  function pieces(){var s=style();var arr=name().split('').map(function(l,i){var v=letterVariant(s,l);return {type:'letter',uid:'L'+i+l,letter:l,style:s,variant:v\u0026\u0026v.id}});if(selectedCharm)arr.push({type:'charm',uid:'C'+selectedCharm.id,variant:selectedCharm.id,img:selectedCharm.img,title:selectedCharm.title});return arr}\n  function syncLayout(arr){var old={};layout.forEach(function(p,i){if(p)old[p.uid]=i});var next=Array(10).fill(null);var start=Math.max(0,Math.floor((10-arr.length)\/2));var cursor=start;arr.forEach(function(p){var oldIndex=old[p.uid];if(oldIndex!=null \u0026\u0026 !next[oldIndex]) next[oldIndex]=p;else{while(next[cursor])cursor++;if(cursor\u003c10)next[cursor]=p}});layout=next;selectedIndex=null}\n  function render(){var arr=pieces(), sig=arr.map(function(p){return p.uid+':'+(p.variant||'')}).join('|');if(sig!==lastSig){syncLayout(arr);lastSig=sig}var n=name(), s=style();a('.sp-style-option').forEach(function(l){var input=l.querySelector('input');l.classList.toggle('is-selected',!!input\u0026\u0026input.checked)});var collar=q('[data-sp-preview-collar]');if(collar){collar.classList.toggle('has-charm',!!selectedCharm)}var pn=q('[data-sp-preview-name]');if(pn){pn.classList.toggle('is-black',s==='Black');pn.classList.toggle('is-small',s.indexOf('11mm')\u003e-1);pn.innerHTML=(n||'YOURPET').split('').map(function(l){return '\u003cspan\u003e'+esc(l)+'\u003c\/span\u003e'}).join('')+(selectedCharm?'\u003cspan class=\"sp-preview-layout-charm\"\u003e\u003cimg alt=\"\" src=\"'+esc(selectedCharm.img)+'\"\u003e\u003c\/span\u003e':'')}var lp=q('.sp-letter-preview');if(lp)lp.innerHTML=n?arr.filter(function(p){return p.type==='letter'}).map(chip).join(''):'\u003cspan class=\"sp-preview-empty\"\u003eType a name to preview letters.\u003c\/span\u003e';var track=q('[data-sp-hole-track]');if(track){track.innerHTML=layout.map(function(p,i){return '\u003cbutton type=\"button\" class=\"sp-hole '+(p?'':'is-empty')+(selectedIndex===i?' is-selected':'')+'\" data-i=\"'+i+'\" aria-label=\"Hole '+(i+1)+(p?': '+(p.type==='letter'?p.letter:p.title):'')+'\"\u003e'+chip(p)+'\u003cspan class=\"sp-hole-number\"\u003e'+(i+1)+'\u003c\/span\u003e\u003c\/button\u003e'}).join('')}var tray=q('[data-sp-layout-tray]');if(tray)tray.innerHTML=layout.filter(Boolean).map(function(p){return '\u003cbutton type=\"button\" class=\"sp-layout-piece\" data-piece=\"'+esc(p.uid)+'\"\u003e'+chip(p)+'\u003c\/button\u003e'}).join('');var msg=q('[data-sp-layout-message]');if(msg)msg.textContent=arr.length?'Tap a letter or charm, then tap a hole to move it.':'';var sum=q('[data-sp-layout-summary]');if(sum)sum.textContent=n?'Arrange letters and charms on the collar holes.':'Type a name, then arrange letters and charms.';renderSelectedCharm()}\n  function category(t){t=t.toLowerCase();if(t.indexOf('heart')\u003e-1)return'Heart';if(t.indexOf('cross')\u003e-1)return'Cross';if(t.indexOf('gem')\u003e-1||t.indexOf('diamond')\u003e-1)return'Gem';if(t.indexOf('flower')\u003e-1)return'Flower';if(t.indexOf('star')\u003e-1)return'Star';return'Other'}\n  function charmCard(c,cls){return '\u003cbutton type=\"button\" class=\"'+cls+(selectedCharm\u0026\u0026selectedCharm.id===c.id?' is-selected':'')+'\" data-c=\"'+esc(c.id)+'\"\u003e\u003cimg alt=\"\" src=\"'+esc(c.img)+'\"\u003e\u003cspan\u003e'+esc(c.title.replace(\/ Charm$\/,''))+'\u003c\/span\u003e\u003c\/button\u003e'}\n  function renderCharms(filter){filter=filter||'All';var list=CHARMS.filter(function(c){return filter==='All'||c.category===filter});var count=q('[data-sp-charm-count]');if(count)count.textContent=list.length+' charms';var grid=q('[data-sp-charm-grid]');if(grid)grid.innerHTML=list.length?list.map(function(c){return charmCard(c,'sp-charm-card')}).join(''):'\u003cp class=\"sp-charm-loading\"\u003eNo charms in this category.\u003c\/p\u003e';var featured=q('[data-sp-featured-charms]');if(featured)featured.innerHTML=CHARMS.slice(0,6).map(function(c){return charmCard(c,'sp-featured-charm')}).join('');a('[data-sp-charm-tabs] button').forEach(function(b){b.classList.toggle('is-active',b.textContent.trim()===filter)});a('[data-c]').forEach(function(b){b.onclick=function(){selectedCharm=CHARMS.find(function(c){return c.id===b.dataset.c})||null;render();renderCharms(filter)}})}\n  function renderSelectedCharm(){var t=q('[data-sp-selected-charm-thumb]'), n=q('[data-sp-selected-charm-name]'), note=q('[data-sp-selected-charm-note]');if(t)t.innerHTML=selectedCharm?'\u003cimg alt=\"\" src=\"'+esc(selectedCharm.img)+'\"\u003e':'-';if(n)n.textContent=selectedCharm?selectedCharm.title:'No charm selected';if(note)note.textContent=selectedCharm?'Added to the collar layout.':'Optional finishing touch.'}\n  function variantId(){var x=document.querySelector('form[action*=\"\/cart\/add\"] input[name=\"id\"], product-form input[name=\"id\"], input.product-variant-id');return (x\u0026\u0026x.value)||new URLSearchParams(location.search).get('variant')||''}\n  function say(t,bad){var m=q('[data-sp-builder-message]');if(m){m.textContent=t;m.className='sp-builder-message '+(bad?'is-error':'is-success')}}\n  function add(){if(!ready)return say('Please wait for letters and charms to load.',true);var n=name();if(!n)return say('Please type a pet name first.',true);var id=variantId();if(!id)return say('Please choose collar size and colour first.',true);var used=layout.filter(Boolean);var missing=used.filter(function(p){return !p.variant});if(missing.length)return say('One selected letter or charm is unavailable. Please choose another option.',true);var props={'Pet name':n,'Letter style':style(),'Collar layout':used.map(function(p,i){return (i+1)+': '+(p.type==='letter'?p.letter:p.title)}).join(', ')};var items=[{id:+id,quantity:1,properties:props}], counts={};used.forEach(function(p){counts[p.variant]=(counts[p.variant]||0)+1});Object.keys(counts).forEach(function(k){items.push({id:+k,quantity:counts[k]})});say('Adding personalized set...');fetch('\/cart\/add.js',{method:'POST',headers:{'Content-Type':'application\/json','Accept':'application\/json'},body:JSON.stringify({items:items})}).then(function(r){if(!r.ok)throw new Error('cart');return r.json()}).then(function(){say('Personalized set added to cart.')}).catch(function(){say('Could not add everything. Please try again.',true)})}\n  R.addEventListener('click',function(e){var h=e.target.closest('.sp-hole');if(h\u0026\u0026R.contains(h)){var i=+h.dataset.i;if(selectedIndex==null){if(layout[i]){selectedIndex=i;render()}}else{var tmp=layout[i];layout[i]=layout[selectedIndex];layout[selectedIndex]=tmp;selectedIndex=null;render()}return}var piece=e.target.closest('[data-piece]');if(piece\u0026\u0026R.contains(piece)){var uid=piece.dataset.piece;var idx=layout.findIndex(function(p){return p\u0026\u0026p.uid===uid});if(idx\u003e-1){selectedIndex=idx;render()}}});\n  function boot(){var input=q('#sp-pet-name');if(input){input.addEventListener('input',render);input.addEventListener('change',render);input.addEventListener('keyup',render)}a('input[name=\"sp-letter-style\"]').forEach(function(r){r.addEventListener('change',render)});var toggle=q('[data-sp-charm-toggle]'),panel=q('[data-sp-charm-panel]');if(toggle\u0026\u0026panel)toggle.onclick=function(){panel.hidden=!panel.hidden;toggle.setAttribute('aria-expanded',String(!panel.hidden))};var clear=q('[data-sp-charm-clear]');if(clear)clear.onclick=function(){selectedCharm=null;render();renderCharms()};a('[data-sp-charm-tabs] button').forEach(function(b){b.onclick=function(){renderCharms(b.textContent.trim())}});var submit=q('[data-sp-builder-submit]');if(submit)submit.onclick=add;Promise.all([fetch('\/products\/collar-letter-add-on.js').then(function(r){return r.json()}),fetch('\/products\/collar-charm-add-on.js').then(function(r){return r.json()})]).then(function(data){data[0].variants.forEach(function(v){var parts=v.title.split(' '), l=parts.pop(), s=parts.join(' ');if(\/^[A-Z]$\/.test(l))LETTERS[key(s,l)]={id:v.id,available:v.available}});CHARMS=data[1].variants.filter(function(v){return v.available\u0026\u0026v.featured_image\u0026\u0026v.featured_image.src}).map(function(v){return {id:String(v.id),title:v.title,img:v.featured_image.src,category:category(v.title)}});ready=true;renderCharms();render()}).catch(function(){ready=true;render();say('Charm photos could not load. Please refresh the page.',true)})}\n  boot();\n})();\n\u003c\/script\u003e\n\u003cscript data-sp-preview-hole-sync\u003e\n(function(){\n  var R=document.getElementById('sp-collar-builder');\n  if(!R || R.dataset.spPreviewHoleSync) return;\n  R.dataset.spPreviewHoleSync='1';\n  var cache={};\n  function esc(v){return String(v||'').replace(\/[\u0026\u003c\u003e\"']\/g,function(c){return {'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;','\"':'\u0026quot;',\"'\":'\u0026#39;'}[c]})}\n  function makeTransparent(src, cb){\n    if(!src) return cb(src);\n    if(cache[src]) return cb(cache[src]);\n    var img=new Image();\n    img.crossOrigin='anonymous';\n    img.onload=function(){\n      try{\n        var c=document.createElement('canvas'), w=img.naturalWidth||img.width, h=img.naturalHeight||img.height;\n        c.width=w; c.height=h;\n        var x=c.getContext('2d');\n        x.drawImage(img,0,0,w,h);\n        var d=x.getImageData(0,0,w,h), p=d.data;\n        for(var i=0;i\u003cp.length;i+=4){\n          var r=p[i], g=p[i+1], b=p[i+2], max=Math.max(r,g,b), min=Math.min(r,g,b);\n          if((r\u003e232\u0026\u0026g\u003e226\u0026\u0026b\u003e214) || (max\u003e242 \u0026\u0026 max-min\u003c28)) p[i+3]=0;\n        }\n        x.putImageData(d,0,0);\n        cache[src]=c.toDataURL('image\/png');\n        cb(cache[src]);\n      }catch(e){cache[src]=src;cb(src)}\n    };\n    img.onerror=function(){cache[src]=src;cb(src)};\n    img.src=src;\n  }\n  function cleanCharmImages(root){\n    Array.prototype.slice.call(root.querySelectorAll('.sp-preview-slot.has-charm img')).forEach(function(img){\n      var src=img.getAttribute('src');\n      if(!src || img.dataset.spTransparentCharm) return;\n      img.dataset.spTransparentCharm='1';\n      makeTransparent(src,function(out){img.src=out});\n    });\n  }\n  function sync(){\n    var preview=R.querySelector('[data-sp-preview-name]'), holes=[].slice.call(R.querySelectorAll('.sp-hole'));\n    if(!preview || holes.length\u003c10) return;\n    preview.setAttribute('data-sp-hole-preview','');\n    preview.innerHTML=holes.slice(0,10).map(function(h){\n      var chip=h.querySelector('.sp-layout-chip'), cls='sp-preview-slot', html='';\n      if(!chip){cls+=' is-empty'}else{\n        cls+=' has-piece';\n        if(chip.classList.contains('is-black')) cls+=' is-black';\n        if(chip.classList.contains('is-small')) cls+=' is-small';\n        if(chip.querySelector('img')) cls+=' has-charm';\n        html=chip.innerHTML || esc(chip.textContent.trim());\n      }\n      return '\u003cspan class=\"'+cls+'\"\u003e'+html+'\u003c\/span\u003e';\n    }).join('');\n    cleanCharmImages(preview);\n  }\n  var track=R.querySelector('[data-sp-hole-track]');\n  if(track \u0026\u0026 window.MutationObserver){new MutationObserver(function(){setTimeout(sync,0)}).observe(track,{childList:true,subtree:true,characterData:true,attributes:true})}\n  R.addEventListener('click',function(){setTimeout(sync,40);setTimeout(sync,180);setTimeout(sync,700)},true);\n  R.addEventListener('input',function(){setTimeout(sync,40);setTimeout(sync,180);setTimeout(sync,700)},true);\n  R.addEventListener('change',function(){setTimeout(sync,40);setTimeout(sync,180);setTimeout(sync,700)},true);\n  window.addEventListener('load',function(){setTimeout(sync,300);setTimeout(sync,1200)});\n  setTimeout(sync,100);setTimeout(sync,600);setTimeout(sync,1600);\n})();\n\u003c\/script\u003e\n\n","brand":"SpoiledPaws","offers":[{"title":"One Size - 1.5cm x 33.5cm \/ Yellow","offer_id":46592551944353,"sku":"SP-COL-051","price":34.0,"currency_code":"NZD","in_stock":true},{"title":"One Size - 1.5cm x 33.5cm \/ Purple","offer_id":46592551977121,"sku":"SP-COL-052","price":34.0,"currency_code":"NZD","in_stock":true},{"title":"One Size - 1.5cm x 33.5cm \/ Green","offer_id":46592552009889,"sku":"SP-COL-053","price":34.0,"currency_code":"NZD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/3_65e85083-988a-4f37-ac6b-1698e9a0970c.png?v=1783003966"},{"product_id":"personalized-dog-collar-style-3","title":"Artisan Cowhide Collar","description":"\u003cscript data-sp-visual-name-order\u003e(function(){var done=0;function esc(s){return String(s).replace(\/[\u0026\u003c\u003e]\/g,function(c){return{'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;'}[c]})}function draw(){var R=document.getElementById('sp-collar-builder'),I=R\u0026\u0026R.querySelector('#sp-pet-name');if(!R||!I)return;var n=I.value.toUpperCase().replace(\/[^A-Z]\/g,'').slice(0,10);if(!n)return;var a=Array(10).fill(''),s=Math.max(0,Math.floor((10-n.length)\/2));n.split('').forEach(function(c,i){a[s+i]=c});R.querySelectorAll('.sp-hole').forEach(function(h,i){var l=a[i];h.className='sp-hole '+(l?'':'is-empty');h.setAttribute('aria-label','Hole '+(i+1)+(l?': '+l:''));h.innerHTML=l?'\u003cspan class=\"sp-layout-chip\"\u003e'+esc(l)+'\u003c\/span\u003e\u003cspan class=\"sp-hole-number\"\u003e'+(i+1)+'\u003c\/span\u003e':'\u003cspan class=\"sp-hole-number\"\u003e'+(i+1)+'\u003c\/span\u003e'});var T=R.querySelector('[data-sp-layout-tray]');if(T)T.innerHTML=n.split('').map(function(l){return'\u003cbutton type=\"button\" class=\"sp-layout-piece\"\u003e\u003cspan class=\"sp-layout-chip\"\u003e'+esc(l)+'\u003c\/span\u003e\u003c\/button\u003e'}).join('');var S=R.querySelectorAll('[data-sp-preview-name] .sp-preview-slot');S.forEach(function(x,i){var l=a[i];if(x.classList.contains('has-charm'))return;x.className='sp-preview-slot '+(l?'has-piece':'is-empty');if(l){x.setAttribute('data-letter',l);x.textContent=''}else{x.removeAttribute('data-letter');x.textContent=''}})}function boot(){var R=document.getElementById('sp-collar-builder'),I=R\u0026\u0026R.querySelector('#sp-pet-name');if(!I)return;if(!I.dataset.visualOrder){I.dataset.visualOrder=1;I.addEventListener('input',function(){setTimeout(draw,80);setTimeout(draw,400)});I.addEventListener('change',function(){setTimeout(draw,80);setTimeout(draw,400)})}draw()}document.addEventListener('DOMContentLoaded',boot);var t=setInterval(function(){boot();if(++done\u003e20)clearInterval(t)},300)})();\u003c\/script\u003e\u003cscript data-sp-name-order-fix\u003e(function(){function l(h){var m=((h\u0026\u0026h.getAttribute('aria-label'))||'').match(\/: ([A-Z])\/);return m?m[1]:''}function w(n){var a=Array(10).fill(''),s=Math.max(0,Math.floor((10-n.length)\/2));n.split('').forEach(function(c,i){a[s+i]=c});return a}function run(){var R=document.getElementById('sp-collar-builder'),I=R\u0026\u0026R.querySelector('#sp-pet-name');if(!R||!I)return;var n=I.value.toUpperCase().replace(\/[^A-Z]\/g,'').slice(0,10);if(!n)return;var want=w(n);setTimeout(function step(){var H=[].slice.call(R.querySelectorAll('.sp-hole'));for(var i=0;i\u003c10;i++){if(l(H[i])!==want[i]){var j=H.findIndex(function(h,k){return k!==i\u0026\u0026l(h)===want[i]});if(j\u003e-1){H[j].click();setTimeout(function(){H[i].click();setTimeout(step,60)},20)}return}}},180)}function boot(){var R=document.getElementById('sp-collar-builder'),I=R\u0026\u0026R.querySelector('#sp-pet-name');if(!I)return;I.addEventListener('input',function(){setTimeout(run,260)});I.addEventListener('change',function(){setTimeout(run,260)});setTimeout(run,1200)}document.addEventListener('DOMContentLoaded',boot);setTimeout(boot,500);setTimeout(boot,1600)})();\u003c\/script\u003e\u003cscript data-sp-upright-letter-order\u003e(function(){function u(){var R=document.getElementById('sp-collar-builder');if(!R)return;var h=[].slice.call(R.querySelectorAll('.sp-hole')),s=[].slice.call(R.querySelectorAll('[data-sp-preview-name] .sp-preview-slot'));s.forEach(function(x,i){if(x.classList.contains('has-charm'))return;var a=(h[i]\u0026\u0026h[i].getAttribute('aria-label'))||'',m=a.match(\/: ([A-Z])\/);x.querySelectorAll('.sp-real-letter').forEach(function(im){im.remove()});if(m){x.classList.add('has-piece');x.setAttribute('data-letter',m[1]);x.textContent=''}else{x.removeAttribute('data-letter')}})}function b(){var R=document.getElementById('sp-collar-builder');if(!R)return;if(window.MutationObserver\u0026\u0026!R.dataset.uprightOrder){R.dataset.uprightOrder=1;new MutationObserver(function(){setTimeout(u,20)}).observe(R,{childList:true,subtree:true,attributes:true})}u()}document.addEventListener('DOMContentLoaded',b);setTimeout(b,300);setTimeout(b,1200);setInterval(u,700)})();\u003c\/script\u003e\u003cstyle data-sp-upright-letter-preview\u003e#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot .sp-real-letter{display:none!important}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece:not(.has-charm){transform:none!important}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece:not(.has-charm)::after{content:attr(data-letter);font-family:Arial Black,Arial,sans-serif;font-size:13px;font-weight:900;line-height:1;color:#e9ecec;-webkit-text-stroke:.45px #5d666c;text-shadow:0 -1px 0 #fff,1px 0 0 #8a9297,-1px 0 0 #cdd3d7,0 1px 0 #59636a,0 2px 2px rgba(0,0,0,.25);filter:drop-shadow(0 1px 1px rgba(0,0,0,.2))}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-black.has-piece:not(.has-charm)::after{color:#111;-webkit-text-stroke:.35px #6f767b;text-shadow:0 -1px 0 #3a3a3a,0 1px 0 #7c858b,0 2px 2px rgba(0,0,0,.28)}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-small.has-piece:not(.has-charm)::after{font-size:11px}\u003c\/style\u003e\u003cscript data-sp-upright-letter-preview\u003e(function(){function u(){var R=document.getElementById('sp-collar-builder');if(!R)return;R.querySelectorAll('.sp-preview-slot.has-piece:not(.has-charm)').forEach(function(s){var i=s.querySelector('.sp-real-letter'),t=(i\u0026\u0026i.alt)||(s.textContent||'').trim().charAt(0);if(\/^[A-Z]$\/.test(t)){s.setAttribute('data-letter',t);if(i)i.style.display='none'}})}function b(){var R=document.getElementById('sp-collar-builder');if(!R)return;if(window.MutationObserver\u0026\u0026!R.dataset.uprightLetters){R.dataset.uprightLetters=1;new MutationObserver(function(){setTimeout(u,10)}).observe(R,{childList:true,subtree:true,characterData:true})}u()}document.addEventListener('DOMContentLoaded',b);setTimeout(b,300);setTimeout(b,1200);setTimeout(b,2500)})();\u003c\/script\u003e\u003cstyle data-sp-upright-letter-preview\u003e#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot .sp-real-letter{display:none!important}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece:not(.has-charm){transform:none!important}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece:not(.has-charm)::after{content:attr(data-letter);font-family:Arial Black,Arial,sans-serif;font-size:13px;font-weight:900;line-height:1;color:#e9ecec;-webkit-text-stroke:.45px #5d666c;text-shadow:0 -1px 0 #fff,1px 0 0 #8a9297,-1px 0 0 #cdd3d7,0 1px 0 #59636a,0 2px 2px rgba(0,0,0,.25);filter:drop-shadow(0 1px 1px rgba(0,0,0,.2))}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-black.has-piece:not(.has-charm)::after{color:#111;-webkit-text-stroke:.35px #6f767b;text-shadow:0 -1px 0 #3a3a3a,0 1px 0 #7c858b,0 2px 2px rgba(0,0,0,.28)}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-small.has-piece:not(.has-charm)::after{font-size:11px}\u003c\/style\u003e\u003cscript data-sp-upright-letter-preview\u003e(function(){function u(){var R=document.getElementById('sp-collar-builder');if(!R)return;R.querySelectorAll('.sp-preview-slot.has-piece:not(.has-charm)').forEach(function(s){var i=s.querySelector('.sp-real-letter'),t=(i\u0026\u0026i.alt)||(s.textContent||'').trim().charAt(0);if(\/^[A-Z]$\/.test(t)){s.setAttribute('data-letter',t);if(i)i.style.display='none'}})}function b(){var R=document.getElementById('sp-collar-builder');if(!R)return;if(window.MutationObserver\u0026\u0026!R.dataset.uprightLetters){R.dataset.uprightLetters=1;new MutationObserver(function(){setTimeout(u,10)}).observe(R,{childList:true,subtree:true,characterData:true})}u()}document.addEventListener('DOMContentLoaded',b);setTimeout(b,300);setTimeout(b,1200);setTimeout(b,2500)})();\u003c\/script\u003e\u003cscript data-sp-real-letter-preview\u003e(function(){var R=document.getElementById('sp-collar-builder');function q(s,p){return(p||document).querySelector(s)}function qa(s,p){return[].slice.call((p||document).querySelectorAll(s))}var U={Silver:'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/168_aa55a61c-84e0-4386-8125-82415a99b5f2.png?v=1782479450',Black:'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/170_6eb3e3c0-ef5a-4b2f-888f-7f4118018f3c.png?v=1782479450','Silver 11mm':'https:\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/169_b55b69a4-36f8-4876-88f8-538f10ce4f3d.png?v=1782479450'},P={A:[.16,.26],B:[.27,.25],C:[.385,.26],D:[.52,.255],E:[.645,.24],F:[.785,.255],G:[.92,.25],H:[.15,.41],I:[.265,.415],J:[.385,.4],K:[.515,.395],L:[.625,.4],M:[.75,.395],N:[.895,.4],O:[.12,.595],P:[.27,.598],Q:[.4,.59],R:[.535,.59],S:[.66,.572],T:[.792,.57],U:[.908,.575],V:[.125,.795],W:[.305,.79],X:[.465,.778],Y:[.61,.77],Z:[.758,.768]},C={},I={};function st(){var x=q('input[name=\"sp-letter-style\"]:checked',R);return x?x.value:'Silver'}function img(s,cb){if(I[s])return cb(I[s]);var im=new Image;im.crossOrigin='anonymous';im.onload=function(){I[s]=im;cb(im)};im.src=U[s]||U.Silver}function cut(s,l,cb){var k=s+'|'+l;if(C[k])return cb(C[k]);img(s,function(im){try{var p=P[l]||P.A,w=im.naturalWidth,h=im.naturalHeight,c=document.createElement('canvas'),cw=s=='Silver 11mm'?230:300,ch=s=='Silver 11mm'?300:360,sw=cw,sh=ch,sx=Math.max(0,p[0]*w-sw\/2),sy=Math.max(0,p[1]*h-sh\/2);c.width=90;c.height=108;var x=c.getContext('2d');x.drawImage(im,sx,sy,sw,sh,0,0,c.width,c.height);var d=x.getImageData(0,0,c.width,c.height),a=d.data;for(var i=0;i\u003ca.length;i+=4){var r=a[i],g=a[i+1],b=a[i+2],m=Math.max(r,g,b),n=Math.min(r,g,b);if((r\u003e232\u0026\u0026g\u003e226\u0026\u0026b\u003e214)||(m\u003e242\u0026\u0026m-n\u003c30))a[i+3]=0}x.putImageData(d,0,0);C[k]=c.toDataURL('image\/png');cb(C[k])}catch(e){cb('')}})}function apply(){R=document.getElementById('sp-collar-builder');if(!R)return;var s=st();qa('[data-sp-preview-name] .sp-preview-slot.has-piece:not(.has-charm)',R).forEach(function(el){var l=(el.textContent||'').trim().charAt(0).toUpperCase();if(!\/^[A-Z]$\/.test(l)||el.dataset.real==s+l)return;el.dataset.real=s+l;cut(s,l,function(src){if(src)el.innerHTML='\u003cimg class=\"sp-real-letter\" alt=\"'+l+'\" src=\"'+src+'\"\u003e'})})}function boot(){R=document.getElementById('sp-collar-builder');if(!R)return;var css=document.createElement('style');css.textContent='#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot .sp-real-letter{width:23px;height:27px;object-fit:contain;filter:drop-shadow(0 1px 1px rgba(0,0,0,.25))}#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-small .sp-real-letter{width:18px;height:22px}';document.head.appendChild(css);if(window.MutationObserver)new MutationObserver(function(){setTimeout(apply,20)}).observe(R,{childList:true,subtree:true,characterData:true});R.addEventListener('input',function(){setTimeout(apply,80)},true);R.addEventListener('change',function(){setTimeout(apply,80)},true);R.addEventListener('click',function(){setTimeout(apply,80);setTimeout(apply,300)},true);setTimeout(apply,300);setTimeout(apply,1000);setTimeout(apply,2200)}document.addEventListener('DOMContentLoaded',boot);setTimeout(boot,300);setTimeout(boot,1200)})();\u003c\/script\u003e\"'\"'\u003cscript data-sp-letter-reference-move\u003e(function(){function m(){var r=document.querySelector('[data-sp-letter-reference]'),b=document.getElementById('sp-collar-builder'),f=b\u0026\u0026b.querySelector('.sp-builder-fieldset');if(r\u0026\u0026f\u0026\u0026r.parentNode!==b)f.after(r)}document.addEventListener('DOMContentLoaded',m);setTimeout(m,300);setTimeout(m,1200);setTimeout(m,2500)})();\u003c\/script\u003e\u003cstyle data-sp-letter-reference-style\u003e#sp-collar-builder .sp-letter-reference{margin:12px 0 14px;padding:12px;border:1px solid #eee5d9;border-radius:8px;background:#fffaf2}#sp-collar-builder .sp-letter-reference-head{display:flex;justify-content:space-between;gap:10px;margin-bottom:10px}#sp-collar-builder .sp-letter-reference-head strong{font-size:13px}#sp-collar-builder .sp-letter-reference-head span{font-size:12px;color:#6c6256;text-align:right}#sp-collar-builder .sp-letter-reference-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}#sp-collar-builder .sp-letter-reference figure{margin:0}#sp-collar-builder .sp-letter-reference img{display:block;width:100%;aspect-ratio:1.25\/1;object-fit:contain;border-radius:6px;border:1px solid #eee5d9;background:#f8f3ea}#sp-collar-builder .sp-letter-reference figcaption{margin-top:6px;font-size:12px;font-weight:700;text-align:center}\u003c\/style\u003e\u003cdiv class=\"sp-letter-reference\" data-sp-letter-reference\u003e\n\u003cdiv class=\"sp-letter-reference-head\"\u003e\n\u003cstrong\u003eLetter style reference\u003c\/strong\u003e\u003cspan\u003eReal letter photos for each finish.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-letter-reference-grid\"\u003e\n\u003cfigure\u003e\u003cimg src=\"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/168_aa55a61c-84e0-4386-8125-82415a99b5f2.png?v=1782479450\" alt=\"Silver collar letters\" loading=\"lazy\"\u003e\u003cfigcaption\u003eSilver\u003c\/figcaption\u003e\u003c\/figure\u003e\u003cfigure\u003e\u003cimg src=\"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/170_6eb3e3c0-ef5a-4b2f-888f-7f4118018f3c.png?v=1782479450\" alt=\"Black collar letters\" loading=\"lazy\"\u003e\u003cfigcaption\u003eBlack\u003c\/figcaption\u003e\u003c\/figure\u003e\u003cfigure\u003e\u003cimg src=\"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/169_b55b69a4-36f8-4876-88f8-538f10ce4f3d.png?v=1782479450\" alt=\"Silver 11mm collar letters\" loading=\"lazy\"\u003e\u003cfigcaption\u003eSilver 11mm\u003c\/figcaption\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003cdiv class=\"sp-product-description\"\u003e\n\u003cp\u003eA polished collar style with a refined finish. Choose the colour and size, then personalize it with letters or charms for a custom collar that still feels elevated.\u003c\/p\u003e\n\u003ch3\u003eDetails\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvailable in selected colours and sizes.\u003c\/li\u003e\n\u003cli\u003eCompatible with collar letter add-ons and selected charm add-ons.\u003c\/li\u003e\n\u003cli\u003eUse the builder below to add the collar and matching letter inventory in one step.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003cdiv data-charm-handle=\"collar-charm-add-on\" data-letter-handle=\"collar-letter-add-on\" class=\"sp-collar-builder\" id=\"sp-collar-builder\"\u003e\n\u003cdiv class=\"sp-builder-header\"\u003e\n\u003cp class=\"sp-builder-kicker\"\u003ePersonalized collar studio\u003c\/p\u003e\n\u003ch3\u003eDesign their signature collar\u003c\/h3\u003e\n\u003cp\u003eBuild the collar as a complete set: choose the name, match the letter finish, then add a charm by photo.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv data-sp-studio-preview=\"\" class=\"sp-studio-preview\"\u003e\n\u003cdiv class=\"sp-preview-stage\"\u003e\n\u003cdiv data-sp-preview-collar=\"\" class=\"sp-preview-collar\"\u003e\n\u003cdiv class=\"sp-preview-strap\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-ring sp-preview-ring-left\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-ring sp-preview-ring-right\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-buckle\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv data-sp-preview-name=\"\" class=\"sp-preview-name\"\u003e\u003cspan\u003eYOURPET\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv hidden=\"\" data-sp-preview-charm=\"\" class=\"sp-preview-charm\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-preview-meta\"\u003e\n\u003cstrong data-sp-preview-title=\"\"\u003eYour pet's collar\u003c\/strong\u003e \u003cspan data-sp-preview-subtitle=\"\"\u003eChoose size and colour above, then personalize below.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-builder-field\"\u003e\n\u003clabel for=\"sp-pet-name\"\u003ePet name or initials\u003c\/label\u003e \u003cinput autocomplete=\"off\" placeholder=\"LUNA\" maxlength=\"10\" type=\"text\" class=\"sp-builder-input\" id=\"sp-pet-name\"\u003e \u003csmall\u003eLetters A-Z only. Each letter is added separately so inventory stays accurate.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cfieldset class=\"sp-builder-field sp-builder-fieldset\"\u003e\n\u003clegend\u003eLetter style\u003c\/legend\u003e\n\u003cdiv aria-label=\"Letter style\" role=\"radiogroup\" class=\"sp-style-options\"\u003e\n\u003clabel class=\"sp-style-option is-selected\"\u003e \u003cinput checked value=\"Silver\" name=\"sp-letter-style\" type=\"radio\"\u003e \u003cspan class=\"sp-style-swatch sp-style-silver\"\u003e\u003c\/span\u003e \u003cspan\u003eSilver\u003c\/span\u003e \u003c\/label\u003e \u003clabel class=\"sp-style-option\"\u003e \u003cinput value=\"Black\" name=\"sp-letter-style\" type=\"radio\"\u003e \u003cspan class=\"sp-style-swatch sp-style-black\"\u003e\u003c\/span\u003e \u003cspan\u003eBlack\u003c\/span\u003e \u003c\/label\u003e \u003clabel class=\"sp-style-option\"\u003e \u003cinput value=\"Silver 11mm\" name=\"sp-letter-style\" type=\"radio\"\u003e \u003cspan class=\"sp-style-swatch sp-style-silver-small\"\u003e\u003c\/span\u003e \u003cspan\u003eSilver 11mm\u003c\/span\u003e \u003c\/label\u003e\n\u003c\/div\u003e\n\u003c\/fieldset\u003e\n\u003cdiv aria-live=\"polite\" class=\"sp-letter-preview\"\u003e\u003cspan class=\"sp-preview-empty\"\u003eType a name to preview letters.\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv data-sp-layout-planner=\"\" class=\"sp-layout-planner\"\u003e\n\u003cdiv class=\"sp-layout-head\"\u003e\n\u003cstrong\u003eCollar hole layout\u003c\/strong\u003e \u003csmall data-sp-layout-summary=\"\"\u003eChoose letters and charms to arrange the collar.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cdiv aria-label=\"Personalization limits\" class=\"sp-layout-rules\"\u003e\n\u003cspan\u003eLetters only: max 10\u003c\/span\u003e \u003cspan\u003eCharms only: max 8\u003c\/span\u003e \u003cspan\u003eLetters + charms: max 8 total\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv aria-label=\"Collar hole layout\" data-sp-hole-track=\"\" class=\"sp-hole-track\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv aria-label=\"Selected letters and charms\" data-sp-layout-tray=\"\" class=\"sp-layout-tray\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cp role=\"status\" data-sp-layout-message=\"\" class=\"sp-layout-message\"\u003e \u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-builder-field\"\u003e\n\u003clabel\u003eCharm add-on\u003c\/label\u003e\n\u003cdiv class=\"sp-charm-story\"\u003e\n\u003cstrong\u003eMake it feel like theirs.\u003c\/strong\u003e \u003cspan\u003eStart with a curated pick, or open the full charm library when you want to browse every photo.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"sp-charm-picker\"\u003e\n\u003cdiv data-sp-selected-charm=\"\" class=\"sp-selected-charm\"\u003e\n\u003cdiv data-sp-selected-charm-thumb=\"\" class=\"sp-selected-charm-thumb\"\u003e-\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cstrong data-sp-selected-charm-name=\"\"\u003eNo charm selected\u003c\/strong\u003e \u003csmall data-sp-selected-charm-note=\"\"\u003eOptional finishing touch.\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton aria-expanded=\"false\" data-sp-charm-toggle=\"\" class=\"sp-charm-toggle\" type=\"button\"\u003e Browse charms \u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv aria-live=\"polite\" data-sp-featured-charms=\"\" class=\"sp-featured-charms\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv hidden=\"\" data-sp-charm-panel=\"\" class=\"sp-charm-panel\"\u003e\n\u003cdiv class=\"sp-charm-panel-head\"\u003e\n\u003cdiv\u003e\n\u003cstrong\u003eCharm library\u003c\/strong\u003e \u003csmall data-sp-charm-count=\"\"\u003eLoading charm photos...\u003c\/small\u003e\n\u003c\/div\u003e\n\u003cbutton data-sp-charm-clear=\"\" class=\"sp-charm-clear\" type=\"button\"\u003eNo charm\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv aria-label=\"Charm categories\" data-sp-charm-tabs=\"\" class=\"sp-charm-tabs\"\u003e\n\u003cbutton data-category=\"all\" class=\"is-active\" type=\"button\"\u003eAll\u003c\/button\u003e \u003cbutton data-category=\"heart\" type=\"button\"\u003eHeart\u003c\/button\u003e \u003cbutton data-category=\"cross\" type=\"button\"\u003eCross\u003c\/button\u003e \u003cbutton data-category=\"gem\" type=\"button\"\u003eGem\u003c\/button\u003e \u003cbutton data-category=\"flower\" type=\"button\"\u003eFlower\u003c\/button\u003e \u003cbutton data-category=\"star\" type=\"button\"\u003eStar\u003c\/button\u003e \u003cbutton data-category=\"other\" type=\"button\"\u003eOther\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv aria-live=\"polite\" data-sp-charm-grid=\"\" class=\"sp-charm-grid\"\u003e\n\u003cp class=\"sp-charm-loading\"\u003eLoading charm photos...\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton data-sp-builder-submit=\"\" class=\"sp-builder-submit\" type=\"button\"\u003e Add personalized set to cart \u003c\/button\u003e\n\u003cp role=\"status\" data-sp-builder-message=\"\" class=\"sp-builder-message\"\u003e \u003c\/p\u003e\n\u003cp role=\"status\" data-sp-builder-message=\"\" class=\"sp-builder-message\"\u003e \u003c\/p\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n  .sp-collar-builder {\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 18px;\n    margin: 18px 0;\n    background: #fffdf8;\n    color: #252525;\n  }\n\n  .sp-native-personalizer-hidden {\n    display: none !important;\n  }\n\n  body.sp-collar-gallery-intro media-gallery slideshow-slide,\n  body.sp-collar-gallery-intro media-gallery .slideshow-controls__thumbnail {\n    display: none !important;\n  }\n\n  body.sp-collar-gallery-intro media-gallery slideshow-slide[data-sp-intro-media],\n  body.sp-collar-gallery-intro media-gallery .slideshow-controls__thumbnail[data-sp-intro-media] {\n    display: block !important;\n  }\n\n  body.sp-collar-gallery-color-mode media-gallery slideshow-slide[data-sp-intro-media],\n  body.sp-collar-gallery-color-mode media-gallery .slideshow-controls__thumbnail[data-sp-intro-media] {\n    display: none !important;\n  }\n\n  body.sp-collar-gallery-color-mode media-gallery slideshow-slide:not([data-sp-intro-media]) {\n    display: flex !important;\n  }\n\n  body.sp-collar-gallery-color-mode media-gallery .slideshow-controls__thumbnail:not([data-sp-intro-media]) {\n    display: block !important;\n  }\n\n  .sp-builder-header {\n    border-bottom: 1px solid rgba(35, 35, 35, 0.1);\n    padding-bottom: 14px;\n    margin-bottom: 16px;\n  }\n\n  .sp-builder-kicker {\n    margin: 0 0 6px;\n    font-size: 12px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: #7b6c58;\n  }\n\n  .sp-builder-header h3 {\n    margin: 0 0 6px;\n    font-size: 22px;\n    line-height: 1.2;\n  }\n\n  .sp-builder-header p,\n  .sp-builder-field small,\n  .sp-selected-charm small,\n  .sp-builder-guide p,\n  .sp-builder-message {\n    margin: 0;\n    font-size: 13px;\n    line-height: 1.45;\n    color: #6c6256;\n  }\n\n  .sp-studio-preview {\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 8px;\n    overflow: hidden;\n    background: #f7f3ea;\n    margin: 16px 0;\n  }\n\n  .sp-preview-stage {\n    min-height: 184px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 22px 18px;\n    background:\n      linear-gradient(90deg, rgba(35, 35, 35, 0.035) 1px, transparent 1px),\n      linear-gradient(180deg, rgba(35, 35, 35, 0.035) 1px, transparent 1px),\n      radial-gradient(circle at 22% 18%, rgba(255, 255, 255, 0.92), transparent 34%),\n      linear-gradient(135deg, #fffaf2, #eadfcf);\n    background-size: 22px 22px, 22px 22px, auto, auto;\n  }\n\n  .sp-preview-collar {\n    position: relative;\n    width: min(100%, 470px);\n    height: 116px;\n    transition: width 0.18s ease, height 0.18s ease;\n  }\n\n  .sp-preview-collar.is-xs {\n    width: min(72%, 330px);\n    height: 96px;\n  }\n\n  .sp-preview-collar.is-s {\n    width: min(82%, 380px);\n    height: 104px;\n  }\n\n  .sp-preview-collar.is-m {\n    width: min(92%, 430px);\n    height: 112px;\n  }\n\n  .sp-preview-collar.is-l {\n    width: min(100%, 470px);\n    height: 116px;\n  }\n\n  .sp-preview-collar.is-xl {\n    width: min(100%, 520px);\n    height: 124px;\n  }\n\n  .sp-preview-strap {\n    position: absolute;\n    left: 6%;\n    right: 6%;\n    top: 42px;\n    height: 30px;\n    border-radius: 999px;\n    background: #f8f6ef;\n    border: 1px solid rgba(35, 35, 35, 0.22);\n    box-shadow: inset 0 3px 10px rgba(255, 255, 255, 0.65), inset 0 -4px 10px rgba(0, 0, 0, 0.12);\n  }\n\n  .sp-preview-collar.is-xs .sp-preview-strap {\n    left: 10%;\n    right: 10%;\n    top: 40px;\n    height: 22px;\n  }\n\n  .sp-preview-collar.is-s .sp-preview-strap {\n    left: 8%;\n    right: 8%;\n    top: 41px;\n    height: 25px;\n  }\n\n  .sp-preview-collar.is-m .sp-preview-strap {\n    top: 42px;\n    height: 28px;\n  }\n\n  .sp-preview-collar.is-xl .sp-preview-strap {\n    left: 5%;\n    right: 5%;\n    top: 43px;\n    height: 34px;\n  }\n\n  .sp-preview-ring,\n  .sp-preview-buckle {\n    position: absolute;\n    top: 36px;\n    width: 20px;\n    height: 36px;\n    border: 4px solid #c7c9cc;\n    border-radius: 7px;\n    background: rgba(255, 255, 255, 0.42);\n    box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.9), 0 2px 5px rgba(0, 0, 0, 0.12);\n  }\n\n  .sp-preview-ring-left {\n    left: 9%;\n  }\n\n  .sp-preview-ring-right {\n    right: 9%;\n  }\n\n  .sp-preview-buckle {\n    left: 15%;\n    width: 38px;\n  }\n\n  .sp-preview-name {\n    position: absolute;\n    left: 50%;\n    top: 33px;\n    transform: translateX(-50%);\n    display: flex;\n    gap: 3px;\n    align-items: center;\n    justify-content: center;\n    min-height: 54px;\n    max-width: 66%;\n    padding: 0 8px;\n    white-space: nowrap;\n  }\n\n  .sp-preview-name span {\n    position: relative;\n    min-width: 19px;\n    height: 28px;\n    border-radius: 0;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    font-family: \"Arial Rounded MT Bold\", \"Arial Black\", \"Helvetica Neue\", sans-serif;\n    font-weight: 900;\n    font-size: 18px;\n    line-height: 1;\n    letter-spacing: 0;\n    border: 0;\n    background: transparent;\n    color: #eceeee;\n    -webkit-text-stroke: 1.25px #565d64;\n    text-shadow:\n      0 -1px 0 #ffffff,\n      1px 0 0 #858d94,\n      -1px 0 0 #cbd0d5,\n      0 2px 0 #656d75,\n      0 3px 3px rgba(0, 0, 0, 0.24);\n    filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.22));\n  }\n\n  .sp-preview-name.is-black span {\n    color: #111;\n    -webkit-text-stroke: 1.25px #777e86;\n    text-shadow:\n      0 -1px 0 #333,\n      1px 0 0 #a5abb1,\n      -1px 0 0 #4b5055,\n      0 2px 0 #757c84,\n      0 3px 3px rgba(0, 0, 0, 0.3);\n    filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.28));\n  }\n\n  .sp-preview-name.is-small span {\n    min-width: 15px;\n    height: 23px;\n    font-size: 15px;\n    -webkit-text-stroke-width: 0.9px;\n  }\n\n  .sp-preview-name span.has-letter-art,\n  .sp-letter-chip.has-letter-art {\n    color: transparent;\n    -webkit-text-stroke: 0;\n    text-shadow: none;\n  }\n\n  .sp-preview-name span.has-letter-art {\n    min-width: 24px;\n    width: 24px;\n    height: 30px;\n  }\n\n  .sp-preview-name.is-small span.has-letter-art {\n    min-width: 17px;\n    width: 17px;\n    height: 22px;\n  }\n\n  .sp-preview-collar.is-xs .sp-preview-name {\n    top: 31px;\n    transform: translateX(-50%) scale(0.82);\n  }\n\n  .sp-preview-collar.is-s .sp-preview-name {\n    top: 32px;\n    transform: translateX(-50%) scale(0.9);\n  }\n\n  .sp-preview-collar.is-xl .sp-preview-name {\n    top: 35px;\n    transform: translateX(-50%) scale(1.08);\n  }\n\n  .sp-preview-name span.has-letter-art img,\n  .sp-letter-chip.has-letter-art img {\n    display: block;\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n    filter: drop-shadow(0 2px 2px rgba(0, 0, 0, 0.18));\n  }\n\n  .sp-preview-name span.has-letter-art img {\n    --sp-preview-letter-rotate: 0deg;\n    transform: rotate(var(--sp-preview-letter-rotate)) scale(0.88);\n    transform-origin: center;\n  }\n\n  .sp-preview-name span.sp-preview-layout-charm {\n    width: 26px;\n    min-width: 26px;\n    height: 26px;\n    border-radius: 50%;\n    overflow: hidden;\n    background: rgba(255, 255, 255, 0.74);\n    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\n  }\n\n  .sp-preview-name.is-small span.sp-preview-layout-charm {\n    width: 20px;\n    min-width: 20px;\n    height: 20px;\n  }\n\n  .sp-preview-name span.sp-preview-layout-charm img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  .sp-preview-charm {\n    position: absolute;\n    right: 20%;\n    top: 70px;\n    width: 48px;\n    height: 48px;\n    border-radius: 50%;\n    overflow: hidden;\n    background: #fff;\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    box-shadow: 0 5px 12px rgba(0, 0, 0, 0.18);\n  }\n\n  .sp-preview-charm img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n\n  .sp-preview-meta {\n    display: flex;\n    justify-content: space-between;\n    gap: 10px;\n    padding: 11px 14px;\n    background: #fff;\n    border-top: 1px solid rgba(35, 35, 35, 0.08);\n  }\n\n  .sp-preview-meta span {\n    color: #6c6256;\n    font-size: 12px;\n    text-align: right;\n  }\n\n  .sp-builder-field {\n    margin: 14px 0;\n  }\n\n  .sp-builder-field label,\n  .sp-builder-fieldset legend {\n    display: block;\n    margin-bottom: 7px;\n    font-size: 14px;\n    font-weight: 650;\n  }\n\n  .sp-builder-fieldset {\n    border: 0;\n    padding: 0;\n  }\n\n  .sp-builder-input {\n    width: 100%;\n    min-height: 44px;\n    border: 1px solid rgba(35, 35, 35, 0.18);\n    border-radius: 6px;\n    padding: 10px 12px;\n    background: #fff;\n    color: #252525;\n    font: inherit;\n  }\n\n  .sp-hidden-select {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    overflow: hidden !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n  }\n\n  .sp-style-options {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 8px;\n  }\n\n  .sp-style-option {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    min-height: 44px;\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    border-radius: 6px;\n    padding: 9px 10px;\n    cursor: pointer;\n    background: #fff;\n    font-size: 13px;\n  }\n\n  .sp-style-option input {\n    position: absolute;\n    opacity: 0;\n    pointer-events: none;\n  }\n\n  .sp-style-option.is-selected {\n    border-color: #202020;\n    box-shadow: inset 0 0 0 1px #202020;\n  }\n\n  .sp-style-swatch {\n    width: 18px;\n    height: 18px;\n    border-radius: 50%;\n    border: 1px solid rgba(35, 35, 35, 0.22);\n    flex: 0 0 auto;\n  }\n\n  .sp-style-silver {\n    background: linear-gradient(135deg, #f7f8fa, #9aa1a8 48%, #ffffff);\n  }\n\n  .sp-style-black {\n    background: linear-gradient(135deg, #4b4b4b, #050505 55%, #777);\n  }\n\n  .sp-style-silver-small {\n    background: linear-gradient(135deg, #ffffff, #c7ccd2 50%, #eef2f5);\n  }\n\n  .sp-letter-preview {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 9px;\n    min-height: 48px;\n    align-items: center;\n    margin: 12px 0;\n  }\n\n  .sp-letter-chip {\n    min-width: 34px;\n    height: 42px;\n    border-radius: 7px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0 4px;\n    background: linear-gradient(180deg, #fffdfa, #f4eee4);\n    color: #eceeee;\n    font-family: \"Arial Rounded MT Bold\", \"Arial Black\", \"Helvetica Neue\", sans-serif;\n    font-size: 26px;\n    font-weight: 900;\n    line-height: 1;\n    letter-spacing: 0;\n    -webkit-text-stroke: 1.25px #565d64;\n    text-shadow:\n      0 -1px 0 #ffffff,\n      1px 0 0 #858d94,\n      -1px 0 0 #cbd0d5,\n      0 2px 0 #656d75,\n      0 3px 3px rgba(0, 0, 0, 0.22);\n    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85), 0 2px 5px rgba(0, 0, 0, 0.08);\n  }\n\n  .sp-letter-preview.is-black .sp-letter-chip {\n    color: #111;\n    -webkit-text-stroke: 1.25px #777e86;\n    text-shadow:\n      0 -1px 0 #333,\n      1px 0 0 #a5abb1,\n      -1px 0 0 #4b5055,\n      0 2px 0 #757c84,\n      0 3px 3px rgba(0, 0, 0, 0.26);\n  }\n\n  .sp-letter-preview.is-small .sp-letter-chip {\n    min-width: 30px;\n    height: 38px;\n    font-size: 23px;\n    -webkit-text-stroke-width: 0.9px;\n  }\n\n  .sp-letter-chip.has-letter-art {\n    min-width: 42px;\n    width: 42px;\n    padding: 4px;\n  }\n\n  .sp-letter-preview.is-small .sp-letter-chip.has-letter-art {\n    min-width: 36px;\n    width: 36px;\n    height: 38px;\n  }\n\n  .sp-layout-planner {\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 8px;\n    padding: 14px;\n    margin: 14px 0 18px;\n    background: #fff;\n  }\n\n  .sp-layout-head {\n    display: flex;\n    justify-content: space-between;\n    gap: 10px;\n    align-items: flex-start;\n    margin-bottom: 12px;\n  }\n\n  .sp-layout-head strong {\n    font-size: 14px;\n  }\n\n  .sp-layout-head small,\n  .sp-layout-message {\n    margin: 0;\n    font-size: 12px;\n    line-height: 1.4;\n    color: #6c6256;\n    text-align: right;\n  }\n\n  .sp-layout-rules {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin: -2px 0 14px;\n  }\n\n  .sp-layout-rules span {\n    display: inline-flex;\n    align-items: center;\n    min-height: 28px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 999px;\n    padding: 5px 9px;\n    background: #fbf8f1;\n    color: #5f564d;\n    font-size: 11px;\n    font-weight: 700;\n    line-height: 1.25;\n  }\n\n  .sp-hole-track {\n    display: grid;\n    grid-template-columns: repeat(10, minmax(0, 1fr));\n    gap: 7px;\n  }\n\n  .sp-hole {\n    position: relative;\n    min-width: 0;\n    appearance: none;\n    aspect-ratio: 1;\n    border: 1px solid rgba(35, 35, 35, 0.18);\n    border-radius: 999px;\n    background: #faf7ef;\n    color: #282520;\n    font: inherit;\n    font-size: 12px;\n    font-weight: 700;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    transition: border-color 0.16s ease, box-shadow 0.16s ease, background 0.16s ease;\n  }\n\n  .sp-hole::after {\n    content: attr(data-hole);\n    position: absolute;\n    bottom: -15px;\n    left: 50%;\n    transform: translateX(-50%);\n    font-size: 9px;\n    font-weight: 500;\n    color: #9a8f82;\n  }\n\n  .sp-hole:hover {\n    border-color: rgba(35, 35, 35, 0.42);\n  }\n\n  .sp-hole.is-target {\n    border-color: #202020;\n    box-shadow: 0 0 0 3px rgba(32, 32, 32, 0.12);\n  }\n\n  .sp-hole.is-filled {\n    background: #f3eadc;\n    box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.68);\n  }\n\n  .sp-hole.is-charm {\n    color: #7c4f22;\n  }\n\n  .sp-hole img {\n    width: 78%;\n    height: 78%;\n    object-fit: cover;\n    border-radius: 50%;\n    pointer-events: none;\n  }\n\n  .sp-layout-tray {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-top: 22px;\n    padding: 10px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    border-radius: 8px;\n    background: #fffdfa;\n  }\n\n  .sp-layout-piece {\n    display: inline-flex;\n    align-items: center;\n    gap: 4px;\n    padding: 3px;\n    border: 1px solid rgba(35, 35, 35, 0.08);\n    border-radius: 999px;\n    background: #fff;\n  }\n\n  .sp-layout-chip {\n    min-width: 38px;\n    height: 38px;\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    border-radius: 999px;\n    background: #f8f3ea;\n    color: #282520;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0 10px;\n    font-size: 12px;\n    font-weight: 800;\n    line-height: 1;\n    cursor: grab;\n    transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;\n  }\n\n  .sp-layout-chip:active {\n    cursor: grabbing;\n  }\n\n  .sp-layout-chip.is-active {\n    border-color: #202020;\n    box-shadow: 0 0 0 3px rgba(32, 32, 32, 0.12);\n    transform: translateY(-1px);\n  }\n\n  .sp-layout-chip.is-placed {\n    background: #f2eadf;\n  }\n\n  .sp-layout-chip img {\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    object-fit: cover;\n    display: block;\n    pointer-events: none;\n  }\n\n  .sp-layout-remove {\n    width: 30px;\n    height: 30px;\n    flex: 0 0 30px;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 999px;\n    background: #f7f3ea;\n    color: #5f3a31;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0;\n    font-size: 16px;\n    font-weight: 800;\n    line-height: 1;\n    cursor: pointer;\n  }\n\n  .sp-layout-remove:hover {\n    border-color: rgba(95, 58, 49, 0.42);\n    background: #efe3d5;\n  }\n\n  .sp-layout-message {\n    min-height: 17px;\n    margin-top: 18px;\n    text-align: left;\n  }\n\n  .sp-layout-message.is-error {\n    color: #9f2f2f;\n  }\n\n  .sp-charm-picker {\n    display: grid;\n    grid-template-columns: 1fr auto;\n    gap: 10px;\n    align-items: stretch;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 10px;\n    background: #fff;\n  }\n\n  .sp-charm-story {\n    display: grid;\n    gap: 2px;\n    margin: 0 0 8px;\n    padding: 10px 12px;\n    border-left: 3px solid #202020;\n    background: #f7f3ea;\n    border-radius: 6px;\n  }\n\n  .sp-charm-story strong {\n    font-size: 13px;\n    line-height: 1.3;\n  }\n\n  .sp-charm-story span {\n    color: #6c6256;\n    font-size: 12px;\n    line-height: 1.4;\n  }\n\n  .sp-selected-charm {\n    display: flex;\n    gap: 10px;\n    align-items: center;\n    min-width: 0;\n  }\n\n  .sp-selected-charm-thumb {\n    width: 48px;\n    height: 48px;\n    border-radius: 7px;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    background: #f7f3ea;\n    color: #8a8175;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n    flex: 0 0 auto;\n  }\n\n  .sp-selected-charm-thumb img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n\n  .sp-selected-charm strong {\n    display: block;\n    font-size: 14px;\n    line-height: 1.25;\n  }\n\n  .sp-charm-toggle {\n    min-height: 48px;\n    border: 0;\n    border-radius: 6px;\n    background: #202020;\n    color: #fff;\n    padding: 0 14px;\n    cursor: pointer;\n    font: inherit;\n    font-weight: 700;\n    white-space: nowrap;\n  }\n\n  .sp-featured-charms {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: 8px;\n    margin-top: 10px;\n  }\n\n  .sp-featured-charm {\n    position: relative;\n    min-height: 124px;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 7px;\n    background: #fff;\n    cursor: pointer;\n    text-align: left;\n    font: inherit;\n    color: inherit;\n    overflow: hidden;\n  }\n\n  .sp-featured-charm.is-selected {\n    border-color: #202020;\n    box-shadow: inset 0 0 0 1px #202020;\n  }\n\n  .sp-charm-qty {\n    position: absolute;\n    top: 6px;\n    right: 6px;\n    min-width: 24px;\n    height: 24px;\n    border-radius: 999px;\n    padding: 0 7px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    background: #202020;\n    color: #fff;\n    font-size: 11px;\n    font-weight: 800;\n    line-height: 1;\n    box-shadow: 0 2px 7px rgba(0, 0, 0, 0.22);\n    pointer-events: none;\n  }\n\n  .sp-featured-charm img,\n  .sp-featured-charm .sp-charm-empty-thumb {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    border-radius: 6px;\n    object-fit: cover;\n    background: #f7f3ea;\n    border: 1px solid rgba(35, 35, 35, 0.08);\n  }\n\n  .sp-featured-charm span {\n    display: block;\n    margin-top: 6px;\n    font-size: 11px;\n    line-height: 1.25;\n    color: #252525;\n  }\n\n  .sp-charm-panel {\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    margin-top: 10px;\n    padding: 12px;\n    background: #fff;\n  }\n\n  .sp-charm-panel-head {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n    gap: 12px;\n    margin-bottom: 10px;\n  }\n\n  .sp-charm-panel-head strong,\n  .sp-charm-panel-head small {\n    display: block;\n  }\n\n  .sp-charm-panel-head small {\n    margin-top: 2px;\n    color: #6c6256;\n    font-size: 12px;\n  }\n\n  .sp-charm-clear {\n    min-height: 34px;\n    border: 1px solid rgba(35, 35, 35, 0.16);\n    border-radius: 6px;\n    padding: 7px 10px;\n    background: #fff;\n    color: #252525;\n    cursor: pointer;\n    font: inherit;\n    font-size: 12px;\n    white-space: nowrap;\n  }\n\n  .sp-charm-tabs {\n    display: flex;\n    gap: 6px;\n    overflow-x: auto;\n    padding: 10px 0 2px;\n  }\n\n  .sp-charm-tabs button {\n    border: 1px solid rgba(35, 35, 35, 0.14);\n    border-radius: 999px;\n    min-height: 34px;\n    padding: 7px 11px;\n    background: #fff;\n    color: #252525;\n    cursor: pointer;\n    font: inherit;\n    font-size: 12px;\n    white-space: nowrap;\n  }\n\n  .sp-charm-tabs button.is-active {\n    background: #202020;\n    border-color: #202020;\n    color: #fff;\n  }\n\n  .sp-charm-grid {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: 8px;\n    max-height: 460px;\n    overflow: auto;\n    padding: 8px 2px 2px;\n    margin-top: 10px;\n  }\n\n  .sp-charm-card {\n    position: relative;\n    display: grid;\n    gap: 6px;\n    align-content: start;\n    border: 1px solid rgba(35, 35, 35, 0.12);\n    border-radius: 8px;\n    padding: 7px;\n    background: #fff;\n    cursor: pointer;\n    text-align: left;\n    font: inherit;\n    color: inherit;\n  }\n\n  .sp-charm-card.is-selected {\n    border-color: #202020;\n    box-shadow: inset 0 0 0 1px #202020;\n  }\n\n  .sp-charm-card img,\n  .sp-charm-empty-thumb {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    border-radius: 6px;\n    object-fit: cover;\n    background: #f7f3ea;\n    border: 1px solid rgba(35, 35, 35, 0.08);\n  }\n\n  .sp-charm-empty-thumb {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: #8a8175;\n    font-size: 22px;\n  }\n\n  .sp-charm-card span {\n    font-size: 11px;\n    line-height: 1.25;\n    min-height: 28px;\n  }\n\n  .sp-charm-loading,\n  .sp-charm-empty {\n    grid-column: 1 \/ -1;\n    margin: 0;\n    color: #6c6256;\n    font-size: 13px;\n  }\n\n  .sp-builder-guide {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 12px;\n    border-top: 1px solid rgba(35, 35, 35, 0.1);\n    padding-top: 14px;\n    margin-top: 14px;\n  }\n\n  .sp-guide-toggle {\n    border: 1px solid rgba(35, 35, 35, 0.18);\n    border-radius: 6px;\n    background: #fff;\n    min-height: 38px;\n    padding: 8px 12px;\n    cursor: pointer;\n    font: inherit;\n    white-space: nowrap;\n  }\n\n  .sp-guide-panel {\n    margin-top: 12px;\n  }\n\n  .sp-guide-images {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n    gap: 8px;\n  }\n\n  .sp-guide-card {\n    display: grid;\n    gap: 7px;\n  }\n\n  .sp-guide-card img {\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    object-fit: cover;\n    border-radius: 6px;\n    border: 1px solid rgba(35, 35, 35, 0.1);\n    background: #f7f3ea;\n  }\n\n  .sp-guide-card span {\n    color: #252525;\n    font-size: 12px;\n    font-weight: 700;\n    line-height: 1.25;\n  }\n\n  .sp-builder-submit {\n    width: 100%;\n    min-height: 48px;\n    border: 0;\n    border-radius: 6px;\n    margin-top: 16px;\n    background: #202020;\n    color: #fff;\n    font: inherit;\n    font-weight: 700;\n    cursor: pointer;\n  }\n\n  .sp-builder-submit[disabled] {\n    opacity: 0.55;\n    cursor: wait;\n  }\n\n  .sp-builder-message {\n    margin-top: 10px;\n  }\n\n  .sp-builder-message.is-error {\n    color: #b42318;\n  }\n\n  .sp-builder-message.is-success {\n    color: #087443;\n  }\n\n  @media (max-width: 640px) {\n    .sp-style-options,\n    .sp-guide-images {\n      grid-template-columns: 1fr;\n    }\n\n    .sp-charm-picker {\n      grid-template-columns: 1fr;\n    }\n\n    .sp-featured-charms {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n\n    .sp-charm-grid {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      max-height: 430px;\n    }\n\n    .sp-preview-meta {\n      display: block;\n    }\n\n    .sp-preview-meta span {\n      display: block;\n      margin-top: 3px;\n      text-align: left;\n    }\n\n    .sp-layout-head {\n      display: block;\n    }\n\n    .sp-layout-head small {\n      display: block;\n      margin-top: 3px;\n      text-align: left;\n    }\n\n    .sp-layout-rules {\n      margin-top: 10px;\n      margin-bottom: 16px;\n    }\n\n    .sp-layout-rules span {\n      min-height: 30px;\n      font-size: 11px;\n    }\n\n    .sp-hole-track {\n      grid-template-columns: repeat(5, minmax(42px, 1fr));\n      gap: 18px 8px;\n      padding-bottom: 4px;\n    }\n\n    .sp-hole {\n      min-height: 42px;\n      font-size: 13px;\n    }\n\n    .sp-hole::after {\n      bottom: -14px;\n      font-size: 10px;\n    }\n\n    .sp-layout-tray {\n      flex-wrap: nowrap;\n      overflow-x: auto;\n      -webkit-overflow-scrolling: touch;\n      scroll-snap-type: x proximity;\n      margin-top: 24px;\n      padding: 10px 8px;\n    }\n\n    .sp-layout-chip {\n      flex: 0 0 auto;\n      min-width: 46px;\n      height: 46px;\n      scroll-snap-align: start;\n      font-size: 14px;\n    }\n\n    .sp-layout-chip img {\n      width: 34px;\n      height: 34px;\n    }\n\n    .sp-layout-piece {\n      flex: 0 0 auto;\n      gap: 5px;\n      padding: 4px;\n    }\n\n    .sp-layout-remove {\n      width: 36px;\n      height: 36px;\n      flex-basis: 36px;\n      font-size: 18px;\n    }\n  }\n\u003c\/style\u003e\n\u003cp\u003e \u003c\/p\u003e\u003cscript data-sp-collar-studio-placement-fix\u003e(function(){function m(){var b=document.getElementById('sp-collar-builder'),o=document.querySelector('.free-collar-customizer');if(b){if(o){o.replaceWith(b);b.setAttribute('data-sp-moved','1')}}}m();window.addEventListener('load',m)})();\u003c\/script\u003e\u003cscript data-sp-collar-color-sync\u003e(function(){var m={teal:'rgb(176,204,190)',blue:'rgb(173,200,211)',pink:'rgb(233,191,190)',purple:'rgb(222,189,198)'};function g(){var a=document.querySelectorAll('input[type=radio]'),i=0,r;for(;i\u003ca.length;i++){r=a[i];if(r.checked){if(r.name){if(r.name.toLowerCase().indexOf('color-')==0)return r.value.toLowerCase()}}}}function f(){var s=document.querySelector('.sp-preview-strap'),v=g();if(s){if(m[v]){s.style.background=m[v];s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.1),inset 0 14px 20px rgba(255,255,255,.35)'}}}document.addEventListener('change',f);window.addEventListener('load',f);setTimeout(f,500);f()})();\u003c\/script\u003e\u003cscript data-sp-collar-color-master\u003e(function(){var m={teal:'rgb(176,204,190)',blue:'rgb(173,200,211)',pink:'rgb(233,191,190)',purple:'rgb(222,189,198)'};function c(){var r=document.querySelector('input[type=radio][name^=\"Color-\"]:checked');return r\u0026\u0026r.value?r.value.toLowerCase():''}function f(){var s=document.querySelector('.sp-preview-strap'),v=c();if(s){if(m[v]){s.style.backgroundColor=m[v];s.style.backgroundImage='none';s.style.boxShadow='inset 0 0 0 1px rgba(0,0,0,.12),inset 0 14px 20px rgba(255,255,255,.25)'}}}document.addEventListener('change',f);window.addEventListener('load',f);setTimeout(f,100);setTimeout(f,1000);setInterval(f,300)})();\u003c\/script\u003e\n\u003cstyle data-sp-hole-polish\u003e\n#sp-collar-builder .sp-hole-track {\n  gap: 9px;\n  align-items: center;\n}\n#sp-collar-builder .sp-hole {\n  width: 34px;\n  height: 34px;\n  min-width: 34px;\n  border-radius: 999px;\n  border: 1px solid #ded6ca;\n  background: linear-gradient(180deg, #fffdf8, #f7f1e8);\n  box-shadow: 0 1px 2px rgba(35, 35, 35, 0.06), inset 0 1px 0 rgba(255, 255, 255, 0.9);\n  color: transparent;\n  font-size: 0;\n  line-height: 1;\n  position: relative;\n  display: inline-flex !important;\n  align-items: center;\n  justify-content: center;\n}\n#sp-collar-builder .sp-hole .sp-hole-number {\n  display: none !important;\n}\n#sp-collar-builder .sp-hole.is-empty::after {\n  content: \"\";\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 5px;\n  height: 5px;\n  border-radius: 50%;\n  transform: translate(-50%, -50%);\n  background: #cfc6ba;\n  opacity: 0.9;\n}\n#sp-collar-builder .sp-hole:not(.is-empty) {\n  width: 42px;\n  height: 42px;\n  min-width: 42px;\n  border-color: #c9bdae;\n  background: #fffaf2;\n  box-shadow: 0 0 0 4px #f8f1e7, 0 3px 9px rgba(35, 35, 35, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.95);\n}\n#sp-collar-builder .sp-hole:not(.is-empty)::after {\n  display: none;\n}\n#sp-collar-builder .sp-hole .sp-layout-chip {\n  width: 32px;\n  height: 32px;\n  border: 0;\n  background: transparent;\n  box-shadow: none;\n  color: #29241f;\n  font-size: 13px;\n  font-weight: 700;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n}\n#sp-collar-builder .sp-hole .sp-preview-layout-charm img,\n#sp-collar-builder .sp-hole .sp-layout-chip img {\n  width: 30px;\n  height: 30px;\n  object-fit: contain;\n}\n#sp-collar-builder .sp-hole.is-selected {\n  outline: 2px solid #8f7a5d;\n  outline-offset: 3px;\n}\n@media (max-width: 520px) {\n  #sp-collar-builder .sp-hole-track { gap: 6px; }\n  #sp-collar-builder .sp-hole { width: 29px; height: 29px; min-width: 29px; }\n  #sp-collar-builder .sp-hole:not(.is-empty) { width: 36px; height: 36px; min-width: 36px; box-shadow: 0 0 0 3px #f8f1e7, 0 2px 7px rgba(35,35,35,.08); }\n}\n\u003c\/style\u003e\n\u003cstyle data-sp-preview-hole-sync\u003e\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] {\n  left: 50%;\n  top: 43px;\n  width: 58%;\n  max-width: 58%;\n  min-height: 30px;\n  padding: 0;\n  transform: translateX(-50%);\n  display: grid !important;\n  grid-template-columns: repeat(10, minmax(0, 1fr));\n  gap: 4px;\n  align-items: center;\n  justify-items: center;\n  pointer-events: none;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot {\n  width: 20px;\n  height: 24px;\n  min-width: 0;\n  border: 0 !important;\n  background: transparent !important;\n  box-shadow: none !important;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  position: relative;\n  color: #f8f7f1;\n  font-size: 13px;\n  line-height: 1;\n  font-weight: 900;\n  text-shadow: 0 1px 1px rgba(0,0,0,.52), 0 0 1px rgba(0,0,0,.62);\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-empty::after {\n  content: \"\";\n  width: 4px;\n  height: 4px;\n  border-radius: 999px;\n  background: rgba(65, 75, 72, .42);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.35), 0 1px 0 rgba(255,255,255,.45);\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece {\n  width: 23px;\n  height: 25px;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece::before,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-charm::before {\n  display: none !important;\n  content: none !important;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot \u003e span,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot \u003e img,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot * {\n  position: relative;\n  z-index: 1;\n  background: transparent !important;\n  box-shadow: none !important;\n  border: 0 !important;\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-charm img,\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot .sp-preview-layout-charm img {\n  width: 22px;\n  height: 22px;\n  object-fit: contain;\n  border-radius: 0 !important;\n  mix-blend-mode: multiply;\n  filter: drop-shadow(0 1px 1px rgba(0,0,0,.28));\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-black {\n  color: #101010;\n  text-shadow: 0 1px 0 rgba(255,255,255,.45), 0 0 1px rgba(255,255,255,.35);\n}\n#sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.is-small {\n  font-size: 11px;\n}\n@media (max-width: 520px) {\n  #sp-collar-builder .sp-preview-name[data-sp-hole-preview] { width: 64%; max-width: 64%; gap: 2px; }\n  #sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot { width: 15px; height: 20px; font-size: 10px; }\n  #sp-collar-builder .sp-preview-name[data-sp-hole-preview] .sp-preview-slot.has-piece { width: 17px; height: 20px; }\n}\n\u003c\/style\u003e\n\u003cscript data-sp-collar-builder-clean\u003e\n(function(){\n  var R=document.getElementById('sp-collar-builder');\n  if(!R || R.dataset.spCleanBuilderReady) return;\n  R.dataset.spCleanBuilderReady='1';\n  var q=function(s,p){return (p||R).querySelector(s)};\n  var a=function(s,p){return Array.prototype.slice.call((p||R).querySelectorAll(s))};\n  var LETTERS={}, CHARMS=[], selectedCharm=null, layout=[], selectedIndex=null, ready=false, lastSig='';\n  function esc(v){return String(v==null?'':v).replace(\/[\u0026\u003c\u003e\"']\/g,function(c){return {'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;','\"':'\u0026quot;',\"'\":'\u0026#39;'}[c]})}\n  function style(){var x=q('input[name=\"sp-letter-style\"]:checked');return x?x.value:'Silver'}\n  function name(){var i=q('#sp-pet-name');if(!i)return'';var max=selectedCharm?7:10;var v=i.value.toUpperCase().replace(\/[^A-Z]\/g,'').slice(0,max);if(i.value!==v)i.value=v;return v}\n  function key(s,l){return s+'|'+l}\n  function letterVariant(s,l){return LETTERS[key(s,l)]||LETTERS[key('Silver',l)]||null}\n  function chip(p){if(!p)return'';if(p.type==='charm')return '\u003cspan class=\"sp-layout-chip sp-preview-layout-charm\"\u003e\u003cimg alt=\"\" src=\"'+esc(p.img)+'\"\u003e\u003c\/span\u003e';return '\u003cspan class=\"sp-layout-chip '+(p.style==='Black'?'is-black ':'')+(p.style.indexOf('11mm')\u003e-1?'is-small':'')+'\"\u003e'+esc(p.letter)+'\u003c\/span\u003e'}\n  function pieces(){var s=style();var arr=name().split('').map(function(l,i){var v=letterVariant(s,l);return {type:'letter',uid:'L'+i+l,letter:l,style:s,variant:v\u0026\u0026v.id}});if(selectedCharm)arr.push({type:'charm',uid:'C'+selectedCharm.id,variant:selectedCharm.id,img:selectedCharm.img,title:selectedCharm.title});return arr}\n  function syncLayout(arr){var old={};layout.forEach(function(p,i){if(p)old[p.uid]=i});var next=Array(10).fill(null);var start=Math.max(0,Math.floor((10-arr.length)\/2));var cursor=start;arr.forEach(function(p){var oldIndex=old[p.uid];if(oldIndex!=null \u0026\u0026 !next[oldIndex]) next[oldIndex]=p;else{while(next[cursor])cursor++;if(cursor\u003c10)next[cursor]=p}});layout=next;selectedIndex=null}\n  function render(){var arr=pieces(), sig=arr.map(function(p){return p.uid+':'+(p.variant||'')}).join('|');if(sig!==lastSig){syncLayout(arr);lastSig=sig}var n=name(), s=style();a('.sp-style-option').forEach(function(l){var input=l.querySelector('input');l.classList.toggle('is-selected',!!input\u0026\u0026input.checked)});var collar=q('[data-sp-preview-collar]');if(collar){collar.classList.toggle('has-charm',!!selectedCharm)}var pn=q('[data-sp-preview-name]');if(pn){pn.classList.toggle('is-black',s==='Black');pn.classList.toggle('is-small',s.indexOf('11mm')\u003e-1);pn.innerHTML=(n||'YOURPET').split('').map(function(l){return '\u003cspan\u003e'+esc(l)+'\u003c\/span\u003e'}).join('')+(selectedCharm?'\u003cspan class=\"sp-preview-layout-charm\"\u003e\u003cimg alt=\"\" src=\"'+esc(selectedCharm.img)+'\"\u003e\u003c\/span\u003e':'')}var lp=q('.sp-letter-preview');if(lp)lp.innerHTML=n?arr.filter(function(p){return p.type==='letter'}).map(chip).join(''):'\u003cspan class=\"sp-preview-empty\"\u003eType a name to preview letters.\u003c\/span\u003e';var track=q('[data-sp-hole-track]');if(track){track.innerHTML=layout.map(function(p,i){return '\u003cbutton type=\"button\" class=\"sp-hole '+(p?'':'is-empty')+(selectedIndex===i?' is-selected':'')+'\" data-i=\"'+i+'\" aria-label=\"Hole '+(i+1)+(p?': '+(p.type==='letter'?p.letter:p.title):'')+'\"\u003e'+chip(p)+'\u003cspan class=\"sp-hole-number\"\u003e'+(i+1)+'\u003c\/span\u003e\u003c\/button\u003e'}).join('')}var tray=q('[data-sp-layout-tray]');if(tray)tray.innerHTML=layout.filter(Boolean).map(function(p){return '\u003cbutton type=\"button\" class=\"sp-layout-piece\" data-piece=\"'+esc(p.uid)+'\"\u003e'+chip(p)+'\u003c\/button\u003e'}).join('');var msg=q('[data-sp-layout-message]');if(msg)msg.textContent=arr.length?'Tap a letter or charm, then tap a hole to move it.':'';var sum=q('[data-sp-layout-summary]');if(sum)sum.textContent=n?'Arrange letters and charms on the collar holes.':'Type a name, then arrange letters and charms.';renderSelectedCharm()}\n  function category(t){t=t.toLowerCase();if(t.indexOf('heart')\u003e-1)return'Heart';if(t.indexOf('cross')\u003e-1)return'Cross';if(t.indexOf('gem')\u003e-1||t.indexOf('diamond')\u003e-1)return'Gem';if(t.indexOf('flower')\u003e-1)return'Flower';if(t.indexOf('star')\u003e-1)return'Star';return'Other'}\n  function charmCard(c,cls){return '\u003cbutton type=\"button\" class=\"'+cls+(selectedCharm\u0026\u0026selectedCharm.id===c.id?' is-selected':'')+'\" data-c=\"'+esc(c.id)+'\"\u003e\u003cimg alt=\"\" src=\"'+esc(c.img)+'\"\u003e\u003cspan\u003e'+esc(c.title.replace(\/ Charm$\/,''))+'\u003c\/span\u003e\u003c\/button\u003e'}\n  function renderCharms(filter){filter=filter||'All';var list=CHARMS.filter(function(c){return filter==='All'||c.category===filter});var count=q('[data-sp-charm-count]');if(count)count.textContent=list.length+' charms';var grid=q('[data-sp-charm-grid]');if(grid)grid.innerHTML=list.length?list.map(function(c){return charmCard(c,'sp-charm-card')}).join(''):'\u003cp class=\"sp-charm-loading\"\u003eNo charms in this category.\u003c\/p\u003e';var featured=q('[data-sp-featured-charms]');if(featured)featured.innerHTML=CHARMS.slice(0,6).map(function(c){return charmCard(c,'sp-featured-charm')}).join('');a('[data-sp-charm-tabs] button').forEach(function(b){b.classList.toggle('is-active',b.textContent.trim()===filter)});a('[data-c]').forEach(function(b){b.onclick=function(){selectedCharm=CHARMS.find(function(c){return c.id===b.dataset.c})||null;render();renderCharms(filter)}})}\n  function renderSelectedCharm(){var t=q('[data-sp-selected-charm-thumb]'), n=q('[data-sp-selected-charm-name]'), note=q('[data-sp-selected-charm-note]');if(t)t.innerHTML=selectedCharm?'\u003cimg alt=\"\" src=\"'+esc(selectedCharm.img)+'\"\u003e':'-';if(n)n.textContent=selectedCharm?selectedCharm.title:'No charm selected';if(note)note.textContent=selectedCharm?'Added to the collar layout.':'Optional finishing touch.'}\n  function variantId(){var x=document.querySelector('form[action*=\"\/cart\/add\"] input[name=\"id\"], product-form input[name=\"id\"], input.product-variant-id');return (x\u0026\u0026x.value)||new URLSearchParams(location.search).get('variant')||''}\n  function say(t,bad){var m=q('[data-sp-builder-message]');if(m){m.textContent=t;m.className='sp-builder-message '+(bad?'is-error':'is-success')}}\n  function add(){if(!ready)return say('Please wait for letters and charms to load.',true);var n=name();if(!n)return say('Please type a pet name first.',true);var id=variantId();if(!id)return say('Please choose collar size and colour first.',true);var used=layout.filter(Boolean);var missing=used.filter(function(p){return !p.variant});if(missing.length)return say('One selected letter or charm is unavailable. Please choose another option.',true);var props={'Pet name':n,'Letter style':style(),'Collar layout':used.map(function(p,i){return (i+1)+': '+(p.type==='letter'?p.letter:p.title)}).join(', ')};var items=[{id:+id,quantity:1,properties:props}], counts={};used.forEach(function(p){counts[p.variant]=(counts[p.variant]||0)+1});Object.keys(counts).forEach(function(k){items.push({id:+k,quantity:counts[k]})});say('Adding personalized set...');fetch('\/cart\/add.js',{method:'POST',headers:{'Content-Type':'application\/json','Accept':'application\/json'},body:JSON.stringify({items:items})}).then(function(r){if(!r.ok)throw new Error('cart');return r.json()}).then(function(){say('Personalized set added to cart.')}).catch(function(){say('Could not add everything. Please try again.',true)})}\n  R.addEventListener('click',function(e){var h=e.target.closest('.sp-hole');if(h\u0026\u0026R.contains(h)){var i=+h.dataset.i;if(selectedIndex==null){if(layout[i]){selectedIndex=i;render()}}else{var tmp=layout[i];layout[i]=layout[selectedIndex];layout[selectedIndex]=tmp;selectedIndex=null;render()}return}var piece=e.target.closest('[data-piece]');if(piece\u0026\u0026R.contains(piece)){var uid=piece.dataset.piece;var idx=layout.findIndex(function(p){return p\u0026\u0026p.uid===uid});if(idx\u003e-1){selectedIndex=idx;render()}}});\n  function boot(){var input=q('#sp-pet-name');if(input){input.addEventListener('input',render);input.addEventListener('change',render);input.addEventListener('keyup',render)}a('input[name=\"sp-letter-style\"]').forEach(function(r){r.addEventListener('change',render)});var toggle=q('[data-sp-charm-toggle]'),panel=q('[data-sp-charm-panel]');if(toggle\u0026\u0026panel)toggle.onclick=function(){panel.hidden=!panel.hidden;toggle.setAttribute('aria-expanded',String(!panel.hidden))};var clear=q('[data-sp-charm-clear]');if(clear)clear.onclick=function(){selectedCharm=null;render();renderCharms()};a('[data-sp-charm-tabs] button').forEach(function(b){b.onclick=function(){renderCharms(b.textContent.trim())}});var submit=q('[data-sp-builder-submit]');if(submit)submit.onclick=add;Promise.all([fetch('\/products\/collar-letter-add-on.js').then(function(r){return r.json()}),fetch('\/products\/collar-charm-add-on.js').then(function(r){return r.json()})]).then(function(data){data[0].variants.forEach(function(v){var parts=v.title.split(' '), l=parts.pop(), s=parts.join(' ');if(\/^[A-Z]$\/.test(l))LETTERS[key(s,l)]={id:v.id,available:v.available}});CHARMS=data[1].variants.filter(function(v){return v.available\u0026\u0026v.featured_image\u0026\u0026v.featured_image.src}).map(function(v){return {id:String(v.id),title:v.title,img:v.featured_image.src,category:category(v.title)}});ready=true;renderCharms();render()}).catch(function(){ready=true;render();say('Charm photos could not load. Please refresh the page.',true)})}\n  boot();\n})();\n\u003c\/script\u003e\n\u003cscript data-sp-preview-hole-sync\u003e\n(function(){\n  var R=document.getElementById('sp-collar-builder');\n  if(!R || R.dataset.spPreviewHoleSync) return;\n  R.dataset.spPreviewHoleSync='1';\n  var cache={};\n  function esc(v){return String(v||'').replace(\/[\u0026\u003c\u003e\"']\/g,function(c){return {'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;','\"':'\u0026quot;',\"'\":'\u0026#39;'}[c]})}\n  function makeTransparent(src, cb){\n    if(!src) return cb(src);\n    if(cache[src]) return cb(cache[src]);\n    var img=new Image();\n    img.crossOrigin='anonymous';\n    img.onload=function(){\n      try{\n        var c=document.createElement('canvas'), w=img.naturalWidth||img.width, h=img.naturalHeight||img.height;\n        c.width=w; c.height=h;\n        var x=c.getContext('2d');\n        x.drawImage(img,0,0,w,h);\n        var d=x.getImageData(0,0,w,h), p=d.data;\n        for(var i=0;i\u003cp.length;i+=4){\n          var r=p[i], g=p[i+1], b=p[i+2], max=Math.max(r,g,b), min=Math.min(r,g,b);\n          if((r\u003e232\u0026\u0026g\u003e226\u0026\u0026b\u003e214) || (max\u003e242 \u0026\u0026 max-min\u003c28)) p[i+3]=0;\n        }\n        x.putImageData(d,0,0);\n        cache[src]=c.toDataURL('image\/png');\n        cb(cache[src]);\n      }catch(e){cache[src]=src;cb(src)}\n    };\n    img.onerror=function(){cache[src]=src;cb(src)};\n    img.src=src;\n  }\n  function cleanCharmImages(root){\n    Array.prototype.slice.call(root.querySelectorAll('.sp-preview-slot.has-charm img')).forEach(function(img){\n      var src=img.getAttribute('src');\n      if(!src || img.dataset.spTransparentCharm) return;\n      img.dataset.spTransparentCharm='1';\n      makeTransparent(src,function(out){img.src=out});\n    });\n  }\n  function sync(){\n    var preview=R.querySelector('[data-sp-preview-name]'), holes=[].slice.call(R.querySelectorAll('.sp-hole'));\n    if(!preview || holes.length\u003c10) return;\n    preview.setAttribute('data-sp-hole-preview','');\n    preview.innerHTML=holes.slice(0,10).map(function(h){\n      var chip=h.querySelector('.sp-layout-chip'), cls='sp-preview-slot', html='';\n      if(!chip){cls+=' is-empty'}else{\n        cls+=' has-piece';\n        if(chip.classList.contains('is-black')) cls+=' is-black';\n        if(chip.classList.contains('is-small')) cls+=' is-small';\n        if(chip.querySelector('img')) cls+=' has-charm';\n        html=chip.innerHTML || esc(chip.textContent.trim());\n      }\n      return '\u003cspan class=\"'+cls+'\"\u003e'+html+'\u003c\/span\u003e';\n    }).join('');\n    cleanCharmImages(preview);\n  }\n  var track=R.querySelector('[data-sp-hole-track]');\n  if(track \u0026\u0026 window.MutationObserver){new MutationObserver(function(){setTimeout(sync,0)}).observe(track,{childList:true,subtree:true,characterData:true,attributes:true})}\n  R.addEventListener('click',function(){setTimeout(sync,40);setTimeout(sync,180);setTimeout(sync,700)},true);\n  R.addEventListener('input',function(){setTimeout(sync,40);setTimeout(sync,180);setTimeout(sync,700)},true);\n  R.addEventListener('change',function(){setTimeout(sync,40);setTimeout(sync,180);setTimeout(sync,700)},true);\n  window.addEventListener('load',function(){setTimeout(sync,300);setTimeout(sync,1200)});\n  setTimeout(sync,100);setTimeout(sync,600);setTimeout(sync,1600);\n})();\n\u003c\/script\u003e\n\n","brand":"SpoiledPaws","offers":[{"title":"M - 2.0cm x 44cm \/ Teal","offer_id":46592552239265,"sku":"SP-COL-064","price":36.0,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 52cm \/ Teal","offer_id":46592552272033,"sku":"SP-COL-065","price":39.0,"currency_code":"NZD","in_stock":true},{"title":"M - 2.0cm x 44cm \/ Blue","offer_id":46592552304801,"sku":"SP-COL-066","price":36.0,"currency_code":"NZD","in_stock":true},{"title":"S - 1.5cm x 40cm \/ Teal","offer_id":46592552337569,"sku":"SP-COL-067","price":34.0,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 52cm \/ Pink","offer_id":46592552370337,"sku":"SP-COL-068","price":39.0,"currency_code":"NZD","in_stock":true},{"title":"S - 1.5cm x 40cm \/ Purple","offer_id":46592552403105,"sku":"SP-COL-069","price":34.0,"currency_code":"NZD","in_stock":true},{"title":"S - 1.5cm x 40cm \/ Pink","offer_id":46592552435873,"sku":"SP-COL-070","price":34.0,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 52cm \/ Blue","offer_id":46592552468641,"sku":"SP-COL-071","price":39.0,"currency_code":"NZD","in_stock":true},{"title":"L - 2.5cm x 52cm \/ Purple","offer_id":46592552501409,"sku":"SP-COL-072","price":39.0,"currency_code":"NZD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0711\/2759\/7217\/files\/Untitled_design_1.png?v=1782527169"}],"url":"https:\/\/spoiledpaws.co.nz\/collections\/new-arrivals.oembed","provider":"SpoiledPaws","version":"1.0","type":"link"}