{
  "version": 3,
  "sources": ["/cdn/shop/t/21/assets/eg-custom-builder.js?bust=1783028080261835200"],
  "sourcesContent": ["/* eg-custom-builder.js v5.3\n * v5.3: Recovery-email rehydrate \u2014 ?lead=<uuid> in URL fetches /lead-state and\n *       restores contact + builderState from previews_log; wizard jumps to\n *       step 6 with all selections re-applied. AI preview now persists a\n *       full builderState snapshot (not just the transformed spec) so the\n *       rehydrate has fidelity. Closes the abandoned-design recovery loop.\n *\n * v5.2\n * v5.2: Precious gems lab/genuine toggle \u2014 default lab (live price + add-to-cart);\n *       genuine = quote-only (forces Request-a-Quote flow, never invents a price).\n *       state.preciousType is now first-class (was a ghost field), flows into spec,\n *       properties, review, and breakdown labels.\n * v5.1: Spec consistency guards \u2014 minimum-teeth-per-position (full\u226512, top/bottom\u22656),\n *       missing\u2194selected overlap auto-resolution (both directions), fangs/gaps qty capped at 8,\n *       canSubmit() enforces style sub-fields (e.g., iced requires stone), real position\n *       passed to AI preview (no full\u2192top coercion).\n * v5:   Step 0 contact gate \u2014 captures email + phone BEFORE wizard. Every starter = lead.\n *       Persists leadId in sessionStorage. On Step 6 submit, backend upgrades the same record.\n * v4.1: Missing-teeth grid shows all 24, History API browser-back, price breakdown.\n */\n(function () {\n  'use strict';\n  const M = window.PRICING_MATRIX || {};\n  const METALS = ['Silver', '10K', '14K', '14KT', '18K', '18KT', '22K', 'Platinum'];\n  const DISCOUNT_TIERS = [{ min: 2000, pct: 30 },{ min: 1500, pct: 20 },{ min: 1000, pct: 10 }];\n  const MAX_FANGS_QTY = 8;\n  const MAX_GAPS_QTY = 8;\n  function discountPctFor(s){for(const t of DISCOUNT_TIERS)if(s>=t.min)return t.pct;return 0;}\n  function nextTierHint(s){for(let i=DISCOUNT_TIERS.length-1;i>=0;i--){const t=DISCOUNT_TIERS[i];if(s<t.min)return{needed:t.min-s,pct:t.pct};}return null;}\n  const METAL_LABELS = {'Silver':{name:'Silver',karat:'Sterling'},'10K':{name:'10K Gold',karat:'10 karat'},'14K':{name:'14K Gold',karat:'14 karat'},'14KT':{name:'14KT Dental',karat:'Dental alloy'},'18K':{name:'18K Gold',karat:'18 karat'},'18KT':{name:'18KT Dental',karat:'Dental alloy'},'22K':{name:'22K Gold',karat:'22 karat'},'Platinum':{name:'Platinum',karat:'950 platinum'}};\n  const GOLD_METALS = new Set(['10K','14K','14KT','18K','18KT','22K']);\n  const POSITION_LABELS = {'top':'Top','bottom':'Bottom','full':'Full Set','single':'Single Tooth'};\n  const STYLE_LABELS = {'solid':'Solid','open-face':'Open Face','iced':'Iced Out','diamond-cut':'Diamond Cut','nuggets':'Nuggets','gems':'Precious Gems','enamel':'Enamel','custom':'Custom Design'};\n  const GEM_LABELS = {'opal':'Opal','ruby':'Ruby','emerald':'Emerald','sapphire':'Sapphire','onyx':'Onyx','amethyst':'Amethyst','citrine':'Citrine','topaz':'Topaz','quartz':'Quartz','blue-lapis':'Blue Lapis','mother-of-pearl':'Mother of Pearl'};\n  const STONE_LABELS = {'moissanite':'Moissanite','lab-grown':'Lab Grown Diamond','diamond-si':'Diamond SI','diamond-vs':'Diamond VS','diamond-vvs':'Diamond VVS'};\n  const CUT_LABELS = {'dust':'Diamond Dust','3d-dust':'3D Diamond Dust','invisible':'Invisible Style','princess':'Princess Cut','trillion':'Trillion','diamond':'Diamond Cut','criss-cross':'Criss-Cross','lines':'Lines','wave':'Wave','zigzag':'Zig-Zag','starburst':'Starburst','sunburst':'Sunburst'};\n  const TEETH = ['R6','R5','R4','R3','R2','R1','L1','L2','L3','L4','L5','L6'];\n\n  const state = {\n    step:0,\n    contact:{email:'',phone:'',instagram:''},\n    contactCaptured:false,\n    leadId:null,\n    position:null,count:0,selectedTeeth:[],\n    metal:null,goldColor:null,\n    style:null,nugget:null,gem:null,gemMap:{},preciousType:'lab',enamel:null,\n    stone:null,stoneTier:null,cut:null,\n    fangsShape:null,fangsQty:0,gapsShape:null,gapsQty:0,\n    missingTeeth:[],notes:'',\n    images:[]\n  };\n  // Sanitization config for reference-photo uploads. JPG-only, magic-bytes check,\n  // canvas re-encode strips EXIF + GPS + steganography payloads + polyglot data.\n  const IMG_MAX_BYTES = 5 * 1024 * 1024;\n  const IMG_MAX_DIM = 4000;\n  const IMG_OUTPUT_QUALITY = 0.85;\n  const IMG_OUTPUT_MAX_DIM = 1600;\n  const $ = (s,c)=>(c||document).querySelector(s);\n  const $$ = (s,c)=>Array.from((c||document).querySelectorAll(s));\n  const fmt = n=>'$'+Math.round(n).toLocaleString();\n  const SS_KEY = 'cb_lead_v1';\n\n  function perToothPrice(pos,m){if(!pos||!m)return 0;if(pos==='full')return(M.Top?.[m]||0)+(M.Bottom?.[m]||0);if(pos==='top'||pos==='single')return M.Top?.[m]||0;if(pos==='bottom')return M.Bottom?.[m]||0;return 0;}\n  function fangsPrice(){if(!state.fangsShape||state.fangsQty<=0||!state.metal)return 0;return(M.Fangs?.[state.fangsShape]?.[state.metal]||0)*state.fangsQty;}\n  function gapsPrice(){if(!state.gapsShape||state.gapsQty<=0||!state.metal)return 0;return(M.Gaps?.[state.gapsShape]?.[state.metal]||0)*state.gapsQty;}\n  function stylePerToothUplift(){if(!state.style||!state.metal)return 0;if(state.style==='iced'){if(!state.stone)return 0;return({moissanite:72,'lab-grown':120,'diamond-si':220,'diamond-vs':280,'diamond-vvs':360})[state.stone]||0;}if(state.style==='diamond-cut')return 0;if(state.style==='nuggets'){const per=perToothPrice(state.position,state.metal);const mult=({mini:0.15,regular:0.20,bulky:0.30})[state.nugget]||0;return per*mult;}if(state.style==='gems')return state.gem?(M.Precious?.[state.gem]||0):0;if(state.style==='enamel')return({letters:80,logo:120,art:180})[state.enamel]||0;return 0;}\n  // ---- Per-tooth precious gems (Approach A: base gem + optional per-tooth override) ----\n  function effectiveGem(t){ return (state.gemMap && state.gemMap[t]) ? state.gemMap[t] : state.gem; }\n  function gemsUpliftSum(){ if(state.style!=='gems'||!state.gem) return 0; return (state.selectedTeeth||[]).reduce(function(s,t){ return s + ((M.Precious&&M.Precious[effectiveGem(t)])||0); },0); }\n  function gemOverrideCount(){ return Object.keys(state.gemMap||{}).length; }\n  function gemToothLabel(id){ return String(id).replace('Top-','\u2191').replace('Bottom-','\u2193'); }\n  function renderGemsPerTooth(){\n    var sub=document.getElementById('cb-gems-sub'); if(!sub) return;\n    var wrap=document.getElementById('cb-gems-pt-wrap');\n    if(!wrap){\n      wrap=document.createElement('div'); wrap.id='cb-gems-pt-wrap'; wrap.style.marginTop='14px';\n      wrap.innerHTML='<button type=\"button\" id=\"cb-gems-pt-toggle\" style=\"background:transparent;border:1px solid #444;color:#c9a849;padding:8px 12px;border-radius:6px;font-size:12px;cursor:pointer;letter-spacing:1px;\">\u25B8 Customize per tooth (optional)</button><div id=\"cb-gems-pt-grid\" style=\"display:none;margin-top:12px;\"></div>';\n      sub.appendChild(wrap);\n      wrap.querySelector('#cb-gems-pt-toggle').addEventListener('click',function(){ var g=document.getElementById('cb-gems-pt-grid'); var open=g.style.display!=='none'; g.style.display=open?'none':'grid'; this.innerHTML=(open?'\u25B8':'\u25BE')+' Customize per tooth (optional)'; });\n      wrap.querySelector('#cb-gems-pt-grid').addEventListener('change',function(e){ var sel=e.target.closest?e.target.closest('select[data-tooth]'):null; if(!sel) return; var t=sel.getAttribute('data-tooth'); if(sel.value){ state.gemMap[t]=sel.value; } else { delete state.gemMap[t]; } renderGemsPerTooth(); renderSummary(); if(typeof updateCtaButtons==='function') updateCtaButtons(); });\n    }\n    var grid=document.getElementById('cb-gems-pt-grid');\n    var teeth=state.selectedTeeth||[];\n    if(!teeth.length){ grid.innerHTML='<div style=\"font-size:12px;color:#888;\">Select teeth in step 1 first.</div>'; return; }\n    grid.style.gridTemplateColumns='repeat(auto-fit,minmax(112px,1fr))'; grid.style.gap='8px';\n    var opts=function(cur){ var o='<option value=\"\">Base'+(state.gem?(' ('+(GEM_LABELS[state.gem]||state.gem)+')'):'')+'</option>'; Object.keys(GEM_LABELS).forEach(function(g){ o+='<option value=\"'+g+'\"'+(cur===g?' selected':'')+'>'+GEM_LABELS[g]+'</option>'; }); return o; };\n    grid.innerHTML=teeth.map(function(t){ var cur=state.gemMap[t]||''; var ov=!!cur; return '<label style=\"display:flex;flex-direction:column;gap:4px;font-size:11px;color:'+(ov?'#c9a849':'#aaa')+';\"><span style=\"letter-spacing:1px;\">'+gemToothLabel(t)+(ov?' \u2022':'')+'</span><select data-tooth=\"'+t+'\" style=\"background:#1a1a1a;border:1px solid '+(ov?'#c9a849':'#333')+';color:#fff;border-radius:4px;padding:6px;font-size:12px;\">'+opts(cur)+'</select></label>'; }).join('');\n  }\n  function computeSubtotal(){if(!state.position||state.count<=0||!state.metal)return 0;if(state.style==='custom')return 0;let s=perToothPrice(state.position,state.metal)*state.count;s+=(state.style==='gems'?gemsUpliftSum():stylePerToothUplift()*state.count);s+=fangsPrice();s+=gapsPrice();return s;}\n  function applyDiscount(n){const p=discountPctFor(n);return p>0?n*(1-p/100):n;}\n\n  function renderMetalGrid(){const grid=$('#cb-metal-grid');if(!grid)return;grid.innerHTML=METALS.map(m=>{const lbl=METAL_LABELS[m]||{name:m,karat:''};const pt=perToothPrice(state.position,m);const ph=pt>0?`<div class=\"cb__card-price\">From ${fmt(pt)}/tooth</div>`:'';const sel=state.metal===m?'is-selected':'';return `<button class=\"cb__card ${sel}\" data-metal=\"${m}\"><div class=\"cb__card-name\">${lbl.name}</div><div class=\"cb__card-meta\">${lbl.karat}</div>${ph}</button>`;}).join('');$$('#cb-metal-grid .cb__card').forEach(btn=>{btn.addEventListener('click',()=>{state.metal=btn.dataset.metal;if(!GOLD_METALS.has(state.metal))state.goldColor=null;$('#cb-gold-color').style.display=GOLD_METALS.has(state.metal)?'block':'none';renderMetalGrid();$$('#cb-gold-color .cb__card').forEach(c=>c.classList.toggle('is-selected',c.dataset.gold===state.goldColor));renderSummary();updateNavButtons();try{if(typeof gtag==='function')gtag('event','metal_selected',{metal:state.metal,source:'custom_builder'});}catch(_){}});});}\n  function setVisibleArches(){const t=document.querySelector('.cb__arch[data-arch-container=\"top\"]');const b=document.querySelector('.cb__arch[data-arch-container=\"bottom\"]');if(!t||!b)return;if(state.position==='top'||state.position==='single'){t.hidden=false;b.hidden=true;}else if(state.position==='bottom'){t.hidden=true;b.hidden=false;}else if(state.position==='full'){t.hidden=false;b.hidden=false;}else{t.hidden=true;b.hidden=true;}}\n  function maxTeethFor(p){if(p==='single')return 1;if(p==='top'||p==='bottom')return 12;if(p==='full')return 24;return 0;}\n  function minTeethFor(p){if(p==='single')return 1;if(p==='top'||p==='bottom')return 1;if(p==='full')return 12;return 0;}\n  function selectedKeyToMissingKey(t){if(!t)return null;if(t.indexOf('Top-')===0)return 'upper-'+t.slice(4);if(t.indexOf('Bottom-')===0)return 'lower-'+t.slice(7);return null;}\n  function missingKeyToSelectedKey(k){if(!k)return null;if(k.indexOf('upper-')===0)return 'Top-'+k.slice(6);if(k.indexOf('lower-')===0)return 'Bottom-'+k.slice(6);return null;}\n  function updateTeethUi(){$$('.cb__tooth').forEach(b=>{b.classList.toggle('is-active',state.selectedTeeth.includes(b.dataset.tooth));});const c=$('#cb-teeth-counter');if(c){const n=state.selectedTeeth.length;const min=minTeethFor(state.position);const posLabel=POSITION_LABELS[state.position]||state.position;if(n===0){c.textContent='Click each tooth that gets a cap';c.classList.remove('is-ready');}else if(min&&n<min){c.textContent=n+(n===1?' tooth':' teeth')+' selected \u2014 '+posLabel+' needs at least '+min+'. Add '+(min-n)+' more, or switch to '+(state.position==='full'?'Top/Bottom':'Single Tooth')+'.';c.classList.remove('is-ready');}else{c.textContent=n+(n===1?' tooth selected':' teeth selected');c.classList.add('is-ready');}}}\n\n  function renderMissingTeethGrids(){\n    ['upper','lower'].forEach(arch=>{const grid=document.querySelector(`.cb__missing-grid[data-arch=\"${arch}\"]`);if(!grid)return;grid.innerHTML=TEETH.map(t=>{const k=arch+'-'+t;const sel=state.missingTeeth.includes(k)?'is-selected':'';return `<button type=\"button\" class=\"cb__missing-tooth ${sel}\" data-arch=\"${arch}\" data-tooth=\"${t}\">${t}</button>`;}).join('');});\n    $$('.cb__missing-tooth').forEach(btn=>{btn.addEventListener('click',()=>{const k=btn.dataset.arch+'-'+btn.dataset.tooth;const i=state.missingTeeth.indexOf(k);if(i>=0){state.missingTeeth.splice(i,1);}else{const conflictKey=missingKeyToSelectedKey(k);if(conflictKey){const si=state.selectedTeeth.indexOf(conflictKey);if(si>=0){state.selectedTeeth.splice(si,1);state.count=state.selectedTeeth.length;updateTeethUi();renderSummary();}}state.missingTeeth.push(k);}btn.classList.toggle('is-selected');if($('#cb-missing-count'))$('#cb-missing-count').textContent=state.missingTeeth.length;});});\n  }\n\n  function renderSummary(){\n    const sub=computeSubtotal();const fin=applyDiscount(sub);\n    const se=$('#cb-summary-strike');const pe=$('#cb-summary-price');const be=$('#cb-summary-badge');const bk=$('#cb-summary-breakdown');const th=$('#cb-summary-tier');\n    if(!state.contactCaptured){\n      if(se)se.textContent='';if(pe)pe.textContent='\u2014';if(be)be.hidden=true;if(th)th.style.display='none';\n      if(bk)bk.innerHTML='<div class=\"cb__summary-empty\">Drop your email + phone to unlock live pricing.</div>';\n      updateCtaButtons();return;\n    }\n    if(state.style==='custom'){if(se)se.textContent='';if(pe)pe.textContent='Quote';if(be)be.hidden=true;if(th)th.style.display='none';if(bk)bk.innerHTML='<div class=\"cb__summary-empty\">Custom design \u2014 review on Step 6 and request a quote.</div>';updateCtaButtons();return;}\n    if(state.style==='gems'&&state.preciousType==='genuine'){if(se)se.textContent='';if(pe)pe.textContent='Quote';if(be)be.hidden=true;if(th)th.style.display='none';if(bk)bk.innerHTML='<div class=\"cb__summary-empty\">Genuine stones \u2014 final price confirmed via quote.</div>';updateCtaButtons();return;}\n    if(sub<=0){if(se)se.textContent='';if(pe)pe.textContent='$0';if(be)be.hidden=true;if(th)th.style.display='none';if(bk)bk.innerHTML='<div class=\"cb__summary-empty\">Make your first selection to see pricing.</div>';updateCtaButtons();return;}\n    const pct=discountPctFor(sub);if(pct>0){if(se)se.textContent=fmt(sub);if(be){be.hidden=false;be.textContent=pct+'% OFF';}}else{if(se)se.textContent='';if(be)be.hidden=true;}\n    if(pe)pe.textContent=fmt(fin);\n    if(th){const h=nextTierHint(sub);if(h){th.textContent='Add '+fmt(h.needed)+' more to unlock '+h.pct+'% off';th.style.display='block';}else{th.style.display='none';}}\n    const rows=[];const pc=perToothPrice(state.position,state.metal);const mn=(METAL_LABELS[state.metal]&&METAL_LABELS[state.metal].name)||state.metal;const pl=POSITION_LABELS[state.position]||state.position;const cv=pc*state.count;if(cv>0)rows.push({key:`Caps (${state.count} \u00D7 ${mn} ${pl} @ ${fmt(pc)})`,val:fmt(cv),type:'item'});\n    const up=stylePerToothUplift();const gemsUv=(state.style==='gems'?gemsUpliftSum():0);if(up>0||gemsUv>0){const uv=(state.style==='gems'?gemsUv:up*state.count);let ul=`${STYLE_LABELS[state.style]} uplift`;if(state.style==='iced'&&state.stone)ul=`Iced (${state.count} \u00D7 ${STONE_LABELS[state.stone]} @ ${fmt(up)})`;else if(state.style==='nuggets'&&state.nugget)ul=`Nuggets ${state.nugget} (${state.count} caps)`;else if(state.style==='gems'&&state.gem)ul=(gemOverrideCount()>0?`${state.preciousType==='genuine'?'Genuine ':'Lab '}Gems (per tooth, ${state.count})`:`${state.preciousType==='genuine'?'Genuine ':'Lab '}${GEM_LABELS[state.gem]} (${state.count} \u00D7 ${fmt(up)})`);else if(state.style==='enamel'&&state.enamel)ul=`Enamel \u2014 ${state.enamel}`;rows.push({key:ul,val:fmt(uv),type:'item'});}\n    if(state.fangsQty>0&&state.fangsShape){const fv=fangsPrice();if(fv>0)rows.push({key:`Fangs (${state.fangsShape} \u00D7 ${state.fangsQty})`,val:fmt(fv),type:'item'});}\n    if(state.gapsQty>0&&state.gapsShape){const gv=gapsPrice();if(gv>0)rows.push({key:`Gap fillers (${state.gapsShape} \u00D7 ${state.gapsQty})`,val:fmt(gv),type:'item'});}\n    if(pct>0){rows.push({key:'Subtotal',val:fmt(sub),type:'subtotal'});rows.push({key:`${pct}% OFF`,val:'\u2212'+fmt(sub-fin),type:'discount'});}rows.push({key:'Estimated total',val:fmt(fin),type:'total'});\n    if(bk)bk.innerHTML=rows.map(r=>`<div class=\"cb__breakdown-row cb__breakdown-row--${r.type}\"><span class=\"cb__breakdown-key\">${r.key}</span><span class=\"cb__breakdown-val\">${r.val}</span></div>`).join('');\n    updateCtaButtons();\n  }\n\n  function renderReview(){const sub=computeSubtotal();const fin=applyDiscount(sub);const rows=[];rows.push(['Position',POSITION_LABELS[state.position]]);rows.push(['Caps',state.count]);if(state.selectedTeeth.length>0)rows.push(['Teeth',state.selectedTeeth.join(', ')]);let ml=(METAL_LABELS[state.metal]&&METAL_LABELS[state.metal].name)||state.metal;if(state.goldColor)ml+=' ('+state.goldColor+')';rows.push(['Metal',ml]);let sl=STYLE_LABELS[state.style];if(state.style==='nuggets'&&state.nugget)sl+=' \u2014 '+state.nugget;if(state.style==='gems'&&state.gem)sl+=' \u2014 '+(state.preciousType==='genuine'?'Genuine ':'Lab ')+(gemOverrideCount()>0?'gems (per tooth)':GEM_LABELS[state.gem]);if(state.style==='enamel'&&state.enamel)sl+=' \u2014 '+state.enamel;if(state.style==='diamond-cut'&&state.cut)sl+=' \u2014 '+CUT_LABELS[state.cut];rows.push(['Style',sl]);if(state.style==='gems'&&gemOverrideCount()>0)rows.push(['Gems by tooth',state.selectedTeeth.map(t=>gemToothLabel(t)+': '+(GEM_LABELS[effectiveGem(t)]||effectiveGem(t))).join(', ')]);if(state.missingTeeth.length>0)rows.push(['Missing teeth',state.missingTeeth.join(', ')]);if(state.stone)rows.push(['Stones',STONE_LABELS[state.stone]]);if(state.fangsQty>0)rows.push(['Fangs',state.fangsQty+' \u00D7 '+state.fangsShape]);if(state.gapsQty>0)rows.push(['Gap fillers',state.gapsQty+' \u00D7 '+state.gapsShape]);if(state.notes&&state.notes.trim())rows.push(['Notes',state.notes.trim()]);if(state.style==='custom')rows.push(['Price','Quote within 1 business day']);else{const pct=discountPctFor(sub);rows.push(['Subtotal',fmt(sub)]);if(pct>0)rows.push([pct+'% off','\u2212'+fmt(sub-fin)]);rows.push(['Estimated total',fmt(fin)]);}const mismatch=getCapCountMismatch();const warningHtml=mismatch?`<div class=\"cb__review-warning\" style=\"background:#3a1f1f;border:1px solid #e85a5a;border-radius:8px;padding:14px 16px;margin-bottom:14px;color:#fff;\"><div style=\"font-weight:700;color:#e85a5a;margin-bottom:6px;font-size:13px;\">\u26A0 Caps count mismatch</div><div style=\"font-size:13px;line-height:1.5;color:#ddd;\">Your description says <strong>${mismatch.claimed} cap${mismatch.claimed===1?'':'s'}</strong> but you selected <strong>${mismatch.selected} ${mismatch.selected===1?'tooth':'teeth'}</strong> in step 1. Update one to match before submitting.</div><div style=\"display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;\"><button type=\"button\" class=\"cb__btn cb__btn--ghost\" id=\"cb-mismatch-fix-text\" style=\"background:transparent;border:1px solid #e85a5a;color:#e85a5a;padding:6px 12px;border-radius:6px;font-size:12px;cursor:pointer;\">Update text to say \"${mismatch.selected} caps\"</button><button type=\"button\" class=\"cb__btn cb__btn--ghost\" id=\"cb-mismatch-fix-teeth\" style=\"background:transparent;border:1px solid #888;color:#ccc;padding:6px 12px;border-radius:6px;font-size:12px;cursor:pointer;\">Or go back to step 1 to re-pick teeth</button></div></div>`:'';$('#cb-review').innerHTML=warningHtml+rows.map(([k,v])=>`<div class=\"cb__review-row\"><span class=\"cb__review-key\">${k}</span><span class=\"cb__review-val\">${v}</span></div>`).join('');if(mismatch){const fix=document.getElementById('cb-mismatch-fix-text');if(fix)fix.addEventListener('click',()=>{const ta=document.getElementById('cb-notes');if(!ta)return;ta.value=String(ta.value||'').replace(/\\b\\d+\\s*[-]?\\s*(caps?|tooth|teeth|dientes?)\\b/i,mismatch.selected+' '+(mismatch.selected===1?'cap':'caps'));state.notes=ta.value;renderReview();updateCtaButtons();});const back=document.getElementById('cb-mismatch-fix-teeth');if(back)back.addEventListener('click',()=>showStep(1));}}\n\n  function visibleSteps(){const a=[1,2,3,4,5,6];return state.style==='iced'?a:a.filter(s=>s!==4);}\n\n  function _renderStep(s){\n    state.step=s;\n    const isGate = s===0;\n    document.body.classList.toggle('cb-is-gate', isGate);\n    $$('.cb__pane').forEach(p=>p.classList.toggle('is-active',Number(p.dataset.pane)===s));\n    const prog = $('#cb-progress'); if(prog) prog.style.display = isGate ? 'none' : '';\n    const nav = $('.cb__nav'); if(nav) nav.style.display = isGate ? 'none' : '';\n    if (!isGate) {\n      const v=visibleSteps();\n      $$('#cb-progress .cb__step').forEach(li=>{const n=Number(li.dataset.step);li.classList.toggle('is-hidden',!v.includes(n));li.classList.toggle('is-current',n===s);li.classList.toggle('is-done',v.indexOf(n)<v.indexOf(s)&&v.indexOf(n)>=0);});\n      if(s===2)renderMetalGrid();\n      if(s===5)renderMissingTeethGrids();\n      if(s===6){renderReview();maybePrefillNotes();}\n      updateNavButtons();\n    }\n    window.scrollTo({top:0,behavior:'smooth'});\n  }\n  function showStep(s){_renderStep(s);try{history.pushState({cbStep:s},'','#step-'+s);}catch(e){}}\n  function canAdvance(){if(state.step===1){if(!state.position||state.count<=0)return false;if(state.count<minTeethFor(state.position))return false;return true;}if(state.step===2){if(!state.metal)return false;if(GOLD_METALS.has(state.metal)&&!state.goldColor)return false;return true;}if(state.step===3){if(!state.style)return false;if(state.style==='nuggets'&&!state.nugget)return false;if(state.style==='gems'&&!state.gem)return false;if(state.style==='enamel'&&!state.enamel)return false;if(state.style==='diamond-cut'&&!state.cut)return false;return true;}if(state.step===4)return !!state.stone;if(state.step===5)return true;return false;}\n  function parseClaimedCapCount(text){if(!text)return null;const m=String(text).match(/\\b(\\d+)\\s*[-]?\\s*(caps?|tooth|teeth|dientes?)\\b/i);return m?parseInt(m[1],10):null;}\n  function getCapCountMismatch(){const txt=(state.notes||'')+' '+(state.notes_custom_description||'');const claimed=parseClaimedCapCount(txt);if(claimed==null)return null;if(claimed===state.count)return null;return{claimed,selected:state.count};}\n  function canSubmit(){if(!state.position||state.count<=0||!state.metal||!state.style)return false;if(state.count<minTeethFor(state.position))return false;if(GOLD_METALS.has(state.metal)&&!state.goldColor)return false;if(state.style==='iced'&&!state.stone)return false;if(state.style==='nuggets'&&!state.nugget)return false;if(state.style==='gems'&&!state.gem)return false;if(state.style==='enamel'&&!state.enamel)return false;if(state.style==='diamond-cut'&&!state.cut)return false;if(state.style==='custom'&&(!state.notes||state.notes.trim().length<10))return false;if(getCapCountMismatch())return false;return true;}\n  // Why is the submit button disabled? Returns a human message or empty if all good.\n  function whyCannotSubmit(){if(!state.position||state.count<=0)return'Pick teeth in step 1';if(state.count<minTeethFor(state.position))return'Pick more teeth in step 1';if(!state.metal)return'Pick a metal in step 2';if(GOLD_METALS.has(state.metal)&&!state.goldColor)return'Pick a gold color in step 2';if(!state.style)return'Pick a style in step 3';if(state.style==='iced'&&!state.stone)return'Pick a stone tier in step 4';if(state.style==='nuggets'&&!state.nugget)return'Pick a nugget size in step 3';if(state.style==='gems'&&!state.gem)return'Pick a gem in step 3';if(state.style==='enamel'&&!state.enamel)return'Pick an enamel option in step 3';if(state.style==='diamond-cut'&&!state.cut)return'Pick a diamond cut pattern in step 3';if(state.style==='custom'&&(!state.notes||state.notes.trim().length<10))return'Tell us what you want \u2014 at least 10 characters of description in step 5 notes';if(getCapCountMismatch())return'Fix the caps count mismatch shown above';return'';}\n  function updateNavButtons(){const p=$('#cb-prev');const n=$('#cb-next');if(!p||!n)return;const v=visibleSteps();const i=v.indexOf(state.step);p.disabled=i<=0;if(state.step===6){n.style.display='none';}else{n.style.display='';n.disabled=!canAdvance();n.textContent=(v[i+1]===6)?'Review \u2192':'Next \u2192';}updateCtaButtons();}\n  function goNext(){if(state.step===0)return;const v=visibleSteps();const i=v.indexOf(state.step);if(i<v.length-1)showStep(v[i+1]);}\n  function goPrev(){if(state.step===0)return;const v=visibleSteps();const i=v.indexOf(state.step);if(i>0)showStep(v[i-1]);}\n  function hideAllStyleSubs(){['cb-nugget-sub','cb-gems-sub','cb-enamel-sub','cb-cut-sub','cb-custom-msg'].forEach(id=>{const el=document.getElementById(id);if(el)el.style.display='none';});}\n  // Show/hide the \"Custom needs \u226510 chars\" hint + flip the label between (optional) / (required).\n  function updateCustomNotesHint(){const isCustom=state.style==='custom';const hasEnough=state.notes&&state.notes.trim().length>=10;const hint=document.getElementById('cb-notes-required-hint');const label=document.getElementById('cb-notes-req-label');if(hint)hint.style.display=(isCustom&&!hasEnough)?'block':'none';if(label){label.textContent=isCustom?'(required for quote \u2014 10+ characters)':'(optional)';label.style.color=isCustom?'#d4af37':'#a3a3a3';}}\n\n  function isValidEmail(e){if(!e||typeof e!=='string')return false;return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(e);}\n  function isValidPhone(p){if(!p||typeof p!=='string')return false;return p.replace(/\\D/g,'').length>=7;}\n  function getContactFields(){if(state.contactCaptured)return{...state.contact};const g=id=>{const el=document.getElementById(id);return el?el.value.trim():'';};return{email:g('cb-email'),phone:g('cb-phone'),instagram:g('cb-instagram')};}\n  function showContactError(m){const el=$('#cb-contact-error');if(!el)return;if(m){el.textContent=m;el.style.display='block';}else{el.textContent='';el.style.display='none';}}\n  function showGateError(m){const el=$('#cb-gate-error');if(!el)return;if(m){el.textContent=m;el.style.display='block';}else{el.textContent='';el.style.display='none';}}\n  function updateGateButton(){const e=$('#cb-gate-email');const p=$('#cb-gate-phone');const btn=$('#cb-start-designing');if(!e||!p||!btn)return;btn.disabled=!(isValidEmail(e.value.trim())&&isValidPhone(p.value.trim()));}\n  function isQuoteOnly(){return state.style==='custom'||(state.style==='gems'&&state.preciousType==='genuine');}\n  function updateCtaButtons(){const{email,phone}=getContactFields();const ve=isValidEmail(email);const vp=isValidPhone(phone);const sub=computeSubtotal();const ok=canSubmit();const ic=isQuoteOnly();const ab=$('#cb-add-to-cart');const qb=$('#cb-request-quote');if(ab)ab.disabled=!ve||!vp||!ok||ic||sub<=0;if(qb)qb.disabled=!ve||!vp||!ok;\n    // Show why the submit is blocked (helps customer self-correct, esp. for missing custom notes).\n    const reason=$('#cb-cta-reason');if(reason){if(!ok&&(ve&&vp)){reason.textContent=whyCannotSubmit();reason.style.display='block';}else{reason.textContent='';reason.style.display='none';}}}\n\n  async function submitContactGate(){\n    showGateError('');\n    const e=$('#cb-gate-email');const p=$('#cb-gate-phone');const i=$('#cb-gate-instagram');\n    const email=e?e.value.trim():'';const phone=p?p.value.trim():'';const instagram=i?i.value.trim():'';\n    if(!isValidEmail(email)){showGateError('Please enter a valid email.');return;}\n    if(!isValidPhone(phone)){showGateError('Please enter a valid phone number.');return;}\n    const btn=$('#cb-start-designing');if(btn){btn.disabled=true;btn.textContent='Verifying...';}\n    // Layer-1 deliverability check (format + disposable blocklist + MX). Server fail-opens\n    // on any internal hiccup so a real buyer never gets bounced because our validator\n    // had a bad day. We DO block on a confirmed disposable/no_mx verdict.\n    try{\n      const v=await fetch('/apps/create-variant/validate-email',{method:'POST',headers:{'Content-Type':'application/json'},credentials:'same-origin',cache:'no-store',body:JSON.stringify({email})});\n      const vd=await v.json().catch(()=>({valid:true}));\n      if(vd && vd.valid===false){\n        const reasons={\n          format:'That email format looks off. Double-check the spelling?',\n          disposable:'Please use a real email you check. Temp/burner addresses do not work for grillz quotes.',\n          no_mx:'We could not reach that email domain. Please try another address.',\n        };\n        showGateError(reasons[vd.reason]||'Please use a different email.');\n        if(btn){btn.disabled=false;btn.textContent='Start Designing \u2192';}\n        return;\n      }\n    }catch(_){/* network blip \u2014 fail-open and continue */}\n    if(btn){btn.textContent='Unlocking...';}\n    try{\n      const r=await fetch('/apps/create-variant/capture-lead',{method:'POST',headers:{'Content-Type':'application/json'},credentials:'same-origin',cache:'no-store',body:JSON.stringify({email,phone,instagramHandle:instagram})});\n      const data=await r.json().catch(()=>({}));\n      if(!r.ok)throw new Error(data.error||('HTTP '+r.status));\n      state.contact={email,phone,instagram};\n      state.contactCaptured=true;\n      state.leadId=data.leadId||null;\n      try{sessionStorage.setItem(SS_KEY,JSON.stringify({email,phone,instagram,leadId:state.leadId}));}catch(_){}\n      const f=id=>{const el=document.getElementById(id);if(el)el.value=id==='cb-email'?email:id==='cb-phone'?phone:instagram;};\n      ['cb-email','cb-phone','cb-instagram'].forEach(f);\n      showStep(1);\n    }catch(err){\n      console.error('[custom-builder] capture-lead error:',err);\n      showGateError('Could not unlock: '+(err.message||'unknown error'));\n      if(btn){btn.disabled=false;btn.textContent='Start Designing \u2192';}\n    }\n  }\n\n  function bind(){$$('[data-pane=\"1\"] .cb__card[data-position]').forEach(btn=>{btn.addEventListener('click',()=>{state.position=btn.dataset.position;state.selectedTeeth=[];state.count=0;$$('[data-pane=\"1\"] .cb__card[data-position]').forEach(c=>c.classList.toggle('is-selected',c===btn));const tb=$('#cb-teeth-block');if(tb)tb.style.display='block';setVisibleArches();updateTeethUi();renderSummary();updateNavButtons();});});\n    $$('.cb__tooth').forEach(btn=>{btn.addEventListener('click',()=>{const id=btn.dataset.tooth;const i=state.selectedTeeth.indexOf(id);if(i>=0){state.selectedTeeth.splice(i,1);delete state.gemMap[id];}else{const m=maxTeethFor(state.position);if(state.position==='single')state.selectedTeeth=[id];else{if(state.selectedTeeth.length>=m)return;state.selectedTeeth.push(id);}const missKey=selectedKeyToMissingKey(id);if(missKey){const mi=state.missingTeeth.indexOf(missKey);if(mi>=0){state.missingTeeth.splice(mi,1);const btnSel=document.querySelector('.cb__missing-tooth[data-arch=\"'+missKey.split('-')[0]+'\"][data-tooth=\"'+missKey.split('-').slice(1).join('-')+'\"]');if(btnSel)btnSel.classList.remove('is-selected');if($('#cb-missing-count'))$('#cb-missing-count').textContent=state.missingTeeth.length;}}}state.count=state.selectedTeeth.length;if(state.style==='gems')renderGemsPerTooth();updateTeethUi();renderSummary();updateNavButtons();});});\n    renderMissingTeethGrids();\n    $$('#cb-gold-color .cb__card[data-gold]').forEach(btn=>{btn.addEventListener('click',()=>{state.goldColor=btn.dataset.gold;$$('#cb-gold-color .cb__card').forEach(c=>c.classList.toggle('is-selected',c===btn));renderSummary();updateNavButtons();});});\n    $$('[data-pane=\"3\"] .cb__cards--style .cb__card').forEach(btn=>{btn.addEventListener('click',()=>{state.style=btn.dataset.style;if(state.style!=='iced'){state.stone=null;state.stoneTier=null;}if(state.style!=='diamond-cut')state.cut=null;if(state.style!=='nuggets')state.nugget=null;if(state.style!=='gems'){state.gem=null;state.gemMap={};state.preciousType='lab';$$('#cb-precious-type-row .cb__card[data-precious-type]').forEach(c=>c.classList.toggle('is-selected',c.dataset.preciousType==='lab'));}if(state.style!=='enamel')state.enamel=null;$$('[data-pane=\"3\"] .cb__cards--style .cb__card').forEach(c=>c.classList.toggle('is-selected',c===btn));hideAllStyleSubs();if(state.style==='nuggets')$('#cb-nugget-sub').style.display='block';if(state.style==='gems'){$('#cb-gems-sub').style.display='block';renderGemsPerTooth();}if(state.style==='enamel')$('#cb-enamel-sub').style.display='block';if(state.style==='diamond-cut')$('#cb-cut-sub').style.display='block';if(state.style==='custom')$('#cb-custom-msg').style.display='block';renderSummary();updateNavButtons();updateCustomNotesHint();});});\n    $$('#cb-nugget-sub .cb__card[data-nugget]').forEach(btn=>{btn.addEventListener('click',()=>{state.nugget=btn.dataset.nugget;$$('#cb-nugget-sub .cb__card').forEach(c=>c.classList.toggle('is-selected',c===btn));renderSummary();updateNavButtons();});});\n    $$('#cb-gems-sub .cb__card[data-gem]').forEach(btn=>{btn.addEventListener('click',()=>{state.gem=btn.dataset.gem;$$('#cb-gems-sub .cb__card[data-gem]').forEach(c=>c.classList.toggle('is-selected',c===btn));renderGemsPerTooth();renderSummary();updateNavButtons();});});\n    $$('#cb-precious-type-row .cb__card[data-precious-type]').forEach(btn=>{btn.addEventListener('click',()=>{state.preciousType=btn.dataset.preciousType;$$('#cb-precious-type-row .cb__card[data-precious-type]').forEach(c=>c.classList.toggle('is-selected',c===btn));renderSummary();updateNavButtons();updateCtaButtons();});});\n    $$('#cb-enamel-sub .cb__card[data-enamel]').forEach(btn=>{btn.addEventListener('click',()=>{state.enamel=btn.dataset.enamel;$$('#cb-enamel-sub .cb__card').forEach(c=>c.classList.toggle('is-selected',c===btn));renderSummary();updateNavButtons();});});\n    $$('[data-pane=\"4\"] .cb__card[data-stone]').forEach(btn=>{btn.addEventListener('click',()=>{const st=btn.dataset.stone;$$('[data-pane=\"4\"] .cb__card[data-stone]').forEach(c=>c.classList.toggle('is-selected',c===btn));if(st==='diamond'){$('#cb-stone-tier').style.display='block';state.stone=null;}else{$('#cb-stone-tier').style.display='none';state.stone=st;state.stoneTier=null;}renderSummary();updateNavButtons();try{if(typeof gtag==='function')gtag('event','stone_selected',{stone:state.stone||st,tier:st,source:'custom_builder'});}catch(_){}});});\n    $$('#cb-stone-tier .cb__card[data-tier]').forEach(btn=>{btn.addEventListener('click',()=>{state.stoneTier=btn.dataset.tier;state.stone='diamond-'+state.stoneTier;$$('#cb-stone-tier .cb__card[data-tier]').forEach(c=>c.classList.toggle('is-selected',c===btn));renderSummary();updateNavButtons();try{if(typeof gtag==='function')gtag('event','stone_selected',{stone:state.stone,tier:'diamond',source:'custom_builder'});}catch(_){}});});\n    $$('#cb-cut-grid .cb__card[data-cut]').forEach(btn=>{btn.addEventListener('click',()=>{state.cut=btn.dataset.cut;$$('#cb-cut-grid .cb__card[data-cut]').forEach(c=>c.classList.toggle('is-selected',c===btn));renderSummary();updateNavButtons();});});\n    $$('.cb__addon-shapes .cb__shape').forEach(btn=>{btn.addEventListener('click',()=>{const addon=btn.closest('.cb__addon-shapes').dataset.addon;const sh=btn.dataset.shape;if(addon==='fangs')state.fangsShape=sh;if(addon==='gaps')state.gapsShape=sh;$$(`.cb__addon-shapes[data-addon=\"${addon}\"] .cb__shape`).forEach(x=>x.classList.toggle('is-selected',x===btn));renderSummary();});});\n    $$('.cb__qty-btn').forEach(btn=>{btn.addEventListener('click',()=>{const a=btn.dataset.addon;const d=Number(btn.dataset.delta);if(a==='fangs'){state.fangsQty=Math.max(0,Math.min(MAX_FANGS_QTY,state.fangsQty+d));$('#cb-fangs-qty').textContent=state.fangsQty;$('#cb-fangs-count').textContent=state.fangsQty;if(state.fangsQty===0)state.fangsShape=null;else if(!state.fangsShape){const f=$('.cb__addon-shapes[data-addon=\"fangs\"] .cb__shape');if(f)f.click();}}if(a==='gaps'){state.gapsQty=Math.max(0,Math.min(MAX_GAPS_QTY,state.gapsQty+d));$('#cb-gaps-qty').textContent=state.gapsQty;$('#cb-gaps-count').textContent=state.gapsQty;if(state.gapsQty===0)state.gapsShape=null;else if(!state.gapsShape){const f=$('.cb__addon-shapes[data-addon=\"gaps\"] .cb__shape');if(f)f.click();}}renderSummary();});});\n    const notes=$('#cb-notes');if(notes)notes.addEventListener('input',()=>{state.notes=notes.value;if(state.step===6)renderReview();updateCtaButtons();updateCustomNotesHint();});\n    const pv=$('#cb-prev');if(pv)pv.addEventListener('click',goPrev);\n    const nx=$('#cb-next');if(nx)nx.addEventListener('click',goNext);\n    const ac=$('#cb-add-to-cart');if(ac)ac.addEventListener('click',onAddToCart);\n    const qb=$('#cb-request-quote');if(qb)qb.addEventListener('click',onRequestQuote);\n    ['cb-email','cb-phone','cb-instagram'].forEach(id=>{const el=document.getElementById(id);if(el)el.addEventListener('input',updateCtaButtons);});\n    ['cb-gate-email','cb-gate-phone'].forEach(id=>{const el=document.getElementById(id);if(el)el.addEventListener('input',updateGateButton);});\n    const sb=$('#cb-start-designing');if(sb)sb.addEventListener('click',submitContactGate);\n    /* ARCHIVED 2026-06-17: catalog matcher (Find Pieces Like Yours) UI block\n       commented out in eg-custom-builder.liquid. Handler onGeneratePreview()\n       below kept intact for potential reuse \u2014 just unwired. */\n    // const pb=$('#cb-preview-btn');if(pb)pb.addEventListener('click',onGeneratePreview);\n    const apb=$('#cb-ai-preview-btn');if(apb)apb.addEventListener('click',onGenerateAIPreview);\n    const fi=$('#cb-image-input');if(fi)fi.addEventListener('change',onImageSelected);\n    const ir=$('#cb-image-remove');if(ir)ir.addEventListener('click',onImageRemove);\n  }\n\n  // === Reference-photo upload + sanitization ===\n  // Defense-in-depth pipeline: extension \u2192 MIME \u2192 magic bytes \u2192 size \u2192 dimensions\n  // \u2192 canvas re-encode (strips EXIF/GPS/steganography/polyglot) \u2192 re-validate.\n  function showImgError(msg){const e=$('#cb-image-error');if(!e)return;if(!msg){e.style.display='none';e.textContent='';return;}e.style.display='block';e.textContent=msg;}\n  function clearImgPreview(){const p=$('#cb-image-preview');const t=$('#cb-image-thumb');const inf=$('#cb-image-info');if(p)p.style.display='none';if(t)t.removeAttribute('src');if(inf)inf.textContent='';const inp=$('#cb-image-input');if(inp)inp.value='';}\n  function fmtBytes(b){if(b<1024)return b+' B';if(b<1024*1024)return (b/1024).toFixed(1)+' KB';return (b/1024/1024).toFixed(2)+' MB';}\n\n  async function checkMagicBytes(file){\n    const slice = file.slice(0, 3);\n    const buf = await slice.arrayBuffer();\n    const bytes = new Uint8Array(buf);\n    // JPEG SOI (Start Of Image) marker: 0xFF 0xD8 0xFF\n    return bytes.length === 3 && bytes[0] === 0xFF && bytes[1] === 0xD8 && bytes[2] === 0xFF;\n  }\n\n  function loadImageFromDataUrl(dataUrl){\n    return new Promise((resolve, reject) => {\n      const img = new Image();\n      img.onload = () => resolve(img);\n      img.onerror = () => reject(new Error('Image could not be decoded.'));\n      img.src = dataUrl;\n    });\n  }\n\n  function fileToDataUrl(file){\n    return new Promise((resolve, reject) => {\n      const r = new FileReader();\n      r.onload = () => resolve(r.result);\n      r.onerror = () => reject(new Error('Could not read file.'));\n      r.readAsDataURL(file);\n    });\n  }\n\n  async function processImage(file){\n    // Layer 1: extension whitelist\n    const name = (file.name || '').toLowerCase();\n    if (!/\\.(jpe?g)$/.test(name)) throw new Error('Only .jpg / .jpeg files are accepted.');\n    // Layer 2: MIME type whitelist\n    if (file.type !== 'image/jpeg') throw new Error('File must be a JPEG (image/jpeg).');\n    // Layer 4: size limit (4 first, magic bytes check is async)\n    if (file.size > IMG_MAX_BYTES) throw new Error('File is over '+(IMG_MAX_BYTES/1024/1024)+' MB. Compress and try again.');\n    if (file.size < 100) throw new Error('File looks too small to be a real photo.');\n    // Layer 3: magic bytes (JPEG SOI)\n    const ok = await checkMagicBytes(file);\n    if (!ok) throw new Error('File header does not match a real JPEG. Rejected.');\n    // Layer 6: canvas decode + re-encode (strips EXIF/GPS/steganography/polyglot)\n    const raw = await fileToDataUrl(file);\n    const img = await loadImageFromDataUrl(raw);\n    // Layer 5: dimensions limit (post-decode, before resize)\n    if (img.width > IMG_MAX_DIM || img.height > IMG_MAX_DIM) {\n      throw new Error('Image is too large ('+img.width+'\u00D7'+img.height+'). Max '+IMG_MAX_DIM+'\u00D7'+IMG_MAX_DIM+'.');\n    }\n    if (img.width < 64 || img.height < 64) throw new Error('Image is too small (min 64\u00D764).');\n    // Resize to a sane max dimension while keeping aspect ratio\n    let w = img.width, h = img.height;\n    if (Math.max(w, h) > IMG_OUTPUT_MAX_DIM) {\n      const scale = IMG_OUTPUT_MAX_DIM / Math.max(w, h);\n      w = Math.round(w * scale);\n      h = Math.round(h * scale);\n    }\n    const canvas = document.createElement('canvas');\n    canvas.width = w; canvas.height = h;\n    const ctx = canvas.getContext('2d');\n    if (!ctx) throw new Error('Canvas not available.');\n    ctx.drawImage(img, 0, 0, w, h);\n    // Re-encode as fresh JPEG. This is the security-critical step: only the rendered\n    // pixels survive \u2014 no EXIF, no GPS, no steganography payload, no polyglot data.\n    const clean = canvas.toDataURL('image/jpeg', IMG_OUTPUT_QUALITY);\n    if (!clean || clean.indexOf('data:image/jpeg;base64,') !== 0) {\n      throw new Error('Re-encode failed.');\n    }\n    // Approximate sanitized size: 3/4 of base64 length\n    const b64 = clean.split(',')[1] || '';\n    const bytesOut = Math.floor(b64.length * 0.75);\n    return { dataUrl: clean, width: w, height: h, bytes: bytesOut };\n  }\n\n  async function onImageSelected(ev){\n    showImgError('');\n    const file = ev && ev.target && ev.target.files && ev.target.files[0];\n    if (!file) return;\n    const lbl = document.querySelector('label[for=\"cb-image-input\"]');\n    if (lbl) { lbl.textContent = 'Processing...'; lbl.style.pointerEvents = 'none'; }\n    try {\n      const result = await processImage(file);\n      state.images = [result.dataUrl];\n      const p = $('#cb-image-preview');\n      const t = $('#cb-image-thumb');\n      const inf = $('#cb-image-info');\n      if (t) t.src = result.dataUrl;\n      if (inf) inf.textContent = 'Sanitized \u00B7 '+result.width+'\u00D7'+result.height+' \u00B7 '+fmtBytes(result.bytes);\n      if (p) p.style.display = 'block';\n      if (lbl) lbl.textContent = 'Replace Reference Photo';\n    } catch (err) {\n      showImgError(err.message || 'Could not process image.');\n      state.images = [];\n      clearImgPreview();\n      if (lbl) lbl.textContent = 'Add Reference Photo';\n    } finally {\n      if (lbl) lbl.style.pointerEvents = '';\n    }\n  }\n\n  function onImageRemove(){\n    state.images = [];\n    clearImgPreview();\n    showImgError('');\n    const lbl = document.querySelector('label[for=\"cb-image-input\"]');\n    if (lbl) lbl.textContent = 'Add Reference Photo';\n  }\n\n  async function onGeneratePreview(){const btn=$('#cb-preview-btn');const result=$('#cb-preview-result');btn.disabled=true;btn.textContent='Searching catalog...';try{const r=await fetch('/apps/create-variant/match-preview',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({spec:{position:state.position,count:state.count,metal:state.metal,goldColor:state.goldColor,style:state.style,stone:state.stone}})});const d=await r.json();if(d.reason==='silver_no_catalog'){result.innerHTML='<p style=\"color:#999;font-size:13px\">Silver pieces are made-to-order. Request a quote below and our team will design yours.</p>';result.style.display='block';return;}if(!d.matches||!d.matches.length){result.innerHTML='<p style=\"color:#999;font-size:13px\">No close matches in our catalog. Your custom design will be unique.</p>';result.style.display='block';return;}const grid=d.matches.map(m=>`<div style=\"text-align:center\"><img src=\"${m.imageUrl}\" alt=\"${m.productTitle||''}\" style=\"width:100%;border-radius:6px;background:#000\"><div style=\"font-size:11px;color:#999;margin-top:4px\">${m.sku||''}</div></div>`).join('');result.innerHTML=`<div style=\"font-size:12px;color:#999;margin-bottom:8px\">${d.disclaimer||''}</div><div style=\"display:grid;grid-template-columns:repeat(3,1fr);gap:8px\">${grid}</div>`;result.style.display='block';}catch(e){alert('Catalog search: '+e.message);}finally{btn.disabled=false;btn.textContent='Find Pieces Like Yours';}}\n\n  // Build the backend spec from the current builder state.\n  function builderStateToSpec(){\n    const pos = state.position || 'top';\n    const stoneType = state.stone || null;\n    // Rough stone_count estimate: iced full \u2192 12/cap, accents \u2192 3/cap, otherwise 0\n    let stoneCount = 0;\n    if (state.style==='iced' && stoneType) stoneCount = state.count * 12;\n    else if (state.style==='diamond-cut' && stoneType) stoneCount = state.count * 3;\n    const spec = {\n      caps: state.count,\n      position: pos,\n      metal: state.metal,\n      gold_color: state.goldColor || null,\n      stone_count: stoneCount,\n      stone_type: stoneType,\n      precious: state.gem || null,\n      precious_type: state.preciousType || 'lab',\n      style: state.style,\n    };\n    // Notes from the textarea are CONTEXT ADDITIONAL to the spec (which the backend\n    // already reads from caps/metal/style/etc.). Don't repeat the spec inside notes.\n    const ta = document.getElementById('cb-notes');\n    const userTxt = (ta && ta.value || '').trim();\n    if (userTxt) {\n      // Custom style: drives the entire prompt. Other styles: appended as guiding context.\n      if (state.style === 'custom') spec.custom_description = userTxt;\n      else spec.notes = userTxt;\n    }\n    return spec;\n  }\n\n  // Build a friendly description of the current spec, used to pre-populate\n  // the notes textarea so the customer doesn't have to re-type what they already chose.\n  function specToFriendlyDescription(){\n    const POS = { top:'Top arch', bottom:'Bottom arch', single:'Single tooth', full:'Full set (top + bottom)' };\n    const STYLE = { iced:'iced out', 'diamond-cut':'diamond cut', nuggets:'nuggets', gems:'gems', enamel:'enamel', custom:'custom design', plain:'solid plain', 'open-face':'open face' };\n    const STONES = { moissanite:'moissanite', 'lab-grown':'lab-grown diamond', 'diamond-si':'SI diamond', 'diamond-vs':'VS diamond', 'diamond-vvs':'VVS diamond' };\n    const parts = [];\n    if (state.position) parts.push(POS[state.position] || state.position);\n    if (state.count) parts.push(state.count + ' cap' + (state.count===1?'':'s'));\n    let metalLabel = (METAL_LABELS && METAL_LABELS[state.metal] && METAL_LABELS[state.metal].name) || state.metal || '';\n    if (state.goldColor) metalLabel += ' (' + state.goldColor + ' gold)';\n    if (metalLabel) parts.push(metalLabel);\n    if (state.style) parts.push(STYLE[state.style] || state.style + ' style');\n    if (state.stone) parts.push('with ' + (STONES[state.stone] || state.stone));\n    if (state.gem) parts.push((state.preciousType==='genuine'?'genuine ':'lab ') + state.gem.replace('-',' ') + ' feature stones');\n    if (state.fangsQty>0 && state.fangsShape) parts.push(state.fangsQty + ' ' + state.fangsShape + ' fangs');\n    if (state.gapsQty>0 && state.gapsShape) parts.push(state.gapsQty + ' ' + state.gapsShape + ' gap fillers');\n    return parts.join(', ');\n  }\n\n  // No-op kept so the Step 6 entry hook still works without changes.\n  // Spec already lives in state + review table above \u2014 no need to repeat it in notes.\n  function maybePrefillNotes(){ /* intentionally empty */ }\n\n  // AI tips that rotate during the wait, so the customer sees movement.\n  const AI_WAIT_TIPS = [\n    'Translating your spec into a brand-style prompt\u2026',\n    'Picking the closest reference photo for your cap count\u2026',\n    'Rendering the metal and stone settings\u2026',\n    'Applying the GOLD TEETH USA brand aesthetic\u2026',\n    'Watermarking the preview to keep your design safe\u2026',\n    'Final pass \u2014 about 5 more seconds\u2026',\n  ];\n\n  function setAIPreviewLoading(container){\n    container.innerHTML =\n      '<div style=\"display:flex;align-items:center;justify-content:center;padding:28px 16px;background:#0e0e0e;border:1px solid #2a2a2a;border-radius:8px;flex-direction:column;gap:14px;text-align:center\">'\n      + '<div style=\"width:36px;height:36px;border:3px solid #2a2a2a;border-top-color:#d4af37;border-radius:50%;animation:cbSpin 0.9s linear infinite\"></div>'\n      + '<div id=\"cb-ai-tip\" style=\"font-size:13px;color:#d4af37;font-family:var(--font-heading-family,inherit);letter-spacing:0.5px;min-height:18px\">' + AI_WAIT_TIPS[0] + '</div>'\n      + '<div style=\"font-size:11px;color:#666;letter-spacing:0.5px\">Takes about 15\u201320 seconds. Hang tight.</div>'\n      + '</div>'\n      + '<style>@keyframes cbSpin{to{transform:rotate(360deg)}}</style>';\n    container.style.display='block';\n    let i = 0;\n    const tipEl = document.getElementById('cb-ai-tip');\n    const id = setInterval(function(){\n      if (!tipEl || !tipEl.isConnected) { clearInterval(id); return; }\n      i = (i + 1) % AI_WAIT_TIPS.length;\n      tipEl.style.opacity = '0';\n      setTimeout(function(){\n        if (!tipEl.isConnected) return;\n        tipEl.textContent = AI_WAIT_TIPS[i];\n        tipEl.style.opacity = '1';\n      }, 200);\n    }, 3000);\n    container._aiTipInterval = id;\n  }\n\n  async function onGenerateAIPreview(){\n    const btn=$('#cb-ai-preview-btn'); const result=$('#cb-ai-preview-result');\n    if(!btn||!result) return;\n    if(!state.metal||!state.count){alert('Pick at least metal and caps count first.');return;}\n    btn.disabled=true; btn.textContent='Generating\u2026';\n    setAIPreviewLoading(result);\n    try{\n      const r = await fetch('/apps/create-variant/preview-grillz', {\n        method:'POST',\n        headers:{'Content-Type':'application/json'},\n        credentials:'same-origin',\n        cache:'no-store',\n        body: JSON.stringify({ spec: builderStateToSpec(), customer: { email: (state.contact && state.contact.email) || '', phone: (state.contact && state.contact.phone) || '', instagram: (state.contact && state.contact.instagram) || '' }, leadId: state.leadId || null, builderState: serializeBuilderState() })\n      });\n      // Clear loading tip interval if any\n      if (result._aiTipInterval) { clearInterval(result._aiTipInterval); result._aiTipInterval = null; }\n      const d = await r.json();\n      if(r.status===429){\n        result.innerHTML = `<p style=\"color:#d4af37;font-size:13px;line-height:1.5\">${d.message||'Rate limit reached.'} <br><span style=\"color:#999\">Try again later.</span></p>`;\n        result.style.display='block';\n        return;\n      }\n      if(!r.ok || !d.data_url){\n        result.innerHTML = `<p style=\"color:#999;font-size:13px\">Preview unavailable right now. ${d.error||''}</p>`;\n        result.style.display='block';\n        return;\n      }\n      // Anti-save protections: <img> with disabled context menu + drag + select.\n      // (Background-image approach broke on Safari mobile + very large base64.)\n      const remainingTxt = (typeof d.remaining==='number') ? `${d.remaining} AI preview${d.remaining===1?'':'s'} left this hour` : '';\n      const wrap = document.createElement('div');\n      wrap.style.cssText = 'position:relative;border-radius:8px;overflow:hidden;border:1px solid #2a2a2a;background:#000';\n      wrap.setAttribute('oncontextmenu','return false');\n      wrap.setAttribute('ondragstart','return false');\n      const img = document.createElement('img');\n      img.src = d.data_url;\n      img.alt = 'AI preview';\n      img.draggable = false;\n      img.style.cssText = 'display:block;width:100%;height:auto;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none';\n      img.addEventListener('contextmenu', function(e){ e.preventDefault(); });\n      img.addEventListener('dragstart', function(e){ e.preventDefault(); });\n      wrap.appendChild(img);\n      result.innerHTML = '';\n      result.appendChild(wrap);\n      const footer = document.createElement('div');\n      footer.style.cssText = 'font-size:11px;color:#999;margin-top:6px;display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap';\n      footer.innerHTML = '<span>AI rendering \u2014 your handcrafted piece may differ.</span><span style=\"color:#d4af37\">'+remainingTxt+'</span>';\n      result.appendChild(footer);\n      // Post-preview CTA strip \u2014 collapse the scroll-to-cart distance. Mirrors the\n      // bottom CTAs but exposes them in the moment of decision (when the customer\n      // is staring at the rendered preview). Driven by Clarity data: customers\n      // generate the preview and bail without finding the cart button.\n      const sub=computeSubtotal();const tot=applyDiscount(sub);const quoteOnly=isQuoteOnly();\n      const priceLabel=quoteOnly?'Quote':fmt(tot);\n      const cta=document.createElement('div');\n      cta.style.cssText='margin-top:14px;padding:14px;background:#0e0e0e;border:1px solid #d4af37;border-radius:8px;';\n      cta.innerHTML='<div style=\"font-family:var(--font-heading-family,inherit);font-size:13px;letter-spacing:2px;text-transform:uppercase;color:#d4af37;margin-bottom:8px;\">Love it? Lock it in.</div>'\n        +'<div style=\"display:flex;gap:8px;flex-wrap:wrap;\">'\n        +(quoteOnly?'':'<button type=\"button\" id=\"cb-mirror-cart\" style=\"flex:1;min-width:140px;background:#d4af37;color:#0a0a0a;border:none;padding:14px 16px;font-family:var(--font-heading-family,inherit);font-weight:700;font-size:13px;letter-spacing:1.5px;text-transform:uppercase;border-radius:6px;cursor:pointer;\">\u26A1 Add to Cart \u2014 '+priceLabel+'</button>')\n        +'<button type=\"button\" id=\"cb-mirror-quote\" style=\"flex:1;min-width:140px;background:transparent;color:#fff;border:1px solid #d4af37;padding:14px 16px;font-family:var(--font-heading-family,inherit);font-weight:700;font-size:13px;letter-spacing:1.5px;text-transform:uppercase;border-radius:6px;cursor:pointer;\">\uD83D\uDCE7 Request final quote</button>'\n        +'</div>'\n        +'<div style=\"margin-top:10px;font-size:11px;color:#999;\">\uD83D\uDCBE This design is saved \u00B7 we have your email if you need to come back.</div>';\n      result.appendChild(cta);\n      const mc=document.getElementById('cb-mirror-cart');if(mc)mc.addEventListener('click',()=>{const real=document.getElementById('cb-add-to-cart');if(real){real.scrollIntoView({behavior:'smooth',block:'center'});setTimeout(()=>real.click(),350);}});\n      const mq=document.getElementById('cb-mirror-quote');if(mq)mq.addEventListener('click',()=>{const real=document.getElementById('cb-request-quote');if(real){real.scrollIntoView({behavior:'smooth',block:'center'});setTimeout(()=>real.click(),350);}});\n      result.style.display='block';\n      // Soft attention-grab \u2014 bring the strip into view 700ms after the image lands.\n      setTimeout(()=>{try{cta.scrollIntoView({behavior:'smooth',block:'center'});}catch(_){}},700);\n    } catch(e) {\n      if (result._aiTipInterval) { clearInterval(result._aiTipInterval); result._aiTipInterval = null; }\n      result.innerHTML = `<p style=\"color:#999;font-size:13px\">Preview failed: ${e.message||'network error'}</p>`;\n      result.style.display='block';\n    } finally {\n      btn.disabled=false; btn.textContent='Generate AI Preview';\n    }\n  }\n\n  async function postJSON(url,p){const r=await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(p),credentials:'same-origin',cache:'no-store'});let b;try{b=await r.clone().json();}catch{b=await r.text();}if(!r.ok||(b&&b.ok===false)){const e=new Error('HTTP '+r.status);e.status=r.status;e.response=b;throw e;}return b;}\n  function gidToLegacy(g){if(!g)return null;const m=String(g).match(/\\/ProductVariant\\/(\\d+)/);return m?m[1]:null;}\n  async function addToCartWithRetry(vid,q,props){const dr=async()=>{const r=await fetch('/cart/add.js',{method:'POST',headers:{'Content-Type':'application/json'},credentials:'same-origin',body:JSON.stringify({id:String(vid),quantity:q,properties:props})});const b=await r.text();return{res:r,body:b};};let{res,body}=await dr();if(!res.ok&&res.status===422&&/sold out/i.test(body)){await new Promise(r=>setTimeout(r,2000));({res,body}=await dr());}if(!res.ok&&res.status===422&&/sold out/i.test(body)){await new Promise(r=>setTimeout(r,2500));({res,body}=await dr());}if(!res.ok)throw new Error('cart/add error: '+body);return JSON.parse(body);}\n\n  function buildVariantTitle(){const parts=['Custom'];parts.push(POSITION_LABELS[state.position]||state.position);const mn=(METAL_LABELS[state.metal]&&METAL_LABELS[state.metal].name)||state.metal;parts.push(mn+(state.goldColor?' '+state.goldColor:''));parts.push(state.count+' cap'+(state.count===1?'':'s'));parts.push(STYLE_LABELS[state.style]||state.style);if(state.stone)parts.push(STONE_LABELS[state.stone]);return parts.join(' \u00B7 ');}\n  function buildProperties(sub,tot,ct){const p={Source:'custom-builder',Position:POSITION_LABELS[state.position]||state.position,Caps:String(state.count),Metal:(METAL_LABELS[state.metal]&&METAL_LABELS[state.metal].name)||state.metal,Style:STYLE_LABELS[state.style]||state.style};if(state.selectedTeeth.length>0)p.Teeth=state.selectedTeeth.join(', ');if(state.goldColor)p.GoldColor=state.goldColor;if(state.stone)p.Stone=STONE_LABELS[state.stone]||state.stone;if(state.cut)p.DiamondCut=CUT_LABELS[state.cut]||state.cut;if(state.nugget)p.Nugget=state.nugget;if(state.gem)p.Gem=(state.preciousType==='genuine'?'Genuine ':'Lab ')+(GEM_LABELS[state.gem]||state.gem);if(state.style==='gems'&&gemOverrideCount()>0)p.GemsPerTooth=state.selectedTeeth.map(t=>gemToothLabel(t)+':'+(GEM_LABELS[effectiveGem(t)]||effectiveGem(t))).join(', ');if(state.enamel)p.Enamel=state.enamel;if(state.fangsQty>0)p.Fangs=state.fangsQty+' x '+state.fangsShape;if(state.gapsQty>0)p.GapFillers=state.gapsQty+' x '+state.gapsShape;if(state.missingTeeth.length>0)p.MissingTeeth=state.missingTeeth.join(', ');if(state.notes&&state.notes.trim())p.Notes=state.notes.trim();const dp=discountPctFor(sub);p.Subtotal='$'+sub.toFixed(2);if(dp>0)p.DiscountPercent=String(dp)+'%';p.EstimatedTotal='$'+tot.toFixed(2);p.PriceNote='Estimate. Final price confirmed at impressions.';if(ct&&ct.email)p.Email=ct.email;if(ct&&ct.phone)p.Phone=ct.phone;if(ct&&ct.instagram)p.Instagram=ct.instagram;if(state.leadId)p.LeadId=state.leadId;return p;}\n\n  async function onAddToCart(){showContactError('');const ct=getContactFields();if(!isValidEmail(ct.email)){showContactError('Please enter a valid email.');return;}if(!isValidPhone(ct.phone)){showContactError('Please enter a valid phone number.');return;}if(state.style==='custom'){showContactError('Custom Design needs a quote \u2014 use \"Request a Quote\".');return;}if(state.style==='gems'&&state.preciousType==='genuine'){showContactError('Genuine gems need a quote \u2014 use \"Request a Quote\".');return;}const btn=$('#cb-add-to-cart');if(btn.disabled)return;btn.disabled=true;btn.textContent='Building your order...';if(!window.MASTER_BUILD_ID){showContactError('Builder configuration error.');btn.disabled=false;btn.textContent='Add to Cart';return;}const sub=computeSubtotal();const tot=applyDiscount(sub);if(sub<=0){showContactError('Please complete your build before adding to cart.');btn.disabled=false;btn.textContent='Add to Cart';return;}const title=buildVariantTitle();const props=buildProperties(sub,tot,ct);const payload={productId:window.MASTER_BUILD_ID,title:title,options:[title],price:tot,properties:props,ttlMinutes:60,leadId:state.leadId,uiSelected:{source:'custom-builder',contact:ct,leadId:state.leadId,state:{position:state.position,count:state.count,selectedTeeth:state.selectedTeeth,missingTeeth:state.missingTeeth,metal:state.metal,goldColor:state.goldColor,style:state.style,nugget:state.nugget,gem:state.gem,gemMap:state.gemMap,preciousType:state.preciousType,enamel:state.enamel,stone:state.stone,stoneTier:state.stoneTier,cut:state.cut,fangs:state.fangsQty>0?{shape:state.fangsShape,qty:state.fangsQty}:null,gaps:state.gapsQty>0?{shape:state.gapsShape,qty:state.gapsQty}:null,notes:state.notes,images:state.images}}};try{const r=await postJSON('/apps/create-variant',payload);let vid=null;if(r.variantLegacyId)vid=String(r.variantLegacyId);else if(r.variantId)vid=String(r.variantId);else if(r.variantGid)vid=gidToLegacy(r.variantGid);if(!vid)throw new Error('Server did not return a variant id.');btn.textContent='Adding to cart...';await addToCartWithRetry(vid,1,props);const cu=(window.Shopify&&window.Shopify.routes&&window.Shopify.routes.root)?window.Shopify.routes.root+'cart?added=1':'/cart?added=1';try{sessionStorage.removeItem(SS_KEY);}catch(_){}try{if(window.top&&window.top!==window.self)window.top.location.href=cu;else window.location.href=cu;}catch(e){window.location.href=cu;}}catch(err){console.error('[custom-builder] add-to-cart error:',err);let m='';if(err&&err.response&&err.response.error)m=typeof err.response.error==='string'?err.response.error:JSON.stringify(err.response.error);else if(err&&err.message)m=String(err.message);showContactError('Could not add to cart: '+(m||'unknown error'));btn.disabled=false;btn.textContent='Add to Cart';}}\n\n  async function onRequestQuote(){showContactError('');const ct=getContactFields();if(!isValidEmail(ct.email)){showContactError('Please enter a valid email.');return;}if(!isValidPhone(ct.phone)){showContactError('Please enter a valid phone number.');return;}const btn=$('#cb-request-quote');if(btn.disabled)return;btn.disabled=true;btn.textContent='Sending your request...';const sub=computeSubtotal();const tot=applyDiscount(sub);const spec={position:state.position,count:state.count,selectedTeeth:state.selectedTeeth,missingTeeth:state.missingTeeth,metal:state.metal,goldColor:state.goldColor,style:state.style,nugget:state.nugget,gem:state.gem,gemMap:state.gemMap,preciousType:state.preciousType,enamel:state.enamel,stone:state.stone,stoneTier:state.stoneTier,cut:state.cut,fangs:state.fangsQty>0?{shape:state.fangsShape,qty:state.fangsQty}:null,gaps:state.gapsQty>0?{shape:state.gapsShape,qty:state.gapsQty}:null,notes:state.notes,images:state.images};const payload={spec:spec,email:ct.email,phone:ct.phone,instagramHandle:ct.instagram,styleType:state.style==='custom'?'custom':'configured',estimatedTotal:state.style==='custom'?null:tot.toFixed(2),leadId:state.leadId};try{const r=await postJSON('/apps/create-variant/request-quote',payload);const ce=$('#cb-contact');if(ce)ce.innerHTML=`<div class=\"cb__quote-success\"><h3>Quote requested \u2713</h3><p>${(r&&r.message)||\"We'll reach out within 1 business day.\"}</p><p style=\"margin-top:8px;font-size:11px;color:var(--cb-fade);\">Confirmation will go to ${ct.email}.</p></div>`;const ab=$('#cb-add-to-cart');const qb=$('#cb-request-quote');if(ab)ab.style.display='none';if(qb)qb.style.display='none';try{sessionStorage.removeItem(SS_KEY);}catch(_){}}catch(err){console.error('[custom-builder] request-quote error:',err);let m='';if(err&&err.response&&err.response.error)m=typeof err.response.error==='string'?err.response.error:JSON.stringify(err.response.error);else if(err&&err.message)m=String(err.message);showContactError('Could not send your quote request: '+(m||'unknown error'));btn.disabled=false;btn.textContent='Request a Quote';}}\n\n  function restoreFromSession(){try{const raw=sessionStorage.getItem(SS_KEY);if(!raw)return false;const d=JSON.parse(raw);if(!d||!d.email||!d.phone)return false;state.contact={email:d.email,phone:d.phone,instagram:d.instagram||''};state.contactCaptured=true;state.leadId=d.leadId||null;const fill=(id,v)=>{const el=document.getElementById(id);if(el)el.value=v||'';};fill('cb-email',d.email);fill('cb-phone',d.phone);fill('cb-instagram',d.instagram||'');return true;}catch(_){return false;}}\n\n  // Snapshot the wizard state in a shape that round-trips through previews_log.\n  // Saved on every AI preview generation; read back by tryHydrateFromLead.\n  function serializeBuilderState(){\n    return {\n      position: state.position, count: state.count,\n      selectedTeeth: [...state.selectedTeeth], missingTeeth: [...state.missingTeeth],\n      metal: state.metal, goldColor: state.goldColor,\n      style: state.style, nugget: state.nugget, gem: state.gem, gemMap: state.gemMap, preciousType: state.preciousType,\n      enamel: state.enamel, stone: state.stone, stoneTier: state.stoneTier, cut: state.cut,\n      fangsShape: state.fangsShape, fangsQty: state.fangsQty,\n      gapsShape: state.gapsShape, gapsQty: state.gapsQty,\n      notes: state.notes || '',\n      images: Array.isArray(state.images) ? state.images.slice() : [],\n    };\n  }\n\n  // Mirror state into the DOM: toggle .is-selected on all pills/cards, show\n  // the right style sub-grids, set teeth arch visibility, sync qty counters\n  // + notes textarea. Called after hydrating state from a /lead-state response\n  // so the wizard renders fully-fidelity even if the user navigates back.\n  function applyHydratedUiState(){\n    if(state.position){$$('[data-pane=\"1\"] .cb__card[data-position]').forEach(c=>c.classList.toggle('is-selected',c.dataset.position===state.position));const tb=$('#cb-teeth-block');if(tb)tb.style.display='block';setVisibleArches();}\n    if(state.metal){renderMetalGrid();if(GOLD_METALS.has(state.metal)){const gc=$('#cb-gold-color');if(gc)gc.style.display='block';$$('#cb-gold-color .cb__card[data-gold]').forEach(c=>c.classList.toggle('is-selected',c.dataset.gold===state.goldColor));}}\n    if(state.style){$$('[data-pane=\"3\"] .cb__cards--style .cb__card').forEach(c=>c.classList.toggle('is-selected',c.dataset.style===state.style));hideAllStyleSubs();if(state.style==='nuggets'){const el=$('#cb-nugget-sub');if(el)el.style.display='block';$$('#cb-nugget-sub .cb__card[data-nugget]').forEach(c=>c.classList.toggle('is-selected',c.dataset.nugget===state.nugget));}if(state.style==='gems'){const el=$('#cb-gems-sub');if(el)el.style.display='block';$$('#cb-gems-sub .cb__card[data-gem]').forEach(c=>c.classList.toggle('is-selected',c.dataset.gem===state.gem));$$('#cb-precious-type-row .cb__card[data-precious-type]').forEach(c=>c.classList.toggle('is-selected',c.dataset.preciousType===state.preciousType));renderGemsPerTooth();}if(state.style==='enamel'){const el=$('#cb-enamel-sub');if(el)el.style.display='block';$$('#cb-enamel-sub .cb__card[data-enamel]').forEach(c=>c.classList.toggle('is-selected',c.dataset.enamel===state.enamel));}if(state.style==='diamond-cut'){const el=$('#cb-cut-sub');if(el)el.style.display='block';$$('#cb-cut-grid .cb__card[data-cut]').forEach(c=>c.classList.toggle('is-selected',c.dataset.cut===state.cut));}if(state.style==='custom'){const el=$('#cb-custom-msg');if(el)el.style.display='block';}}\n    if(state.stone){const isDiamond=state.stone.indexOf('diamond-')===0;$$('[data-pane=\"4\"] .cb__card[data-stone]').forEach(c=>c.classList.toggle('is-selected',isDiamond?c.dataset.stone==='diamond':c.dataset.stone===state.stone));if(isDiamond){const tier=$('#cb-stone-tier');if(tier)tier.style.display='block';const t=state.stone.slice(8);$$('#cb-stone-tier .cb__card[data-tier]').forEach(c=>c.classList.toggle('is-selected',c.dataset.tier===t));state.stoneTier=t;}}\n    if(state.fangsShape)$$('.cb__addon-shapes[data-addon=\"fangs\"] .cb__shape').forEach(c=>c.classList.toggle('is-selected',c.dataset.shape===state.fangsShape));\n    if(state.gapsShape)$$('.cb__addon-shapes[data-addon=\"gaps\"] .cb__shape').forEach(c=>c.classList.toggle('is-selected',c.dataset.shape===state.gapsShape));\n    if($('#cb-fangs-qty'))$('#cb-fangs-qty').textContent=state.fangsQty;\n    if($('#cb-fangs-count'))$('#cb-fangs-count').textContent=state.fangsQty;\n    if($('#cb-gaps-qty'))$('#cb-gaps-qty').textContent=state.gapsQty;\n    if($('#cb-gaps-count'))$('#cb-gaps-count').textContent=state.gapsQty;\n    if($('#cb-missing-count'))$('#cb-missing-count').textContent=state.missingTeeth.length;\n    renderMissingTeethGrids();\n    $$('.cb__missing-tooth').forEach(b=>{b.classList.toggle('is-selected',state.missingTeeth.indexOf(b.dataset.arch+'-'+b.dataset.tooth)>=0);});\n    updateTeethUi();\n    const notesEl=$('#cb-notes');if(notesEl)notesEl.value=state.notes||'';\n  }\n\n  // Fetch saved lead state from backend when URL has ?lead=... \u2014 entry point\n  // from the recovery email. Returns true on successful hydrate so the\n  // DOMContentLoaded path can jump straight to step 6.\n  async function tryHydrateFromLead(){\n    try{\n      const params=new URLSearchParams(window.location.search);\n      const leadId=params.get('lead');\n      if(!leadId)return false;\n      const r=await fetch('/apps/create-variant/lead-state',{method:'POST',headers:{'Content-Type':'application/json'},credentials:'same-origin',cache:'no-store',body:JSON.stringify({id:leadId})});\n      const d=await r.json().catch(()=>({}));\n      if(!r.ok||!d.ok)return false;\n      state.contact=d.contact||state.contact;state.contactCaptured=true;state.leadId=d.leadId;\n      try{sessionStorage.setItem(SS_KEY,JSON.stringify({email:state.contact.email,phone:state.contact.phone,instagram:state.contact.instagram||'',leadId:state.leadId}));}catch(_){}\n      const fill=(id,v)=>{const el=document.getElementById(id);if(el)el.value=v||'';};\n      fill('cb-email',state.contact.email);fill('cb-phone',state.contact.phone);fill('cb-instagram',state.contact.instagram||'');\n      const bs=d.builderState||null;\n      if(bs){\n        state.position=bs.position||null;state.count=Number(bs.count)||0;\n        state.selectedTeeth=Array.isArray(bs.selectedTeeth)?[...bs.selectedTeeth]:[];\n        state.missingTeeth=Array.isArray(bs.missingTeeth)?[...bs.missingTeeth]:[];\n        state.metal=bs.metal||null;state.goldColor=bs.goldColor||null;\n        state.style=bs.style||null;state.nugget=bs.nugget||null;state.gem=bs.gem||null;state.gemMap=bs.gemMap||{};\n        state.preciousType=bs.preciousType||'lab';state.enamel=bs.enamel||null;\n        state.stone=bs.stone||null;state.stoneTier=bs.stoneTier||null;state.cut=bs.cut||null;\n        state.fangsShape=bs.fangsShape||null;state.fangsQty=Number(bs.fangsQty)||0;\n        state.gapsShape=bs.gapsShape||null;state.gapsQty=Number(bs.gapsQty)||0;\n        state.notes=bs.notes||'';\n        state.images=Array.isArray(bs.images)?bs.images.slice(0,1):[];\n        applyHydratedUiState();\n        // Restore reference-photo preview if rehydrated\n        if (state.images[0]) {\n          const p = $('#cb-image-preview'); const t = $('#cb-image-thumb');\n          const inf = $('#cb-image-info');\n          const lbl = document.querySelector('label[for=\"cb-image-input\"]');\n          if (t) t.src = state.images[0];\n          if (inf) inf.textContent = 'Sanitized \u00B7 restored from saved lead';\n          if (p) p.style.display = 'block';\n          if (lbl) lbl.textContent = 'Replace Reference Photo';\n        }\n      }\n      return true;\n    }catch(e){console.warn('[custom-builder] hydrate failed:',e&&e.message);return false;}\n  }\n\n  document.addEventListener('DOMContentLoaded',async ()=>{\n    if(!$('#cb-root'))return;\n    fetch('/cart.js',{credentials:'same-origin',cache:'no-store'}).then(()=>console.log('[custom-builder] cart session warmed')).catch(()=>{});\n    window.addEventListener('popstate',function(e){\n      if(e.state&&typeof e.state.cbStep==='number'){\n        const targetStep=e.state.cbStep;\n        if(targetStep===0&&state.contactCaptured)return; // don't un-gate\n        _renderStep(targetStep);\n      } else {\n        _renderStep(state.contactCaptured?1:0);\n      }\n    });\n    bind();\n    // Hydrate from ?lead=... (recovery email link) \u2192 jumps straight to step 6\n    // with the saved spec restored. Falls back to sessionStorage if no ?lead.\n    const hydrated = await tryHydrateFromLead();\n    const restored = hydrated ? true : restoreFromSession();\n    const initial = hydrated ? 6 : (restored ? 1 : 0);\n    try{history.replaceState({cbStep:initial},'','#step-'+initial);}catch(e){}\n    _renderStep(initial);\n    renderSummary();\n    updateNavButtons();\n    updateGateButton();\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
