{
  "version": 3,
  "sources": ["/cdn/shop/t/44/assets/nukkad-chip-editor-v6.js?ntv=20260523"],
  "sourcesContent": ["(function(){\r\n// \u2500\u2500 NT CHIP EDITOR v6 build 20260523-C \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\nwindow._ntBuildId='20260523-C';\r\nconsole.log('[NukkadTales] Chip editor loaded, build',window._ntBuildId);\r\n// \u2500\u2500 ICON COLOR FILTER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\nfunction ntIconFilter(hex){\r\n  if(!hex||hex.length<7)hex='#3d2b1a';\r\n  var fid='ntIcF'+hex.replace('#','');\r\n  if(!document.getElementById(fid)){\r\n    var ns='http://www.w3.org/2000/svg';\r\n    var defsEl=document.getElementById('ntIconFDefs');\r\n    if(!defsEl){\r\n      var svgEl=document.createElementNS(ns,'svg');\r\n      svgEl.id='ntIconFDefs';\r\n      svgEl.style.cssText='width:0;height:0;position:absolute;overflow:hidden;pointer-events:none;';\r\n      var dEl=document.createElementNS(ns,'defs');\r\n      svgEl.appendChild(dEl);\r\n      document.body.appendChild(svgEl);\r\n      defsEl=dEl;\r\n    }\r\n    var fEl=document.createElementNS(ns,'filter');\r\n    fEl.id=fid;\r\n    fEl.setAttribute('color-interpolation-filters','sRGB');\r\n    fEl.setAttribute('x','-20%');fEl.setAttribute('y','-20%');\r\n    fEl.setAttribute('width','140%');fEl.setAttribute('height','140%');\r\n    var flood=document.createElementNS(ns,'feFlood');\r\n    flood.setAttribute('flood-color',hex);\r\n    flood.setAttribute('flood-opacity','1');\r\n    flood.setAttribute('result','colour');\r\n    var comp=document.createElementNS(ns,'feComposite');\r\n    comp.setAttribute('in','colour');\r\n    comp.setAttribute('in2','SourceGraphic');\r\n    comp.setAttribute('operator','in');\r\n    fEl.appendChild(flood);\r\n    fEl.appendChild(comp);\r\n    defsEl.appendChild(fEl);\r\n  }\r\n  // Add drop-shadow as outline using the same colour at reduced opacity\r\n  var r=parseInt(hex.slice(1,3),16);\r\n  var g=parseInt(hex.slice(3,5),16);\r\n  var b=parseInt(hex.slice(5,7),16);\r\n  var shadowClr='rgba('+r+','+g+','+b+',0.9)';\r\n  return 'url(#'+fid+') drop-shadow(0 0 0.8px rgba(0,0,0,0.9)) drop-shadow(0 0 0.8px rgba(0,0,0,0.9))';\r\n}\r\n\r\n// Convert a catalog product title to lines array for ntMakeAiCard\r\nfunction titleToLines(title){\r\n  if(!title) return [''];\r\n  // Split on ' & ', ' / ', or spaces \u2014 connectors stay as own line\r\n  const words = title.trim().split(/\\s+/);\r\n  if(words.length <= 4) return words;\r\n  // For longer titles, group into max 4 lines of max 3 words each\r\n  const lines = [];\r\n  for(let i=0; i<words.length && lines.length<4; i+=2){\r\n    lines.push(words.slice(i, Math.min(i+2, words.length)).join(' '));\r\n  }\r\n  return lines;\r\n}\r\n\r\nasync function callCatalogSearch(query){\r\n  const res = await fetch(CATALOG_PROXY_URL, {\r\n    method: 'POST',\r\n    headers: {'Content-Type':'application/json'},\r\n    body: JSON.stringify({ query })\r\n  });\r\n  if(!res.ok) throw new Error(`Catalog proxy HTTP ${res.status}`);\r\n  const data = await res.json();\r\n  if(data.error){\r\n    console.error('[NukkadCatalog] Proxy error:', data.error, data);\r\n    throw new Error(data.error);\r\n  }\r\n  const raw = data.content?.filter(b=>b.type==='text').map(b=>b.text).join('') || '[]';\r\n  const match = raw.match(/\\[[\\s\\S]*\\]/);\r\n  if(!match) throw new Error('No JSON from catalog search');\r\n  const products = JSON.parse(match[0]);\r\n  // Convert catalog products to ntMakeAiCard format \u2014 return all, display layer paginates\r\n  return products.map(p => ({\r\n    lines: titleToLines(p.title),\r\n    type: 'quote',\r\n    price: 999,\r\n    inch: 8,\r\n    src: '',\r\n    handle: p.handle,\r\n    tagline: p.tagline || p.catalog_tagline || ''\r\n  }));\r\n}\r\n\r\n// \u2500\u2500 SEARCH SYSTEM PROMPT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\nasync function callStockSearchAI(query){\r\n  // First try Gemini proxy (semantic, cached)\r\n  try {\r\n    const res=await fetch(CATALOG_PROXY_URL,{\r\n      method:'POST', headers:{'Content-Type':'application/json'},\r\n      body:JSON.stringify({query})\r\n    });\r\n    if(!res.ok) throw new Error(`Gemini HTTP ${res.status}`);\r\n    const data=await res.json();\r\n    console.log('[NukkadStock] Gemini response keys:', Object.keys(data), '| error:', data.error||'none');\r\n    if(data.error) throw new Error('Gemini: '+data.error);\r\n    // Proxy returns {content:[{type:'text',text:'[{handle,...}]'}]}\r\n    const raw = data.content?.find(b=>b.type==='text')?.text || data.text || '';\r\n    console.log('[NukkadStock] Gemini data keys:', Object.keys(data));\r\n    console.log('[NukkadStock] Gemini content:', JSON.stringify(data.content||'MISSING').slice(0,200));\r\n    console.log('[NukkadStock] Gemini raw preview:', (raw||'EMPTY').slice(0,200));\r\n    if(!raw) throw new Error('Gemini empty result');\r\n    // Strip markdown fences first, then parse\r\n    const cleaned = raw.replace(/```json|```/g,'').replace(/[\\u0000-\\u001F\\u007F]/g,' ').replace(/,(\\s*[}\\]])/g,'$1').trim();\r\n    if(cleaned==='[]'||cleaned==='') throw new Error('Gemini empty result');\r\n    let products;\r\n    try {\r\n      products = JSON.parse(cleaned);\r\n      if(!Array.isArray(products)) throw new Error('not array');\r\n    } catch(_){\r\n      const match = cleaned.match(/\\[[\\s\\S]*\\]/);\r\n      if(!match) throw new Error('Gemini no JSON array');\r\n      products = JSON.parse(match[0]);\r\n    }\r\n    const handles=products.map(p=>p.handle).filter(Boolean).slice(0,12); // fetch 12, some will 404\r\n    if(!handles.length) throw new Error('Gemini 0 handles');\r\n    console.log('[NukkadStock] Gemini handles (top 12):', handles);\r\n    const shopifyProducts=await fetchShopifyProducts(handles);\r\n    if(!shopifyProducts.length) throw new Error('All Shopify fetches 404 \u2014 handles mismatch');\r\n    return shopifyProducts;\r\n  } catch(geminiErr){\r\n    console.warn('[NukkadStock] Gemini failed:', geminiErr.message);\r\n  }\r\n\r\n  // Fallback: Haiku reads catalog JSON and picks best handles\r\n  const catalogRes=await fetch('https://cdn.shopify.com/s/files/1/0777/5636/7123/files/nukkad-catalog.json');\r\n  if(!catalogRes.ok) throw new Error('Catalog fetch failed');\r\n  const catalog=await catalogRes.json();\r\n\r\n  // Sort by bestseller score, take top 80, compress \u2014 catalog uses p.h/p.t not p.handle/p.title\r\n  const sorted=catalog.sort((a,b)=>((b.bs||b.bestseller_score||0)-(a.bs||a.bestseller_score||0)));\r\n  const compressed=sorted.slice(0,80).map(p=>`${p.h||p.handle||''}|${p.t||p.title||''}|${p.v||p.vibe||''}|${(p.who_p||p.for_personal||'').slice(0,30)}|${(p.occ||p.occasions||[]).slice(0,3).join(',')}`).filter(l=>l.startsWith('|')===false).join('\\n');\r\n\r\n  const haikuRes=await fetch(SEARCH_PROXY_URL,{\r\n    method:'POST', headers:{'Content-Type':'application/json'},\r\n    body:JSON.stringify({\r\n      model:'claude-haiku-4-5-20251001', max_tokens:150,\r\n      system:`You match a search query to the most relevant product handles from a catalog. Return ONLY a JSON array of 6 handle strings. No explanation. Match based on: sentiment, occasion, recipient, and hobby/interest mentioned. If query mentions a hobby (cricket, music, cooking, etc) \u2014 prioritise products with matching vibes. If query mentions a relationship (papa, boss, friend) \u2014 prioritise products for that recipient.`,\r\n      messages:[{role:'user',content:`Query: \"${query}\"\\n\\nProducts (handle|title|vibe|recipient|occasions):\\n${compressed}`}]\r\n    })\r\n  });\r\n  if(!haikuRes.ok) throw new Error(`Haiku catalog ${haikuRes.status}`);\r\n  const haikuData=await haikuRes.json();\r\n  if(haikuData.error) throw new Error(haikuData.error.message||'Haiku error');\r\n  const raw=haikuData.content.filter(b=>b.type==='text').map(b=>b.text).join('');\r\n  console.log('[NukkadStock] Haiku raw:', raw);\r\n  const match=raw.match(/\\[[\\s\\S]*?\\]/);\r\n  if(!match) throw new Error('No handles from Haiku');\r\n  const handles=JSON.parse(match[0]).filter(h=>typeof h==='string').slice(0,6);\r\n  console.log('[NukkadStock] Handles:', handles);\r\n  return await fetchShopifyProducts(handles);\r\n}\r\n\r\nconst SEARCH_SYS = `You suggest quote designs for NukkadTales \u2014 Indian handmade engraved wooden tabletop decor. \u20B9999 per piece.\r\n\r\nWHAT THIS IS: A small wooden piece that sits on a desk or shelf. A private, personal object someone looks at every day and feels something.\r\n\r\nCRITICAL \u2014 TWO COMPLETELY DIFFERENT JOBS:\r\n\r\n1. PERSON QUERIES (\"gift for maa\", \"for my boss\", \"for my friend\"):\r\n   - The quote is about WHO THEY ARE or the RELATIONSHIP\r\n   - Should feel like a tribute, a heartfelt moment, a private message\r\n   - \"Heart Of Gold\" works here \u2014 it describes a person's character\r\n   - \"She Carried Worlds\" works here\r\n   - DO NOT use room/space/vibe quotes for person queries\r\n\r\n2. SPACE/DECOR QUERIES (\"for my bedroom\", \"home decor\", \"office wall\", \"boho style\"):\r\n   - The quote is about the FEELING OF THE SPACE, not a person\r\n   - Should feel like the room itself has a personality\r\n   - \"Heart Of Gold\" does NOT work for a boho bedroom \u2014 it's a person quote\r\n   - \"Stay Wild Moon Child\" WORKS \u2014 it's a space/vibe quote\r\n   - \"Wander Often Wonder Always\" WORKS for boho\r\n   - \"Good Vibes Only\", \"Into The Wild\", \"Let It Be\" \u2014 space quotes\r\n   - NEVER suggest person tributes for room decor queries\r\n\r\nDETECT THE QUERY TYPE FIRST:\r\n- Contains person/relationship words (maa, dad, friend, boss, wife, etc.) \u2192 PERSON query\r\n- Contains space/room words (bedroom, office, living room, boho, minimal, cosy, etc.) \u2192 SPACE query\r\n- Mixed \u2192 lead with space quotes, add 1-2 person-flavoured ones\r\n\r\nGENERATE 6 QUOTES matching the right type.\r\nLANGUAGE: English only. Famous iconic phrases allowed.\r\nMax 4 lines, max 2 words per line, max 8 words total. No motivational poster language.\r\n\r\nReturn ONLY a JSON array of 6, no markdown:\r\n[{\"lines\":[\"word\",\"word\"],\"vibe\":\"boho\",\"src\":\"\",\"inch\":7,\"score\":9}]\r\n\r\ninch = letter count of longest line (no spaces). Single line +3, multi-line +2.`;\r\nconst LAYOUT_SYS = `You are the typography layout AI for NukkadTales \u2014 Indian handmade wooden tabletop decor.\r\nDecide how a quote is laid out as a hand-carved wooden piece.\r\n\r\nFONT: Use only \"main\" (Poppins 900) for all lines. No font mixing. No script/Pacifico.\r\n\r\nRULES:\r\n- Max 3 lines\r\n- Each line = one word only\r\n- marginTop between lines: always +4\r\n- letterSpacing: Title Case \u2192 \"-0.03em\" | ALL CAPS \u2192 \"-0.05em\"\r\n- Case: power nouns ALL CAPS (PAIN, GAIN, HOME, HUSTLE) | names and flowing words Title Case\r\n\r\nReturn ONLY valid JSON:\r\n{\"lines\":[{\"text\":\"No\",\"font\":\"main\",\"fontSize\":\"82px\",\"letterSpacing\":\"-0.03em\",\"marginTop\":0},{\"text\":\"Pain\",\"font\":\"main\",\"fontSize\":\"82px\",\"letterSpacing\":\"-0.03em\",\"marginTop\":4},{\"text\":\"GAIN\",\"font\":\"main\",\"fontSize\":\"82px\",\"letterSpacing\":\"-0.05em\",\"marginTop\":4}],\"notes\":\"one sentence\"}`;\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// STATE\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nconst C_DEFAULT=[\r\n  {n:'Dark Espresso',fc:'#3d2b1a',lt:0},{n:'Ivory White',fc:'#f2ece3',lt:1},\r\n];\r\n// All colours come from Theme Customiser \u2192 Nukkad Customiser \u2192 Custom colour blocks\r\nwindow._NT_HARDCODED_COLORS=[];\r\n// Merge with custom colors from section settings\r\nfunction ntGetColors(){\r\n  const custom=window.NT_CUSTOM_COLORS||[];\r\n  return custom.length?custom:[...C_DEFAULT];\r\n}\r\n// C is now a function call \u2014 always fresh with custom colors\r\n// All references to C_get(i) and C_map() work via ntGetColors()\r\nfunction C_get(i){return ntGetColors()[i]||C_DEFAULT[1];}\r\nfunction C_len(){return ntGetColors().length;}\r\nfunction C_map(fn){return ntGetColors().map(fn);}\r\nconst CONN=['no','an','my','aur','is','a','the','&','and','or','of','but','so'];\r\n\r\n\r\n\r\nlet selFont4='sans',namePos='below';\r\n\r\nfunction goBackFromRender(){\r\n  showSt('stageSugg');\r\n  {var _bb=document.getElementById('backBar');if(_bb)_bb.classList.remove('show');}\r\n  // reset state so old design doesn't leak into next pick\r\n  window.lineOpts=[];\r\n  window.s4NameLine='';\r\n  window.s4LineOpts=[];\r\n  selFont='sans';\r\n  ['sans','serif','script','hindi'].forEach(x=>{const el=document.getElementById('fo-'+x);if(el)el.classList.toggle('on',x==='sans');});\r\n  if(cachedSugg.length>0){\r\n    document.getElementById('suggGrid').innerHTML='';\r\n    renderBatch(cachedSugg.slice(0,shownCount||6));\r\n    document.getElementById('moreRow').style.display='flex';\r\n    document.getElementById('unlimitedTxt').style.display='block';\r\n  }\r\n  const _eb2=document.getElementById('ntEditorBody');if(_eb2)_eb2.scrollTop=0;\r\n}\r\n\r\nfunction setNamePos(pos){\r\n  namePos=pos;\r\n  ['above','below','woven'].forEach(p=>{\r\n    const el=document.getElementById('npos-'+p);\r\n    if(el)el.classList.toggle('on',p===pos);\r\n  });\r\n  renderS4();\r\n}\r\n\r\nfunction setFont4(f){\r\n  selFont4=f;\r\n  window._font4ManuallySet=true;\r\n  ['sans','serif','script'].forEach(x=>{const el=document.getElementById('fo4-'+x);if(el)el.classList.toggle('on',x===f);});\r\n  // Hide global Hindi button if present\r\n  const hindiBtn=document.getElementById('fo4-hindi');if(hindiBtn)hindiBtn.style.display='none';\r\n  // Clear per-line font overrides so global change takes effect on all chips\r\n  if(window.s4LineOpts)window.s4LineOpts.forEach(o=>{if(o){delete o.fontOverride;delete o.hindiText;}});\r\n  renderS4();renderS4LineChips();try{renderS4SizeBar();}catch(e){}\r\n}\r\nlet selC3=0,selC4=0,selFont='sans',selIcon4='';\r\n// Find first dark (non-light) color index for visible default\r\nfunction _ntDefaultColorIdx(){\r\n  var cols=ntGetColors();\r\n  for(var i=0;i<cols.length;i++){if(!cols[i].lt)return i;}\r\n  return 0;\r\n}\r\nlet uniformFs4=48,uniformFs999=48; // updated by renderS4/renderSimple each time\r\n\r\n// \u2500\u2500 Mantra/Shayari specific state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\nconst CM=[\r\n  {n:'Mantra Gold', bg:'#1e1408', fc:'#e8c84a'},\r\n  {n:'Deep Navy',   bg:'#1e3a5f', fc:'#f2ece3'},\r\n  {n:'Espresso',    bg:'#3d2b1a', fc:'#f2ece3'},\r\n  {n:'Charcoal',    bg:'#2a2a2a', fc:'#f2ece3'},\r\n  {n:'Forest',      bg:'#1a2e1a', fc:'#d4edda'},\r\n  {n:'Rosewood',    bg:'#3d1515', fc:'#f9e4e4'},\r\n];\r\nlet selCM=0, selMantraFont='sans';\r\n\r\nfunction renderMantraCrow(){\r\n  const crow=document.getElementById('mantraCrow');\r\n  if(!crow)return;\r\n  crow.innerHTML=CM.map((c,i)=>`<div class=\"nt-sw\" style=\"background:${c.bg};border:${i===selCM?'2.5px solid var(--orange)':'2px solid rgba(0,0,0,0.15)'};transform:${i===selCM?'scale(1.2)':'scale(1)'};\" title=\"${c.n}\" onclick=\"pickMantraColor(${i})\"></div>`).join('')\r\n    +`<span class=\"nt-cn\" style=\"color:var(--brown);\">${CM[selCM].n}</span>`;\r\n}\r\nfunction pickMantraColor(i){selCM=i;renderMantraCrow();renderMantraPreview();}\r\n\r\nfunction setMantraFont(f){\r\n  selMantraFont=f;\r\n  ['sans','serif','hindi'].forEach(x=>{const el=document.getElementById('mfo-'+x);if(el)el.classList.toggle('on',x===f);});\r\n  renderMantraPreview();\r\n}\r\n\r\nfunction renderMantraPreview(){\r\n  const bg=document.getElementById('mantraPieceBg');\r\n  if(!bg)return;\r\n  const cm=CM[selCM];\r\n  bg.style.background=cm.bg;\r\n  bg.innerHTML='';\r\n  if(!mantraLines||!mantraLines.length)return;\r\n  const piece=document.createElement('div');\r\n  piece.className='nt-piece';\r\n  const n=mantraLines.length;\r\n  const maxChars=Math.max(...mantraLines.map(l=>(l||'').length),1);\r\n  const baseSize=n<=2?26:n<=4?19:n<=6?15:12;\r\n  const charScale=Math.min(1,16/Math.max(maxChars,8));\r\n  const fs=Math.max(10,Math.round(baseSize*charScale));\r\n  const fontClass=selMantraFont==='serif'?'serif':selMantraFont==='hindi'?'hindi':'sans';\r\n  mantraLines.forEach((l,i)=>{\r\n    if(!l)return;\r\n    const sp=document.createElement('span');\r\n    sp.className='tl '+fontClass;\r\n    sp.style.color=cm.fc;\r\n    sp.style.fontSize=fs+'px';\r\n    sp.style.lineHeight=n<=2?'1.4':'1.55';\r\n    sp.style.letterSpacing=selMantraFont==='hindi'?'0.01em':'-0.01em';\r\n    sp.style.webkitTextStroke='none';\r\n    if(i>0)sp.style.marginTop='2px';\r\n    sp.textContent=l;\r\n    piece.appendChild(sp);\r\n  });\r\n  bg.appendChild(piece);\r\n}\r\n\r\n// Auto-scale font size so long lines never overflow the preview\r\nfunction calcLineFontSize(text, isScript, isHindi, baseMax){\r\n  // Use the actual preview container width if available, fallback to slider width\r\n  const container=document.getElementById('pieceBg')||document.getElementById('s4Bg');\r\n  let containerW=container?container.getBoundingClientRect().width:0;\r\n  // Fallback: use slider width - padding if container not yet laid out\r\n  if(!containerW){\r\n    const sl=document.getElementById('ntSl');\r\n    containerW=sl?sl.getBoundingClientRect().width:0;\r\n  }\r\n  if(!containerW) containerW=320; // absolute fallback\r\n  const vw=Math.min(window.innerWidth||375, 780);\r\n  const w=Math.max(200,(containerW||vw))-48; // subtract horizontal padding\r\n  const allChars=Math.max(1,(text||'').replace(/\\s+/g,'').length);\r\n  // include spaces in width estimate (spaces ~0.3 of charW)\r\n  const spaces=Math.max(0,(text||'').split(' ').length-1);\r\n  // Poppins Bold ~0.68em per char; Script ~0.58em; Hindi ~0.82em\r\n  const charW=isHindi?0.82:isScript?0.58:0.68;\r\n  const effectiveChars=allChars+spaces*0.3;\r\n  const max=baseMax||72;\r\n  const min=isHindi?20:16;\r\n  const fit=Math.floor(w/(effectiveChars*charW));\r\n  return Math.max(min,Math.min(max,fit));\r\n}\r\nlet s4Align='center',align999='center';\r\nlet budget=40,curLines=[],curPrice=999,isNamed=false,exactMode=false;\r\nlet c4used=0,histLines=[],cachedSugg=[],shownCount=0;\r\nlet exactLines=[],exactPrice=999;\r\nlet customSizeOverride=null;\r\nlet curQty=1;\r\n\r\nfunction adjustQtyS4(delta){\r\n  const el=document.getElementById('qtyCurrentS4');\r\n  if(!el)return;\r\n  const cur=parseInt(el.textContent)||1;\r\n  el.textContent=Math.max(1,cur+delta);\r\n}\r\n\r\nfunction adjustQty(delta){\r\n  curQty=Math.max(1,Math.min(50,curQty+delta));\r\n  const el=document.getElementById('qtyCurrent');if(el)el.textContent=curQty;\r\n  const el2=document.getElementById('qtyCurrentS4');if(el2)el2.textContent=curQty;\r\n} // customer-chosen size override\r\n\r\nconst MIN_INCH=6, MAX_INCH=24;\r\n\r\nfunction updateSizeDisplay(aiInch,isPersonal){\r\n  // update render stage size selector\r\n  const cur=customSizeOverride||aiInch;\r\n  const el=document.getElementById('sizeCurrent');\r\n  const warn=document.getElementById('sizeWarning');\r\n  if(el)el.textContent=cur;\r\n  const aiDisp2=document.getElementById('sizeAiDisplay');if(aiDisp2)aiDisp2.textContent=aiInch;\r\n  const aiLabel999=document.getElementById('aiLabelText999');\r\n  if(aiLabel999)aiLabel999.innerHTML=`\u2726 Nukkad AI suggested \u00B7 ${aiInch}\" minimum for better readability \u00B7 <span style=\"letter-spacing:.05em;color:#1e6b3a;\">GO BIGGER</span> for more impact.`;\r\n  const minusBtn=document.getElementById('sizeMinusBtn');\r\n  if(minusBtn){const atMin=(customSizeOverride===null);minusBtn.disabled=atMin;minusBtn.style.cssText=atMin?\"width:38px;height:38px;border-radius:50%;border:1.5px solid #e8e0d8;background:#fdf6f0;color:#ccc4bb;font-size:20px;font-weight:700;cursor:not-allowed;display:flex;align-items:center;justify-content:center;line-height:1;padding:0;margin:0;box-shadow:none;-webkit-appearance:none;appearance:none;\":\"width:38px;height:38px;border-radius:50%;border:1.5px solid #c8b09a;background:#fdf6f0;color:#3d2b1a;font-size:20px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1;padding:0;margin:0;box-shadow:none;-webkit-appearance:none;appearance:none;\";}\r\n  const extra2x=Math.max(0,cur-aiInch)*100;\r\n  if(warn){warn.style.display='none';}\r\n  // price increases above anchor: quote anchor = min(9, aiInch), personal anchor = 8\r\n  const base=isPersonal?1299:999;\r\n  const anchor=isPersonal?8:Math.min(9,aiInch);\r\n  const extra=Math.max(0,cur-anchor)*100;\r\n  const price=base+extra;\r\n  const btn=document.getElementById('commBtn');\r\n  if(btn)btn.textContent=`${(window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart'} \u00B7 \u20B9${price.toLocaleString('en-IN')}`;\r\n  curPrice=price;\r\n}\r\n\r\nfunction adjustSize(delta){\r\n  const {inch}=calcSizePrice(curLines,isNamed,window.lineOpts||[]);\r\n  const cur=customSizeOverride||inch;\r\n  const next=Math.max(inch,Math.min(MAX_INCH,cur+delta)); // min = AI suggested (\u22656\" for quotes)\r\n  customSizeOverride=next===inch?null:next; // null = back to AI default\r\n  updateSizeDisplay(inch,isNamed);\r\n}\r\n\r\nfunction updateSizeDisplayS4(aiInch){\r\n  aiInch = aiInch||6;\r\n  const cur=customSizeOverride||aiInch;\r\n  const el=document.getElementById('sizeCurrentS4');\r\n  const warn=document.getElementById('sizeWarningS4');\r\n  if(el)el.textContent=cur;\r\n\r\n  const aiDispS4=document.getElementById('sizeAiDisplayS4');if(aiDispS4)aiDispS4.textContent=aiInch;\r\n  // Update AI label with actual inch value\r\n  const _aiEl=document.getElementById('aiLabelTextS4');\r\n  if(_aiEl){\r\n    const _txt2=(window.NUKKAD_CONFIG&&NUKKAD_CONFIG.txt)||{};\r\n    const _aiBase='Nukkad AI suggested \u00B7 '+aiInch+'\" minimum for readability';\r\n    const _bigger=_txt2.goBigger||'GO BIGGER for more impact';\r\n    _aiEl.innerHTML='\u2726 '+_aiBase+' \u00B7 <span style=\"letter-spacing:.04em;color:#a8ffc4;\">'+_bigger+'</span>';\r\n  }\r\n  // Update place caption below stepper\r\n  const _descMap={6:'Compact \u00B7 gifting',7:'Desk or shelf',8:'Desk \u00B7 comfortable read',9:'Desk \u00B7 slightly bolder',10:'Sideboard or console',11:'Sideboard \u00B7 makes a statement',12:'Wall piece \u00B7 bold from a distance',13:'Wall piece \u00B7 strong anchor',14:'Large wall',15:'Statement wall piece',16:'Feature wall',18:'Gallery wall',20:'Large installation'};\r\n  const _captEl=document.getElementById('sizeInfoTextRenderS4');\r\n  if(_captEl)_captEl.textContent=_descMap[cur]||'Bold statement piece';\r\n  // Set minus button inline styles to beat Sense theme\r\n  const minusBtnS4=document.getElementById('sizeMinusBtnS4');\r\n  if(minusBtnS4){\r\n    const atMinS4=(customSizeOverride===null);\r\n    minusBtnS4.disabled=atMinS4;\r\n    minusBtnS4.style.cssText=atMinS4?'width:40px;height:40px;border-radius:50%;border:1.5px solid #e8e0d8;background:#fdf6f0;color:#ccc4bb;font-size:22px;font-weight:700;cursor:not-allowed;display:flex;align-items:center;justify-content:center;line-height:1;padding:0;margin:0;box-shadow:none;-webkit-appearance:none;appearance:none;flex-shrink:0;':'width:40px;height:40px;border-radius:50%;border:1.5px solid #c8b09a;background:#fdf6f0;color:#3d2b1a;font-size:22px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1;padding:0;margin:0;box-shadow:none;-webkit-appearance:none;appearance:none;transition:border-color .15s,color .15s;flex-shrink:0;';\r\n  }\r\n  if(warn)warn.style.display='none';\r\n\r\n  // Bug fix: count ALL lines (quote lines + name lines) for 4th line charge\r\n  const adjNameLines=(window.s4NameLines||[]).filter(Boolean);\r\n  const totalLines=curLines.length+adjNameLines.length;\r\n  const lineBase=totalLines>=4?1399:1299;\r\n  // \u2500\u2500 MATRIX PRICING FIX 1 (updateSizeDisplayS4) \u2500\u2500\r\n  const actualInch=Math.min(Math.max(cur,8),24);\r\n  const lineCount=Math.min(totalLines,4);\r\n  const price=typeof ntGetPrice==='function'?ntGetPrice(actualInch,lineCount):(lineBase+Math.max(0,cur-aiInch)*100);\r\n  const btn=document.getElementById('s4Btn');\r\n  if(btn)btn.textContent=`${(window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart'} \u00B7 \u20B9${price.toLocaleString(\"en-IN\")}`;\r\n  const dt=document.getElementById('designerToggle');\r\n  if(dt)dt.setAttribute('onclick',`toggleDesigner('designerToggle','s4Btn',${lineBase})`);\r\n}\r\n\r\nfunction adjustSizeS4(delta){\r\n  const adjNameLines=(window.s4NameLines||[]).filter(Boolean);\r\n  const allLines=[...curLines,...adjNameLines];\r\n  const adjOpts=[...(window.s4LineOpts||[]),...(window.s4NameLineOpts||[]).slice(0,adjNameLines.length)];\r\n  const {inch}=calcSizePrice(allLines,true,adjOpts);\r\n  const cur=customSizeOverride||inch;\r\n  const next=Math.max(inch,Math.min(MAX_INCH,cur+delta));\r\n  customSizeOverride=next===inch?null:next;\r\n  renderS4SizeBar(); // updates full breakdown + button\r\n  ntUpdatePersonalBtn();\r\n}\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// API\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nasync function callAI(model,system,userMsg,maxTok=1000){\r\n  const res=await fetch(PROXY_URL,{\r\n    method:'POST',\r\n    headers:{'Content-Type':'application/json'},\r\n    body:JSON.stringify({model,max_tokens:maxTok,system,messages:[{role:'user',content:userMsg}]})\r\n  });\r\n  if(!res.ok){const t=await res.text();throw new Error(`HTTP ${res.status}: ${t.slice(0,200)}`);}\r\n  const data=await res.json();\r\n  if(data.error)throw new Error(data.error.message||JSON.stringify(data.error));\r\n  return data.content.filter(b=>b.type==='text').map(b=>b.text).join('');\r\n}\r\n\r\n// Render a real Shopify product card (image + price)\r\nfunction ntMakeShopifyCard(product){\r\n  const el = document.createElement('div');\r\n  el.className = 'nt-shopify-card';\r\n\r\n  const img = product.images?.[0]?.src;\r\n  const minPrice = Math.min(...(product.variants||[]).map(v=>{\r\n    const p=parseFloat(v.price)||0;\r\n    return p>1000 ? p/100 : p; // suggest API returns cents as integer\r\n  }));\r\n  const priceStr = minPrice ? '\u20B9'+minPrice.toLocaleString('en-IN') : '';\r\n  const title = product.title || '';\r\n\r\n  if(img){\r\n    const imgEl = document.createElement('img');\r\n    imgEl.className = 'nt-shopify-img';\r\n    imgEl.src = img;\r\n    imgEl.alt = title;\r\n    imgEl.loading = 'lazy';\r\n    el.appendChild(imgEl);\r\n  } else {\r\n    const ph = document.createElement('div');\r\n    ph.className = 'nt-shopify-img-placeholder';\r\n    ph.innerHTML = `<span style=\"font-weight:900;font-size:13px;color:var(--muted);text-align:center;padding:8px;\">${title}</span>`;\r\n    el.appendChild(ph);\r\n  }\r\n\r\n  const body = document.createElement('div');\r\n  body.className = 'nt-shopify-body';\r\n  body.innerHTML =\r\n    `<div class=\"nt-shopify-title\">${title}</div>` +\r\n    (priceStr ? `<div class=\"nt-shopify-price\">${priceStr}</div>` : '') +\r\n    `<div class=\"nt-shopify-meta\">Ships 2\u20133 days \u00B7 In stock</div>`;\r\n  el.appendChild(body);\r\n\r\n  el.onclick = () => window.open(`https://nukkadtales.com/products/${product.handle}`, '_blank');\r\n  return el;\r\n}\r\n\r\nasync function callSearchAI(query){\r\n  const providers = [\r\n    {name:'GPT-4o Mini',  url:GPT_SUGG_URL,     body:{system:SEARCH_SYS,messages:[{role:'user',content:`Query: \"${query}\"`}],max_tokens:1000}},\r\n    {name:'Gemini',       url:GEMINI_SUGG_URL,   body:{system:SEARCH_SYS,messages:[{role:'user',content:`Query: \"${query}\"`}],max_tokens:2000}},\r\n    {name:'Claude Haiku', url:SEARCH_PROXY_URL,  body:{model:'claude-haiku-4-5-20251001',max_tokens:1200,system:SEARCH_SYS,messages:[{role:'user',content:`Query: \"${query}\"`}]}}\r\n  ];\r\n  for(const p of providers){\r\n    try{\r\n      const res=await fetch(p.url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(p.body)});\r\n      if(!res.ok) throw new Error('HTTP '+res.status);\r\n      const data=await res.json();\r\n      if(data.error) throw new Error(data.error.message||'API error');\r\n      const raw=data.content.filter(b=>b.type==='text').map(b=>b.text).join('');\r\n      const cleaned=raw.replace(/```json|```/g,'').replace(/[\\u0000-\\u001F\\u007F]/g,' ').replace(/,(\\s*[}\\]])/g,'$1').trim();\r\n      const match=cleaned.match(/\\[[\\s\\S]*\\]/);\r\n      if(!match) throw new Error('No JSON array');\r\n      const cards=JSON.parse(match[0]);\r\n      if(!Array.isArray(cards)||!cards.length) throw new Error('Empty array');\r\n      console.log('[NukkadAI]',p.name,'| cards:',cards.length);\r\n      return cards;\r\n    }catch(e){\r\n      console.warn('[NukkadAI]',p.name,'failed:',e.message,'\u2014 trying next...');\r\n    }\r\n  }\r\n  return [];\r\n}\r\n\r\nasync function classifyIntent(query){\r\n  try{\r\n    const raw=await callAI(MODEL_SUGG,CLASSIFY_SYS,query,20);\r\n    const r=raw.trim().toLowerCase();\r\n    if(r.includes('mantra'))return 'mantra';\r\n    if(r.includes('personal'))return 'personal';\r\n    return 'quote';\r\n  }catch(e){\r\n    return quickDetect(query)?'personal':'quote';\r\n  }\r\n}\r\n\r\nasync function fetchSuggestions(query,count=6,named=false){\r\n  let sys,userMsg;\r\n  if(named==='couple'){\r\n    sys=SUGG_SYS_COUPLE;\r\n    userMsg=`Generate ${count} couple name suggestions for: \"${query}\". Extract the two names. Return compact single-line JSON only.`;\r\n  } else if(named){\r\n    sys=SUGG_SYS_PERSONAL;\r\n    userMsg=`Generate ${count} personalised suggestions for: \"${query}\". Use actual names from input. Return compact single-line JSON only.`;\r\n  } else {\r\n    sys=SUGG_SYS_QUOTE;\r\n    userMsg=`Generate ${count} quote suggestions for: \"${query}\". Return compact single-line JSON only.`;\r\n  }\r\n  const raw=await callAI(MODEL_SUGG,sys,userMsg,3000);\r\n  console.log('[NukkadAI] Raw response:',raw.slice(0,500));\r\n  const clean=raw.replace(/[\\u{1F000}-\\u{1FFFF}]/gu,'').replace(/[\\u{2600}-\\u{26FF}]/gu,'').replace(/```json|```/g,'').trim();\r\n  const start=clean.indexOf('{'); const end=clean.lastIndexOf('}');\r\n  if(start===-1||end===-1){console.warn('[NukkadAI] No JSON in:',raw.slice(0,300));throw new Error('No JSON found in AI response');}\r\n  const match=[clean.slice(start,end+1)];\r\n  let jsonStr=match[0].replace(/,\\s*([}\\]])/g,'$1');\r\n  // try to recover truncated JSON by closing open structures\r\n  try{\r\n    const quotes=JSON.parse(jsonStr).quotes;\r\n    // post-process each suggestion\r\n    return quotes.map(q=>{\r\n      const rawLines=q.lines||[];\r\n      // split any multi-word line elements\r\n      const splitLines=[];\r\n      rawLines.forEach(l=>{\r\n        // also split camelCase \u2014 \"StillGrowing\" \u2192 [\"Still\",\"Growing\"]\r\n        const de\u0421amel=l.replace(/([a-z])([A-Z])/g,'$1 $2');\r\n        const words=(de\u0421amel||'').trim().split(/\\s+/).filter(Boolean);\r\n        if(words.length<=1){\r\n          splitLines.push(l);\r\n        } else {\r\n          const lettersOnly=l.replace(/\\s/g,'').length;\r\n          if(words.length===2&&lettersOnly<=4){splitLines.push(de\u0421amel);}\r\n          else{words.forEach(w=>splitLines.push(w));}\r\n        }\r\n      });\r\n      const finalLines=splitLines.slice(0,4).filter(Boolean);\r\n      // filter garbage suggestions \u2014 loosen for personal/Hindi\r\n      const maxLen=(named===true||named==='couple')?18:12;\r\n      const tooLong=finalLines.some(l=>l.replace(/\\s/g,'').length>maxLen);\r\n      if(tooLong)return null;\r\n      // always use isNamed for personal, not just named param\r\n      const {inch,price}=calcSizePrice(finalLines,named,[]);\r\n      return {...q,lines:finalLines,inch,price,upgrade:inch>9};\r\n    }).filter(Boolean);\r\n  }catch(e){\r\n    // attempt recovery: find last complete quote object\r\n    try{\r\n      const quotesMatch=jsonStr.match(/\"quotes\"\\s*:\\s*\\[([\\s\\S]*)/);\r\n      if(quotesMatch){\r\n        const items=quotesMatch[1].match(/\\{[^{}]*\"lines\"[^{}]*\\}/g)||[];\r\n        if(items.length>0){\r\n          const recovered=items.map(item=>{try{\r\n            const q=JSON.parse(item);\r\n            const {inch,price}=calcSizePrice(q.lines||[],named,[]);\r\n            return {...q,inch,price,upgrade:inch>9};\r\n          }catch{return null;}}).filter(Boolean);\r\n          if(recovered.length>0)return recovered;\r\n        }\r\n      }\r\n    }catch{}\r\n    console.error('[JSON parse error]',e.message,'\\nRaw:',raw.slice(0,300));\r\n    throw new Error(`AI returned malformed JSON: ${e.message}`);\r\n  }\r\n}\r\n\r\n\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// HELPERS\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nfunction isSc(w){return CONN.includes(w.toLowerCase().trim())&&w.length<=5;}\r\n\r\n// Detect if text contains Devanagari script\r\nfunction isDevanagari(text){\r\n  return /[\u0900-\u097F]/.test(text||'');\r\n}\r\n\r\nfunction autoDetectHindi(lines, opts){\r\n  // Hindi font removed \u2014 users type Devanagari directly, size calc handles it via countAnyScript\r\n  return false;\r\n}\r\nfunction showError(title,sub){\r\n  const e=document.getElementById('errBox');\r\n  document.getElementById('errTitle').textContent=title;\r\n  document.getElementById('errSub').textContent=sub;\r\n  e.style.display='block';\r\n}\r\nfunction hideError(){document.getElementById('errBox').style.display='none';}\r\nfunction setLoading(on,txt){\r\n  document.getElementById('suggLoading').style.display=on?'block':'none';\r\n  if(txt)document.getElementById('ltxt').textContent=txt;\r\n}\r\nfunction showSt(id){\r\n  if(typeof goToEditorScreen==='function'&&(id==='stageRender'||id==='stagePersonal'||id==='stageMantra'))goToEditorScreen();\r\n  if(typeof goToSearchScreen==='function'&&(id==='stageEmpty'||id==='stageSugg'))goToSearchScreen();\r\n  const bc=document.getElementById('blankCanvas');if(bc)bc.style.display=(id==='stageEmpty')?'block':'none';\r\n  const inDesign=id==='stagePersonal'||id==='stageRender';\r\n  const heroH=document.getElementById('heroHeadline');if(heroH)heroH.style.display=inDesign?'none':'';\r\n  const heroS=document.getElementById('heroSection');if(heroS)heroS.style.display=inDesign?'none':'';\r\n  const designNav=document.getElementById('designNav');if(designNav)designNav.style.display=inDesign?'flex':'none';\r\n  const chipsArea=document.querySelector('.nt-sticky .nt-chips');if(chipsArea)chipsArea.parentElement.style.display=(id==='stageEmpty')?'block':'none';\r\n  ['stageEmpty','stageSugg','stageRender','stagePersonal','stageMantra'].forEach(s=>{\r\n    var _s=document.getElementById(s);if(_s)_s.style.display=s===id?'block':'none';\r\n  });\r\n  // hide back bar when going to suggestions or empty\r\n  if(id==='stageSugg'||id==='stageEmpty'){var _bb=document.getElementById('backBar');if(_bb)_bb.classList.remove('show');}document.body.classList.remove('has-backbar');\r\n}\r\nfunction quickDetect(q){\r\n  if(!q)return false;\r\n  if(/\\w+\\s*&\\s*\\w+/.test(q))return true;\r\n  if(/\\b(dr|mr|mrs|ms|prof)\\b/i.test(q))return true;\r\n  return false;\r\n}\r\nfunction isCouple(q){\r\n  const ql=q.toLowerCase();\r\n  if(/\\b(couple|husband|wife|anniversary|wedding|shaadi|jodi)\\b/.test(ql))return true;\r\n  // two capitalised names: \"Rahul Priya\", \"Rahul and Priya\"\r\n  const names=q.match(/[A-Z][a-z]{2,}/g)||[];\r\n  if(names.length>=2)return true;\r\n  return false;\r\n}\r\n\r\nconst VAGUE_PERSONAL=[\"customise name\",\"customize name\",\"add name\",\"personalise\",\"personalize\",\"with name\",\"custom name\"];\r\nconst VAGUE_GENERIC=[\"custom design\",\"custom\",\"design\",\"something\",\"a piece\",\"wooden\",\"gift\",\"quote\",\"anything\"];\r\n\r\nfunction detectVague(q){\r\n  const ql=q.toLowerCase().trim();\r\n  const words=ql.split(/\\s+/);\r\n  // very short or generic single words\r\n  if(words.length<=2&&VAGUE_GENERIC.some(v=>ql===v||ql.startsWith(v)))return'generic';\r\n  if(VAGUE_PERSONAL.some(v=>ql.includes(v)))return'name';\r\n  if([\"for my boss\",\"for my friend\",\"for my colleague\",\"for my wife\",\"for my husband\",\"for my mom\",\"for my dad\",\"for my sister\",\"for my brother\",\"for someone\"].some(v=>ql.includes(v))&&!/[A-Z][a-z]{2,}/.test(q))return'relation';\r\n  if(words.length<=2&&[\"boss\",\"friend\",\"wife\",\"husband\",\"colleague\",\"teacher\",\"mom\",\"dad\",\"sister\",\"brother\"].some(w=>ql===w||ql.includes(\"for \"+w)||ql.includes(\"my \"+w)))return'relation';\r\n  return null;\r\n}\r\nfunction setChip(v){var _mi=document.getElementById('mainInp');if(_mi)_mi.value=v;doCreate();}\r\nfunction scrollToInput(){window.scrollTo({top:0,behavior:'smooth'});setTimeout(()=>{var _mi=document.getElementById('mainInp');if(_mi)_mi.focus();},400);}\r\n\r\nfunction toggleExact(){\r\n  exactMode=!exactMode;\r\n  var _ec=document.getElementById('exactChk');if(_ec)_ec.classList.toggle('on',exactMode);\r\n  const wrap=document.getElementById('exactPillWrap');\r\n  const dot=document.getElementById('exactPillDot');\r\n  const txt=document.getElementById('exactPillTxt');\r\n  if(exactMode){\r\n    wrap.classList.add('on');\r\n    dot.style.background='var(--teal)';dot.style.borderColor='var(--teal)';\r\n    dot.innerHTML='<span style=\"font-size:9px;color:#fff;font-weight:700;\">\u2713</span>';\r\n    txt.textContent='Exact match on \u2713';txt.style.color='var(--teal)';\r\n  }else{\r\n    wrap.classList.remove('on');\r\n    dot.style.background='transparent';dot.style.borderColor='rgba(42,172,142,0.6)';\r\n    dot.innerHTML='';\r\n    txt.textContent='Carve exactly what I typed';txt.style.color='rgba(255,255,255,0.8)';\r\n  }\r\n  renderExactCard();\r\n}\r\nfunction renderExactCard(){\r\n  var _mainEl=document.getElementById('mainInp');const v=_mainEl?_mainEl.value.trim():'';\r\n  const card=document.getElementById('exactCard');\r\n  const divider=document.getElementById('exactDivider');\r\n  if(!exactMode||!v){card.style.display='none';if(divider)divider.style.display='none';const tb3=document.getElementById('tierBadge');if(tb3)tb3.style.display='';return;}\r\n  if(divider)divider.style.display='flex';\r\n  const tb2=document.getElementById('tierBadge');if(tb2)tb2.style.display='none';\r\n  // split by word \u2014 each word = one line\r\n  const words=v.split(/\\s+/).filter(Boolean);\r\n  const lines=words.length>1?words:[v]; // single word stays as-is\r\n  exactLines=lines;\r\n  // show card immediately with lines but block interaction until AI confirms price\r\n  document.getElementById('exactCardLines').innerHTML=lines.map(l=>`<span class=\"nec-line\">${l}</span>`).join('');\r\n  document.getElementById('exactCardMeta').textContent='checking price\u2026';\r\n  card.style.display='block';\r\n  card.style.pointerEvents='none';\r\n  card.style.opacity='0.65';\r\n  classifyIntent(v).then(intent=>{\r\n    const personal=intent==='personal';\r\n    isNamed=personal;\r\n    const {inch,price:ep}=calcSizePrice(lines,personal,[]);\r\n    exactPrice=ep;\r\n    const anchor=personal?8:Math.min(9,inch);\r\n    const extra=Math.max(0,inch-anchor)*100;\r\n    const base=personal?1299:999;\r\n    const meta=extra>0?`${inch}\" \u00B7 \u20B9${base} + \u20B9${extra} for size`:`${inch}\" \u00B7 \u20B9${base}`;\r\n    document.getElementById('exactCardMeta').textContent=meta;\r\n    card.style.pointerEvents='';\r\n    card.style.opacity='1';\r\n  }).catch(()=>{\r\n    // fallback to quickDetect if AI fails\r\n    const personal=quickDetect(v);\r\n    isNamed=personal;\r\n    const {inch,price:ep}=calcSizePrice(lines,personal,[]);\r\n    exactPrice=ep;\r\n    const anchor=personal?8:Math.min(9,inch);\r\n    const extra=Math.max(0,inch-anchor)*100;\r\n    const base=personal?1299:999;\r\n    document.getElementById('exactCardMeta').textContent=extra>0?`${inch}\" \u00B7 \u20B9${base} + \u20B9${extra} for size`:`${inch}\" \u00B7 \u20B9${base}`;\r\n    card.style.pointerEvents='';\r\n    card.style.opacity='1';\r\n  });\r\n}\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// MAIN CREATE\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nasync function doCreate(){\r\n  var _mainEl2=document.getElementById('mainInp');const q=_mainEl2?_mainEl2.value.trim():'';\r\n  if(!q)return;\r\n  // exactMode: show exact card as pinned first option + AI suggestions below\r\n  // (no skip \u2014 let AI run and show exact card prominently)\r\n  cachedSugg=[];shownCount=0;_paletteIdx=0;// clear layout cache so new prompt applies\r\n  document.getElementById('suggGrid').innerHTML='';\r\n  document.getElementById('moreRow').style.display='none';\r\n  document.getElementById('historyWrap').style.display='none';\r\n  hideError();renderExactCard();\r\n  showSt('stageSugg');\r\n  const _nc=document.getElementById('ntEditorBody');if(_nc)_nc.scrollTop=0;\r\n  setLoading(true,'Nukkad AI is reading your input\u2026');\r\n  try{\r\n    // classify intent\r\n    const intent=await classifyIntent(q);\r\n    isNamed=intent==='personal';\r\n    const tb=document.getElementById('tierBadge');if(tb)tb.classList.add('show');\r\n    // handle mantra intent \u2014 go direct to stageMantra\r\n    if(intent==='mantra'){\r\n      setLoading(false);\r\n      const isComplete=q.length>=100;\r\n      const mantraPrice=isComplete?3299:2299;\r\n      document.getElementById('tbPrice').textContent=`\u20B9${mantraPrice.toLocaleString('en-IN')}`;\r\n      const _tbr=document.getElementById('tbReason');if(_tbr)_tbr.textContent=isComplete?'Full Mantra \u00B7 \u20B93,299':'Shayari \u00B7 \u20B92,299';\r\n      goMantra(q,mantraPrice);\r\n      return;\r\n    }\r\n    document.getElementById('tbPrice').textContent=isNamed?'\u20B91,299':'\u20B9999';\r\n    const _tbr=document.getElementById('tbReason');if(_tbr)_tbr.textContent=isNamed?'Personalised piece':'Quote piece';\r\n    setLoading(true,'Finding the best ideas for you\u2026');\r\n    // detect vague query\r\n    const vagueType=detectVague(q);\r\n    const vagueNudge=document.getElementById('vagueNudge');\r\n    vagueNudge.style.display='none';\r\n\r\n    // generic vague query \u2014 show refine prompt, skip AI\r\n    if(vagueType==='generic'){\r\n      setLoading(false);\r\n      document.getElementById('unlimitedTxt').style.display='none';\r\n      vagueNudge.style.display='block';\r\n      document.getElementById('vagueTitle').textContent='What exactly do you want on it?';\r\n      document.getElementById('vagueSub').innerHTML='Be specific \u2014 a quote, a name, a feeling. Like <span style=\"color:var(--orange);font-weight:500;\">\"No Pain No Gain\"</span> or <span style=\"color:var(--orange);font-weight:500;\">\"for my boss Nidhi\"</span> or <span style=\"color:var(--orange);font-weight:500;\">\"something for a chai lover\"</span>.';\r\n      document.getElementById('suggGrid').innerHTML='';\r\n      document.getElementById('moreRow').style.display='none';\r\n      return;\r\n    }\r\n    // for vague name queries use sample name for personal suggestions\r\n    const effectiveQuery=vagueType==='name'?q+' \u2014 sample names Rahul & Priya':q;\r\n    let quoteSuggs=[];\r\n    let personalSuggs=[];\r\n    let _suggErr=null;\r\n    const coupleMode=isNamed&&isCouple(q);\r\n    if(coupleMode){\r\n      try{personalSuggs=await fetchSuggestions(effectiveQuery,6,'couple');}\r\n      catch(e){_suggErr=e;console.error('[Couple suggs failed]',e.message);}\r\n    } else if(isNamed||vagueType==='name'){\r\n      try{personalSuggs=await fetchSuggestions(effectiveQuery,6,true);}\r\n      catch(e){_suggErr=e;console.error('[Personal suggs failed]',e.message);}\r\n    } else {\r\n      try{quoteSuggs=await fetchSuggestions(effectiveQuery,6,false);}\r\n      catch(e){_suggErr=e;console.error('[Quote suggs failed]',e.message);}\r\n    }\r\n    if(quoteSuggs.length===0&&personalSuggs.length===0){\r\n      if(exactMode&&exactLines.length>0){\r\n        setLoading(false);\r\n        document.getElementById('unlimitedTxt').style.display='none';\r\n        return;\r\n      }\r\n      // API responded but JSON parse failed \u2014 show meaningful error\r\n      setLoading(false);\r\n      showError('AI returned no suggestions','The AI responded but couldn\\'t be parsed. Check the browser console (F12) for the raw response. Try rephrasing \u2014 e.g. \\\"gym motivation for Rahul\\\".');\r\n      return;\r\n    }\r\n    const allSuggs=[...quoteSuggs,...personalSuggs];\r\n    const seen=new Set();\r\n    cachedSugg=allSuggs.filter(s=>{const k=(s.lines||s.ls||[]).join('|');if(seen.has(k))return false;seen.add(k);return true;});\r\n    renderBatch(cachedSugg.slice(0,6));\r\n    shownCount=6;budget-=6;updBudget();\r\n    // show unlimited text\r\n    document.getElementById('unlimitedTxt').style.display='block';\r\n    // show vague nudge if needed\r\n    if(vagueType){\r\n      const nudge=document.getElementById('vagueNudge');\r\n      nudge.style.display='block';\r\n      if(vagueType==='name'){\r\n        document.getElementById('vagueTitle').textContent='These are sample designs with a placeholder name';\r\n        document.getElementById('vagueSub').innerHTML='Type the actual name you want \u2014 like <span style=\"color:var(--orange);font-weight:500;\">\"Rahul\" or \"Priya & Arjun\"</span> \u2014 and AI will personalise it.';\r\n      } else {\r\n        document.getElementById('vagueTitle').textContent='Want something more personal?';\r\n        document.getElementById('vagueSub').innerHTML='Add a specific name or detail \u2014 like <span style=\"color:var(--orange);font-weight:500;\">\"my boss Nidhi\" or \"for Rahul who loves chai\"</span> \u2014 for better results.';\r\n      }\r\n    }\r\n    setLoading(false);\r\n  }catch(err){\r\n    setLoading(false);\r\n    let errTitle='Could not reach Nukkad AI';\r\n    let errMsg=err.message;\r\n    if(err.message==='Failed to fetch'||err.message.includes('NetworkError')||err.message.includes('CORS')){\r\n      errTitle='CORS / Network error';\r\n      errMsg='Opening from file:// blocks the API call. Host this file on Netlify or run a local server (e.g. VS Code Live Server). Raw error: '+err.message;\r\n    } else if(err.message.includes('401')){\r\n      errTitle='API key missing';\r\n      errMsg='ANTHROPIC_API_KEY is not set in Netlify env vars, or the function is not deployed.';\r\n    } else if(err.message.includes('403')){\r\n      errTitle='Access denied (403)';\r\n      errMsg='The function rejected this origin. Check the allowlist in nt-ai.js. Raw: '+err.message;\r\n    } else if(err.message.includes('HTTP')){\r\n      errTitle='Function error';\r\n      errMsg=err.message;\r\n    }\r\n    showError(errTitle,errMsg);\r\n    console.error('[NukkadAI]',err);\r\n  }\r\n}\r\n\r\nlet _paletteIdx=0; // unused but kept for compat\r\n\r\nfunction renderBatch(suggs){\r\n  const g=document.getElementById('suggGrid');\r\n  g.className='nt-grid';\r\n  suggs.forEach(s=>{\r\n    const lines=[...(s.lines||s.ls||[])];\r\n    const price=s.price||s.pr||999;\r\n    const inch=s.inch||8;\r\n\r\n    const card=document.createElement('div');\r\n    card.className='nt-scard';\r\n\r\n    card.onclick=()=>{\r\n      if(lines.some(l=>l.includes('NAME'))){\r\n        curLines=[...lines];curPrice=price;isNamed=true;goPersonal();\r\n      } else {\r\n        goRender([...lines],price);\r\n      }\r\n    };\r\n\r\n    // text block \u2014 each line is one word, stacked\r\n    const lh=lines.map(l=>`<span class=\"nscl ${isSc(l)?'sc':'m'}\">${l}</span>`).join('');\r\n    const uh=s.upgrade?`<span class=\"nscup\">\u2191 size up</span> \u00B7 `:'';\r\n    const priceStr=`${inch}\" \u00B7 <span class=\"nscprice\">\u20B9${price.toLocaleString('en-IN')}</span>`;\r\n\r\n    card.innerHTML=`\r\n      <div style=\"margin-bottom:6px;\">${lh}</div>\r\n      <div class=\"nscmeta\">${uh}${priceStr}</div>\r\n      <button class=\"nt-more-like\" onclick=\"event.stopPropagation();moreCards('${encodeURIComponent(lines.join('|'))}')\">more like these \u2192</button>\r\n    `;\r\n\r\n    g.appendChild(card);\r\n  });\r\n  document.getElementById('moreRow').style.display='flex';\r\n}\r\n\r\nfunction moreCards(encoded){\r\n  const lines=decodeURIComponent(encoded).split('|');\r\n  var _mainEl2=document.getElementById('mainInp');const q=_mainEl2?_mainEl2.value.trim():'';\r\n  const inp=document.getElementById('mainInp')||{value:'',focus:()=>{}};\r\n  // for couple mode \u2014 keep original query, just ask for more variety\r\n  if(isCouple(q)&&isNamed){\r\n    showMore();\r\n  } else {\r\n    inp.value=lines.join(' ')+' \u2014 more like this';\r\n    inp.focus();\r\n    doCreate();\r\n  }\r\n}\r\n\r\nfunction updBudget(){\r\n  const n=document.getElementById('budgetNum');\r\n  if(n){n.textContent=Math.max(0,budget);n.className='nb-num'+(budget<=4?' low':'');}\r\n  const rem=cachedSugg.length-shownCount;\r\n  const mb=document.getElementById('moreBtn');\r\n  const main=document.getElementById('moreBtnMain');\r\n  const sub=document.getElementById('moreBtnSub');\r\n  if(budget<=0){\r\n    mb.disabled=false;\r\n    main.textContent='Generate 10 more ideas';\r\n    sub.textContent='You\\'ve seen a lot \u2014 here\\'s a fresh batch';\r\n    mb.onclick=()=>{budget+=10;updBudget();showMore();};\r\n  } else if(rem>0){\r\n    mb.disabled=false;mb.onclick=showMore;\r\n    main.textContent=`Show ${Math.min(4,rem)} more ideas`;\r\n    sub.textContent=`${budget} left this session`;\r\n  } else {\r\n    mb.disabled=false;mb.onclick=showMore;\r\n    main.textContent='Generate 4 more ideas';\r\n    sub.textContent=`${budget} left this session`;\r\n  }\r\n}\r\n\r\nasync function showMore(){\r\n  const rem=cachedSugg.slice(shownCount,shownCount+4);\r\n  if(rem.length>0){\r\n    renderBatch(rem);shownCount+=rem.length;budget-=rem.length;updBudget();\r\n  } else if(budget>0){\r\n    var _mainEl2=document.getElementById('mainInp');const q=_mainEl2?_mainEl2.value.trim():'';\r\n    setLoading(true,'Fetching more\u2026');\r\n    try{\r\n      const more=await fetchSuggestions(q,6,isNamed);\r\n      // deduplicate against already shown\r\n      const seen=new Set(cachedSugg.map(s=>(s.lines||s.ls||[]).join('|')));\r\n      const fresh=more.filter(s=>!seen.has((s.lines||s.ls||[]).join('|')));\r\n      cachedSugg=[...cachedSugg,...fresh];\r\n      renderBatch(fresh);shownCount+=fresh.length;budget-=fresh.length;\r\n      setLoading(false);updBudget();\r\n    }catch(e){setLoading(false);showError('Could not fetch more',e.message);}\r\n  }\r\n}\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// RENDER\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nasync function goRender(lines,price){\r\n  if(curLines.length>0)histLines.push({ls:[...curLines],pr:curPrice});\r\n  // ensure each line element is a single word \u2014 split any multi-word elements\r\n  const cleanLines=[];\r\n  lines.forEach(l=>{\r\n    const words=(l||'').trim().split(/\\s+/).filter(Boolean);\r\n    if(words.length<=1||l.replace(/\\s/g,'').length<=4){cleanLines.push(l);}\r\n    else{words.forEach(w=>cleanLines.push(w));}\r\n  });\r\n  curLines=cleanLines.length>0?cleanLines:lines;\r\n  curPrice=price;\r\n  isNamed=price>=1299;\r\n  window.lineOpts=curLines.map(()=>({font:''}));\r\n  customSizeOverride=null;\r\n  curQty=1;\r\n  window._fontManuallySet=false;\r\n  // Reset icon on letter for new design\r\n  window.ntLetterIcon={active:false,letter:'',line:0,charIdx:0,iconSrc:'',iconLabel:''};\r\n  if(typeof ntRefreshIconLetterRow==='function') ntRefreshIconLetterRow(); // reset on new design\r\n  // Auto-detect if customer typed in Devanagari directly\r\n  // Only auto-switch to Hindi if font is still at default (hasn't been manually changed)\r\n  autoDetectHindi(curLines, window.lineOpts);\r\n  if(histLines.length>0){\r\n    document.getElementById('historyWrap').style.display='block';\r\n    document.getElementById('historyScroll').innerHTML=histLines.map(h=>`<div class=\"nt-hcard\" onclick=\"goRender(${JSON.stringify(h.ls)},${h.pr})\"><div class=\"nhcl\">${h.ls.join(' ')}</div><div class=\"nhcm\">\u20B9${h.pr}</div></div>`).join('');\r\n  }\r\n  if(isNamed){\r\n    // \u20B91,299 \u2014 go to personal stage\r\n    selC4=selC3;\r\n    selFont4=selFont||'sans';\r\n    window.s4NameLine='';\r\n    window.s4NameLines=[''];\r\n    window.s4NameLineOpts=[{}];\r\n    window.s4LineOpts=curLines.map(()=>({}));\r\n    window.s4NameFontOpts={};\r\n    selIcon4='';s4Align='center';\r\n    customSizeOverride=null;\r\n    originalCurLines=[...curLines];\r\n    initS4();\r\n  } else {\r\n    // \u20B9999 \u2014 go to render stage\r\n    showSt('stageRender');\r\n    {var _bb=document.getElementById('backBar');if(_bb)_bb.classList.add('show');}\r\n    {var _bbs=document.getElementById('backBarStage');if(_bbs)_bbs.textContent='\u20B9999 design';}\r\n    selFont='sans';\r\n    ['sans','serif','script'].forEach(x=>{const el=document.getElementById('fo-'+x);if(el)el.classList.toggle('on',x==='sans');});\r\n    try{renderSimple();}catch(e){console.error('[renderSimple crash]',e.message,e.stack);}\r\n    try{renderC3();}catch(e){console.error('[renderC3 crash]',e.message);}\r\n    try{renderPuThumb();}catch(e){console.error('[renderPuThumb crash]',e.message);}\r\n    const puEl=document.getElementById('puRow');\r\n    if(puEl){puEl.style.display='flex';puEl.style.visibility='visible';puEl.style.height='96px';puEl.style.margin='';puEl.style.overflow='hidden';puEl.style.border='1px solid var(--border)';}\r\n    document.getElementById('commBtn').textContent=`${(window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart'} \u00B7 \u20B9${price}`;\r\n    // open reorder panel\r\n    const wrap=document.getElementById('lineReorderWrap');\r\n    if(wrap)wrap.style.display='block';\r\n    try{renderLineChips();}catch(e){console.error('renderLineChips',e);}\r\n    try{renderSizeBar();}catch(e){console.error('renderSizeBar',e);}\r\n  }\r\n  // if no cached suggestions yet (came via exact card), fetch some\r\n  if(cachedSugg.length===0){\r\n    var _mainEl2=document.getElementById('mainInp');const q=_mainEl2?_mainEl2.value.trim():'';\r\n    if(q)fetchSuggestions(q,3,false).then(s=>{cachedSugg=[...s];renderTry();}).catch(()=>{});\r\n  } else {\r\n    renderTry();\r\n  }\r\n  // Scroll editor body to top (not page \u2014 we're in a slider)\r\n  const _eb=document.getElementById('ntEditorBody');if(_eb)_eb.scrollTop=0;\r\n}\r\n\r\nfunction useExact(){\r\n  const q=(exactLines||[]).join(' ');\r\n  isNamed=quickDetect(q);\r\n  const p=calcSizePrice(exactLines,isNamed,[]).price;\r\n  goRender(exactLines,p);\r\n}\r\n\r\n\r\n\r\nfunction renderSimple(){\r\n  try { _renderSimpleInner(); } catch(e){ console.error('[renderSimple CRASH]', e.message, e.stack); }\r\n}\r\nfunction _renderSimpleInner(){\r\n  const _allC3=ntGetColors();const c=_allC3[selC3]||_allC3[1];const p=document.createElement('div');p.className='nt-piece';\r\n  const block999=document.createElement('div');\r\n  block999.style.cssText='display:inline-flex;flex-direction:column;align-items:stretch;';\r\n  const lines=curLines.length>0?curLines:[''];\r\n  const effectiveFont=selFont;\r\n  const opts=window.lineOpts||[];\r\n  const isBottomLine=(i)=>i===lines.filter(l=>l).length-1;\r\n\r\n  // Pre-compute uniform font size = minimum across all non-wide lines\r\n  // Also build per-line font size map for icon-on-letter sizing\r\n  uniformFs999=72;\r\n  const perLineFontSize999=[];\r\n  lines.forEach((l,i)=>{\r\n    if(!l){perLineFontSize999.push(72);return;}\r\n    const opt2=window.lineOpts?window.lineOpts[i]||{}:{};\r\n    const lf2=opt2.fontOverride||selFont;\r\n    const isHindi2=lf2==='hindi';\r\n    const isCaps2=!!opt2.allCaps&&!isHindi2;\r\n    const dt2=isHindi2?(opt2.hindiText||l):(isCaps2?l.toUpperCase():l);\r\n    const isWide2=!!(opt2.wide&&ntWideEligible(i,lines));\r\n    const fs2=calcLineFontSize(dt2,lf2==='script',isHindi2,isWide2?96:72);\r\n    perLineFontSize999.push(fs2);\r\n    if(!isWide2&&fs2<uniformFs999)uniformFs999=fs2;\r\n  });\r\n\r\n  lines.forEach((l,i)=>{\r\n    if(!l)return;\r\n\r\n  // \u2500\u2500 ICON LINE: render at very top of block \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  try {\r\n  if(i===0 && window.ntIconLine && window.ntIconLine.active && window.ntIconLine.iconKey){\r\n    const il = window.ntIconLine;\r\n    const ilRow = document.createElement('div');\r\n    const ilJc = il.side==='left'?'flex-start':il.side==='right'?'flex-end':'center';\r\n    ilRow.style.cssText='display:flex;align-items:center;justify-content:'+ilJc+';padding-bottom:4px;';\r\n    const ilImg = document.createElement('img');\r\n    ilImg.src = il.iconKey; ilImg.alt='';\r\n    ilImg.style.cssText='width:'+uniformFs999+'px;height:'+uniformFs999+'px;object-fit:contain;display:block;transform:rotate('+il.rotation+'deg);';\r\n    ilRow.appendChild(ilImg);\r\n    block999.appendChild(ilRow);\r\n  }\r\n  } catch(e){ console.warn('[IconLine canvas]',e); }\r\n    const opt=opts[i]||{};\r\n    const lf=opt.fontOverride||selFont; // per-line override OR global font\r\n    const isHindi=lf==='hindi';\r\n    const isCaps=!!opt.allCaps&&!isHindi;\r\n    const displayText=isHindi?(opt.hindiText||l):(isCaps?l.toUpperCase():l);\r\n    const ls=isCaps?'-0.05em':isHindi?'0.01em':'-0.03em';\r\n\r\n    // global 999 icon row \u2014 left side (kept, not per-chip)\r\n    const lineAlign999=(opt.align||'center');\r\n    const jc=lineAlign999==='left'?'flex-start':lineAlign999==='right'?'flex-end':'center';\r\n    const row=document.createElement('div');\r\n    row.style.cssText='display:flex;align-items:baseline;justify-content:'+jc+';gap:8px;';\r\n    // per-line icon left side (uploaded)\r\n    if(opt.iconKey&&opt.iconSide!=='right'){\r\n      const ic=document.createElement('img');\r\n      ic.src=opt.iconKey;ic.alt='';\r\n      const _cis=Math.min(opt.iconSize||uniformFs999, uniformFs999);\r\n      const _cap=Math.round(_cis*0.82);\r\n      const _rot=opt.iconRotation||0;\r\n      ic.style.cssText='width:auto;height:'+_cap+'px;max-width:'+Math.round(_cap*1.8)+'px;object-fit:contain;flex-shrink:0;display:block;transform:rotate('+_rot+'deg);filter:'+ntIconFilter(c.fc||'#3d2b1a')+';';\r\n      row.appendChild(ic);\r\n    }\r\n\r\n    const sp=document.createElement('span');\r\n    sp.className='tl '+(isHindi?'hindi':lf==='serif'?'serif':lf==='script'?'script-main':'sans');\r\n    sp.style.color=c.fc;\r\n    sp.style.letterSpacing=ls;\r\n    sp.style.webkitTextStroke='0.75px rgba(0,0,0,0.8)';sp.style.paintOrder='fill stroke';\r\n    sp.style.lineHeight='0.85';\r\n    // Wide line: use its per-line pre-calculated font size\r\n    const isWide = !!(opt.wide && ntWideEligible(i, lines));\r\n    const fs999 = isWide ? (perLineFontSize999[i]||uniformFs999) : uniformFs999;\r\n    sp.style.fontSize=fs999+'px';\r\n    if(i>0&&!opt.iconKey)sp.style.marginTop='4px';\r\n    // icon-only: if line is empty but has an icon, don't render text span\r\n    if(!displayText && opt.iconKey){ row.appendChild(sp); block999.appendChild(row); return; }\r\n    if(!displayText && !opt.iconKey) return; // skip empty line with no icon\r\n\r\n    // descender/matra check \u2014 bottom line only\r\n    const isBottom=isBottomLine(i);\r\n    if(isBottom&&isHindi){\r\n      const matraResult=checkHindiMatras(displayText);\r\n      if(matraResult==='shorten'){\r\n        sp.style.transform='scale(0.88) translateY(-4px)';\r\n        sp.style.transformOrigin='center bottom';\r\n        sp.style.display='inline-block';\r\n      }\r\n      sp.textContent=displayText;\r\n    } else if(isBottom&&!isCaps&&!isHindi){\r\n      const descResult=checkDescenders(displayText);\r\n      if(descResult==='shorten'){\r\n        applyDescenderFix(sp,displayText);\r\n      } else {\r\n        sp.textContent=displayText;\r\n      }\r\n    } else {\r\n      sp.textContent=displayText;\r\n    }\r\n\r\n    row.appendChild(sp);\r\n\r\n    // per-line icon right side (uploaded)\r\n    if(opt.iconKey&&opt.iconSide==='right'){\r\n      const ic=document.createElement('img');\r\n      ic.src=opt.iconKey;ic.alt='';\r\n      const _cis2=Math.min(opt.iconSize||uniformFs999, uniformFs999);\r\n      const _cap2=Math.round(_cis2*0.82);\r\n      const _rot2=opt.iconRotation||0;\r\n      ic.style.cssText='width:auto;height:'+_cap2+'px;max-width:'+Math.round(_cap2*1.8)+'px;object-fit:contain;flex-shrink:0;display:block;transform:rotate('+_rot2+'deg);filter:'+ntIconFilter(c.fc||'#3d2b1a')+';';\r\n      row.appendChild(ic);\r\n    }\r\n\r\n    block999.appendChild(row);\r\n  });\r\n  p.appendChild(block999);\r\n  const bg=document.getElementById('pieceBg');if(bg){bg.innerHTML='';bg.appendChild(p);}\r\n}\r\n\r\n\r\nfunction setFont(f){\r\n  selFont=f;\r\n  window._fontManuallySet=true;\r\n  ['sans','serif','script'].forEach(x=>{const el=document.getElementById('fo-'+x);if(el)el.classList.toggle('on',x===f);});\r\n  // Hide Hindi button and hint\r\n  var hindiBtn999=document.getElementById('fo-hindi');if(hindiBtn999)hindiBtn999.style.display='none';\r\n  var hint=document.getElementById('hindiHint');if(hint)hint.style.display='none';\r\n  var hintS4=document.getElementById('hindiHintS4');if(hintS4)hintS4.style.display='none';\r\n  // global font change clears all per-line font overrides\r\n  if(window.lineOpts)window.lineOpts.forEach(o=>{if(o){delete o.fontOverride;delete o.hindiText;}});\r\n  if(window.s4LineOpts)window.s4LineOpts.forEach(o=>{if(o){delete o.fontOverride;delete o.hindiText;}});\r\n  renderSimple();\r\n  if(document.getElementById('lineReorderWrap')&&document.getElementById('lineReorderWrap').style.display!=='none'){\r\n    renderLineChips();\r\n  }\r\n}\r\n\r\nfunction renderPuThumb(){\r\n  const t=document.getElementById('puThumb');if(!t)return;\r\n  t.style.background='#fff';\r\n  const allLines=[...curLines];\r\n  if(!isNamed) allLines.push('Rahul'); // preview name\r\n  const maxC=Math.max(...allLines.map(l=>(l||'').replace(/\\s/g,'').length),1);\r\n  const fs=Math.max(10,Math.min(18,Math.floor(72/maxC)));\r\n  t.innerHTML=allLines.map(l=>{\r\n    const sc=isSc(l);\r\n    return `<span style=\"font-family:${sc?\"'Pacifico',cursive\":\"'Poppins',sans-serif\"};font-weight:${sc?400:900};font-size:${sc?fs-1:fs}px;color:#2a1a0e;letter-spacing:-0.02em;line-height:1.15;text-align:center;display:block;width:100%;\">${l}</span>`;\r\n  }).join('');\r\n}\r\n\r\nfunction renderC3(){\r\n  var _crow3=document.getElementById('crow3');if(!_crow3)return;\r\n  var _c3=ntGetColors();if(selC3>=_c3.length)selC3=1;\r\n  var _swBase3='display:block!important;width:26px!important;height:26px!important;min-width:26px;min-height:26px;border-radius:50%;cursor:pointer;flex-shrink:0;transition:transform .15s,border-color .15s;padding:0;margin:0;';\r\n  _crow3.innerHTML=_c3.map((c,i)=>{\r\n    var sel=i===selC3;\r\n    var border=sel?'border:2.5px solid #3d2b1a!important;transform:scale(1.2);':'border:2px solid transparent;';\r\n    var shadow=c.lt?'box-shadow:0 0 0 1px #c0b8ac;':'';\r\n    return '<div style=\"'+_swBase3+border+shadow+'background:'+c.fc+';\" onclick=\"pc3('+i+')\" title=\"'+c.n+'\"></div>';\r\n  }).join('')+'<span style=\"font-size:11px;color:var(--muted);margin-left:3px;\">'+_c3[selC3].n+'</span>';\r\n}\r\nfunction pc3(i){selC3=i;renderSimple();renderC3();renderPuThumb();}\r\n\r\nfunction renderTry(){\r\n  const pool=cachedSugg.filter(s=>JSON.stringify(s.lines||s.ls)!==JSON.stringify(curLines)).slice(0,10);\r\n  const scrollEls=[\r\n    {el:document.getElementById('tryScroll'),compact:false},\r\n    {el:document.getElementById('tryScrollNav'),compact:true}\r\n  ];\r\n  scrollEls.forEach(({el:scroll,compact})=>{\r\n    if(!scroll)return;\r\n    scroll.innerHTML='';\r\n    pool.forEach(s=>{\r\n      const lines=[...(s.lines||s.ls||[])];\r\n      const displayPrice=s.price>=1299?1299:(s.price||s.pr||999);\r\n      const d=document.createElement('div');\r\n      if(compact){\r\n        d.style.cssText='flex-shrink:0;background:#fff;border:1px solid var(--border);border-radius:8px;padding:6px 10px;cursor:pointer;min-width:80px;max-width:110px;';\r\n        d.innerHTML=`<div style=\"font-size:11px;font-weight:700;color:var(--brown);line-height:1.3;\">${lines.join(' ')}</div><div style=\"font-size:9px;color:var(--muted);margin-top:2px;\">\u20B9${displayPrice}</div>`;\r\n      } else {\r\n        d.className='nt-tcard';\r\n        d.innerHTML=`<div class=\"ntcl\">${lines.join(' ')}</div><div class=\"ntcm\">\u20B9${displayPrice}</div>`;\r\n      }\r\n      d.addEventListener('click',()=>goRender([...lines],displayPrice));\r\n      scroll.appendChild(d);\r\n    });\r\n  });\r\n}\r\n\r\nfunction renderTry4(){\r\n  const pool=cachedSugg.filter(s=>JSON.stringify(s.lines||s.ls)!==JSON.stringify(curLines)).slice(0,8);\r\n  const scroll=document.getElementById('tryScroll4');\r\n  if(!scroll)return;\r\n  scroll.innerHTML='';\r\n  pool.forEach(s=>{\r\n    const lines=[...(s.lines||s.ls||[])]; // clone\r\n    const d=document.createElement('div');d.className='nt-tcard';\r\n    d.innerHTML=`<div class=\"ntcl\">${lines.join(' ')}</div><div class=\"ntcm\">\u20B91,299</div>`;\r\n    d.addEventListener('click',()=>{curLines=[...lines];renderS4();});\r\n    scroll.appendChild(d);\r\n  });\r\n}\r\n\r\nfunction toggleLineReorder(){\r\n  const wrap=document.getElementById('lineReorderWrap');\r\n  const isVisible=wrap.style.display!=='none';\r\n  if(isVisible){wrap.style.display='none';return;}\r\n  wrap.style.display='block';\r\n  window.lineOpts=curLines.map(()=>({font:''}));\r\n  renderLineChips();\r\n  renderSizeBar();\r\n  wrap.scrollIntoView({behavior:'smooth',block:'center'});\r\n}\r\n\r\n// Per-line overrides: {fontOverride, iconKey, iconSide}\r\nif(!window.lineOpts)window.lineOpts=[];\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// HINDI TRANSLITERATION + MATRA DETECTION\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nconst HINDI_LOWER_MATRAS=['\\u0941','\\u0942','\\u0943','\\u094D']; // \u0941 \u0942 \u0943 \u094D\r\n\r\nasync function transliterateToHindi(text){\r\n  const sys=`You are a Hinglish transliteration expert for Indian wooden decor pieces.\r\nConvert English text to Devanagari script \u2014 phonetic transliteration only, NOT translation.\r\n\r\nCRITICAL: Transliterate how the word SOUNDS, do not change the meaning.\r\n- \"Another\" \u2192 \"\u0905\u0928\u0926\u0930\" (NOT \u0905\u0926\u0930, NOT \u090F\u0915 \u0914\u0930)  \r\n- \"Level\" \u2192 \"\u0932\u0947\u0935\u0932\"\r\n- \"Another Level\" \u2192 \"\u0905\u0928\u0926\u0930 \u0932\u0947\u0935\u0932\"\r\n- \"No Pain No Gain\" \u2192 \"\u0928\u094B \u092A\u0947\u0928 \u0928\u094B \u0917\u0947\u0928\"\r\n- \"Boss\" \u2192 \"\u092C\u0949\u0938\" \u00B7 \"Mode\" \u2192 \"\u092E\u094B\u0921\" \u00B7 \"Life\" \u2192 \"\u0932\u093E\u0907\u092B\"\r\n- \"Lab\" \u2192 \"\u0932\u0948\u092C\" \u00B7 \"Code\" \u2192 \"\u0915\u094B\u0921\" \u00B7 \"Vibe\" \u2192 \"\u0935\u093E\u0907\u092C\"\r\n- Pure Hindi words keep natural spelling: chai\u2192\u091A\u093E\u092F \u00B7 ghar\u2192\u0918\u0930 \u00B7 dost\u2192\u0926\u094B\u0938\u094D\u0924 \u00B7 pyaar\u2192\u092A\u094D\u092F\u093E\u0930\r\n- Titles: Dr\u2192\u0921\u0949 \u00B7 Mr\u2192\u092E\u093F\u0938\u094D\u091F\u0930 \u00B7 CA\u2192\u0938\u0940\u090F \u00B7 CS\u2192\u0938\u0940\u090F\u0938 \u00B7 Prof\u2192\u092A\u094D\u0930\u094B\u092B\r\n\r\nReturn ONLY the Devanagari text. No explanation, no quotes.`;\r\n  try{\r\n    const raw=await callAI(MODEL_SUGG,sys,`Transliterate: \"${text}\"`,60);\r\n    return raw.trim().replace(/[\"\"\"''*]/g,'');\r\n  }catch(e){return text;}\r\n}\r\n\r\nfunction checkHindiMatras(text){\r\n  // only call on bottom line \u2014 check if lower matras are balanced or clustered\r\n  const chars=[...text];\r\n  const positions=chars.map((c,i)=>HINDI_LOWER_MATRAS.includes(c)?i:-1).filter(i=>i>-1);\r\n  if(positions.length===0)return'none';\r\n  if(positions.length===1)return'shorten';\r\n  const spread=(positions[positions.length-1]-positions[0])/chars.length;\r\n  return spread>0.4?'balanced':'shorten';\r\n}\r\n\r\nfunction countHindiChars(text){\r\n  let count=0;\r\n  for(const ch of text){\r\n    const code=ch.codePointAt(0);\r\n    if((code>=0x0915&&code<=0x0939)||(code>=0x0905&&code<=0x0914))count++;\r\n  }\r\n  return count||[...(text||'').replace(/\\s/g,'')].length;\r\n}\r\n// Strip emoji and non-engravable symbols\r\nfunction stripEmoji(text){\r\n  return (text||'')\r\n    // Remove all emoji using Unicode property escape (covers all emoji)\r\n    .replace(/\\p{Emoji_Presentation}/gu,'')\r\n    .replace(/\\p{Extended_Pictographic}/gu,'')\r\n    // Misc symbols, dingbats, variation selectors, zero-width joiners\r\n    .replace(/[\\u2600-\\u27BF\\uFE00-\\uFEFF\\u200D]/gu,'')\r\n    // Emoji modifiers and regional indicators\r\n    .replace(/[\\uD83C][\\uDF00-\\uDFFF]/gu,'')\r\n    .replace(/[\\uD83D][\\uDC00-\\uDE4F]/gu,'')\r\n    .replace(/[\\uD83D][\\uDE80-\\uDEFF]/gu,'')\r\n    .replace(/[\\uD83E][\\uDD00-\\uDDFF]/gu,'')\r\n    // Clean up double spaces left after removal\r\n    .replace(/\\s+/g,' ').trim();\r\n}\r\nfunction countAnyScript(text){\r\n  // Grapheme-aware counter \u2014 works for Punjabi, Urdu, Bengali, any script\r\n  if(typeof Intl!=='undefined'&&Intl.Segmenter){\r\n    try{const seg=new Intl.Segmenter();return [...seg.segment((text||'').replace(/\\s/g,''))].length;}catch(e){}\r\n  }\r\n  return [...(text||'').replace(/\\s/g,'')].length;\r\n}\r\nfunction countChars(line){\r\n  return countAnyScript(line);\r\n}\r\n\r\nfunction calcSizePrice(lines,isPersonal,opts){\r\n  opts=opts||[];\r\n  const nonEmptyLines=lines.filter(l=>(l||'').trim());\r\n  let maxChars=0;\r\n  nonEmptyLines.forEach((l,i)=>{\r\n    let c=countChars(l);\r\n    let iconBonus=0;\r\n    // Chip icon \u2014 default = 1 char, doubled = 2 chars\r\n    if((opts[i]||{}).iconKey){\r\n      const defSz=uniformFs4||48;\r\n      const sz=(opts[i]||{}).iconSize||defSz;\r\n      iconBonus=Math.max(iconBonus, sz>=defSz*1.8?2:1);\r\n    }\r\n    // Overlay icon on letter \u2014 counts as 1\r\n    const _il=window.ntLetterIcon;\r\n    if(_il&&_il.active&&_il.line===i) iconBonus=Math.max(iconBonus,1);\r\n    // Cap: at most one icon's worth per line (don't double-count chip + letter icon)\r\n    c+=iconBonus;\r\n    if(c>maxChars)maxChars=c;\r\n  });\r\n  const lineCount=nonEmptyLines.length;\r\n  const buffer=lineCount===1?3:2;\r\n  const effective=maxChars+buffer;\r\n  const clampedLines=Math.min(lineCount,4);\r\n  let inch=Math.max(isPersonal?8:6, effective);\r\n  if(inch>24)inch=24;\r\n  const base=isPersonal?1299:999;\r\n  const anchor=inch;\r\n  const extra=Math.max(0,inch-anchor)*100;\r\n  const price=base+extra;\r\n  return {inch,price,maxChars,lineCount:clampedLines,buffer,anchor};\r\n}\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// WIDE LINE FEATURE\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n\r\n// Check if a line is eligible for Wide toggle\r\n// Rule: single word (no spaces), letter diff vs longest line is 2-6\r\nfunction ntWideEligible(lineIdx, lines){\r\n  const line = (lines[lineIdx]||'').trim();\r\n  const words = line.split(/\\s+/).filter(Boolean);\r\n  if(words.length !== 1) return false; // must be single word\r\n  const thisLetters = line.replace(/\\s/g,'').length;\r\n  if(thisLetters < 2) return false; // minimum 2 chars\r\n  const longestLetters = Math.max(...lines.map(l=>(l||'').replace(/\\s/g,'').length));\r\n  if(thisLetters === longestLetters) return false; // can't be the longest line itself\r\n  const diff = longestLetters - thisLetters;\r\n  return diff >= 1; // no upper cap \u2014 font size max (96px) handles visual constraint\r\n}\r\n\r\n// Get Wide charge for a line: diff 2-3 = \u20B9100, diff 4-6 = \u20B9200\r\nfunction ntWideCharge(lineIdx, lines){\r\n  const thisLetters = (lines[lineIdx]||'').replace(/\\s/g,'').length;\r\n  const longestLetters = Math.max(...lines.map(l=>(l||'').replace(/\\s/g,'').length));\r\n  const diff = longestLetters - thisLetters;\r\n  return diff >= 4 ? 200 : 100;\r\n}\r\n\r\n// Calculate total wide extra from lineOpts\r\nfunction ntWideExtra(lines, opts){\r\n  let total = 0;\r\n  (opts||[]).forEach((opt,i)=>{\r\n    if(opt && opt.wide && ntWideEligible(i, lines)){\r\n      total += ntWideCharge(i, lines);\r\n    }\r\n  });\r\n  return total;\r\n}\r\n\r\n// Suggest cheapest possible split (up to 4 lines total)\r\nfunction suggestSplit(allLines, curPriceOverride, opts){\r\n  // letterCount includes icon equivalent chars from opts\r\n  const letterCount=(s,i)=>{\r\n    let c=(s||'').replace(/\\s+/g,'').length;\r\n    if(opts&&opts[i]&&opts[i].iconKey){\r\n      const defSz=uniformFs4||48;\r\n      const sz=opts[i].iconSize||defSz;\r\n      c+=sz>=defSz*1.8?2:1;\r\n    }\r\n    const _il=window.ntLetterIcon;\r\n    if(_il&&_il.active&&_il.line===i) c+=1;\r\n    return c;\r\n  };\r\n  const priceOf=lines=>{\r\n    const ne=lines.filter(l=>(l||'').trim());\r\n    if(!ne.length)return 1299;\r\n    const mx=Math.max(...ne.map((l,i)=>letterCount(l,i)));\r\n    const buf=ne.length===1?3:2;\r\n    const ai=Math.min(Math.max(8,mx+buf),24);\r\n    const lcount=Math.min(ne.length,4);\r\n    return typeof ntGetPrice==='function'?ntGetPrice(ai,lcount):(1299+Math.max(0,ai-8)*100);\r\n  };\r\n  // Use actual current price if passed \u2014 avoids comparing wrong base\r\n  const cur=curPriceOverride||priceOf(allLines);\r\n  if(cur<=1299)return null;\r\n\r\n  let best=null;\r\n  allLines.forEach((line,idx)=>{\r\n    const words=(line||'').trim().split(/\\s+/).filter(Boolean);\r\n    if(words.length<2)return;\r\n    const otherLines=allLines.filter((_,i)=>i!==idx);\r\n    const slotsLeft=4-otherLines.length;\r\n    for(let parts=2;parts<=Math.min(slotsLeft,words.length);parts++){\r\n      const splits=[];\r\n      if(parts===2){\r\n        for(let w=1;w<words.length;w++){\r\n          splits.push([words.slice(0,w).join(' '),words.slice(w).join(' ')]);\r\n        }\r\n      } else {\r\n        const sz=Math.ceil(words.length/parts);\r\n        const chunks=[];\r\n        for(let p=0;p<parts;p++){\r\n          const chunk=words.slice(p*sz,(p+1)*sz);\r\n          if(chunk.length)chunks.push(chunk.join(' '));\r\n        }\r\n        if(chunks.length===parts)splits.push(chunks);\r\n      }\r\n      splits.forEach(splitParts=>{\r\n        const newLines=[...otherLines.slice(0,idx),...splitParts,...otherLines.slice(idx)];\r\n        const np=priceOf(newLines);\r\n        const save=cur-np;\r\n        if(save>0&&(!best||np<best.price||(np===best.price&&splitParts.length<best.parts.length))){\r\n          best={price:np,save,parts:splitParts,totalLines:newLines.length};\r\n        }\r\n      });\r\n    }\r\n  });\r\n  return best;\r\n}\r\n\r\nfunction renderSizeBar(){\r\n  const adjNameLines=(window.s4NameLines||[]).filter(Boolean);\r\n  const allLines=isNamed?[...curLines,...adjNameLines]:curLines;\r\n  const allOpts=isNamed?[...(window.lineOpts||[]),...(window.s4NameLineOpts||[]).slice(0,adjNameLines.length)]:(window.lineOpts||[]);\r\n  const {inch,price,maxChars,lineCount}=calcSizePrice(allLines,isNamed,allOpts);\r\n  const nonEmpty=curLines.filter(l=>(l||'').trim());\r\n  const prevPrice=curPrice;\r\n  curPrice=price;\r\n\r\n  const totalLines=curLines.length+adjNameLines.length;\r\n  const lineBase=isNamed?(totalLines>=4?1399:1299):999;\r\n  const displayInch=customSizeOverride||inch;\r\n  const sizeExtra=Math.max(0,displayInch-inch)*100;\r\n  const wideExtra=ntWideExtra(curLines, window.lineOpts||[]);\r\n  const fullPrice=lineBase+sizeExtra+wideExtra;\r\n  const btn=document.getElementById('commBtn');\r\n  if(btn)btn.textContent=`${(window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart'} \u00B7 \u20B9${fullPrice.toLocaleString(\"en-IN\")}`;\r\n\r\n  if(isNamed){\r\n    updateSizeDisplayS4(inch);\r\n  }\r\n\r\n  const aiDisp=document.getElementById('sizeAiDisplay');\r\n  if(aiDisp)aiDisp.textContent=inch;\r\n  const szCur=document.getElementById('sizeCurrent');\r\n  if(szCur)szCur.textContent=displayInch;\r\n  const sizeExtraBar=document.getElementById('sizeExtraBar');\r\n  const sizeExtraAmt=document.getElementById('sizeExtraAmt');\r\n  if(sizeExtraBar)sizeExtraBar.style.display=sizeExtra>0?'flex':'none';\r\n  if(sizeExtraAmt)sizeExtraAmt.textContent='+\u20B9'+sizeExtra;\r\n  const sizeInfoRender=document.getElementById('sizeInfoTextRender');\r\n  if(sizeInfoRender){\r\n    const desc={6:'compact and precise',7:'desk or shelf',8:'desk or shelf \u00B7 comfortable reading size',9:'desk or shelf \u00B7 slightly bolder',10:'sideboard or console',11:'sideboard or console \u00B7 makes a statement',12:'wall piece \u00B7 bold from a distance',13:'wall piece \u00B7 strong anchor',14:'large wall',15:'large wall \u00B7 statement piece',16:'feature wall',18:'gallery wall',20:'large installation'};\r\n    const placeTxt=desc[displayInch]||(displayInch>20?'extra large custom piece':'bold statement piece');\r\n    const letterTxt=maxChars>0?`${maxChars} letters \u00B7 needs ${displayInch}\" to be readable`:'';\r\n    sizeInfoRender.innerHTML=placeTxt+(letterTxt?`<br><span style=\"font-weight:600;color:var(--muted);\">${letterTxt}</span>`:'');\r\n  }\r\n  updateSizeDisplay(inch,isNamed);\r\n\r\n  const rbar=document.getElementById('sizeInfoBarRender');if(rbar)rbar.style.display='none';\r\n  const bar=document.getElementById('sizeInfoBar');\r\n  const txt=document.getElementById('sizeInfoText');\r\n  if(!bar||!txt)return;\r\n  const priceChanged=prevPrice&&prevPrice!==price;\r\n  const isUpgrade=sizeExtra>0;\r\n  const diffNote=sizeExtra>0?` <span style=\"color:var(--orange);font-weight:700;\">+ \u20B9${sizeExtra} for size</span>`:'';\r\n\r\n  let savingsTip='';\r\n  if(sizeExtra>0||inch>9){\r\n    const split=suggestSplit(allLines);\r\n    if(split&&split.save>=100){\r\n      var _longest=allLines.reduce(function(a,b){return b.replace(/\\s/g,'').length>a.replace(/\\s/g,'').length?b:a;},'');\r\n      savingsTip='<div style=\"background:#fff;border:1px solid #d0e8d4;border-radius:8px;padding:8px 11px;margin-top:8px;display:flex;align-items:flex-start;gap:7px;\"><span style=\"font-size:13px;flex-shrink:0;\">\uD83D\uDCA1</span><div><div style=\"font-size:15px;font-weight:900;color:#2d7d46;margin-bottom:2px;\">Save \u20B9'+split.save.toLocaleString('en-IN')+'</div><div style=\"font-size:10px;color:#3d2b1a;line-height:1.5;\">Split <b>'+_longest+'</b> into 2 lines \u00B7 tap chip above and use break</div></div></div>';\r\n    }\r\n  }\r\n\r\n  const subLine999=maxChars>0?(maxChars+' letters on longest line \u00B7 needs '+displayInch+'\" to be readable'):(displayInch+'\" \u00B7 go bigger for more impact');\r\n  const extraBadge=sizeExtra>0?(' <span style=\"font-size:11px;color:#c47a45;\">+\u20B9'+sizeExtra+'</span>'):'';\r\n  txt.innerHTML='<div style=\"font-family:Poppins,sans-serif;font-weight:900;font-size:13px;color:#3d2b1a;margin-bottom:3px;\">'+displayInch+'\" piece \u00B7 \u20B9'+lineBase.toLocaleString('en-IN')+extraBadge+'</div><div style=\"font-size:10px;color:#8a6848;line-height:1.5;\">'+subLine999+'</div>'+savingsTip;\r\n  bar.style.cssText='display:block;margin-bottom:10px;background:#f5ede0;border:1px solid #e0c9b2;border-radius:10px;padding:10px 14px;';\r\n}\r\n\r\nfunction applySavingsSplit(newParts){\r\n  const adjNameLines=(window.s4NameLines||[]).filter(Boolean);\r\n  const allLines=isNamed?[...curLines,...adjNameLines]:curLines;\r\n  const longest=allLines.reduce((a,b)=>b.replace(/\\s/g,'').length>a.replace(/\\s/g,'').length?b:a,'');\r\n  const idx=curLines.indexOf(longest);\r\n  if(idx>=0){\r\n    curLines.splice(idx,1,...newParts);\r\n    if(window.lineOpts)window.lineOpts.splice(idx,0,...newParts.slice(1).map(()=>({})));\r\n  }\r\n  customSizeOverride=null;\r\n  renderSimple();renderPuThumb();renderLineChips();renderSizeBar();\r\n}\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// DESCENDER DETECTION\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nconst DESCENDERS='pgyqj';\r\n\r\nfunction checkDescenders(word){\r\n  const w=(word||'').replace(/\\s/g,'');\r\n  const positions=[...w].map((c,i)=>DESCENDERS.includes(c)?i:-1).filter(i=>i>-1);\r\n  if(positions.length===0)return'none';\r\n  if(positions.length===1)return'shorten';\r\n  const spread=(positions[positions.length-1]-positions[0])/w.length;\r\n  return spread>0.4?'balanced':'shorten';\r\n}\r\n\r\nfunction applyDescenderFix(container,text){\r\n  for(const ch of text){\r\n    if(DESCENDERS.includes(ch)){\r\n      const sp=document.createElement('span');\r\n      sp.textContent=ch;\r\n      sp.style.cssText='display:inline-block;transform:translateY(-5px);transform-origin:center bottom;';\r\n      sp.title='Descender adjusted for table placement';\r\n      container.appendChild(sp);\r\n    } else {\r\n      container.appendChild(document.createTextNode(ch));\r\n    }\r\n  }\r\n}\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// BREAK / MERGE\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nfunction breakLine(i){\r\n  // Don't break if already at 4 lines\r\n  if(curLines.length>=4){\r\n    const warn=document.createElement('div');\r\n    warn.style.cssText=\"position:fixed;bottom:80px;left:50%;transform:translateX(-50%);background:#3d2b1a;color:#fff;padding:8px 16px;border-radius:20px;font-size:12px;z-index:99999;font-family:'DM Sans',sans-serif;\";\r\n    warn.textContent='Max 4 lines reached';\r\n    document.body.appendChild(warn);\r\n    setTimeout(function(){warn.remove();},2000);\r\n    return;\r\n  }\r\n  const line=curLines[i];\r\n  const opt=window.lineOpts[i]||{};\r\n  const words=line.trim().split(/\\s+/);\r\n  const hindiWords=opt.hindiText?(opt.hindiText.trim().split(/\\s+/)):null;\r\n\r\n  if(words.length<2){\r\n    const mid=Math.ceil(line.length/2);\r\n    const a=line.slice(0,mid).trim();const b=line.slice(mid).trim();\r\n    if(!a||!b)return;\r\n    const nl=[...curLines];nl.splice(i,1,a,b);\r\n    const optA={...opt,hindiText:undefined};\r\n    const no=[...window.lineOpts];no.splice(i,1,optA,{fontOverride:opt.fontOverride});\r\n    curLines=nl;window.lineOpts=no;\r\n  } else {\r\n    const mid=Math.ceil(words.length/2);\r\n    const a=words.slice(0,mid).join(' ');const b=words.slice(mid).join(' ');\r\n    const nl=[...curLines];nl.splice(i,1,a,b);\r\n    const hA=hindiWords?hindiWords.slice(0,mid).join(' '):undefined;\r\n    const hB=hindiWords?hindiWords.slice(mid).join(' '):undefined;\r\n    const optA={...opt,hindiText:hA||undefined};\r\n    const optB={fontOverride:opt.fontOverride,hindiText:hB||undefined};\r\n    const no=[...window.lineOpts];no.splice(i,1,optA,optB);\r\n    curLines=nl;window.lineOpts=no;\r\n  }renderSimple();renderPuThumb();renderLineChips();renderSizeBar();\r\n}\r\n\r\nfunction mergeLine(i){\r\n  if(i>=curLines.length-1)return;\r\n  const merged=(curLines[i]+' '+curLines[i+1]).trim();\r\n  const nl=[...curLines];nl.splice(i,2,merged);\r\n  const optA=window.lineOpts[i]||{};\r\n  const optB=window.lineOpts[i+1]||{};\r\n  const mergedHindi=(optA.hindiText&&optB.hindiText)?(optA.hindiText+' '+optB.hindiText).trim():undefined;\r\n  const no=[...window.lineOpts];no.splice(i,2,{...optA,hindiText:mergedHindi});\r\n  curLines=nl;window.lineOpts=no;renderSimple();renderPuThumb();renderLineChips();renderSizeBar();\r\n}\r\n\r\n\r\n// \u2500\u2500 UPLOADED ICON PICKER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\nfunction ntMakeIconPicker(getKey, setKey, getSizeOpts, setSizeOpts, onClose, lineWordCount){\r\n  const icons = window.NT_CUSTOM_ICONS || [];\r\n  const picker = document.createElement('div');\r\n  picker.style.cssText = 'display:none;position:absolute;right:0;top:110%;z-index:300;background:#fff;border:1.5px solid var(--border);border-radius:10px;padding:12px;box-shadow:0 6px 24px rgba(0,0,0,.15);min-width:240px;';\r\n  picker.addEventListener('click', e=>{ e.stopPropagation(); });\r\n\r\n  // \u2500\u2500 Header with X close button \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const pickerHdr=document.createElement('div');\r\n  pickerHdr.style.cssText='display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;';\r\n  const pickerHdrLbl=document.createElement('span');\r\n  pickerHdrLbl.style.cssText='font-size:11px;font-weight:700;color:var(--brown);';\r\n  pickerHdrLbl.textContent='Pick icon';\r\n  const closeBtn=document.createElement('button');\r\n  closeBtn.style.cssText='background:none;border:none;font-size:15px;color:var(--muted);cursor:pointer;line-height:1;padding:2px 4px;flex-shrink:0;';\r\n  closeBtn.textContent='\u2715';\r\n  closeBtn.addEventListener('click',e=>{\r\n    e.stopPropagation();\r\n    picker.style.display='none';\r\n    picker.classList.remove('lc-open-picker');\r\n    if(onClose)onClose();\r\n  });\r\n  pickerHdr.appendChild(pickerHdrLbl);\r\n  pickerHdr.appendChild(closeBtn);\r\n  picker.appendChild(pickerHdr);\r\n\r\n  if(!icons.length){\r\n    const emptyDiv=document.createElement('div');\r\n    emptyDiv.innerHTML=`<div style=\"font-size:12px;font-weight:700;color:var(--brown);margin-bottom:6px;\">Add icons first</div>\r\n      <div style=\"font-size:11px;color:var(--muted);line-height:1.7;margin-bottom:10px;\">\r\n        Go to:<br>\r\n        <b>Shopify Admin \u2192 Online Store<br>\u2192 Themes \u2192 Customize</b><br>\r\n        Find <b>Nukkad Customiser</b> section<br>\r\n        \u2192 Add block \u2192 <b>Custom icon</b><br>\r\n        Upload your PNG/SVG there.\r\n      </div>\r\n      <div style=\"font-size:10px;color:var(--light);\">Icons appear here after saving.</div>`;\r\n    picker.appendChild(emptyDiv);\r\n    return picker;\r\n  }\r\n\r\n  // None button\r\n  const noneBtn = document.createElement('button');\r\n  noneBtn.className = 'line-chip-btn' + (!getKey() ? ' on' : '');\r\n  noneBtn.style.cssText = 'font-size:10px;padding:3px 10px;margin-bottom:8px;';\r\n  noneBtn.textContent = '\u2715 No icon';\r\n  noneBtn.addEventListener('click', e => {\r\n    e.stopPropagation();\r\n    setKey('');\r\n    noneBtn.className='line-chip-btn on';\r\n    picker.querySelectorAll('.ic-sel-btn').forEach(b=>b.classList.remove('on'));\r\n    picker.querySelectorAll('.ic-tick').forEach(t=>t.remove());\r\n    updateControls();\r\n  });\r\n  picker.appendChild(noneBtn);\r\n\r\n  // Icon grid\r\n  const grid = document.createElement('div');\r\n  grid.style.cssText = 'display:grid;grid-template-columns:repeat(auto-fill,minmax(58px,1fr));gap:5px;margin-bottom:10px;overflow-y:auto;max-height:200px;';\r\n  icons.forEach(ic => {\r\n    const btn = document.createElement('button');\r\n    btn.className = 'line-chip-btn ic-sel-btn' + (getKey() === ic.src ? ' on' : '');\r\n    btn.style.cssText = 'padding:4px;display:flex;flex-direction:column;align-items:center;gap:3px;min-width:44px;position:relative;';\r\n    btn.innerHTML = `<img src=\"${ic.src}\" style=\"width:34px;height:34px;object-fit:contain;\" alt=\"${ic.label}\"><span style=\"font-size:8px;color:var(--muted);width:100%;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">${ic.label}</span>`;\r\n    if(getKey()===ic.src){\r\n      const initTick=document.createElement('div');initTick.className='ic-tick';\r\n      initTick.style.cssText='position:absolute;top:2px;right:2px;background:var(--orange);color:#fff;border-radius:50%;width:14px;height:14px;font-size:9px;display:flex;align-items:center;justify-content:center;font-weight:700;pointer-events:none;';\r\n      initTick.textContent='\u2713';btn.appendChild(initTick);\r\n    }\r\n    btn.addEventListener('click', e => {\r\n      e.stopPropagation();\r\n      setKey(ic.src);\r\n      picker.querySelectorAll('.ic-sel-btn').forEach(b=>{b.classList.remove('on');b.querySelectorAll('.ic-tick').forEach(t=>t.remove());});\r\n      btn.classList.add('on');\r\n      noneBtn.className='line-chip-btn';\r\n      const tick=document.createElement('div');\r\n      tick.className='ic-tick';\r\n      tick.style.cssText='position:absolute;top:2px;right:2px;background:var(--orange);color:#fff;border-radius:50%;width:14px;height:14px;font-size:9px;display:flex;align-items:center;justify-content:center;font-weight:700;pointer-events:none;';\r\n      tick.textContent='\u2713';\r\n      btn.appendChild(tick);\r\n      updateControls();\r\n    });\r\n    grid.appendChild(btn);\r\n  });\r\n  picker.appendChild(grid);\r\n\r\n  // \u2500\u2500 Controls \u2014 always visible, dimmed when no icon \u2500\u2500\r\n  const controlsWrap=document.createElement('div');\r\n  controlsWrap.style.cssText='border-top:1px solid var(--border);padding-top:8px;display:flex;flex-direction:column;gap:8px;transition:opacity .15s;';\r\n\r\n  // 1. POSITION row (Left / Center / Right)\r\n  // Center only shown when line has 2+ words\r\n  const posRow=document.createElement('div');\r\n  posRow.style.cssText='display:flex;align-items:center;gap:4px;';\r\n  const posLbl=document.createElement('span');\r\n  posLbl.textContent='Position';\r\n  posLbl.style.cssText='font-size:10px;font-weight:700;color:var(--brown);flex-shrink:0;min-width:56px;';\r\n  posRow.appendChild(posLbl);\r\n  const showCenter=(lineWordCount||0)>=2;\r\n  const posConfig=showCenter?[['left','\u2190 Left'],['center','\u00B7 Center'],['right','Right \u2192']]:[['left','\u2190 Left'],['right','Right \u2192']];\r\n  posConfig.forEach(([pos,label])=>{\r\n    const pb=document.createElement('button');\r\n    pb.className='line-chip-btn'+((getSizeOpts().iconSide||'left')===pos?' on':'');\r\n    pb.textContent=label;\r\n    pb.style.cssText='font-size:10px;flex:1;';\r\n    pb.dataset.posBtn=pos;\r\n    pb.addEventListener('click',e=>{\r\n      e.stopPropagation();\r\n      setSizeOpts({...getSizeOpts(),iconSide:pos});\r\n      posRow.querySelectorAll('[data-pos-btn]').forEach(b=>b.classList.remove('on'));\r\n      pb.classList.add('on');\r\n    });\r\n    posRow.appendChild(pb);\r\n  });\r\n  controlsWrap.appendChild(posRow);\r\n\r\n  // 2. ROTATE row\r\n  const rotRow=document.createElement('div');\r\n  rotRow.style.cssText='display:flex;align-items:center;gap:4px;';\r\n  const rotLbl=document.createElement('span');rotLbl.textContent='Rotate';rotLbl.style.cssText='font-size:10px;font-weight:700;color:var(--brown);flex-shrink:0;min-width:56px;';\r\n  const rotCCBtn=document.createElement('button');rotCCBtn.className='line-chip-btn';rotCCBtn.textContent='\u21BA Left';rotCCBtn.style.cssText='font-size:10px;flex:1;';\r\n  const rotNum=document.createElement('span');rotNum.style.cssText='font-size:12px;font-weight:700;color:var(--orange);min-width:32px;text-align:center;background:#fff8f3;border-radius:6px;padding:2px 4px;';\r\n  rotNum.textContent=(getSizeOpts().iconRotation||0)+'\u00B0';\r\n  const rotBtn=document.createElement('button');rotBtn.className='line-chip-btn';rotBtn.textContent='Right \u21BB';rotBtn.style.cssText='font-size:10px;flex:1;';\r\n  rotCCBtn.addEventListener('click',e=>{\r\n    e.stopPropagation();\r\n    const next=((getSizeOpts().iconRotation||0)-5+360)%360;\r\n    setSizeOpts({...getSizeOpts(),iconRotation:next});\r\n    rotNum.textContent=next+'\u00B0';\r\n  });\r\n  rotBtn.addEventListener('click',e=>{\r\n    e.stopPropagation();\r\n    const next=((getSizeOpts().iconRotation||0)+5)%360;\r\n    setSizeOpts({...getSizeOpts(),iconRotation:next});\r\n    rotNum.textContent=next+'\u00B0';\r\n  });\r\n  rotRow.appendChild(rotLbl);rotRow.appendChild(rotCCBtn);rotRow.appendChild(rotNum);rotRow.appendChild(rotBtn);\r\n  controlsWrap.appendChild(rotRow);\r\n\r\n  picker.appendChild(controlsWrap);\r\n\r\n  function updateControls(){\r\n    const hasIcon=!!getKey();\r\n    controlsWrap.style.opacity=hasIcon?'1':'0.35';\r\n    controlsWrap.style.pointerEvents=hasIcon?'':'none';\r\n    rotNum.textContent=(getSizeOpts().iconRotation||0)+'\u00B0';\r\n    posRow.querySelectorAll('[data-pos-btn]').forEach(b=>{\r\n      b.classList.toggle('on',(getSizeOpts().iconSide||'left')===b.dataset.posBtn);\r\n    });\r\n  }\r\n  updateControls();\r\n\r\n  return picker;\r\n}\r\n\r\n// Returns true if icons are available \u2014 used to conditionally show icon button\r\nfunction ntHasIcons(){ return !!(window.NT_CUSTOM_ICONS && window.NT_CUSTOM_ICONS.length); }\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// RENDER LINE CHIPS\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// \u2500\u2500 ICON LINE CHIP \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n// Standalone icon at top of design \u2014 counts as a line\r\nwindow.ntIconLine = window.ntIconLine || {active:false, iconKey:'', rotation:0, side:'center'};\r\n\r\nfunction ntRenderIconLineChip(container){\r\n  const icons = window.NT_CUSTOM_ICONS||[];\r\n  const il = window.ntIconLine;\r\n\r\n  const chip = document.createElement('div');\r\n  chip.className = 'line-chip';\r\n  chip.style.cssText = 'border:1.5px solid '+(il.active?'var(--orange)':'var(--border)')+';background:'+(il.active?'#fff8f3':'#fff')+';';\r\n\r\n  // Left: icon preview or placeholder\r\n  const iconPreview = document.createElement('div');\r\n  iconPreview.style.cssText = 'width:28px;height:28px;display:flex;align-items:center;justify-content:center;flex-shrink:0;';\r\n  if(il.active && il.iconKey){\r\n    const img = document.createElement('img');\r\n    img.src = il.iconKey;\r\n    img.style.cssText = 'width:24px;height:24px;object-fit:contain;transform:rotate('+il.rotation+'deg);';\r\n    iconPreview.appendChild(img);\r\n  } else {\r\n    iconPreview.style.cssText += 'font-size:16px;';\r\n    iconPreview.textContent = '\u2605';\r\n  }\r\n  chip.appendChild(iconPreview);\r\n\r\n  // Label\r\n  const lbl = document.createElement('span');\r\n  lbl.style.cssText = 'flex:1;font-size:11px;font-weight:700;color:var(--brown);';\r\n  lbl.textContent = il.active ? '' : 'Select icon';\r\n  chip.appendChild(lbl);\r\n\r\n  // Controls (only when active)\r\n  if(il.active){\r\n    // Position removed - rotation only\r\n\r\n    // Rotate button\r\n    const rotBtn = document.createElement('button');\r\n    rotBtn.className = 'line-chip-btn';\r\n    rotBtn.textContent = 'Turn \u21BB';\r\n    rotBtn.title = 'Rotate 5\u00B0';\r\n    rotBtn.style.cssText = 'padding:2px 7px;font-size:13px;';\r\n    rotBtn.addEventListener('click',function(e){\r\n      e.stopPropagation();\r\n      window.ntIconLine.rotation = (window.ntIconLine.rotation + 5) % 360;\r\n      ntIconLineRender();\r\n      renderLineChips();\r\n    });\r\n    chip.appendChild(rotBtn);\r\n\r\n    // Change icon button\r\n    const changeBtn = document.createElement('button');\r\n    changeBtn.className = 'line-chip-btn on';\r\n    changeBtn.textContent = 'Change';\r\n    changeBtn.style.cssText = 'padding:2px 7px;font-size:10px;';\r\n    changeBtn.addEventListener('click',function(e){\r\n      e.stopPropagation();\r\n      ntOpenIconLinePicker();\r\n    });\r\n    chip.appendChild(changeBtn);\r\n\r\n    // Remove button\r\n    const removeBtn = document.createElement('button');\r\n    removeBtn.className = 'line-chip-btn';\r\n    removeBtn.textContent = '\u2715';\r\n    removeBtn.style.cssText = 'font-size:10px;color:var(--muted);border-color:transparent;background:transparent;padding:2px 5px;';\r\n    removeBtn.addEventListener('click',function(e){\r\n      e.stopPropagation();\r\n      window.ntIconLine = {active:false, iconKey:'', rotation:0, side:'center'};\r\n      ntIconLineRender();\r\n      renderLineChips();\r\n      renderSimple();\r\n    });\r\n    chip.appendChild(removeBtn);\r\n  } else {\r\n    // Click to open picker\r\n    chip.style.cursor = 'pointer';\r\n    chip.addEventListener('click', function(){ ntOpenIconLinePicker(); });\r\n  }\r\n\r\n  container.appendChild(chip);\r\n\r\n  // Merge zone placeholder (non-interactive)\r\n  const mz = document.createElement('div');\r\n  mz.style.cssText = 'height:6px;';\r\n  container.appendChild(mz);\r\n}\r\n\r\nfunction ntOpenIconLinePicker(){\r\n  const icons = window.NT_CUSTOM_ICONS||[];\r\n  if(!icons.length){ alert('Add icons in Theme Customiser \u2192 Nukkad Customiser \u2192 icon names field'); return; }\r\n\r\n  // Reuse existing icon letter sheet UI\r\n  const grid = document.getElementById('ntILIconTiles');\r\n  if(!grid) return;\r\n  grid.innerHTML = '';\r\n  icons.forEach(function(ic){\r\n    const btn = document.createElement('button');\r\n    btn.type = 'button';\r\n    btn.style.cssText = 'display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 6px;border:1.5px solid #e0c9b2;border-radius:12px;background:#fff;cursor:pointer;min-width:56px;transition:all .15s;';\r\n    if(window.ntIconLine.iconKey === ic.src) btn.style.borderColor = '#c47a45';\r\n    btn.innerHTML = '<img src=\"'+ic.src+'\" style=\"width:32px;height:32px;object-fit:contain;\" alt=\"'+ic.label+'\"><span style=\"font-size:9px;color:#a07850;\">'+ic.label+'</span>';\r\n    btn.addEventListener('click', function(){\r\n      grid.querySelectorAll('button').forEach(function(b){ b.style.borderColor='#e0c9b2'; });\r\n      btn.style.borderColor = '#c47a45';\r\n      window.ntIconLine = {active:true, iconKey:ic.src, rotation:window.ntIconLine.rotation||0, side:window.ntIconLine.side||'center'};\r\n      ntIconLineRender();\r\n      renderLineChips();\r\n      renderSimple();\r\n      // Close after short delay so user sees selection\r\n      setTimeout(function(){\r\n        if(typeof ntCloseIconLetter==='function') ntCloseIconLetter();\r\n      }, 600);\r\n    });\r\n    grid.appendChild(btn);\r\n  });\r\n\r\n  // Open the sheet\r\n  const sheet = document.getElementById('ntIconLetterSheet');\r\n  const bd = document.getElementById('ntIconLetterBackdrop');\r\n  if(sheet){ sheet.style.display='flex'; setTimeout(function(){ sheet.style.transform='translate(-50%,-50%)'; sheet.style.opacity='1'; },10); }\r\n  if(bd) bd.style.display='block';\r\n}\r\n\r\nfunction ntIconLineRender(){\r\n  // Re-renders the canvas to include icon line at top\r\n  if(typeof renderSimple==='function') renderSimple();\r\n}\r\n\r\nfunction renderLineChips(){\r\n  const container=document.getElementById('lineReorderChips');\r\n  container.innerHTML='';\r\n  while(window.lineOpts.length<curLines.length)window.lineOpts.push({});\r\n  window.lineOpts=window.lineOpts.slice(0,curLines.length);\r\n  let dragSrc=null;\r\nlet dragSrc4=null;\r\n  const fonts=['sans','serif','script','hindi'];\r\n  const fontLabels={'sans':'Bold','serif':'Serif','script':'Script','hindi':'\u0939\u093F Hindi'};\r\n\r\n  // \u2500\u2500 ICON LINE CHIP (top) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  try { ntRenderIconLineChip(container); } catch(e){ console.warn('[IconLineChip]',e); }\r\n\r\n  curLines.forEach((line,i)=>{\r\n    const opt=window.lineOpts[i]||{};\r\n    const isCaps=!!opt.allCaps;\r\n\r\n    const chip=document.createElement('div');\r\n    chip.className='line-chip';chip.draggable=true;chip.dataset.index=i;\r\n\r\n    const handle=document.createElement('span');\r\n    handle.className='line-chip-handle';handle.textContent='\u283F';\r\n\r\n    const textSpan=document.createElement('span');\r\n    textSpan.className='line-chip-text';\r\n    textSpan.textContent=isCaps?line.toUpperCase():line;\r\n    textSpan.style.letterSpacing=isCaps?'-0.05em':'-0.02em';\r\n\r\n    const textInp=document.createElement('input');\r\n    textInp.className='line-chip-inp';textInp.value=line;textInp.style.display='none';\r\n\r\n    const charCount=document.createElement('span');\r\n    charCount.style.cssText='font-size:9px;color:var(--light);flex-shrink:0;display:none;margin-right:2px;transition:color .15s;';\r\n    const updateCharCount=()=>{\r\n      const n=(textInp.value||'').replace(/\\s/g,'').length;\r\n      charCount.textContent=n+'L';\r\n      charCount.style.color=n>9?'var(--orange)':n>7?'#b09a88':'var(--light)';\r\n    };\r\n    textInp.addEventListener('input',()=>{updateCharCount();renderSimple();renderSizeBar();});\r\n\r\n    const commitEdit=(val)=>{\r\n      val=stripEmoji(val).trim();\r\n      charCount.style.display='none';\r\n      if(!val){\r\n        curLines.splice(i,1);window.lineOpts.splice(i,1);\r\n      } else {\r\n        curLines[i]=val;\r\n        // Auto-detect Devanagari typed directly in chip\r\n        if(isDevanagari(val)){\r\n          if(!window.lineOpts[i])window.lineOpts[i]={};\r\n          window.lineOpts[i].hindiText=val;\r\n          if(selFont!=='hindi'){selFont='hindi';['sans','serif','script','hindi'].forEach(x=>{const el=document.getElementById('fo-'+x);if(el)el.classList.toggle('on',x==='hindi');});}\r\n          var hint=document.getElementById('hindiHint');if(hint)hint.style.display='block';\r\n        }\r\n        if(!isNamed&&quickDetect(curLines.join(' '))){\r\n          isNamed=true;\r\n          const tb=document.getElementById('tierBadge');\r\n          if(tb){\r\n            document.getElementById('tbPrice').textContent='\u20B91,299';\r\n            const _tbr=document.getElementById('tbReason');if(_tbr)_tbr.textContent='Personalised piece';\r\n            tb.classList.add('show');\r\n          }\r\n        }\r\n      }renderSimple();renderPuThumb();renderLineChips();renderSizeBar();\r\n    };\r\n    textInp.addEventListener('focus',()=>{charCount.style.display='inline';updateCharCount();});\r\n    textInp.addEventListener('keydown',e=>{\r\n      if(e.key==='Enter'){commitEdit(textInp.value);e.preventDefault();}\r\n      if(e.key==='Escape'){charCount.style.display='none';textSpan.style.display='';textInp.style.display='none';chip.draggable=true;}\r\n    });\r\n    textInp.addEventListener('blur',()=>commitEdit(textInp.value));\r\n\r\n    const curFont=opt.fontOverride||'';\r\n    const fontLabels999={'sans':'Bold','serif':'Serif','script':'Script'};\r\n    const fBtn=document.createElement('button');\r\n    fBtn.className='line-chip-btn'+(curFont?' on':'');\r\n    if(curFont)fBtn.style.cssText='font-size:10px;font-weight:700;white-space:nowrap;flex-shrink:0;position:relative;';\r\n    else fBtn.style.cssText='font-size:10px;white-space:nowrap;flex-shrink:0;position:relative;';\r\n    const fBtnLbl=document.createElement('span');\r\n    fBtnLbl.textContent=curFont?(fontLabels999[curFont]||'Font'):'Font';\r\n    fBtn.appendChild(fBtnLbl);\r\n    const fPop=document.createElement('div');\r\n    fPop.style.cssText='display:none;position:absolute;left:0;top:110%;z-index:300;background:#fff;border:1.5px solid var(--border);border-radius:10px;padding:8px;box-shadow:0 6px 24px rgba(0,0,0,.15);min-width:140px;';\r\n    [['sans','B','Bold'],['serif','Se','Serif'],['script','Sc','Script']].forEach(([v,abbr,label])=>{\r\n      const row=document.createElement('button');\r\n      const isA=curFont===v;\r\n      row.style.cssText='display:flex;align-items:center;gap:8px;width:100%;border:none;background:'+(isA?'#fff8f3':'transparent')+';border-radius:6px;padding:6px 8px;cursor:pointer;';\r\n      const samp=document.createElement('span');\r\n      samp.textContent=abbr;\r\n      samp.style.cssText='font-size:13px;font-weight:700;width:22px;text-align:center;color:'+(isA?'var(--orange)':'var(--brown)')+';flex-shrink:0;';\r\n      const name=document.createElement('span');\r\n      name.textContent=label;\r\n      name.style.cssText='font-size:11px;color:'+(isA?'var(--orange)':'var(--brown)')+';font-weight:'+(isA?'700':'400')+';';\r\n      if(isA){const ck=document.createElement('span');ck.textContent='\u2713';ck.style.cssText='margin-left:auto;color:var(--orange);font-size:11px;';row.appendChild(samp);row.appendChild(name);row.appendChild(ck);}\r\n      else{row.appendChild(samp);row.appendChild(name);}\r\n      row.addEventListener('click',e=>{\r\n        e.stopPropagation();\r\n        const next=curFont===v?'':v;\r\n        if(!window.lineOpts[i])window.lineOpts[i]={};\r\n        if(next){window.lineOpts[i].fontOverride=next;}\r\n        else{delete window.lineOpts[i].fontOverride;}\r\n        window.lineOpts[i].font=next;\r\n        fPop.style.display='none';\r\n        if(next){window.lineOpts[i].fontOverride=next;}\r\n        else{delete window.lineOpts[i].fontOverride;delete window.lineOpts[i].hindiText;}\r\n        renderSimple();renderSizeBar();renderLineChips();\r\n        ntRefreshHindiHint();\r\n      });\r\n      fPop.appendChild(row);\r\n    });\r\n    fBtn.appendChild(fPop);\r\n    fBtn.addEventListener('click',e=>{e.stopPropagation();fPop.style.display=fPop.style.display==='none'?'block':'none';});\r\n    document.addEventListener('click',()=>{fPop.style.display='none';},{capture:false});\r\n\r\n\r\n\r\n    const breakBtn=document.createElement('button');\r\n    breakBtn.className='line-chip-btn';breakBtn.textContent='\u21E5';breakBtn.title='Break into 2 lines';\r\n    const wordCount=(line||'').trim().split(/\\s+/).filter(Boolean).length;if(wordCount<2||curLines.length>=4)breakBtn.style.display='none';\r\n    breakBtn.addEventListener('click',e=>{e.stopPropagation();breakLine(i);});\r\n\r\n    // Icon button \u2014 uses uploaded icons from NT_CUSTOM_ICONS\r\n    const iconBtn=document.createElement('button');\r\n    iconBtn.className='line-chip-btn'+(opt.iconKey?' on':'');\r\n    iconBtn.style.cssText='position:relative;white-space:nowrap;flex-shrink:0;'+(ntHasIcons()?'':'opacity:0.55;');\r\n    iconBtn.title=ntHasIcons()?'Add icon':'No icons yet \u2014 see Theme \u2192 Customise \u2192 Nukkad Customiser \u2192 Add block \u2192 Custom icon';\r\n    if(opt.iconKey){\r\n      const thumb=document.createElement('img');thumb.src=opt.iconKey;thumb.alt='';\r\n      thumb.style.cssText='width:14px;height:14px;object-fit:contain;vertical-align:middle;margin-right:3px;';\r\n      iconBtn.innerHTML='';iconBtn.appendChild(thumb);iconBtn.appendChild(document.createTextNode('Icon'));\r\n    } else {iconBtn.textContent='Icon';}\r\n    const picker=ntMakeIconPicker(\r\n      ()=>(window.lineOpts[i]||{}).iconKey||'',\r\n      (k)=>{\r\n        if(!window.lineOpts[i])window.lineOpts[i]={};\r\n        window.lineOpts[i].iconKey=k;\r\n        if(!window.lineOpts[i].iconSize)window.lineOpts[i].iconSize=uniformFs999;\r\n        renderSimple();renderSizeBar();\r\n        // update thumb WITHOUT destroying picker (preserve picker child)\r\n        Array.from(iconBtn.childNodes).forEach(n=>{if(n!==picker)n.parentNode.removeChild(n);});\r\n        if(k){\r\n          const thumb=document.createElement('img');thumb.src=k;thumb.alt='';thumb.style.cssText='width:14px;height:14px;object-fit:contain;vertical-align:middle;margin-right:3px;';\r\n          iconBtn.insertBefore(thumb,picker);\r\n          iconBtn.insertBefore(document.createTextNode('Icon'),picker);\r\n          iconBtn.classList.add('on');\r\n        } else {\r\n          iconBtn.insertBefore(document.createTextNode('Icon'),picker);\r\n          iconBtn.classList.remove('on');\r\n        }\r\n      },\r\n      ()=>window.lineOpts[i]||{},\r\n      (opts)=>{ if(!window.lineOpts[i])window.lineOpts[i]={}; Object.assign(window.lineOpts[i],opts); renderSimple();renderSizeBar(); },\r\n      ()=>{},\r\n      (line||'').trim().split(/\\s+/).filter(Boolean).length\r\n    );\r\n    iconBtn.appendChild(picker);\r\n    picker.addEventListener('click',e=>e.stopPropagation());\r\n    iconBtn.addEventListener('click',e=>{\r\n      e.stopPropagation();\r\n      document.querySelectorAll('.lc-open-picker').forEach(p=>{if(p!==picker){p.style.display='none';p.classList.remove('lc-open-picker');}});\r\n      const isOpen=picker.classList.contains('lc-open-picker');\r\n      picker.style.display=isOpen?'none':'block';\r\n      picker.classList.toggle('lc-open-picker',!isOpen);\r\n      if(!isOpen){\r\n        setTimeout(function(){\r\n          function _closeP(ev){\r\n            if(!iconBtn.contains(ev.target)){\r\n              picker.style.display='none';\r\n              picker.classList.remove('lc-open-picker');\r\n              document.removeEventListener('click',_closeP);\r\n            }\r\n          }\r\n          document.addEventListener('click',_closeP);\r\n        },0);\r\n      }\r\n    });\r\n\r\n    chip.appendChild(handle);chip.appendChild(textSpan);chip.appendChild(textInp);chip.appendChild(charCount);\r\n    chip.appendChild(fBtn);chip.appendChild(breakBtn);\r\n    chip.appendChild(iconBtn);\r\n\r\n    // \u2500\u2500 WIDE TOGGLE \u2014 hidden for now \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n    if(false && ntWideEligible(i, curLines)){\r\n      const isWide = !!(opt.wide);\r\n      const wideCharge = ntWideCharge(i, curLines);\r\n      const wideBtn = document.createElement('button');\r\n      wideBtn.className = 'line-chip-btn' + (isWide ? ' on' : '');\r\n      wideBtn.textContent = '\u2194 Wide';\r\n      wideBtn.title = 'Make this line wider \u00B7 +\u20B9' + wideCharge;\r\n      if(isWide) wideBtn.style.cssText = 'border-color:var(--orange);color:var(--orange);font-size:10px;font-weight:700;white-space:nowrap;flex-shrink:0;';\r\n      else wideBtn.style.cssText = 'font-size:10px;white-space:nowrap;flex-shrink:0;';\r\n      wideBtn.addEventListener('click', e=>{\r\n        e.stopPropagation();\r\n        if(!window.lineOpts[i]) window.lineOpts[i]={};\r\n        window.lineOpts[i].wide = !isWide;\r\n        renderSimple(); renderLineChips(); renderSizeBar();\r\n      });\r\n      chip.appendChild(wideBtn);\r\n      // Sub-label below chip when wide is on\r\n      if(isWide){\r\n        const wideLbl = document.createElement('div');\r\n        wideLbl.style.cssText = 'font-size:9px;color:var(--orange);font-weight:600;padding:3px 10px 6px 32px;';\r\n        wideLbl.textContent = '\u21B3 wider line \u00B7 +\u20B9' + wideCharge;\r\n        container.appendChild(chip);\r\n        container.appendChild(wideLbl);\r\n        if(i < curLines.length-1){\r\n          const mz=document.createElement('div');mz.className='line-merge-zone';\r\n          const mb=document.createElement('button');mb.className='line-merge-btn';mb.textContent='\u2195 merge lines';mb.style.display='none';\r\n          mb.addEventListener('click',e=>{e.stopPropagation();mergeLine(i);});\r\n          mz.appendChild(mb);container.appendChild(mz);\r\n        }\r\n        return; // skip normal append below since we already appended\r\n      }\r\n    }\r\n\r\n    if(true){\r\n      const alignIcons999={\r\n        left:'<svg width=\"14\" height=\"11\" viewBox=\"0 0 14 11\"><rect x=\"0\" y=\"0\" width=\"14\" height=\"2\" rx=\"1\" fill=\"currentColor\"/><rect x=\"0\" y=\"4.5\" width=\"9\" height=\"2\" rx=\"1\" fill=\"currentColor\"/><rect x=\"0\" y=\"9\" width=\"11\" height=\"2\" rx=\"1\" fill=\"currentColor\"/></svg>',\r\n        center:'<svg width=\"14\" height=\"11\" viewBox=\"0 0 14 11\"><rect x=\"0\" y=\"0\" width=\"14\" height=\"2\" rx=\"1\" fill=\"currentColor\"/><rect x=\"2.5\" y=\"4.5\" width=\"9\" height=\"2\" rx=\"1\" fill=\"currentColor\"/><rect x=\"1.5\" y=\"9\" width=\"11\" height=\"2\" rx=\"1\" fill=\"currentColor\"/></svg>',\r\n        right:'<svg width=\"14\" height=\"11\" viewBox=\"0 0 14 11\"><rect x=\"0\" y=\"0\" width=\"14\" height=\"2\" rx=\"1\" fill=\"currentColor\"/><rect x=\"5\" y=\"4.5\" width=\"9\" height=\"2\" rx=\"1\" fill=\"currentColor\"/><rect x=\"3\" y=\"9\" width=\"11\" height=\"2\" rx=\"1\" fill=\"currentColor\"/></svg>'\r\n      };\r\n      const cycle999={left:'center',center:'right',right:'left'};\r\n      const chipAlign999=(window.lineOpts[i]&&window.lineOpts[i].align)||'center';\r\n      const aBtn999=document.createElement('button');\r\n      aBtn999.className='line-chip-btn'+(chipAlign999!=='center'?' on':'');\r\n      aBtn999.style.cssText='flex-shrink:0;padding:3px 6px;display:flex;align-items:center;justify-content:center;'+(chipAlign999!=='center'?'border-color:var(--orange);color:var(--orange);':'');\r\n      aBtn999.innerHTML=alignIcons999[chipAlign999];\r\n      aBtn999.addEventListener('click',e=>{\r\n        e.stopPropagation();\r\n        if(!window.lineOpts[i])window.lineOpts[i]={};\r\n        window.lineOpts[i].align=cycle999[chipAlign999];\r\n        renderSimple();renderLineChips();\r\n      });\r\n      chip.appendChild(aBtn999);\r\n    }\r\n\r\n    chip.addEventListener('dragstart',e=>{if(!chip.draggable)return;dragSrc=i;chip.classList.add('dragging');e.dataTransfer.effectAllowed='move';});\r\n    chip.addEventListener('dragend',()=>{chip.classList.remove('dragging');document.querySelectorAll('.line-chip').forEach(c=>c.classList.remove('drag-over'));});\r\n    chip.addEventListener('dragover',e=>{e.preventDefault();chip.classList.add('drag-over');});\r\n    chip.addEventListener('dragleave',()=>chip.classList.remove('drag-over'));\r\n    chip.addEventListener('drop',e=>{\r\n      e.preventDefault();chip.classList.remove('drag-over');\r\n      const dest=parseInt(chip.dataset.index);\r\n      if(dragSrc===null||dragSrc===dest)return;\r\n      const nl=[...curLines];const[mv]=nl.splice(dragSrc,1);nl.splice(dest,0,mv);\r\n      const no=[...window.lineOpts];const[mo]=no.splice(dragSrc,1);no.splice(dest,0,mo);\r\n      curLines=nl;window.lineOpts=no;\r\n      renderSimple();renderPuThumb();renderLineChips();renderSizeBar();\r\n    });\r\n    let touchY=0;\r\n    chip.addEventListener('touchstart',e=>{touchY=e.touches[0].clientY;dragSrc=i;},{passive:true});\r\n    chip.addEventListener('touchend',e=>{\r\n      const diff=e.changedTouches[0].clientY-touchY;\r\n      if(Math.abs(diff)<30)return;\r\n      const dest=diff>0?Math.min(curLines.length-1,i+1):Math.max(0,i-1);\r\n      if(dest===i)return;\r\n      const nl=[...curLines];const[mv]=nl.splice(i,1);nl.splice(dest,0,mv);\r\n      const no=[...window.lineOpts];const[mo]=no.splice(i,1);no.splice(dest,0,mo);\r\n      curLines=nl;window.lineOpts=no;\r\n      renderSimple();renderPuThumb();renderLineChips();renderSizeBar();\r\n    });\r\n\r\n    container.appendChild(chip);\r\n\r\n    if(i<curLines.length-1){\r\n      const mz=document.createElement('div');mz.className='line-merge-zone';\r\n      const mb=document.createElement('button');mb.className='line-merge-btn';mb.textContent='\u2195 merge lines';mb.style.display='none';\r\n      mb.addEventListener('click',e=>{e.stopPropagation();mergeLine(i);});\r\n      mz.appendChild(mb);container.appendChild(mz);\r\n    }\r\n  });\r\n\r\n}\r\n\r\nfunction toggleQuickEdit(){\r\n  const bar=document.getElementById('quickEditBar');\r\n  const inp=document.getElementById('quickEditInp');\r\n  if(bar.style.display==='none'||!bar.style.display){\r\n    bar.style.display='block';\r\n    inp.value=curLines.join(' ');\r\n    inp.focus();inp.select();\r\n  } else {bar.style.display='none';}\r\n}\r\n\r\nfunction applyQuickEdit(){\r\n  const v=document.getElementById('quickEditInp').value.trim();\r\n  if(!v)return;\r\n  const words=v.split(' ');const lines=[];let cur='';\r\n  words.forEach(w=>{if((cur+' '+w).trim().length>12&&cur){lines.push(cur.trim());cur=w;}else cur=(cur+' '+w).trim();});\r\n  if(cur)lines.push(cur);\r\n  curLines=[...lines];window.lineOpts=curLines.map(()=>({font:''}));\r\n  if(!isNamed&&quickDetect(v)){\r\n    isNamed=true;\r\n    document.getElementById('tbPrice').textContent='\u20B91,299';\r\n    const _tbr=document.getElementById('tbReason');if(_tbr)_tbr.textContent='Personalised piece';\r\n    const tb=document.getElementById('tierBadge');if(tb)tb.classList.add('show');\r\n  }\r\n  renderSimple();renderPuThumb();renderSizeBar();\r\n  document.getElementById('quickEditBar').style.display='none';\r\n}\r\n\r\nfunction showLineInfo(){\r\n  const reply=document.getElementById('changeReqReply');\r\n  const ch=curLines.join(' ').length;\r\n  const inch1line=ch>15?10:ch>10?9:8;\r\n  const price1line=inch1line===10?1199:inch1line===9?1099:999;\r\n  reply.style.display='block';\r\n  reply.innerHTML=`<b>1 line version:</b> Your text needs a ${inch1line}\" piece at \u20B9${price1line}. Currently it's split across ${curLines.length} lines at \u20B9${curPrice} which looks better carved. Want to proceed with 1 line? <a href=\"#\" onclick=\"event.preventDefault();makeOneLine()\" style=\"color:var(--orange);font-weight:600;\">Yes, try it \u2192</a>`;\r\n}\r\n\r\nfunction makeOneLine(){\r\n  curLines=[curLines.join(' ')];renderSimple();renderPuThumb();\r\n  document.getElementById('changeReqReply').style.display='none';\r\n}\r\n\r\nasync function handleChangeReq(){\r\n  const inp=document.getElementById('changeReqInp');\r\n  const req=inp.value.trim();if(!req)return;\r\n  const reply=document.getElementById('changeReqReply');\r\n  reply.style.display='block';reply.textContent='Thinking\u2026';\r\n  const sys=`You are a helpful assistant for NukkadTales wooden pieces.\r\nCurrent design: ${JSON.stringify(curLines)} \u2014 ${curPrice > 999?'\u20B91,299 personalised':'\u20B9999 quote piece'}\r\nCustomer has a change request. Respond in 2-3 short sentences:\r\n- If they want fewer lines/1 line: tell them the size needed and price (e.g. \"1 line needs a 6 inch piece at \u20B9899, or keep 2 lines at \u20B9999 \u2014 your choice\")\r\n- If they want different text: tell them to update the search above\r\n- If they want different layout: tell them to try the Bold/Serif/Script font options\r\nKeep it warm, direct, helpful. No lectures.`;\r\n  try{\r\n    const raw=await callAI(MODEL_SUGG,sys,req,200);\r\n    reply.textContent=raw.trim();\r\n    inp.value='';\r\n  }catch(e){reply.textContent='Could not process \u2014 try rephrasing.';}\r\n}\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// PERSONAL\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nlet iconDragPos={x:50,y:20};\r\nlet isDragging=false;\r\nlet originalCurLines=[];\r\n\r\nfunction goPersonal(){\r\n  isNamed=true;\r\n  selC4=selC3;\r\n  // Ensure selected color is dark enough to be visible on cream canvas\r\n  var _cols4=ntGetColors();\r\n  if(!_cols4[selC4]||_cols4[selC4].lt)selC4=_ntDefaultColorIdx();\r\n  window.s4NameLine='';\r\n  window.s4NameLines=[''];\r\n  window.s4NameLineOpts=[{}];\r\n  if(!window.s4LineOpts||window.s4LineOpts.length!==curLines.length)\r\n    window.s4LineOpts=curLines.map(()=>({}));\r\n  originalCurLines=[...curLines];\r\n  try{document.getElementById('skipBar').style.display='flex';}catch(e){}\r\n  try{document.getElementById('prevQWrap').style.display='block';}catch(e){}\r\n  try{document.getElementById('prevQText').textContent=curLines.join(' \u00B7 ');}catch(e){}\r\n  initS4();\r\n}\r\n\r\nfunction initS4(){\r\n  showSt('stagePersonal');\r\n\r\n  // \u2500\u2500 FIX CANVAS VISIBILITY FIRST (before any render) \u2500\u2500\r\n  // Remove any sticky collapse state from previous session\r\n  var _s4w=document.getElementById('s4Wrap');\r\n  if(_s4w){_s4w.classList.remove('nt-collapsed');_s4w.style.cssText='position:relative;margin-top:4px;';}\r\n  var _cw=document.getElementById('ntCanvasWrap');\r\n  if(_cw){\r\n    _cw.style.cssText='max-height:none!important;overflow:visible!important;opacity:1!important;display:block!important;transition:none!important;';\r\n  }\r\n  var _ss=document.getElementById('ntStickyStyles');if(_ss)_ss.remove();\r\n  // Hide all Hindi UI elements (Hindi removed \u2014 users type directly)\r\n  ['hindiHint','hindiHintS4','fo-hindi','fo4-hindi'].forEach(function(id){\r\n    var el=document.getElementById(id);if(el)el.style.display='none';\r\n  });\r\n  // Increase canvas height by 25% so tall designs (with caps/icons) don't get clipped\r\n  var _bg=document.getElementById('s4Bg');\r\n  if(_bg){\r\n    var _curH=_bg.getBoundingClientRect().height||_bg.offsetHeight;\r\n    if(_curH>0){_bg.style.minHeight=Math.round(_curH*1.25)+'px';}\r\n    else{setTimeout(function(){var h=_bg.getBoundingClientRect().height||_bg.offsetHeight;if(h>0)_bg.style.minHeight=Math.round(h*1.25)+'px';},200);}\r\n  }\r\n  {var _bb=document.getElementById('backBar');if(_bb)_bb.classList.add('show');}document.body.classList.add('has-backbar');\r\n  {var _bbs=document.getElementById('backBarStage');if(_bbs)_bbs.textContent=isNamed?'\u20B91,299 personalised':'\u20B9999 design';}\r\n  renderTry4();\r\n  if(window.s4NameLine===undefined)window.s4NameLine='';\r\n  if(!window.s4NameLines||!window.s4NameLines.length)window.s4NameLines=[''];\r\n  if(!window.s4LineOpts||window.s4LineOpts.length!==curLines.length)window.s4LineOpts=curLines.map(()=>({}));\r\n  const s4BtnEl=document.getElementById('s4Btn');\r\n  if(s4BtnEl)s4BtnEl.textContent=isNamed?((window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart')+' \u00B7 \u20B91,299':((window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart')+' \u00B7 \u20B9999';\r\n  try{const sb=document.getElementById('skipBar');if(sb)sb.style.display=isNamed?'flex':'none';}catch(e){}\r\n  try{document.getElementById('d4offer').style.display='none';}catch(e){}\r\n  var sp = document.getElementById('stagePersonal');\r\n  if(sp) sp.style.display = 'block';\r\n  // Inject video and reviews into personal stage\r\n  setTimeout(function(){if(typeof ntInitVideoReviews==='function')ntInitVideoReviews();},800);\r\n  renderS4LineChips();\r\n  try{renderS4();}catch(e){console.error('[renderS4 error]',e.message, e.stack);}\r\n  try{renderS4SizeBar();}catch(e){console.error('[renderS4SizeBar]',e);}\r\n  try{renderC4();}catch(e){console.error('[renderC4]',e);}\r\n  setTimeout(function(){try{renderC4();}catch(e){}},100);\r\n  setTimeout(function(){try{renderC4();}catch(e){}},500);\r\n  setTimeout(ntShowAddIconBtn,300);\r\n\r\n  [100, 300, 600, 1200, 2000].forEach(function(delay){\r\n    setTimeout(function(){\r\n      var bg=document.getElementById('s4Bg');\r\n      if(bg){\r\n        // Force visible in case something collapsed it\r\n        bg.style.display='flex';\r\n        bg.style.minHeight='160px';\r\n        if(bg.getBoundingClientRect().width>0)bg.style.minWidth='';\r\n        else bg.style.minWidth='280px';\r\n      }\r\n      try{renderS4();}catch(e){}\r\n      try{renderS4SizeBar();}catch(e){}\r\n    }, delay);\r\n  });\r\n  // Sticky canvas disabled - canvas renders in normal flow\r\n  // Apply sticky immediately so canvas is always fixed at top\r\n  var _s4wSticky=document.getElementById('s4Wrap');\r\n  if(_s4wSticky){\r\n    _s4wSticky.classList.remove('nt-collapsed');\r\n    _s4wSticky.style.setProperty('position','sticky','important');\r\n    _s4wSticky.style.setProperty('top','0','important');\r\n    _s4wSticky.style.setProperty('z-index','9999','important');\r\n    _s4wSticky.style.setProperty('background','var(--cream,#f5ede0)','important');\r\n  }\r\n  // Remove ntStickyStyles to kill any leftover collapse CSS\r\n  var _ss=document.getElementById('ntStickyStyles');if(_ss)_ss.remove();\r\n  var _cw=document.getElementById('ntCanvasWrap');\r\n  if(_cw){_cw.style.transition='none';_cw.style.maxHeight='none';_cw.style.opacity='1';_cw.style.overflow='visible';_cw.style.display='block';}\r\n\r\n  // Init scroll listener for collapse after 2s (canvas already visible by then)\r\n  setTimeout(function(){\r\n    var cw=document.getElementById('ntCanvasWrap');\r\n    if(cw)cw.style.cssText='max-height:none!important;overflow:visible!important;opacity:1!important;display:block!important;transition:none!important;';\r\n    var s4w=document.getElementById('s4Wrap');\r\n    if(s4w)s4w.classList.remove('nt-collapsed');\r\n    ntInitStickyCanvas();\r\n  },2000);\r\n  window.scrollTo({top:0,behavior:'smooth'});\r\n}\r\n\r\nfunction renderS4LineChips(){\r\n  const container=document.getElementById('s4LineChips');\r\n  if(!container)return;\r\n  container.innerHTML='';\r\n  if(!window.s4LineOpts)window.s4LineOpts=curLines.map(()=>({}));\r\n  while(window.s4LineOpts.length<curLines.length)window.s4LineOpts.push({});\r\n  if(!window.s4NameLines)window.s4NameLines=[''];\r\n\r\n  const totalLines=curLines.length+window.s4NameLines.filter(Boolean).length;\r\n  const MAX_LINES=4;\r\n\r\n  let dragSrc4Name=null;\r\n  const makeChip=(lineText, isName, idx)=>{\r\n    const chip=document.createElement('div');chip.className='line-chip';chip.style.background='#fff';chip.draggable=true;chip.dataset.index=idx;chip.dataset.isname=isName?'1':'0';\r\n\r\n    const isEmpty=isName&&!lineText;\r\n    const txt=document.createElement('span');txt.className='line-chip-text';\r\n    txt.textContent=isEmpty?'Type a name / text here\u2026':lineText;\r\n    if(isEmpty)txt.style.cssText='flex:1;color:var(--muted);font-style:italic;font-size:12px;cursor:text;padding:0;';\r\n    else txt.style.cssText='flex:1;cursor:text;';\r\n\r\n    const inp=document.createElement('input');\r\n    // Always read fresh from curLines/s4NameLines to prevent stale values\r\n    inp.value=(isName?(window.s4NameLines[idx]||''):(curLines[idx]||''));\r\n    inp.placeholder=isName?'Type a name / text here\u2026':'';\r\n    inp.className='line-chip-inp';inp.style.display='none';inp.style.flex='1';\r\n\r\n    const ckBtn=document.createElement('button');\r\n    ckBtn.className='line-chip-btn';ckBtn.textContent='\u2713';\r\n    ckBtn.style.cssText='display:none;color:var(--orange);border-color:var(--orange);font-size:12px;font-weight:700;flex-shrink:0;';\r\n\r\n    const commitEdit=()=>{\r\n      const trimmed=inp.value.trim();\r\n      inp.style.display='none';ckBtn.style.display='none';txt.style.display='';\r\n      if(isName){\r\n        window.s4NameLines[idx]=trimmed;\r\n        window.s4NameLine=window.s4NameLines.filter(Boolean).join(' & ');\r\n        if(trimmed)isNamed=true;\r\n      } else {\r\n        const hasIcon=!!(window.s4LineOpts[idx]||{}).iconKey;\r\n        if(trimmed){curLines[idx]=trimmed;}\r\n        else if(!hasIcon){curLines.splice(idx,1);window.s4LineOpts.splice(idx,1);}\r\n        else{curLines[idx]='';}\r\n        if(!isNamed&&quickDetect(curLines.join(' '))){isNamed=true;}\r\n      }\r\n      // Keep s4LineOpts in sync with curLines length\r\n      while(window.s4LineOpts.length<curLines.length)window.s4LineOpts.push({});\r\n      window.s4LineOpts=window.s4LineOpts.slice(0,curLines.length);\r\n      renderS4LineChips();renderS4();renderS4SizeBar();\r\n      // Update compact bar text\r\n      var _ct=document.getElementById('ntCompactText');\r\n      if(_ct)_ct.textContent=curLines.filter(Boolean).join(' \u00B7 ');\r\n    };\r\n\r\n    const startEdit=()=>{\r\n      txt.style.display='none';\r\n      inp.style.display='block';\r\n      ckBtn.style.display='block';\r\n      inp.value=lineText||'';\r\n      setTimeout(()=>{inp.focus();inp.select();},0);\r\n    };\r\n\r\n    ckBtn.addEventListener('mousedown',e=>{e.preventDefault();});\r\n    ckBtn.addEventListener('click',e=>{e.stopPropagation();commitEdit();});\r\n    inp.addEventListener('blur',e=>{setTimeout(()=>{if(document.activeElement!==ckBtn)commitEdit();},150);});\r\n    inp.addEventListener('input',()=>{\r\n      const n=(inp.value||'').replace(/\\s/g,'').length;\r\n      let cc=inp._cc;\r\n      if(!cc){cc=document.createElement('span');cc.style.cssText='font-size:9px;color:var(--light);flex-shrink:0;margin-left:4px;';inp._cc=cc;inp.parentNode&&inp.after(cc);}\r\n      cc.textContent=n+'L';\r\n      cc.style.color=n>9?'var(--orange)':n>7?'#b09a88':'var(--light)';\r\n      // Live preview while typing - temporarily set value, render, then restore\r\n      try{\r\n        const v=inp.value.trim();\r\n        const _savedQ=curLines[idx];\r\n        const _savedN=(window.s4NameLines||[])[idx];\r\n        if(!isName)curLines[idx]=v||_savedQ;\r\n        else{if(!window.s4NameLines)window.s4NameLines=[''];window.s4NameLines[idx]=v||'';}\r\n        renderS4();\r\n        // Restore so commitEdit can set permanently\r\n        if(!isName)curLines[idx]=_savedQ;\r\n        else window.s4NameLines[idx]=_savedN||'';\r\n      }catch(e){}\r\n    });\r\n    inp.addEventListener('keydown',e=>{\r\n      if(e.key==='Enter'){e.preventDefault();commitEdit();}\r\n      if(e.key==='Escape'){inp.style.display='none';ckBtn.style.display='none';txt.style.display='';}\r\n    });\r\n\r\n    const handle=document.createElement('span');\r\n    handle.className='line-chip-handle';handle.textContent='\u283F';\r\n    chip.insertBefore(handle, chip.firstChild);\r\n    chip.appendChild(txt);chip.appendChild(inp);chip.appendChild(ckBtn);\r\n\r\n    if(isNamed&&(!isName||lineText)){\r\n      const editBtn=document.createElement('button');\r\n      editBtn.className='line-chip-btn';\r\n      editBtn.textContent='Edit \u270E';editBtn.title='Edit text';\r\n      editBtn.style.cssText='font-size:10px;white-space:nowrap;flex-shrink:0;';\r\n      editBtn.addEventListener('click',e=>{\r\n        e.stopPropagation();\r\n        editBtn.style.display='none'; // hide when editing\r\n        startEdit();\r\n      });\r\n      // Show edit button again after commit\r\n      const _origCommit=commitEdit;\r\n      // patch: re-show editBtn on commitEdit (called from blur/enter/ckBtn)\r\n      inp.addEventListener('blur',()=>{setTimeout(()=>{editBtn.style.display='';},200);});\r\n      ckBtn.addEventListener('click',()=>{setTimeout(()=>{editBtn.style.display='';},50);});\r\n      chip.appendChild(editBtn);\r\n    }\r\n    if(isName&&!lineText){\r\n      txt.style.cursor='text';\r\n      txt.addEventListener('click',startEdit);\r\n    }\r\n\r\n    const opt_=isName?{}:(window.s4LineOpts[idx]||{});\r\n    const curF=isName?((window.s4NameFontOpts&&window.s4NameFontOpts[idx])||''):(opt_.fontOverride||'');\r\n    const fontLabels1299={'sans':'Bold','serif':'Serif','script':'Script'};\r\n    const fBtn4=document.createElement('button');\r\n    fBtn4.className='line-chip-btn'+(curF?' on':'');\r\n    if(curF)fBtn4.style.cssText='font-size:10px;font-weight:700;white-space:nowrap;flex-shrink:0;position:relative;';\r\n    else fBtn4.style.cssText='font-size:10px;white-space:nowrap;flex-shrink:0;position:relative;';\r\n    const fBtn4Lbl=document.createElement('span');\r\n    fBtn4Lbl.textContent=curF?(fontLabels1299[curF]||'Font'):'Font';\r\n    fBtn4.appendChild(fBtn4Lbl);\r\n    const fPop4=document.createElement('div');\r\n    fPop4.style.cssText='display:none;position:absolute;left:0;top:110%;z-index:300;background:#fff;border:1.5px solid var(--border);border-radius:10px;padding:8px;box-shadow:0 6px 24px rgba(0,0,0,.15);min-width:140px;';\r\n    [['sans','B','Bold'],['serif','Se','Serif'],['script','Sc','Script']].forEach(([v,abbr,label])=>{\r\n      const row=document.createElement('button');\r\n      const isA=curF===v;\r\n      row.style.cssText='display:flex;align-items:center;gap:8px;width:100%;border:none;background:'+(isA?'#fff8f3':'transparent')+';border-radius:6px;padding:6px 8px;cursor:pointer;';\r\n      const samp=document.createElement('span');\r\n      samp.textContent=abbr;\r\n      samp.style.cssText='font-size:13px;font-weight:700;width:22px;text-align:center;color:'+(isA?'var(--orange)':'var(--brown)')+';flex-shrink:0;';\r\n      const nm=document.createElement('span');\r\n      nm.textContent=label;\r\n      nm.style.cssText='font-size:11px;color:'+(isA?'var(--orange)':'var(--brown)')+';font-weight:'+(isA?'700':'400')+';';\r\n      if(isA){const ck=document.createElement('span');ck.textContent='\u2713';ck.style.cssText='margin-left:auto;color:var(--orange);font-size:11px;';row.appendChild(samp);row.appendChild(nm);row.appendChild(ck);}\r\n      else{row.appendChild(samp);row.appendChild(nm);}\r\n      row.addEventListener('click',e=>{\r\n        e.stopPropagation();\r\n        const next=curF===v?'':v;\r\n        if(!isName){\r\n          if(!window.s4LineOpts[idx])window.s4LineOpts[idx]={};\r\n          if(next){window.s4LineOpts[idx].fontOverride=next;}\r\n          else{delete window.s4LineOpts[idx].fontOverride;delete window.s4LineOpts[idx].hindiText;}\r\n          renderS4LineChips();renderS4();\r\n        } else {\r\n          if(!window.s4NameFontOpts)window.s4NameFontOpts={};\r\n          if(next)window.s4NameFontOpts[idx]=next;\r\n          else delete window.s4NameFontOpts[idx];\r\n          renderS4LineChips();renderS4();ntRefreshHindiHint();\r\n        }\r\n        fPop4.style.display='none';\r\n      });\r\n      fPop4.appendChild(row);\r\n    });\r\n    fBtn4.appendChild(fPop4);\r\n    fBtn4.addEventListener('click',e=>{e.stopPropagation();fPop4.style.display=fPop4.style.display==='none'?'block':'none';});\r\n    document.addEventListener('click',()=>{fPop4.style.display='none';},{capture:false});\r\n    chip.appendChild(fBtn4);\r\n\r\n\r\n\r\n    const totalChipLines=curLines.length+window.s4NameLines.filter(Boolean).length;\r\n    if(true){\r\n      const alignIcons={\r\n        left:'<svg width=\"14\" height=\"11\" viewBox=\"0 0 14 11\"><rect x=\"0\" y=\"0\" width=\"14\" height=\"2\" rx=\"1\" fill=\"#3d2b1a\"/><rect x=\"0\" y=\"4.5\" width=\"9\" height=\"2\" rx=\"1\" fill=\"#3d2b1a\"/><rect x=\"0\" y=\"9\" width=\"11\" height=\"2\" rx=\"1\" fill=\"#3d2b1a\"/></svg>',\r\n        center:'<svg width=\"14\" height=\"11\" viewBox=\"0 0 14 11\"><rect x=\"0\" y=\"0\" width=\"14\" height=\"2\" rx=\"1\" fill=\"#3d2b1a\"/><rect x=\"2.5\" y=\"4.5\" width=\"9\" height=\"2\" rx=\"1\" fill=\"#3d2b1a\"/><rect x=\"1.5\" y=\"9\" width=\"11\" height=\"2\" rx=\"1\" fill=\"#3d2b1a\"/></svg>',\r\n        right:'<svg width=\"14\" height=\"11\" viewBox=\"0 0 14 11\"><rect x=\"0\" y=\"0\" width=\"14\" height=\"2\" rx=\"1\" fill=\"#3d2b1a\"/><rect x=\"5\" y=\"4.5\" width=\"9\" height=\"2\" rx=\"1\" fill=\"#3d2b1a\"/><rect x=\"3\" y=\"9\" width=\"11\" height=\"2\" rx=\"1\" fill=\"#3d2b1a\"/></svg>'\r\n      };\r\n      const cycle={left:'center',center:'right',right:'left'};\r\n      const chipAlign=isName?((window.s4NameLineOpts&&window.s4NameLineOpts[idx]&&window.s4NameLineOpts[idx].align)||'center'):((window.s4LineOpts[idx]&&window.s4LineOpts[idx].align)||'center');\r\n      const safeAlign=(alignIcons[chipAlign]?chipAlign:'center');\r\n      const aBtn=document.createElement('button');\r\n      aBtn.className='line-chip-btn'+(safeAlign!=='center'?' on':'');\r\n      aBtn.style.cssText='flex-shrink:0;padding:3px 6px;display:flex;align-items:center;justify-content:center;background:'+(safeAlign!=='center'?'#fff8f3':'')+'!important;border-color:'+(safeAlign!=='center'?'var(--orange)':'')+'!important;';\r\n      aBtn.innerHTML=alignIcons[safeAlign];\r\n      aBtn.title='Alignment: '+safeAlign;\r\n      aBtn.addEventListener('click',e=>{\r\n        e.stopPropagation();\r\n        const next=cycle[safeAlign];\r\n        if(isName){const o=getOpts4();o.align=next;}\r\n        else{if(!window.s4LineOpts[idx])window.s4LineOpts[idx]={};window.s4LineOpts[idx].align=next;}\r\n        renderS4LineChips();renderS4();\r\n      });\r\n      chip.appendChild(aBtn);\r\n    }\r\n    const nameOpts4=()=>{if(!window.s4NameLineOpts)window.s4NameLineOpts=[];while(window.s4NameLineOpts.length<=idx)window.s4NameLineOpts.push({});return window.s4NameLineOpts[idx];};\r\n    const getOpts4=()=>isName?nameOpts4():(window.s4LineOpts[idx]||{});\r\n    const _defIconSz=uniformFs4;\r\n    // Icon button removed \u2014 now handled by icon strips below chips\r\n\r\n    // \u2500\u2500 WIDE TOGGLE (s4) \u2014 hidden for now \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n    if(false && !isName && ntWideEligible(idx, curLines)){\r\n      const _isWideS4 = !!(window.s4LineOpts[idx]&&window.s4LineOpts[idx].wide);\r\n      const _wideChargeS4 = ntWideCharge(idx, curLines);\r\n      const wideBtnS4 = document.createElement('button');\r\n      wideBtnS4.className = 'line-chip-btn' + (_isWideS4 ? ' on' : '');\r\n      wideBtnS4.textContent = '\u2194 Wide';\r\n      wideBtnS4.title = 'Make this line wider \u00B7 +\u20B9' + _wideChargeS4;\r\n      if(_isWideS4) wideBtnS4.style.cssText = 'border-color:var(--orange);color:var(--orange);font-size:10px;font-weight:700;white-space:nowrap;flex-shrink:0;';\r\n      else wideBtnS4.style.cssText = 'font-size:10px;white-space:nowrap;flex-shrink:0;';\r\n      wideBtnS4.addEventListener('click', e=>{\r\n        e.stopPropagation();\r\n        if(!window.s4LineOpts[idx]) window.s4LineOpts[idx]={};\r\n        window.s4LineOpts[idx].wide = !_isWideS4;\r\n        renderS4LineChips(); renderS4(); renderS4SizeBar();\r\n      });\r\n      chip.appendChild(wideBtnS4);\r\n    }\r\n\r\n    const isLastName=isName&&window.s4NameLines.length<=1;\r\n    if(!isLastName){\r\n      const delBtn=document.createElement('button');delBtn.className='line-chip-btn';delBtn.textContent='\u2715';\r\n      delBtn.style.cssText='font-size:10px;color:var(--muted);border-color:transparent;background:transparent;padding:2px 5px;';\r\n      delBtn.addEventListener('click',e=>{\r\n        e.stopPropagation();\r\n        if(isName){window.s4NameLines.splice(idx,1);if(!window.s4NameLines.length)window.s4NameLines=[''];}\r\n        else{curLines.splice(idx,1);window.s4LineOpts.splice(idx,1);}\r\n        window.s4NameLine=window.s4NameLines.filter(Boolean).join(' & ');\r\n        renderS4LineChips();renderS4();renderS4SizeBar();\r\n      });\r\n      chip.appendChild(delBtn);\r\n    }\r\n    chip.addEventListener('dragstart',e=>{\r\n      if(isName)dragSrc4Name=idx;else dragSrc4=idx;\r\n      chip.classList.add('dragging');e.dataTransfer.effectAllowed='move';\r\n    });\r\n    chip.addEventListener('dragend',()=>{chip.classList.remove('dragging');container.querySelectorAll('.line-chip').forEach(c=>c.classList.remove('drag-over'));});\r\n    chip.addEventListener('dragover',e=>{e.preventDefault();chip.classList.add('drag-over');});\r\n    chip.addEventListener('dragleave',()=>chip.classList.remove('drag-over'));\r\n    chip.addEventListener('drop',e=>{\r\n      e.preventDefault();chip.classList.remove('drag-over');\r\n      const destIdx=parseInt(chip.dataset.index);\r\n      const destIsName=chip.dataset.isname==='1';\r\n      if(!destIsName&&dragSrc4!==null&&dragSrc4!==destIdx){\r\n        const nl=[...curLines];const[mv]=nl.splice(dragSrc4,1);nl.splice(destIdx,0,mv);\r\n        const no=[...window.s4LineOpts];const[mo]=no.splice(dragSrc4,1);no.splice(destIdx,0,mo);\r\n        curLines=nl;window.s4LineOpts=no;dragSrc4=null;\r\n        renderS4LineChips();renderS4();renderS4SizeBar();\r\n      } else if(destIsName&&dragSrc4Name!==null&&dragSrc4Name!==destIdx){\r\n        const nl=[...window.s4NameLines];const[mv]=nl.splice(dragSrc4Name,1);nl.splice(destIdx,0,mv);\r\n        window.s4NameLines=nl;dragSrc4Name=null;\r\n        window.s4NameLine=window.s4NameLines.filter(Boolean).join(' & ');\r\n        renderS4LineChips();renderS4();renderS4SizeBar();\r\n      }\r\n    });\r\n    let s4TouchY=0;\r\n    chip.addEventListener('touchstart',e=>{s4TouchY=e.touches[0].clientY;if(isName)dragSrc4Name=idx;else dragSrc4=idx;},{passive:true});\r\n    chip.addEventListener('touchend',e=>{\r\n      const diff=e.changedTouches[0].clientY-s4TouchY;\r\n      if(Math.abs(diff)<30)return;\r\n      if(!isName){\r\n        const dest=diff>0?Math.min(curLines.length-1,idx+1):Math.max(0,idx-1);\r\n        if(dest===idx)return;\r\n        const nl=[...curLines];const[mv]=nl.splice(idx,1);nl.splice(dest,0,mv);\r\n        const no=[...window.s4LineOpts];const[mo]=no.splice(idx,1);no.splice(dest,0,mo);\r\n        curLines=nl;window.s4LineOpts=no;\r\n      } else {\r\n        const dest=diff>0?Math.min(window.s4NameLines.length-1,idx+1):Math.max(0,idx-1);\r\n        if(dest===idx)return;\r\n        const nl=[...window.s4NameLines];const[mv]=nl.splice(idx,1);nl.splice(dest,0,mv);\r\n        window.s4NameLines=nl;window.s4NameLine=window.s4NameLines.filter(Boolean).join(' & ');\r\n      }\r\n      renderS4LineChips();renderS4();renderS4SizeBar();\r\n    });\r\n    return chip;\r\n  };\r\n\r\n  curLines.forEach((line,i)=>{\r\n    container.appendChild(makeChip(line,false,i));\r\n\r\n    const words=(line||'').trim().split(/\\s+/).filter(Boolean);\r\n    if(words.length>=2){\r\n      const bz=document.createElement('div');bz.style.cssText='display:flex;align-items:center;justify-content:center;gap:6px;padding:2px 0;';\r\n      const brk=document.createElement('button');brk.className='line-merge-btn';brk.textContent='break line';\r\n      // Disable break if already at 4 quote lines\r\n      if(curLines.length>=4){brk.style.opacity='0.4';brk.style.pointerEvents='none';brk.title='Max 4 lines';}\r\n      brk.addEventListener('click',()=>{\r\n        const mid=Math.ceil(words.length/2);\r\n        curLines.splice(i,1,words.slice(0,mid).join(' '),words.slice(mid).join(' '));\r\n        window.s4LineOpts.splice(i,1,{...window.s4LineOpts[i]},{});\r\n        renderS4LineChips();renderS4();renderS4SizeBar();\r\n      });\r\n      bz.appendChild(brk);container.appendChild(bz);\r\n    }\r\n\r\n    if(i<curLines.length-1){\r\n      const mz=document.createElement('div');mz.className='line-merge-zone';\r\n      const mb=document.createElement('button');mb.className='line-merge-btn';mb.textContent='\u2195 merge lines';mb.style.display='none';\r\n      mb.addEventListener('click',e=>{\r\n        e.stopPropagation();\r\n        curLines.splice(i,1,curLines[i]+' '+curLines[i+1]);curLines.splice(i+1,1);\r\n        window.s4LineOpts.splice(i,1,{...window.s4LineOpts[i]});window.s4LineOpts.splice(i+1,1);\r\n        renderS4LineChips();renderS4();renderS4SizeBar();\r\n      });\r\n      mz.appendChild(mb);container.appendChild(mz);\r\n    }\r\n  });\r\n\r\n  if(curLines.length>0&&window.s4NameLines.length>0){\r\n    const _hasName=window.s4NameLines.filter(Boolean).length>0;\r\n    const mz=document.createElement('div');mz.className='line-merge-zone';\r\n    if(!_hasName)mz.style.height='8px';\r\n    const mb=document.createElement('button');mb.className='line-merge-btn';mb.textContent='\u2195 merge these lines';mb.style.display='none';\r\n    if(!_hasName)mb.style.display='none';\r\n    mb.addEventListener('click',e=>{\r\n      e.stopPropagation();\r\n      const lastName=curLines[curLines.length-1];\r\n      const firstName=window.s4NameLines[0]||'';\r\n      if(firstName){curLines[curLines.length-1]=lastName+' '+firstName;window.s4NameLines.splice(0,1);}\r\n      if(!window.s4NameLines.length)window.s4NameLines=[''];\r\n      renderS4LineChips();renderS4();renderS4SizeBar();\r\n    });\r\n    mz.appendChild(mb);container.appendChild(mz);\r\n  }\r\n\r\n  if(!isNamed){return;}\r\n  window.s4NameLines.forEach((name,ni)=>{\r\n    container.appendChild(makeChip(name,true,ni));\r\n    const nw=(name||'').trim().split(/\\s+/).filter(Boolean);\r\n    if(nw.length>=2){\r\n      const bz=document.createElement('div');bz.style.cssText='display:flex;align-items:center;justify-content:center;padding:2px 0;';\r\n      const brk=document.createElement('button');brk.className='line-merge-btn';brk.textContent='break line';\r\n      // Disable break if already at 4 quote lines\r\n      if(curLines.length>=4){brk.style.opacity='0.4';brk.style.pointerEvents='none';brk.title='Max 4 lines';}\r\n      brk.addEventListener('click',()=>{const mid=Math.ceil(nw.length/2);window.s4NameLines.splice(ni,1,nw.slice(0,mid).join(' '),nw.slice(mid).join(' '));window.s4NameLine=window.s4NameLines.filter(Boolean).join(' & ');renderS4LineChips();renderS4();renderS4SizeBar();});\r\n      bz.appendChild(brk);container.appendChild(bz);\r\n    }\r\n    if(ni<window.s4NameLines.length-1&&name&&window.s4NameLines[ni+1]){\r\n      const mz=document.createElement('div');mz.className='line-merge-zone';\r\n      const mb=document.createElement('button');mb.className='line-merge-btn';mb.textContent='\u2195 merge names';mb.style.display='none';\r\n      mb.addEventListener('click',e=>{\r\n        e.stopPropagation();\r\n        window.s4NameLines.splice(ni,2,window.s4NameLines[ni]+' '+window.s4NameLines[ni+1]);\r\n        window.s4NameLine=window.s4NameLines.filter(Boolean).join(' & ');\r\n        renderS4LineChips();renderS4();renderS4SizeBar();\r\n      });\r\n      mz.appendChild(mb);container.appendChild(mz);\r\n    }\r\n  });\r\n\r\n  const currentTotal=curLines.length+window.s4NameLines.length; // count all slots including empty\r\n  if(currentTotal<MAX_LINES){\r\n    const addBtn=document.createElement('button');\r\n    addBtn.style.cssText='margin-top:6px;font-size:11px;color:var(--orange);background:transparent;border:none;cursor:pointer;font-weight:600;padding:4px 0;display:block;';\r\n    addBtn.textContent='+ add another name / text';\r\n    if(!isNamed){addBtn.style.display='none';}\r\n    addBtn.addEventListener('click',()=>{window.s4NameLines.push('');renderS4LineChips();});\r\n    container.appendChild(addBtn);\r\n\r\n\r\n  }\r\n\r\n  renderS4SizeBar();\r\n  ntRenderIconStrips();\r\n}\r\n\r\nfunction renderS4SizeBar(){\r\n  const nameLines=(window.s4NameLines||[]).filter(Boolean);\r\n  const allLines=[...curLines,...nameLines];\r\n  const allOpts=[...(window.s4LineOpts||[]),...(window.s4NameLineOpts||[]).slice(0,nameLines.length)];\r\n  const {inch}=calcSizePrice(allLines,true,allOpts);\r\n  const hasName=nameLines.length>0;\r\n  const aiInch=inch;\r\n  const displayInch=customSizeOverride||aiInch;\r\n  const totalExtra=Math.max(0,displayInch-8)*100; // personal anchor=8\"\r\n  const totalPrice=1299+totalExtra;\r\n\r\n  // always update the size display (+/- number) AND the green AI label\r\n  updateSizeDisplayS4(aiInch);\r\n  const sizeEl=document.getElementById('sizeCurrentS4');\r\n  if(sizeEl)sizeEl.textContent=displayInch;\r\n  // Update the large AI suggested number display\r\n  const aiDispS4=document.getElementById('sizeAiDisplayS4');if(aiDispS4)aiDispS4.textContent=aiInch;\r\n  const noteEl=document.getElementById('sizeAiNoteS4');\r\n  if(noteEl)noteEl.textContent=customSizeOverride&&customSizeOverride!==aiInch?`AI suggests ${aiInch}\"`:'';\r\n\r\n  const btn=document.getElementById('s4Btn');\r\n  if(btn){\r\n    if(!hasName&&!isNamed){btn.textContent=((window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart')+' as quote \u00B7 \u20B9999';btn.style.background='var(--brown)';}\r\n    else{\r\n      // \u2500\u2500 MATRIX PRICING FIX 2 (renderS4SizeBar button) \u2500\u2500\r\n      const lc=Math.min(allLines.length,4);\r\n      const ai=Math.min(Math.max(displayInch,8),24);\r\n      const btnPrice=typeof ntGetPrice==='function'?ntGetPrice(ai,lc):totalPrice;\r\n      btn.textContent=((window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart')+' \u00B7 \u20B9'+btnPrice.toLocaleString('en-IN');\r\n      btn.style.background='';\r\n    }\r\n  }\r\n\r\n  // Place caption \u2014 below stepper\r\n  const s4DescEl=document.getElementById('sizeInfoTextRenderS4');\r\n  if(s4DescEl){\r\n    const descMap={6:'Compact \u00B7 gifting',7:'Desk or shelf',8:'Desk \u00B7 comfortable read',9:'Desk \u00B7 slightly bolder',10:'Sideboard or console',11:'Sideboard \u00B7 makes a statement',12:'Wall piece \u00B7 bold from a distance',13:'Wall piece \u00B7 strong anchor',14:'Large wall',15:'Statement wall piece',16:'Feature wall',18:'Gallery wall',20:'Large installation'};\r\n    s4DescEl.textContent=descMap[displayInch]||(displayInch>20?'Extra large custom piece':'Bold statement piece');\r\n  }\r\n\r\n  // Cream breakdown zone\r\n  const bar=document.getElementById('sizeInfoBarS4');\r\n  const splitTip=document.getElementById('ntSplitTipS4');\r\n  const splitTitle=document.getElementById('ntSplitTipTitle');\r\n  if(bar){\r\n    const totalLinesAll=curLines.length+nameLines.length;\r\n    const _s4WideExtra=ntWideExtra(curLines,window.s4LineOpts||[]);\r\n    const displayPrice=typeof ntGetPrice==='function'?ntGetPrice(Math.min(Math.max(displayInch,8),24),Math.min(allLines.length,4)):1299;\r\n    // Base = what 8\" costs for this line count (from price matrix)\r\n    const lineBase=typeof ntGetPrice==='function'?ntGetPrice(8,Math.min(totalLinesAll,4)):1299;\r\n    const extraAmt=Math.max(0,displayPrice-lineBase-_s4WideExtra); // size extra only\r\n    const allLinesFlat=[...curLines,...nameLines];\r\n    const mx=allLinesFlat.length?Math.max(...allLinesFlat.map(l=>(l||'').replace(/\\s/g,'').length)):0;\r\n    const hasIconOnLine=allOpts.some(o=>o&&o.iconKey);\r\n    const lettersLabel=hasIconOnLine?mx+' letters + icon':mx+' letters';\r\n\r\n    const _txt=(window.NUKKAD_CONFIG&&NUKKAD_CONFIG.txt)||{};\r\n    let baseDesc=(_txt.breakBase||'Base \u00B7 {lines} lines \u00B7 starts at 8\\u2033')\r\n      .replace('{lines}',totalLinesAll);\r\n    let sizeDesc='Size \\u00b7 '+lettersLabel+' needs '+displayInch+'\\u2033';\r\n    let wideDesc='Wide line upgrade';\r\n    // Split tip sub\r\n    var _splitSub=_txt.splitTipSub||'Tap the chip above and use break line';\r\n    document.getElementById('ntSplitTipSub')&&(document.getElementById('ntSplitTipSub').textContent=_splitSub);\r\n\r\n    let html='<div style=\"font-family:\\'DM Sans\\',sans-serif;font-size:11px;font-weight:600;color:#3d2b1a;line-height:2.1;\">';\r\n    html+='<div style=\"display:flex;justify-content:space-between;\"><span>'+baseDesc+'</span><span style=\"color:#3d2b1a;font-weight:800;font-size:12px;\">\\u20b9'+lineBase.toLocaleString('en-IN')+'</span></div>';\r\n    if(extraAmt>0) html+='<div style=\"display:flex;justify-content:space-between;\"><span>'+sizeDesc+'</span><span style=\"color:#c47a45;font-weight:800;font-size:12px;\">+\\u20b9'+extraAmt.toLocaleString('en-IN')+'</span></div>';\r\n    if(_s4WideExtra>0) html+='<div style=\"display:flex;justify-content:space-between;\"><span>'+wideDesc+'</span><span style=\"color:#c47a45;font-weight:800;font-size:12px;\">+\\u20b9'+_s4WideExtra.toLocaleString('en-IN')+'</span></div>';\r\n    html+='</div>';\r\n    html+='<div style=\"height:1px;background:#ddc9b0;margin:6px 0;\"></div>';\r\n    html+='<div style=\"display:flex;justify-content:space-between;align-items:baseline;padding-bottom:12px;\">';\r\n    html+='<span style=\"font-family:\\'DM Sans\\',sans-serif;font-size:12px;color:#3d2b1a;font-weight:700;\">'+(_txt.breakTotal||'Total')+'</span>';\r\n    html+='<span style=\"font-family:\\'Poppins\\',sans-serif;font-weight:900;font-size:16px;color:#3d2b1a;\">\\u20b9'+displayPrice.toLocaleString('en-IN')+'</span>';\r\n    html+='</div>';\r\n\r\n    bar.innerHTML=html;\r\n    bar.style.display='block';\r\n\r\n    // Split tip \u2014 bold SAVE banner\r\n    if(splitTip){\r\n      const sugg=suggestSplit(allLinesFlat, displayPrice, allOpts);\r\n      if(sugg&&sugg.save>0){\r\n        const _longest=allLinesFlat.reduce(function(a,b){return (b||'').replace(/\\s/g,'').length>(a||'').replace(/\\s/g,'').length?b:a;},'');\r\n        splitTip.style.cssText='display:block;background:#1a5c32;border-top:2px solid #14472a;padding:12px 16px;';\r\n        splitTip.innerHTML=\r\n          '<div style=\"font-family:\\'Poppins\\',sans-serif;font-weight:900;font-size:16px;color:#fff;letter-spacing:-0.02em;margin-bottom:2px;\">Save \\u20b9'+sugg.save.toLocaleString('en-IN')+'</div>'\r\n          +'<div style=\"font-family:\\'DM Sans\\',sans-serif;font-size:11px;color:rgba(255,255,255,0.65);margin-bottom:10px;line-height:1.5;\">Break \\u201c'+_longest+'\\u201d into 2 lines</div>'\r\n          +'<button onclick=\"ntBreakLongestLine()\" style=\"background:#fff;color:#1a5c32;border:none;border-radius:20px;padding:8px 0;font-size:12px;font-weight:700;cursor:pointer;font-family:\\'DM Sans\\',sans-serif;width:100%;\">Show me where \\u2192</button>';\r\n      } else {\r\n        splitTip.style.cssText='display:none;';\r\n      }\r\n    }\r\n  }\r\n  // Keep float bar price in sync\r\n  try{var _fb=document.getElementById('ntInlineCommBar');if(_fb&&_fb.classList.contains('show'))ntUpdateFloatBar();}catch(e){}\r\n}\r\n\r\nfunction applySplitSugg(newLines){\r\n  const totalQuote=curLines.length;\r\n  const totalName=window.s4NameLines.filter(Boolean).length;\r\n  const total=totalQuote+totalName;\r\n  const nameCount=totalName||0;\r\n  const quoteCount=Math.max(1,newLines.length-nameCount);\r\n  curLines=newLines.slice(0,quoteCount);\r\n  if(nameCount>0)window.s4NameLines=newLines.slice(quoteCount);\r\n  window.s4LineOpts=curLines.map(()=>({}));\r\n  customSizeOverride=null;\r\n  renderS4LineChips();renderS4();renderS4SizeBar();\r\n}\r\n\r\nfunction handleS4Commission(){\r\n  const nameLines=(window.s4NameLines||[]).filter(Boolean);\r\n  if(!nameLines.length){\r\n  } else {\r\n    console.log('Commission:',{lines:curLines,names:nameLines});\r\n  }\r\n}\r\n\r\n\r\nfunction s4GoBackToQuote(){\r\n  isNamed=false;\r\n  window.s4NameLine='';\r\n  goRender([...curLines],999);\r\n}\r\n\r\nfunction s4FocusName(){\r\n  const nameInp=document.querySelector('#s4LineChips input');\r\n  if(nameInp){nameInp.focus();nameInp.scrollIntoView({behavior:'smooth',block:'center'});}\r\n}\r\n\r\nfunction mergeS4Lines(i){\r\n  const merged=(curLines[i]+' '+curLines[i+1]).trim();\r\n  const nl=[...curLines];nl.splice(i,2,merged);\r\n  curLines=nl;renderS4LineChips();renderS4();renderS4SizeBar();\r\n}\r\n\r\nfunction focusName(){const ni=document.querySelector('#s4LineChips input');if(ni){ni.focus();ni.scrollIntoView({behavior:'smooth',block:'center'});}}\r\n\r\nfunction replaceName(lines,nameInput){\r\n  if(!nameInput)return lines;\r\n  const parts=nameInput.trim().split(/\\s*[&,]\\s*|\\s+/).filter(Boolean);\r\n  let idx=0;\r\n  return lines.map(l=>{\r\n    if(l.includes('NAME')){\r\n      const rep=parts[idx]||parts[0]||nameInput;\r\n      idx++;return l.replace(/NAME/g,rep);\r\n    }\r\n    return l;\r\n  });\r\n}\r\n\r\nfunction updateQuoteLine(){}\r\n\r\nfunction getFont4Cls(isConn,fontOverride){\r\n  if(isConn)return'conn';\r\n  if(fontOverride==='hindi')return'hindi';\r\n  if(fontOverride==='serif'||selFont4==='serif')return'serif';\r\n  if(fontOverride==='script'||selFont4==='script')return'script-main';\r\n  return'sans';\r\n}\r\n\r\nfunction renderS4(){\r\n  const _allC4=ntGetColors();const c=_allC4[selC4]||_allC4[1];\r\n  const nameLines=(window.s4NameLines||[]).filter(Boolean);\r\n  const opts=window.s4LineOpts||[];\r\n  const lines=curLines.length>0?curLines:[];\r\n  // Allow render with just name lines (e.g. after quote line deleted)\r\n  if(!lines.length&&!nameLines.length)return;\r\n  const p=document.createElement('div');p.className='nt-piece';\r\n\r\n  const makeNameSpan=(txt,ni)=>{\r\n    const ns=document.createElement('span');\r\n    const nfo=(window.s4NameFontOpts&&window.s4NameFontOpts[ni])||selFont4||'sans';\r\n    const ff=nfo==='serif'?\"'Playfair Display',serif\":nfo==='script'?\"'Pacifico',cursive\":\"'Poppins',sans-serif\";\r\n    const fw=nfo==='script'?'400':'900';\r\n    const fsName=uniformFs4;\r\n    ns.style.cssText=`font-family:${ff};font-weight:${fw};font-size:${fsName}px;color:${c.fc};margin-top:4px;line-height:0.9;display:block;text-align:center;letter-spacing:-0.02em;paint-order:fill stroke;-webkit-text-stroke:0.75px rgba(0,0,0,0.8);`;\r\n    ns.textContent=txt;\r\n    return ns;\r\n  };\r\n\r\n  const alignSelf=(a)=>a==='left'?'flex-start':a==='right'?'flex-end':'center';\r\n  const block=document.createElement('div');\r\n  block.style.cssText='display:inline-flex;flex-direction:column;align-items:stretch;';\r\n\r\n\r\n  uniformFs4=72;\r\n  const perLineFontSizeS4=[];\r\n  lines.forEach((l,i)=>{\r\n    const opt2=opts[i]||{};\r\n    const lf2=opt2.fontOverride||selFont4||'sans';\r\n    const isH2=lf2==='hindi';\r\n    const dt2=isH2?(opt2.hindiText||l):(opt2.allCaps?l.toUpperCase():l);\r\n    const isWideS4=!!(opt2.wide&&ntWideEligible(i,lines));\r\n    const hasChipIconS4=!!opt2.iconKey;\r\n    // If wide line also has a chip icon, reserve space for it \u2014 cap lower\r\n    const wideMaxS4=hasChipIconS4?58:96;\r\n    const fs2=calcLineFontSize(dt2,lf2==='script',isH2,isWideS4?wideMaxS4:72);\r\n    perLineFontSizeS4.push(fs2);\r\n    if(!isWideS4&&fs2<uniformFs4)uniformFs4=fs2;\r\n  });\r\n  nameLines.forEach((l)=>{\r\n    const fs2=calcLineFontSize(l,false,false,60);\r\n    if(fs2<uniformFs4)uniformFs4=fs2;\r\n  });\r\n\r\n  lines.forEach((l,i)=>{\r\n    const opt=opts[i]||{};\r\n    const lf=opt.fontOverride||selFont4||'sans';\r\n    const isHindi=lf==='hindi';\r\n    const displayText=isHindi?(opt.hindiText||l):(opt.allCaps?l.toUpperCase():l);\r\n    const sp=document.createElement('span');\r\n    sp.className='tl '+(isHindi?'hindi':lf==='serif'?'serif':lf==='script'?'script-main':'sans');\r\n    sp.style.color=c.fc;\r\n    sp.style.webkitTextStroke='0.75px rgba(0,0,0,0.8)';sp.style.paintOrder='fill stroke';\r\n    sp.style.textAlign=opt.align||'center';\r\n    sp.style.lineHeight='0.85';\r\n    const _isWideRenderS4=!!(opt.wide&&ntWideEligible(i,lines));\r\n    const fs4=_isWideRenderS4?(perLineFontSizeS4[i]||uniformFs4):uniformFs4;\r\n    sp.style.fontSize=fs4+'px';\r\n\r\n    if(displayText) sp.textContent=displayText;\r\n    if(opt.iconKey){\r\n      const lineAlign4=opt.align||'center';\r\n      const jc4=lineAlign4==='left'?'flex-start':lineAlign4==='right'?'flex-end':'center';\r\n      const wrap=document.createElement('div');\r\n      wrap.style.cssText='display:flex;align-items:center;justify-content:'+jc4+';gap:2px;'+(i>0?'margin-top:4px;':'');\r\n      const sz=Math.min(opt.iconSize||uniformFs4, uniformFs4);\r\n      const _szCap=Math.round(sz*0.78);\r\n      const _rotS4=opt.iconRotation||0;\r\n      const icEl=document.createElement('img');\r\n      icEl.src=opt.iconKey;icEl.alt='';\r\n      icEl.style.cssText='width:auto;height:'+_szCap+'px;max-width:'+Math.round(_szCap*1.8)+'px;object-fit:contain;flex-shrink:0;display:block;transform:rotate('+_rotS4+'deg);filter:'+ntIconFilter(c.fc)+';';\r\n      if(opt.iconSide==='right'){wrap.appendChild(sp);wrap.appendChild(icEl);}\r\n      else{wrap.appendChild(icEl);wrap.appendChild(sp);}\r\n      block.appendChild(wrap);\r\n    } else {\r\n      block.appendChild(sp);\r\n    }\r\n  });\r\n\r\n  nameLines.forEach((n,ni)=>{\r\n    if(!n)return;\r\n    const nOpt=(window.s4NameLineOpts&&window.s4NameLineOpts[ni])||{};\r\n    const lineAlign=nOpt.align||'center';\r\n    const ns=makeNameSpan(n,ni);\r\n    ns.style.textAlign=lineAlign;\r\n    if(nOpt.iconKey){\r\n      const wrap=document.createElement('span');wrap.style.cssText='display:flex;align-items:center;justify-content:'+alignSelf(lineAlign)+';gap:2px;';\r\n      const sz=Math.min(nOpt.iconSize||uniformFs4, uniformFs4);\r\n      const _szCapN=Math.round(sz*0.78);\r\n      const icElN=document.createElement('img');\r\n      icElN.src=nOpt.iconKey;icElN.alt='';\r\n      icElN.style.cssText='width:auto;height:'+_szCapN+'px;max-width:'+Math.round(_szCapN*1.8)+'px;object-fit:contain;flex-shrink:0;display:block;filter:'+ntIconFilter(c.fc)+';';\r\n      if(nOpt.iconSide==='right'){wrap.appendChild(ns);wrap.appendChild(icElN);}\r\n      else{wrap.appendChild(icElN);wrap.appendChild(ns);}\r\n      block.appendChild(wrap);\r\n    } else {\r\n      block.appendChild(ns);\r\n    }\r\n  });\r\n\r\n  p.appendChild(block);\r\n  const bg=document.getElementById('s4Bg');if(!bg)return;\r\n  // Background: white default, light grey for light colors\r\n  var _bgColor=c.lt?'#f0f0f0':'#ffffff';\r\n  bg.style.display='flex';\r\n  bg.style.minHeight='160px';\r\n  bg.style.visibility='visible';\r\n  bg.style.opacity='1';\r\n  bg.style.background=_bgColor;\r\n  // Only force visible if NOT intentionally collapsed by scroll\r\n  var _s4wr=document.getElementById('s4Wrap');\r\n  if(_s4wr&&!_s4wr.classList.contains('nt-collapsed')){\r\n    var _cwr=document.getElementById('ntCanvasWrap');\r\n    if(_cwr&&!_cwr.style.maxHeight){_cwr.style.cssText='max-height:none;overflow:visible;opacity:1;display:block;';}\r\n  }\r\n  bg.innerHTML='';bg.appendChild(p);\r\n\r\n  // \u2500\u2500 ICON ON LETTER \u2014 draggable overlay \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const _ilD=window.ntLetterIcon;\r\n  if(_ilD&&_ilD.active){\r\n    bg.style.position='relative';\r\n    const _iov=document.createElement('div');\r\n    _iov.id='ntLetterIconOverlay';\r\n    const _isz=Math.round(uniformFs4*0.55);\r\n    const _lx=_ilD.px!=null?_ilD.px:50;\r\n    const _ly=_ilD.py!=null?_ilD.py:15;\r\n    _iov.style.cssText='position:absolute;left:'+_lx+'%;top:'+_ly+'%;transform:translate(-50%,-50%);'\r\n      +'display:flex;flex-direction:column;align-items:center;gap:3px;cursor:move;z-index:20;touch-action:none;user-select:none;';\r\n\r\n    const _iimg=document.createElement('img');\r\n    _iimg.src=_ilD.iconSrc;_iimg.alt=_ilD.iconLabel||'';\r\n    const _iRot=_ilD.rotation||0;\r\n    _iimg.style.cssText='width:'+_isz+'px;height:'+_isz+'px;object-fit:contain;pointer-events:none;display:block;'\r\n      +'transform:rotate('+_iRot+'deg);'\r\n      +'filter:'+ntIconFilter(c.fc)+';';\r\n\r\n    // hint text \u2014 disappears on first drag\r\n    const _hint=document.createElement('div');\r\n    _hint.id='ntILHint';\r\n    const _hintShown=!_ilD._hintDismissed;\r\n    _hint.style.cssText='font-size:9px;font-weight:700;color:#fff;background:rgba(61,43,26,0.72);'\r\n      +'border-radius:20px;padding:2px 8px;white-space:nowrap;pointer-events:none;'\r\n      +'opacity:'+(_hintShown?'1':'0')+';transition:opacity .3s;';\r\n    _hint.textContent='Move to place on letter';\r\n\r\n    // wobble animation \u2014 keyframes injected once\r\n    if(!document.getElementById('ntILWobbleStyle')){\r\n      const _st=document.createElement('style');\r\n      _st.id='ntILWobbleStyle';\r\n      _st.textContent='@keyframes ntILWobble{'\r\n        +'0%,100%{transform:translate(-50%,-50%) rotate(0deg)}'\r\n        +'20%{transform:translate(-50%,-50%) rotate(-8deg)}'\r\n        +'40%{transform:translate(-50%,-50%) rotate(8deg)}'\r\n        +'60%{transform:translate(-50%,-50%) rotate(-5deg)}'\r\n        +'80%{transform:translate(-50%,-50%) rotate(5deg)}}';\r\n      document.head.appendChild(_st);\r\n    }\r\n    if(_hintShown){\r\n      _iov.style.animation='ntILWobble 1.2s ease-in-out 0.4s 3';\r\n    }\r\n\r\n    _iov.appendChild(_iimg);\r\n    _iov.appendChild(_hint);\r\n    bg.appendChild(_iov);\r\n\r\n    // drag logic \u2014 dismiss hint on first touch\r\n    let _dragging=false;\r\n    const _dismissHint=function(){\r\n      _hint.style.opacity='0';\r\n      _iov.style.animation='none';\r\n      window.ntLetterIcon._hintDismissed=true;\r\n    };\r\n    const _onMove=function(e){\r\n      if(!_dragging)return;\r\n      const _r=bg.getBoundingClientRect();\r\n      const _cx=e.touches?e.touches[0].clientX:e.clientX;\r\n      const _cy=e.touches?e.touches[0].clientY:e.clientY;\r\n      const _nx=Math.max(0,Math.min(100,((_cx-_r.left)/_r.width)*100));\r\n      const _ny=Math.max(0,Math.min(100,((_cy-_r.top)/_r.height)*100));\r\n      _iov.style.left=_nx+'%';_iov.style.top=_ny+'%';\r\n      window.ntLetterIcon.px=_nx;window.ntLetterIcon.py=_ny;\r\n    };\r\n    const _onUp=function(){\r\n      _dragging=false;\r\n      document.removeEventListener('mousemove',_onMove);\r\n      document.removeEventListener('mouseup',_onUp);\r\n      document.removeEventListener('touchmove',_onMove);\r\n      document.removeEventListener('touchend',_onUp);\r\n    };\r\n    _iov.addEventListener('mousedown',function(e){\r\n      e.preventDefault();_dragging=true;\r\n      _dismissHint();\r\n      document.addEventListener('mousemove',_onMove);\r\n      document.addEventListener('mouseup',_onUp);\r\n    });\r\n    _iov.addEventListener('touchstart',function(e){\r\n      e.preventDefault();_dragging=true;\r\n      _dismissHint();\r\n      document.addEventListener('touchmove',_onMove,{passive:false});\r\n      document.addEventListener('touchend',_onUp);\r\n    },{passive:false});\r\n\r\n    // Tap canvas background (not the icon) to cycle letter icon between lines\r\n    bg.addEventListener('click',function(e){\r\n      if(e.target===_iov||_iov.contains(e.target))return;\r\n      if(!window.ntLetterIcon||!window.ntLetterIcon.active)return;\r\n      var totalLines=curLines.length+(window.s4NameLines||[]).filter(Boolean).length;\r\n      if(totalLines<2)return;\r\n      var cur=window.ntLetterIcon.line||0;\r\n      window.ntLetterIcon.line=(cur+1)%totalLines;\r\n      // Reset position to top of new line\r\n      window.ntLetterIcon.py=15;\r\n      renderS4();\r\n    });\r\n  }\r\n\r\n  if(typeof window.ntAutoSaveHook==='function')window.ntAutoSaveHook();\r\n}\r\n\r\nfunction updateS4(){renderS4();}\r\n\r\nfunction renderC4(){\r\n  var _crow4=document.getElementById('crow4');if(!_crow4)return;\r\n  var _colors=ntGetColors();if(selC4>=_colors.length)selC4=0;\r\n  var _swBase='display:block!important;width:26px!important;height:26px!important;min-width:26px;min-height:26px;border-radius:50%;cursor:pointer;flex-shrink:0;transition:transform .15s,border-color .15s;padding:0;margin:0;';\r\n  _crow4.innerHTML=\r\n    _colors.map((c,i)=>{\r\n      var sel=i===selC4;\r\n      var border=sel?'border:2.5px solid #3d2b1a!important;transform:scale(1.2);':'border:2px solid transparent;';\r\n      var shadow=c.lt?'box-shadow:0 0 0 1px #c0b8ac;':'';\r\n      return '<div style=\"'+_swBase+border+shadow+'background:'+c.fc+';\" onclick=\"pc4('+i+')\" title=\"'+c.n+'\"></div>';\r\n    }).join('')+'<span style=\"font-size:11px;color:var(--muted);margin-left:3px;\">'+_colors[selC4].n+'</span>';\r\n}\r\nfunction pc4(i){const _c=ntGetColors();selC4=Math.min(i,_c.length-1);renderS4();renderC4();}\r\n\r\n\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// LISTENERS\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nvar _mi=document.getElementById('mainInp');if(_mi)_mi.addEventListener('input',function(){\r\n  const q=this.value.trim();\r\n  document.getElementById('exactPrompt').style.display=q.length>2?'block':'none';\r\n  if(!q.length){exactMode=false;var _tb=document.getElementById('tierBadge');if(_tb)_tb.classList.remove('show');}\r\n  const hint=document.getElementById('inputHint');\r\n  if(hint)hint.style.display=q?'none':'';\r\n});\r\nasync function sendS4Chat(){\r\n  const inp=document.getElementById('s4ChatInp');\r\n  const msg=inp.value.trim();if(!msg)return;\r\n  inp.value='';\r\n  const log=document.getElementById('s4ChatLog');\r\n  const um=document.createElement('div');\r\n  um.style.cssText='font-size:11px;background:#f5ede4;color:var(--brown);padding:6px 10px;border-radius:10px;align-self:flex-end;max-width:85%;';\r\n  um.textContent=msg;log.appendChild(um);log.scrollTop=log.scrollHeight;\r\n  const btn=document.getElementById('s4ChatBtn');btn.disabled=true;btn.textContent='\u2026';\r\n  const nameInput=document.getElementById('nameInp').value.trim();\r\n  const currentLines=replaceName(curLines,nameInput);\r\n  const chatSys=`You are the design assistant for NukkadTales wooden pieces.\r\nCurrent design lines: ${JSON.stringify(currentLines)}\r\nName typed by customer: \"${nameInput}\"\r\nOriginal template lines: ${JSON.stringify(curLines)}\r\n\r\nCustomer wants a change. Just do it. No explanations, no lectures.\r\nRules: max 9 chars per line, max 3 lines, connectors (an,my,no,is,a,the,&) on own line.\r\nIf they ask for icon placement \u2014 that's handled separately, just say \"tap the icon position above\".\r\nIf request is impossible \u2014 just give the closest version you can.\r\n\r\nReturn ONLY valid JSON: {\"lines\":[\"line1\",\"line2\"],\"reply\":\"one short friendly sentence, max 10 words\"}`;\r\n  try{\r\n    const raw=await callAI(MODEL_SUGG,chatSys,msg,400);\r\n    const match=raw.match(/\\{[\\s\\S]*\\}/);\r\n    if(match){\r\n      let jsonStr=match[0].replace(/,\\s*([}\\]])/g,'$1');\r\n      const result=JSON.parse(jsonStr);\r\n      if(result.lines&&Array.isArray(result.lines)){\r\n        curLines=result.lines;\r\n        renderS4();\r\n        const am=document.createElement('div');\r\n        am.style.cssText='font-size:11px;background:#f0f4f0;color:#2a3a2a;padding:6px 10px;border-radius:10px;align-self:flex-start;max-width:85%;';\r\n        am.textContent=result.reply||'Done \u2014 check the design above.';\r\n        log.appendChild(am);log.scrollTop=log.scrollHeight;\r\n      }\r\n    }\r\n  }catch(e){\r\n    const em=document.createElement('div');\r\n    em.style.cssText='font-size:11px;color:#c0392b;padding:4px 10px;';\r\n    em.textContent='Could not apply change. Try rephrasing.';\r\n    log.appendChild(em);\r\n  }\r\n  btn.disabled=false;btn.textContent='\u2192';\r\n}\r\nvar _mi2=document.getElementById('mainInp');if(_mi2)_mi2.addEventListener('keydown',e=>{if(e.key==='Enter'&&(e.ctrlKey||e.metaKey))doCreate();});\r\n\r\nfunction highlightInput(tier){\r\n  const box=document.getElementById('mainInputBox');\r\n  const ta=document.getElementById('mainInp');if(!ta)return;\r\n  if(!box||!ta)return;\r\n  box.scrollIntoView({behavior:'smooth',block:'center'});\r\n  box.style.borderColor='var(--orange)';\r\n  box.style.boxShadow='0 0 0 4px rgba(196,122,69,0.15)';\r\n  ta.focus();\r\n  let nudge=document.getElementById('inputNudge');\r\n  if(!nudge){\r\n    nudge=document.createElement('div');\r\n    nudge.id='inputNudge';\r\n    nudge.style.cssText='font-size:11px;font-weight:600;color:var(--orange);text-align:center;margin-top:6px;transition:opacity .4s;';\r\n    box.parentElement.appendChild(nudge);\r\n  }\r\n  nudge.textContent='Type your '+tier+' idea here \u2192';\r\n  nudge.style.opacity='1';\r\n  setTimeout(()=>{box.style.borderColor='#c8b09a';box.style.boxShadow='0 3px 16px rgba(61,43,26,0.10)';nudge.style.opacity='0';},3000);\r\n}\r\n\r\n(function(){\r\n  const ta=document.getElementById('mainInp');\r\n  const box=document.getElementById('mainInputBox');\r\n  if(!ta||!box)return;\r\n  const ph=['A motivating quote for my gym buddy\u2026','Rahul & Priya \u2014 our 5 years together\u2026','\"No Pain No Gain\" for Dr. Arjun\u2026','My boss Nidhi retiring after 15 years\u2026','Sharma & Sons \u2014 our family business\u2026','Something for my home office wall\u2026'];\r\n  let pi=0,pt;\r\n  function rp(){ta.placeholder=ph[pi%ph.length];pi++;pt=setTimeout(rp,2800);}\r\n  rp();\r\n  const hint=document.getElementById('inputHint');\r\n  ta.addEventListener('input',()=>{if(hint)hint.style.display=ta.value?'none':'';});\r\n  ta.addEventListener('focus',()=>{clearTimeout(pt);ta.placeholder='';box.style.borderColor='var(--orange)';box.style.boxShadow='0 3px 16px rgba(196,122,69,0.22)';});\r\n  ta.addEventListener('blur',()=>{if(!ta.value.trim()){rp();if(hint)hint.style.display='';box.style.borderColor='#c8b09a';box.style.boxShadow='0 3px 16px rgba(61,43,26,0.13)';}});\r\n})();\r\nconst s4ci=document.getElementById('s4ChatInp');if(s4ci)s4ci.addEventListener('keydown',e=>{if(e.key==='Enter')sendS4Chat();});\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// MANTRA STAGE\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nlet mantraLines=[];\r\nlet mantraAiInch=18;\r\nlet mantraCurInch=18;\r\nlet mantraBasePrice=3299;\r\nlet mantraQtyVal=1;\r\n\r\nconst MANTRA_MAX_LINES=4;\r\nfunction breakMantraLines(text){\r\n  const words=text.replace(/ \\/ /g,' ').trim().split(/\\s+/).filter(Boolean);\r\n  const lines=[];\r\n  let cur='';\r\n  for(const w of words){\r\n    if(lines.length>=MANTRA_MAX_LINES) break;\r\n    const candidate=cur?cur+' '+w:w;\r\n    if(candidate.length<=MANTRA_CHAR_LIMIT){\r\n      cur=candidate;\r\n    } else {\r\n      if(cur)lines.push(cur);\r\n      cur=w.slice(0,MANTRA_CHAR_LIMIT);\r\n      if(w.length>MANTRA_CHAR_LIMIT&&lines.length<MANTRA_MAX_LINES-1){\r\n        lines.push(cur);cur='';\r\n      }\r\n    }\r\n  }\r\n  if(cur&&lines.length<MANTRA_MAX_LINES)lines.push(cur);\r\n  return lines.length>0?lines:[text.slice(0,MANTRA_CHAR_LIMIT)];\r\n}\r\n\r\nfunction mantraCharSizeBump(){\r\n  if(!mantraLines.length) return 0;\r\n  const maxChars=Math.max(...mantraLines.map(l=>(l||'').length));\r\n  const over=Math.max(0,maxChars-MANTRA_CHAR_LIMIT);\r\n  return Math.ceil(over/2)*2;\r\n}\r\nfunction mantraCalcAiInch(){\r\n  const lineInch=calcMantraInch(mantraLines);\r\n  const bump=mantraCharSizeBump();\r\n  return Math.min(36,lineInch+bump);\r\n}\r\nfunction mantraCharHint(){\r\n  const maxChars=Math.max(...(mantraLines.length?mantraLines:['']).map(l=>(l||'').length));\r\n  const over=Math.max(0,maxChars-MANTRA_CHAR_LIMIT);\r\n  if(!over) return '';\r\n  const bump=Math.ceil(over/2)*2;\r\n  return `Longest line has ${maxChars} letters \u2014 recommended size bumped to ${Math.min(36,calcMantraInch(mantraLines)+bump)}\" (+\u20B9${bump*100})`;\r\n}\r\nfunction calcMantraInch(lines){\r\n  const n=lines.length||1;\r\n  if(n<=2) return 18;\r\n  if(n<=3) return 24;\r\n  return 36;\r\n}\r\n\r\nasync function goMantra(text, price){\r\n  mantraBasePrice=price;\r\n  mantraLines=breakMantraLines(text);\r\n  mantraAiInch=calcMantraInch(mantraLines);\r\n  mantraCurInch=mantraAiInch;\r\n  mantraQtyVal=1;\r\n\r\n  const badge=document.getElementById('mantraTypeBadge');\r\n  if(badge){\r\n    badge.textContent=price>=3299?'MANTRA \u00B7 \u20B93,299':'SHAYARI \u00B7 \u20B92,299';\r\n    badge.style.background=price>=3299?'#1e1408':'#1e3a5f';\r\n    badge.style.color=price>=3299?'#e8c84a':'#f2ece3';\r\n  }\r\n\r\n  showSt('stageMantra');\r\n  requestAnimationFrame(()=>{renderMantraChips();updateMantraSizeBar();updateMantraTotalLine();});\r\n  const _nc=document.getElementById('ntEditorBody');if(_nc)_nc.scrollTop=0;\r\n}\r\n\r\nconst MANTRA_CHAR_LIMIT=12;\r\n\r\nfunction calcMantraCurrentPrice(){\r\n  const base=mantraBasePrice||2299;\r\n  const baseLines=base>=3299?4:2;\r\n  const extra=Math.max(0,mantraLines.length-baseLines);\r\n  return base+extra*500;\r\n}\r\nfunction updateMantraCommBtn(){\r\n  const btn=document.getElementById('mantraCommBtn');\r\n  const lbl=document.getElementById('mantraAddLinePrice');\r\n  const addBtn=document.getElementById('mantraAddLineBtn');\r\n  const sizeExtra=Math.max(0,(mantraCurInch||18)-(mantraAiInch||18))*100;\r\n  const linePrice=calcMantraCurrentPrice();\r\n  const total=linePrice+sizeExtra;\r\n  if(btn&&!btn._designerOn)btn.textContent=((window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart')+' \u00B7 \u20B9'+total.toLocaleString('en-IN');\r\n  const atMax=mantraLines.length>=MANTRA_MAX_LINES;\r\n  if(addBtn){addBtn.style.opacity=atMax?'0.35':'1';addBtn.style.pointerEvents=atMax?'none':'auto';}\r\n  if(lbl)lbl.textContent=atMax?'(max 4 lines)':'\u00B7 +\u20B9500';\r\n}\r\nfunction mantraAddLine(){\r\n  mantraLines.push('');\r\n  mantraAiInch=calcMantraInch(mantraLines);\r\n  mantraCurInch=mantraAiInch;\r\n  renderMantraChips();\r\n  updateMantraSizeBar();\r\n  updateMantraTotalLine();\r\n  renderMantraPreview();\r\n  updateMantraCommBtn();\r\n  setTimeout(()=>editMantraLine(mantraLines.length-1),50);\r\n}\r\nfunction renderMantraChips(){\r\n  const wrap=document.getElementById('mantraChipWrap');\r\n  if(!wrap)return;\r\n  wrap.innerHTML='';\r\n  mantraLines.forEach((line,i)=>{\r\n    const chip=document.createElement('div');\r\n    chip.className='mantra-chip';\r\n    chip.id='mchip-'+i;\r\n    const overLimit=line.length>MANTRA_CHAR_LIMIT;\r\n    chip.innerHTML=`\r\n      <span class=\"mantra-chip-text\" id=\"mct-${i}\" style=\"${overLimit?'color:var(--orange);':''}\">${line}</span>\r\n      <span style=\"font-size:9px;color:${overLimit?'var(--orange)':'var(--light)'};flex-shrink:0;margin-right:4px;\">${line.length}/${MANTRA_CHAR_LIMIT}</span>\r\n      <button class=\"mantra-chip-edit\" onclick=\"editMantraLine(${i})\">\u270E</button>\r\n    `;\r\n    wrap.appendChild(chip);\r\n    if(i<mantraLines.length-1){\r\n      const gap=document.createElement('div');\r\n      gap.style.height='4px';\r\n      wrap.appendChild(gap);\r\n    }\r\n  });\r\n  updateMantraCommBtn();\r\n}\r\n\r\nfunction editMantraLine(i){\r\n  const chip=document.getElementById('mchip-'+i);\r\n  const textEl=document.getElementById('mct-'+i);\r\n  if(!chip||!textEl)return;\r\n  chip.classList.add('editing');\r\n  const inp=document.createElement('input');\r\n  inp.className='mantra-chip-inp';\r\n  inp.value=mantraLines[i];\r\n  inp.maxLength=MANTRA_CHAR_LIMIT;\r\n  inp.placeholder='max 12 letters';\r\n  inp.style.flex='1';\r\n  const counter=chip.querySelector('span[style*=\"font-size:9px\"]');\r\n  if(counter){\r\n    inp.addEventListener('input',()=>{\r\n      const n=inp.value.length;\r\n      counter.textContent=n+'/'+MANTRA_CHAR_LIMIT;\r\n      counter.style.color=n>MANTRA_CHAR_LIMIT?'#e74c3c':'var(--teal)';\r\n    });\r\n  }\r\n  textEl.replaceWith(inp);\r\n  const btn=chip.querySelector('.mantra-chip-edit');\r\n  btn.textContent='\u2713';\r\n  btn.onclick=()=>saveMantraLine(i,inp,chip,btn);\r\n  inp.addEventListener('keydown',e=>{if(e.key==='Enter')saveMantraLine(i,inp,chip,btn);});\r\n  inp.focus();inp.select();\r\n}\r\n\r\nfunction saveMantraLine(i,inp,chip,btn){\r\n  mantraLines[i]=inp.value.trim()||mantraLines[i];renderMantraPreview();\r\n  updateMantraSizeBar();updateMantraTotalLine();updateMantraCommBtn();\r\n  chip.classList.remove('editing');\r\n  renderMantraChips();\r\n  mantraAiInch=calcMantraInch(mantraLines);\r\n  mantraCurInch=Math.max(mantraAiInch,mantraCurInch);\r\n  updateMantraSizeBar();\r\n}\r\n\r\nfunction mergeMantraLines(a,b){\r\n  mantraLines[a]=mantraLines[a]+' '+mantraLines[b];\r\n  mantraLines.splice(b,1);\r\n  renderMantraChips();\r\n  mantraAiInch=calcMantraInch(mantraLines);\r\n  mantraCurInch=Math.max(mantraAiInch,mantraCurInch);\r\n  updateMantraSizeBar();\r\n}\r\n\r\nfunction updateMantraSizeBar(){\r\n  mantraAiInch=mantraCalcAiInch();\r\n  if(!mantraCurInch||mantraCurInch<mantraAiInch) mantraCurInch=mantraAiInch;\r\n  const aiEl=document.getElementById('mantraAiInch');\r\n  const curEl=document.getElementById('mantraCurInch');\r\n  if(aiEl)aiEl.textContent=mantraAiInch+'\"';\r\n  if(curEl)curEl.textContent=mantraCurInch+'\"';\r\n  const hint=mantraCharHint();\r\n  let hintEl=document.getElementById('mantraCharHint');\r\n  if(!hintEl){\r\n    hintEl=document.createElement('div');hintEl.id='mantraCharHint';\r\n    hintEl.style.cssText='font-size:10px;color:var(--orange);margin:-8px 0 10px;padding:6px 12px;background:#fff8f2;border-radius:8px;border:1px solid rgba(196,122,69,0.2);';\r\n    const sizeBar=document.getElementById('mantraSizeBar');\r\n    if(sizeBar)sizeBar.after(hintEl);\r\n  }\r\n  hintEl.textContent=hint;\r\n  hintEl.style.display=hint?'block':'none';\r\n}\r\n\r\nfunction mantraResizeDelta(delta){\r\n  const next=Math.max(mantraAiInch,Math.min(36,mantraCurInch+delta));\r\n  mantraCurInch=next;\r\n  updateMantraSizeBar();\r\n}\r\n\r\nfunction mantraQtyDelta(delta){\r\n  mantraQtyVal=Math.max(1,mantraQtyVal+delta);\r\n  document.getElementById('mantraQty').textContent=mantraQtyVal;\r\n  updateMantraTotalLine();\r\n}\r\n\r\nfunction updateMantraTotalLine(){\r\n  const el=document.getElementById('mantraTotalLine');\r\n  if(!el)return;\r\n  const sizeExtra=Math.max(0,mantraCurInch-mantraAiInch)*100;\r\n  const linePrice=calcMantraCurrentPrice();\r\n  const unitPrice=linePrice+sizeExtra;\r\n  const total=unitPrice*mantraQtyVal;\r\n  el.textContent=mantraQtyVal>1\r\n    ?`\u20B9${unitPrice.toLocaleString('en-IN')} \u00D7 ${mantraQtyVal} = \u20B9${total.toLocaleString('en-IN')}`\r\n    :`\u20B9${unitPrice.toLocaleString('en-IN')} \u00B7 ${mantraCurInch}\"`;\r\n  const btn=document.getElementById('mantraCommBtn');\r\n  if(btn&&!btn._designerOn)btn.textContent=((window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart')+' \u00B7 \u20B9'+unitPrice.toLocaleString('en-IN');\r\n}\r\n\r\nfunction mantraCommission(){\r\n  const extra=Math.max(0,mantraCurInch-mantraAiInch)*100;\r\n  const unitPrice=mantraBasePrice+extra;\r\n  const total=unitPrice*mantraQtyVal;\r\n  const text=mantraLines.join(' / ');\r\n  const wa=`https://wa.me/919999999999?text=${encodeURIComponent(`Hi NukkadTales! I'd like to commission a mantra/shayari piece:\r\n\"${text}\"\r\nSize: ${mantraCurInch}\"\r\nQty: ${mantraQtyVal}\r\nTotal: \u20B9${total.toLocaleString('en-IN')}`)}`;\r\n  window.open(wa,'_blank');\r\n}\r\n\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n// DESIGNER CALL ADD-ON \u00B7 +\u20B9500 flat fee\r\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\nconst designerState={};\r\n\r\nfunction toggleDesigner(toggleId, btnId, basePrice){\r\n  const on=!designerState[toggleId];\r\n  designerState[toggleId]=on;\r\n  const chkId=toggleId==='designerToggle'?'designerChk':toggleId==='renderDesignerToggle'?'renderDesignerChk':'mantraDesignerChk';\r\n  const chk=document.getElementById(chkId);\r\n  const wrap=document.getElementById(toggleId);\r\n  const btn=document.getElementById(btnId);\r\n  if(chk){\r\n    chk.style.background=on?'var(--orange)':'#fff';\r\n    chk.style.borderColor=on?'var(--orange)':'var(--border)';\r\n    chk.innerHTML=on?'<svg width=\"10\" height=\"8\" viewBox=\"0 0 10 8\" fill=\"none\"><path d=\"M1 4L3.5 6.5L9 1\" stroke=\"#fff\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>':'';\r\n  }\r\n  if(wrap) wrap.style.borderColor=on?'var(--orange)':'var(--border)';\r\n  if(btn){\r\n    const extra=on?500:0;\r\n    if(toggleId==='mantraDesignerToggle'){\r\n      const sizeExtra=Math.max(0,mantraCurInch-mantraAiInch)*100;\r\n      const total=(mantraBasePrice+sizeExtra+extra)*mantraQtyVal;\r\n      btn.textContent=on\r\n        ?((window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart')+' \u00B7 \u20B9'+(mantraBasePrice+sizeExtra+extra).toLocaleString('en-IN')+' + designer call'\r\n        :`${(window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart'}`;\r\n      updateMantraTotalLine();\r\n    } else {\r\n      const curText=btn.textContent;\r\n      const match=curText.match(/\u20B9([\\d,]+)/);\r\n      const curBase=match?parseInt(match[1].replace(/,/g,''),10):basePrice;\r\n      const newPrice=on?curBase+500:curBase-500;\r\n      btn.textContent=on\r\n        ?((window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart')+' \u00B7 \u20B9'+newPrice.toLocaleString('en-IN')+' (+designer)'\r\n        :((window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart')+' \u00B7 \u20B9'+newPrice.toLocaleString('en-IN');\r\n    }\r\n  }\r\n}\r\n\r\nfunction isDesignerAdded(toggleId){return !!designerState[toggleId];}\r\n\r\n// \u2500\u2500 CUSTOM COLOURS \u2014 add your brand colours here \u2500\u2500\u2500\u2500\u2500\r\n// Format: {n:'Colour Name', fc:'#hexcode', lt:0}  (lt:1 = light colour, adds border)\r\n// These appear after the 8 default colours in the colour picker\r\n// You can also add colours via Shopify Customizer \u2192 Nukkad Customiser \u2192 Add block \u2192 Custom colour\r\n// custom colors defined at top of file\r\n\r\n// \u2500\u2500 STICKY CANVAS + FLOATING COMMISSION BAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nfunction ntInitStickyCanvas(){\r\n  if(!document.getElementById('ntStickyStyles')){\r\n    var st=document.createElement('style');\r\n    st.id='ntStickyStyles';\r\n    // No transition on ntCanvasWrap to prevent hide-on-init\r\n    st.textContent=\r\n      '#ntInlineCommBar{display:none;align-items:center;gap:10px;padding:8px 14px 12px;background:var(--cream,#f5ede0);border-top:1px solid var(--border,#e8d5c0);}'\r\n      +'#ntInlineCommBar.show{display:flex;}'\r\n      +'#ntCanvasWrap{max-height:none;overflow:visible;opacity:1;display:block;}'\r\n      +'#s4Wrap.nt-collapsed #ntCanvasWrap{max-height:0;opacity:0;overflow:hidden;transition:max-height .25s ease,opacity .2s;}'\r\n      +'#s4Wrap.nt-collapsed{box-shadow:0 4px 12px rgba(61,43,26,0.13)!important;}';\r\n    document.head.appendChild(st);\r\n  }\r\n\r\n  // Force uncollapsed on init\r\n  var s4w=document.getElementById('s4Wrap');\r\n  if(!s4w)return;\r\n  s4w.classList.remove('nt-collapsed');\r\n\r\n  // Force sticky via inline \u2014 overrides theme CSS\r\n  s4w.style.setProperty('position','sticky','important');\r\n  s4w.style.setProperty('top','0','important');\r\n  s4w.style.setProperty('z-index','9999','important');\r\n  s4w.style.setProperty('background','var(--cream,#f5ede0)','important');\r\n  // No box-shadow on load \u2014 only appears when collapsed\r\n\r\n  // Wrap canvas in collapsible div (once)\r\n  var s4bg=document.getElementById('s4Bg');\r\n  if(s4bg&&!document.getElementById('ntCanvasWrap')){\r\n    var cw=document.createElement('div');\r\n    cw.id='ntCanvasWrap';\r\n    s4bg.parentNode.insertBefore(cw,s4bg);\r\n    cw.appendChild(s4bg);\r\n  }\r\n\r\n  // Build inline commission bar\r\n  if(!document.getElementById('ntInlineCommBar')){\r\n    var bar=document.createElement('div');\r\n    bar.id='ntInlineCommBar';\r\n    bar.innerHTML=\r\n      '<div id=\"ntInlineScrollUp\" style=\"flex:1;min-width:0;cursor:pointer;\">'\r\n        +'<div id=\"ntInlineLines\" style=\"font-family:\\'Poppins\\',sans-serif;font-weight:900;font-size:12px;color:#3d2b1a;letter-spacing:-0.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2;\"></div>'\r\n        +'<div style=\"font-size:9px;color:#c47a45;margin-top:2px;font-weight:700;\">\u2191 tap to see design</div>'\r\n      +'</div>'\r\n      +'<button id=\"ntInlineBtn\" onclick=\"ntCommissionPersonal()\" style=\"background:#c47a45!important;color:#fff!important;border:none;border-radius:20px;padding:10px 16px;font-size:12px;font-weight:700;cursor:pointer;font-family:\\'DM Sans\\',sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px;flex-shrink:0;\"></button>';\r\n    s4w.appendChild(bar);\r\n\r\n    document.getElementById('ntInlineScrollUp').addEventListener('click',function(){\r\n      s4w.classList.remove('nt-collapsed');\r\n      document.getElementById('ntInlineCommBar').classList.remove('show');\r\n      // Only scroll the slider's own container \u2014 never window\r\n      if(window._ntScroller&&window._ntScroller!==window){\r\n        window._ntScroller.scrollTo({top:0,behavior:'smooth'});\r\n      }\r\n    });\r\n  }\r\n\r\n  // Scroll listener on window \u2014 most reliable for Shopify sliders\r\n  var s4BtnEl=document.getElementById('s4Btn');\r\n  if(!s4BtnEl)return;\r\n\r\n  function checkCollapse(){\r\n    var sw=document.getElementById('s4Wrap');\r\n    var ib=document.getElementById('ntInlineCommBar');\r\n    if(!sw||!ib)return;\r\n    var rect=s4BtnEl.getBoundingClientRect();\r\n    var swRect=sw.getBoundingClientRect();\r\n    if(rect.bottom===0&&rect.top===0)return;\r\n    var isCollapsed=sw.classList.contains('nt-collapsed');\r\n    // Collapse: button top goes below canvas bottom (button visually reaches canvas)\r\n    // Expand: button is 220px below canvas \u2014 large gap prevents flicker\r\n    if(!isCollapsed&&rect.top<swRect.bottom){\r\n      sw.classList.add('nt-collapsed');\r\n      sw.style.setProperty('box-shadow','0 4px 12px rgba(61,43,26,0.13)','important');\r\n      ntUpdateFloatBar();\r\n      ib.classList.add('show');\r\n    } else if(isCollapsed&&rect.top>swRect.bottom+220){\r\n      sw.classList.remove('nt-collapsed');\r\n      sw.style.removeProperty('box-shadow');\r\n      ib.classList.remove('show');\r\n      setTimeout(checkShadow,10);\r\n    }\r\n  }\r\n\r\n  // Attach scroll listener to slider's scroll container\r\n  if(window._ntScrollHandler){\r\n    var _old=window._ntScrollHandler;\r\n    if(window._ntScroller)window._ntScroller.removeEventListener('scroll',_old);\r\n    window.removeEventListener('scroll',_old);\r\n  }\r\n  window._ntScrollHandler=checkCollapse;\r\n  var _eb=document.getElementById('ntEditorBody');\r\n  window._ntScroller=_eb||window;\r\n  window._ntScroller.addEventListener('scroll',checkCollapse,{passive:true});\r\n  // Shadow below canvas \u2014 appears only when scrolled (not on initial load)\r\n  function checkShadow(){\r\n    var sw=document.getElementById('s4Wrap');\r\n    if(!sw)return;\r\n    var scrolled=(window._ntScroller&&window._ntScroller!==window)\r\n      ?window._ntScroller.scrollTop>8\r\n      :window.scrollY>8;\r\n    if(scrolled&&!sw.classList.contains('nt-collapsed')){\r\n      sw.style.setProperty('box-shadow','0 4px 12px rgba(61,43,26,0.13)','important');\r\n    } else if(!sw.classList.contains('nt-collapsed')){\r\n      sw.style.removeProperty('box-shadow');\r\n    }\r\n  }\r\n  window._ntScroller.addEventListener('scroll',checkShadow,{passive:true});\r\n  checkShadow();\r\n  checkCollapse();\r\n}\r\n\r\n\r\nfunction ntUpdateFloatBar(){\r\n  var inlineBtn=document.getElementById('ntInlineBtn');\r\n  var inlineLines=document.getElementById('ntInlineLines');\r\n  var s4BtnEl=document.getElementById('s4Btn');\r\n  // Mirror commission price\r\n  if(inlineBtn&&s4BtnEl)inlineBtn.textContent=s4BtnEl.textContent||((window.NUKKAD_CONFIG&&window.NUKKAD_CONFIG.txt&&window.NUKKAD_CONFIG.txt.commLabel)||'Add to Cart');\r\n  // Lines preview\r\n  var lines=[...(curLines||[]).filter(Boolean),...((window.s4NameLines||[]).filter(Boolean))];\r\n  if(inlineLines)inlineLines.textContent=lines.join(' \u00B7 ');\r\n}\r\n\r\nfunction ntDestroySticky(){\r\n  if(window._ntStickyObs){window._ntStickyObs.disconnect();window._ntStickyObs=null;}\r\n  if(window._ntScrollHandler&&window._ntScroller){\r\n    window._ntScroller.removeEventListener('scroll',window._ntScrollHandler);\r\n    // Also remove from ntEditorBody in case that was used\r\n    var _eb2=document.getElementById('ntEditorBody');\r\n    if(_eb2)_eb2.removeEventListener('scroll',window._ntScrollHandler);\r\n    window._ntScrollHandler=null;window._ntScroller=null;\r\n  }\r\n  var ib=document.getElementById('ntInlineCommBar');if(ib)ib.remove();\r\n  var s4w=document.getElementById('s4Wrap');\r\n  if(s4w){s4w.classList.remove('nt-collapsed');s4w.style.position='';s4w.style.top='';s4w.style.zIndex='';s4w.style.background='';s4w.style.boxShadow='';}\r\n}\r\nwindow.ntInitStickyCanvas=ntInitStickyCanvas;\r\nwindow.ntUpdateFloatBar=ntUpdateFloatBar;\r\nwindow.ntDestroySticky=ntDestroySticky;\r\n\r\n// \u2500\u2500 HINDI HINT \u2014 shows when Hindi active, hides when global font changes away \u2500\u2500\r\nfunction ntRefreshHindiHint(){\r\n  var any999=selFont==='hindi'||(window.lineOpts||[]).some(function(o){return o&&o.fontOverride==='hindi';});\r\n  var anyS4=selFont4==='hindi'||(window.s4LineOpts||[]).some(function(o){return o&&o.fontOverride==='hindi';});\r\n  var h999=document.getElementById('hindiHint');\r\n  var hS4=document.getElementById('hindiHintS4');\r\n  if(h999)h999.style.display=any999?'block':'none';\r\n  if(hS4)hS4.style.display=anyS4?'block':'none';\r\n}\r\nwindow.ntRefreshHindiHint=ntRefreshHindiHint;\r\n\r\n// \u2500\u2500 BREAK LONGEST LINE \u2014 scrolls to chip, flashes green for 1s \u2500\u2500\r\nfunction ntBreakLongestLine(){\r\n  // Find the longest quote line\r\n  var longestIdx=0;var longestLen=0;\r\n  curLines.forEach(function(l,i){\r\n    var n=(l||'').replace(/\\s/g,'').length;\r\n    if(n>longestLen){longestLen=n;longestIdx=i;}\r\n  });\r\n\r\n  // Scroll to chips first\r\n  var chipsContainer=document.getElementById('s4LineChips');\r\n  if(chipsContainer)chipsContainer.scrollIntoView({behavior:'smooth',block:'start'});\r\n\r\n  // After scroll, find chip and flash it green for 1 second\r\n  setTimeout(function(){\r\n    var quoteChips=document.querySelectorAll('#s4LineChips .line-chip[data-isname=\"0\"]');\r\n    var targetChip=quoteChips[longestIdx];\r\n    if(!targetChip)return;\r\n    // Flash green\r\n    var origStyle=targetChip.getAttribute('style')||'';\r\n    targetChip.style.border='2px solid #2aac8e';\r\n    targetChip.style.background='#e8f5ec';\r\n    targetChip.style.transition='border .2s,background .2s';\r\n    targetChip.scrollIntoView({behavior:'smooth',block:'center'});\r\n    // Remove highlight after 1 second\r\n    setTimeout(function(){\r\n      targetChip.style.border='';\r\n      targetChip.style.background='';\r\n    },1000);\r\n  },450);\r\n}\r\n\r\nfunction ntDismissBreakPrompt(){\r\n  document.querySelectorAll('.nt-break-prompt').forEach(function(el){el.remove();});\r\n  document.querySelectorAll('.nt-break-highlight').forEach(function(el){\r\n    el.classList.remove('nt-break-highlight');\r\n    el.style.border='';el.style.background='';\r\n  });\r\n}\r\nwindow.ntBreakLongestLine=ntBreakLongestLine;\r\nwindow.ntDismissBreakPrompt=ntDismissBreakPrompt;\r\n\r\n// \u2500\u2500 VIDEO \u2014 override liquid versions to support direct MP4/Shopify CDN links \u2500\u2500\r\nfunction ntIsDirectVideo(url){\r\n  return !!(url&&(url.match(/\\.(mp4|webm|ogg|mov)(\\?|$)/i)||url.includes('cdn.shopify.com/videos')));\r\n}\r\n\r\n// Open a fullscreen overlay to play the video with an X to close\r\nfunction ntPlayVideoFull(url){\r\n  if(!url)return;\r\n  var ov=document.createElement('div');\r\n  ov.id='ntVideoFullscreen';\r\n  ov.style.cssText='position:fixed;inset:0;z-index:99999;background:#000;display:flex;align-items:center;justify-content:center;';\r\n\r\n  var closeBtn=document.createElement('button');\r\n  closeBtn.textContent='\u2715';\r\n  closeBtn.style.cssText='position:absolute;top:16px;right:16px;z-index:10;background:rgba(0,0,0,0.6);border:none;color:#fff;border-radius:50%;width:40px;height:40px;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1;';\r\n  closeBtn.onclick=function(){ov.remove();};\r\n  ov.appendChild(closeBtn);\r\n\r\n  if(ntIsDirectVideo(url)){\r\n    var v=document.createElement('video');\r\n    v.src=url;v.controls=true;v.autoplay=true;v.playsInline=true;v.preload='auto';\r\n    v.style.cssText='max-width:100%;max-height:100%;object-fit:contain;display:block;';\r\n    ov.appendChild(v);\r\n    document.body.appendChild(ov);\r\n    v.play().catch(function(){v.muted=true;v.play().catch(function(){});});\r\n  } else {\r\n    var iframe=document.createElement('iframe');\r\n    iframe.src=url+(url.includes('?')?'&':'?')+'autoplay=1';\r\n    iframe.allow='autoplay; fullscreen; picture-in-picture';\r\n    iframe.allowFullscreen=true;\r\n    iframe.style.cssText='width:100vw;height:100vh;border:none;display:block;';\r\n    ov.appendChild(iframe);\r\n    document.body.appendChild(ov);\r\n  }\r\n  // tap backdrop to close\r\n  ov.addEventListener('click',function(e){if(e.target===ov)ov.remove();});\r\n}\r\n\r\n// Override ntPlayVideoV (used in stageRender 9:16 vertical cards)\r\nwindow.ntPlayVideoV=function(card,frameId,url){\r\n  if(!url)return;\r\n  ntPlayVideoFull(url);\r\n};\r\n\r\n// Override ntPlayVideoS4 (used in stagePersonal single landscape card)\r\nwindow.ntPlayVideoS4=function(){\r\n  var url=window.NUKKAD_CONFIG&&NUKKAD_CONFIG.videoUrl||'';\r\n  if(url)ntPlayVideoFull(url);\r\n};\r\n\r\n// Override ntInitVideoReviews to handle MP4 thumbnails + show video wrap\r\nwindow.ntInitVideoReviews=function(){\r\n  function toEmbed(url){\r\n    if(!url)return'';\r\n    // YouTube Shorts\r\n    if(url.includes('youtube.com/shorts/')){\r\n      var id=url.split('youtube.com/shorts/')[1].split(/[?#]/)[0];\r\n      return'https://www.youtube.com/embed/'+id;\r\n    }\r\n    // YouTube watch\r\n    if(url.includes('watch?v=')){\r\n      var id2=url.split('watch?v=')[1].split('&')[0];\r\n      return'https://www.youtube.com/embed/'+id2;\r\n    }\r\n    // YouTube short link\r\n    if(url.includes('youtu.be/')){\r\n      var id3=url.split('youtu.be/')[1].split(/[?#]/)[0];\r\n      return'https://www.youtube.com/embed/'+id3;\r\n    }\r\n    // Vimeo\r\n    if(url.includes('vimeo.com/')&&!url.includes('player.vimeo')){\r\n      var id4=url.split('vimeo.com/')[1].split(/[?#]/)[0];\r\n      return'https://player.vimeo.com/video/'+id4;\r\n    }\r\n    return url; // direct MP4 or already an embed URL\r\n  }\r\n\r\n  function makePosting(card,url,thumb,title){\r\n    // Show first-frame poster for MP4 or thumbnail image for YouTube\r\n    var isDirect=ntIsDirectVideo(url);\r\n    // clear old posters\r\n    card.querySelectorAll('video.nt-poster').forEach(function(el){el.remove();});\r\n\r\n    if(isDirect){\r\n      // hide the <img> thumb, use a muted video element to show first frame\r\n      var imgEl=card.querySelector('img');if(imgEl)imgEl.style.display='none';\r\n      var poster=document.createElement('video');\r\n      poster.className='nt-poster';\r\n      poster.src=url;poster.preload='metadata';poster.muted=true;\r\n      poster.style.cssText='position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;opacity:0.75;pointer-events:none;';\r\n      card.insertBefore(poster,card.firstChild);\r\n    } else {\r\n      // YouTube/Vimeo \u2014 use thumbnail img\r\n      var imgEl2=card.querySelector('img');\r\n      if(imgEl2&&thumb)imgEl2.src=thumb;\r\n    }\r\n    // set label\r\n    var lbl=card.querySelector('div[style*=\"font-weight:700\"]');\r\n    if(lbl)lbl.textContent=title||'';\r\n  }\r\n\r\n  var cfg=window.NUKKAD_CONFIG||{};\r\n  var v1=toEmbed(cfg.videoUrl||'');\r\n  var v2=toEmbed(cfg.video2Url||'');\r\n  cfg.videoUrl=v1; cfg.video2Url=v2;\r\n\r\n  // \u2500\u2500 Vertical side-by-side video cards (stageRender) \u2500\u2500\r\n  var wrap=document.getElementById('ntVideoWrap');\r\n  if(wrap&&(v1||v2)){\r\n    wrap.style.display='flex';\r\n    var c1=document.getElementById('ntVideoCard1');\r\n    var c2=document.getElementById('ntVideoCard2');\r\n    if(c1){\r\n      c1.style.display=v1?'flex':'none';\r\n      c1.style.flex='1';\r\n      if(v1){\r\n        makePosting(c1,v1,cfg.videoThumbnail,cfg.videoTitle||'Quality & finishing');\r\n        c1.onclick=function(){ntPlayVideoFull(v1);};\r\n      }\r\n    }\r\n    if(c2){\r\n      c2.style.display=v2?'flex':'none';\r\n      c2.style.flex='1';\r\n      if(v2){\r\n        makePosting(c2,v2,cfg.video2Thumbnail,cfg.video2Title||'How it\\'s made');\r\n        c2.onclick=function(){ntPlayVideoFull(v2);};\r\n      }\r\n    }\r\n  }\r\n\r\n  // \u2500\u2500 Two square cards in stagePersonal (new layout) \u2500\u2500\r\n  var wrapS4=document.getElementById('ntVideoWrapS4');\r\n  if(wrapS4&&(v1||v2)){\r\n    wrapS4.style.display='block';\r\n    var c1s4=document.getElementById('ntVideoCard1S4');\r\n    var c2s4=document.getElementById('ntVideoCard2S4');\r\n    if(c1s4){\r\n      c1s4.style.display=v1?'block':'none';\r\n      if(v1){\r\n        makePosting(c1s4,v1,cfg.videoThumbnail,cfg.videoTitle||'Quality & finishing');\r\n        var dur1=document.getElementById('ntVideoDur1S4');\r\n        var t1=document.getElementById('ntVideoTitle1S4');\r\n        if(t1)t1.textContent=cfg.videoTitle||'Quality & finishing';\r\n        c1s4.onclick=function(){ntPlayVideoFull(v1);};\r\n      }\r\n    }\r\n    if(c2s4){\r\n      c2s4.style.display=v2?'block':'none';\r\n      if(v2){\r\n        makePosting(c2s4,v2,cfg.video2Thumbnail,cfg.video2Title||'How it\\'s made');\r\n        var t2=document.getElementById('ntVideoTitle2S4');\r\n        if(t2)t2.textContent=cfg.video2Title||'How it\\'s made';\r\n        c2s4.onclick=function(){ntPlayVideoFull(v2);};\r\n      }\r\n    }\r\n  }\r\n\r\n  // Artisan + reviews\r\n  if(typeof ntInitArtisan==='function')ntInitArtisan();\r\n  if(typeof ntLoadReviews==='function')ntLoadReviews();\r\n};\r\n\r\nwindow.ntIsDirectVideo=ntIsDirectVideo;\r\nwindow.ntPlayVideoFull=ntPlayVideoFull;\r\n\r\n\r\nwindow.goRender = goRender;\r\nwindow.ntGetColors = ntGetColors;\r\nwindow.renderC4 = renderC4;\r\nwindow.renderC3 = renderC3;\r\n\r\n// \u2500\u2500 ICON STRIPS \u2014 below chips in stagePersonal \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\nfunction ntRenderIconStrips(){\r\n  // Save scroll position before DOM rebuild to prevent browser jump\r\n  var _scroller=null,_scrollY=0;\r\n  var el=document.getElementById('ntIconStripsWrap');\r\n  if(el){var p=el.parentElement;while(p&&p!==document.body){var cs=window.getComputedStyle(p);if(/(auto|scroll)/.test(cs.overflow+cs.overflowY)){_scroller=p;_scrollY=p.scrollTop;break;}p=p.parentElement;}}\r\n  var _restoreScroll=function(){if(_scroller)_scroller.scrollTop=_scrollY;};\r\n\r\n  var wrap=document.getElementById('ntIconStripsWrap');\r\n  if(!wrap){\r\n    var chips=document.getElementById('s4LineChips');\r\n    if(!chips)return;\r\n    wrap=document.createElement('div');\r\n    wrap.id='ntIconStripsWrap';\r\n    wrap.style.cssText='margin-bottom:12px;';\r\n    chips.parentNode.insertBefore(wrap,chips.nextSibling);\r\n  }\r\n  var allIcons=window.NT_CUSTOM_ICONS||[];\r\n  var lineIcons=allIcons.filter(function(ic){return !ic.forLetter&&!ic.disabled;});\r\n  var letterIcons=allIcons.filter(function(ic){return ic.forLetter&&!ic.disabled;});\r\n  if(!lineIcons.length&&!letterIcons.length){wrap.style.display='none';return;}\r\n  wrap.style.display='block';\r\n\r\n  // If line count changed, collapse so user can choose\r\n  var _allStripCount=curLines.length+(window.s4NameLines||[]).filter(function(l){return l&&l.trim();}).length;\r\n  if(window._ntLastStripCount!=null&&window._ntLastStripCount!==_allStripCount){\r\n    window._ntLineStripLine=0;\r\n  }\r\n  window._ntLastStripCount=_allStripCount;\r\n  if(window._ntLineStripLine>_allStripCount)window._ntLineStripLine=0;\r\n\r\n  var lineOpen=!!window._ntLineStripOpen;\r\n  var letterOpen=!!window._ntLetterStripOpen;\r\n  var lineStep=window._ntLineStripStep||0;\r\n  var selLine=window._ntLineStripLine||0;\r\n  var selPos=window._ntLineStripPos||'left';\r\n  var selLineIcon=window._ntStripSelIcon||'';\r\n  // Only restore icon state when strip is NOT open (initial teaser state)\r\n  // When open and user has selected a line, never override their selection\r\n  var anyLineHasIcon=(window.s4LineOpts||[]).some(function(o){return o&&o.iconKey;});\r\n  if(anyLineHasIcon&&!selLineIcon&&!lineOpen){\r\n    var firstIconLine=-1;\r\n    (window.s4LineOpts||[]).forEach(function(o,i){if(o&&o.iconKey&&firstIconLine<0)firstIconLine=i;});\r\n    if(firstIconLine>=0){\r\n      var fo=window.s4LineOpts[firstIconLine];\r\n      window._ntStripSelIcon=fo.iconKey;selLineIcon=fo.iconKey;\r\n    }\r\n  }\r\n  var selLetterIcon=window._ntLetterStripIcon||'';\r\n  var showChangeGrid=!!window._ntLineStripShowGrid;\r\n  var multiLine=curLines.length>1;\r\n\r\n  function teaserRow(icons,selectedSrc){\r\n    var selIc=selectedSrc&&icons.find(function(ic){return ic.src===selectedSrc;});\r\n    return '<div style=\"display:flex;gap:5px;align-items:center;flex-shrink:0;\">'\r\n      +(selIc\r\n        ?'<img src=\"'+selIc.src+'\" style=\"width:22px;height:22px;object-fit:contain;\" alt=\"'+selIc.label+'\">'\r\n        :icons.slice(0,3).map(function(ic){\r\n          return '<div style=\"width:34px;height:34px;border-radius:8px;border:1.5px solid #e8d5c0;background:#fdfaf5;display:flex;align-items:center;justify-content:center;flex-shrink:0;\">'\r\n            +'<img src=\"'+ic.src+'\" style=\"width:22px;height:22px;object-fit:contain;\" alt=\"'+ic.label+'\" loading=\"lazy\"></div>';\r\n        }).join('')\r\n      )\r\n      +'<div style=\"font-size:9px;font-weight:700;color:#c47a45;border:1px solid #e8d5c0;border-radius:20px;padding:3px 7px;align-self:center;white-space:nowrap;flex-shrink:0;\">'+(selIc?'tap to change':'+ more')+'</div>'\r\n      +'</div>';\r\n  }\r\n\r\n  function gridHTML(icons,prefix){\r\n    var cur=prefix==='line'?selLineIcon:selLetterIcon;\r\n    return icons.map(function(ic){\r\n      var on=cur===ic.src;\r\n      return '<div data-src=\"'+ic.src+'\" data-label=\"'+(ic.label||'').replace(/\"/g,'&quot;')+'\" onclick=\"ntStripPickIcon(this,\\''+prefix+'\\')\" '\r\n        +'style=\"aspect-ratio:1;border-radius:9px;border:1.5px solid '+(on?'#c47a45':'#e8d5c0')+';background:'+(on?'#fff8f3':'#fdfaf5')+';display:flex;align-items:center;justify-content:center;cursor:pointer;\">'\r\n        +'<img src=\"'+ic.src+'\" style=\"width:26px;height:26px;object-fit:contain;\" alt=\"'+ic.label+'\" loading=\"lazy\">'\r\n        +'</div>';\r\n    }).join('');\r\n  }\r\n\r\n  function linePillsHTML(){\r\n    return curLines.map(function(l,i){\r\n      var on=selLine===i+1;\r\n      return '<div onclick=\"ntStripSetLine('+(i+1)+')\" style=\"flex:1;padding:8px 4px;border:1.5px solid '+(on?'#c47a45':'#e8d5c0')+';border-radius:9px;background:'+(on?'#c47a45':'#fff')+';text-align:center;font-size:11px;font-weight:700;color:'+(on?'#fff':'#3d2b1a')+';cursor:pointer;font-family:\\'Poppins\\',sans-serif;\">Line '+(i+1)+'</div>';\r\n    }).join('');\r\n  }\r\n\r\n  function posPillsHTML(){\r\n    // Center only when selected line has 2+ words\r\n    var selLineText=curLines[(window._ntLineStripLine||1)-1]||'';\r\n    var wordCount=selLineText.trim().split(/\\s+/).filter(Boolean).length;\r\n    var showCenter=wordCount>=2;\r\n    return ['left','center','right'].filter(function(p){\r\n      return p!=='center'||showCenter;\r\n    }).map(function(p){\r\n      var on=selPos===p;\r\n      return '<div onclick=\"ntStripSetPos(\\''+p+'\\')\" style=\"flex:1;padding:7px 4px;border:1.5px solid '+(on?'#c47a45':'#e8d5c0')+';border-radius:8px;background:'+(on?'#c47a45':'#fff')+';text-align:center;font-size:10px;font-weight:700;color:'+(on?'#fff':'#3d2b1a')+';cursor:pointer;\">'+(p.charAt(0).toUpperCase()+p.slice(1))+'</div>';\r\n    }).join('');\r\n  }\r\n\r\n  function doneRemoveBar(closeAction,removeAction){\r\n    // Done is automatic (click outside strip). Just show small Remove link.\r\n    return '<div style=\"text-align:center;padding:8px 0 4px;\">'\r\n      +'<span onclick=\"event.stopPropagation();'+removeAction+'\" style=\"font-size:10px;color:#c0392b;cursor:pointer;text-decoration:underline;\">\\u2715 Remove icon</span>'\r\n      +'</div>';\r\n  }\r\n\r\n  function rotRowHTML(prefix){\r\n    if(prefix==='letter')return''; // rotation hidden for letter icon\r\n    var rv=prefix==='line'?(window._ntLineStripRot||0):(window._ntLetterStripRot||0);\r\n    return '<div style=\"display:flex;gap:4px;align-items:center;margin-bottom:10px;\">'\r\n      +[['\u21BA15\\u00b0',-15],['\u21BA5\\u00b0',-5],[null,0],['\u21BB5\\u00b0',5],['\u21BB15\\u00b0',15]].map(function(item){\r\n        if(item[1]===0)return '<div style=\"min-width:30px;text-align:center;font-size:11px;font-weight:700;color:#3d2b1a;\">'+rv+'\\u00b0</div>';\r\n        return '<div onclick=\"ntStripRot(\\''+prefix+'\\','+item[1]+')\" style=\"flex:1;padding:7px 2px;border:1.5px solid #e8d5c0;border-radius:7px;background:#fff;text-align:center;font-size:10px;font-weight:700;color:#3d2b1a;cursor:pointer;\">'+item[0]+'</div>';\r\n      }).join('')\r\n      +'</div>';\r\n  }\r\n\r\n  function doneBarHTML(closeAction,removeAction){ return ''; }\r\n\r\n  function buildCard(open,icons,selectedSrc,title,sub,openAction,closeAction,removeAction,innerHTML){\r\n    var brd=open?'#c47a45':'#e8d5c0';\r\n    return '<div style=\"background:#fff;border:1.5px solid '+brd+';border-radius:12px;margin-bottom:8px;\">'\r\n      +'<div onclick=\"if(!'+open+')'+openAction+'\" style=\"padding:10px 12px;display:flex;align-items:center;gap:10px;cursor:'+(open?'default':'pointer')+';\">'\r\n        +'<div style=\"flex:1;\">'\r\n          +'<div style=\"font-size:10px;font-weight:700;color:#3d2b1a;font-family:\\'Poppins\\',sans-serif;\">'+title+'</div>'\r\n          +'<div style=\"font-size:9px;color:'+(selectedSrc?'#c47a45':'#8c7b6e')+';margin-top:2px;\">'+(selectedSrc?'Tap to change icon':sub)+'</div>'\r\n        +'</div>'\r\n        +teaserRow(icons,selectedSrc)\r\n      +'</div>'\r\n      +(open\r\n        ?'<div style=\"background:#fff8f3;border-top:1px solid #fceedd;padding:12px 12px 16px;border-radius:0 0 12px 12px;\">'\r\n          +innerHTML\r\n          +doneBarHTML(closeAction,removeAction)\r\n          +'</div>'\r\n        :'')\r\n      +'</div>';\r\n  }\r\n\r\n  // \u2500\u2500 Line strip inner content \u2500\u2500\r\n  // Combine curLines + s4NameLines (show all slots, even empty name lines)\r\n  var _allStripLines=curLines.slice();\r\n  var _nameLineOffset=curLines.length;\r\n  (window.s4NameLines||[]).forEach(function(l,ni){\r\n    // Only include name line if it has content (not just empty placeholder)\r\n    if(l&&l.trim())_allStripLines.push(l.trim());\r\n  });\r\n  var totalStripLines=_allStripLines.length;\r\n\r\n  function getLineOpt(i){\r\n    if(i<_nameLineOffset)return window.s4LineOpts&&window.s4LineOpts[i]?window.s4LineOpts[i]:{};\r\n    var ni=i-_nameLineOffset;\r\n    return window.s4NameLineOpts&&window.s4NameLineOpts[ni]?window.s4NameLineOpts[ni]:{};\r\n  }\r\n  function setLineIcon(i,src,side,rot){\r\n    if(i<_nameLineOffset){\r\n      if(!window.s4LineOpts[i])window.s4LineOpts[i]={};\r\n      window.s4LineOpts[i].iconKey=src;window.s4LineOpts[i].iconSide=side;window.s4LineOpts[i].iconRotation=rot;\r\n    } else {\r\n      var ni=i-_nameLineOffset;\r\n      if(!window.s4NameLineOpts)window.s4NameLineOpts=[];\r\n      while(window.s4NameLineOpts.length<=ni)window.s4NameLineOpts.push({});\r\n      window.s4NameLineOpts[ni].iconKey=src;window.s4NameLineOpts[ni].iconSide=side;window.s4NameLineOpts[ni].iconRotation=rot;\r\n    }\r\n  }\r\n  function removeLineIcon(i){\r\n    if(i<_nameLineOffset){\r\n      if(window.s4LineOpts&&window.s4LineOpts[i]){delete window.s4LineOpts[i].iconKey;delete window.s4LineOpts[i].iconSide;delete window.s4LineOpts[i].iconRotation;}\r\n    } else {\r\n      var ni=i-_nameLineOffset;\r\n      if(window.s4NameLineOpts&&window.s4NameLineOpts[ni]){delete window.s4NameLineOpts[ni].iconKey;delete window.s4NameLineOpts[ni].iconSide;delete window.s4NameLineOpts[ni].iconRotation;}\r\n    }\r\n  }\r\n\r\n  var activeLine=window._ntLineStripLine!=null?window._ntLineStripLine:0;\r\n  var lineInner='';\r\n\r\n  if(totalStripLines>1){\r\n    lineInner+='<div style=\"font-size:9px;font-weight:700;color:#8c7b6e;letter-spacing:.06em;text-transform:uppercase;margin-bottom:8px;\">Lines &amp; icons</div>';\r\n  }\r\n\r\n  _allStripLines.forEach(function(lineText,i){\r\n    var lineIdx=i+1;\r\n    var lineOpt=getLineOpt(i);\r\n    var iconSrc=lineOpt.iconKey||'';\r\n    var isActive=(totalStripLines===1)||activeLine===lineIdx;\r\n    var isShowGrid=isActive&&(!iconSrc||showChangeGrid);\r\n    var isShowSelected=isActive&&iconSrc&&!showChangeGrid;\r\n    var brd=isActive?'#c47a45':'#e8d5c0';\r\n\r\n    if(totalStripLines>1){\r\n      var rowN=isActive?0:lineIdx;\r\n      if(iconSrc){\r\n        lineInner+='<div data-line-n=\"'+rowN+'\" style=\"display:flex;align-items:center;gap:8px;border:1.5px solid '+brd+';border-radius:'+(isActive?'10px 10px 0 0':'10px')+';padding:8px 12px;background:'+(isActive?'#fff8f3':'#fff')+';cursor:pointer;margin-bottom:'+(isActive?'0':'7px')+';\">'\r\n          +'<img src=\"'+iconSrc+'\" style=\"width:28px;height:28px;object-fit:contain;flex-shrink:0;\">'\r\n          +'<div style=\"flex:1;min-width:0;\"><div style=\"font-size:10px;font-weight:700;color:#3d2b1a;\">Line '+lineIdx+'</div>'\r\n          +'<div style=\"font-size:9px;color:#c47a45;margin-top:1px;\">Has icon \u00B7 tap to '+(isActive?'collapse':'edit')+'</div></div>'\r\n          +(isActive?'<div style=\"font-size:12px;color:#c47a45;flex-shrink:0;\">\u25B2</div>':'<div style=\"font-size:9px;font-weight:700;color:#c47a45;white-space:nowrap;flex-shrink:0;\">Edit \u2193</div>')\r\n          +'</div>';\r\n      } else {\r\n        lineInner+='<div data-line-n=\"'+rowN+'\" style=\"display:flex;align-items:center;gap:8px;border:1.5px dashed '+brd+';border-radius:'+(isActive?'10px 10px 0 0':'10px')+';padding:8px 12px;background:'+(isActive?'#fff8f3':'#fdfaf5')+';cursor:pointer;margin-bottom:'+(isActive?'0':'7px')+';\">'\r\n          +'<div style=\"width:28px;height:28px;border-radius:6px;border:1.5px dashed #e8d5c0;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px;color:#c8b09a;\">+</div>'\r\n          +'<div style=\"flex:1;min-width:0;\"><div style=\"font-size:10px;font-weight:700;color:#3d2b1a;\">Line '+lineIdx+'</div>'\r\n          +'<div style=\"font-size:9px;color:#8c7b6e;margin-top:1px;\">No icon \u00B7 tap to add</div></div>'\r\n          +(isActive?'<div style=\"font-size:12px;color:#c47a45;flex-shrink:0;\">\u25B2</div>':'')\r\n          +'</div>';\r\n      }\r\n    }\r\n\r\n    if(isActive){\r\n      var panelStyle=totalStripLines>1\r\n        ?'border:1.5px solid #c47a45;border-top:none;border-radius:0 0 10px 10px;padding:10px 10px 16px;background:#fff8f3;margin-bottom:7px;'\r\n        :'padding-top:4px;padding-bottom:8px;';\r\n\r\n      if(isShowGrid){\r\n        lineInner+='<div style=\"'+panelStyle+'\">'\r\n          +'<div style=\"font-size:9px;font-weight:700;color:#8c7b6e;letter-spacing:.06em;text-transform:uppercase;margin-bottom:7px;\">Choose an icon</div>'\r\n          +'<div style=\"display:grid;grid-template-columns:repeat(auto-fill,minmax(58px,1fr));gap:5px;\">'+gridHTML(lineIcons,'line')+'</div>'\r\n          +doneRemoveBar(totalStripLines>1?'ntStripSelectLine(0)':'ntLineStripClose()','ntLineRemoveFromLine('+(lineIdx-1)+')')\r\n          +'</div>';\r\n      } else if(isShowSelected){\r\n        lineInner+='<div style=\"'+panelStyle+'\">'\r\n          +(totalStripLines===1\r\n            ?'<div onclick=\"ntStripShowGrid()\" style=\"display:flex;align-items:center;gap:8px;border:1.5px solid #e8d5c0;border-radius:10px;padding:8px 12px;background:#fff;cursor:pointer;margin-bottom:10px;\">'\r\n              +'<img src=\"'+iconSrc+'\" style=\"width:28px;height:28px;object-fit:contain;\">'\r\n              +'<div style=\"flex:1;font-size:11px;font-weight:700;color:#3d2b1a;\">Selected icon</div>'\r\n              +'<div style=\"font-size:10px;font-weight:700;color:#c47a45;\">Change \\u2192</div>'\r\n              +'</div>'\r\n            :'')  // multi-line: line row above is already the header, skip duplicate\r\n          +(totalStripLines>1?'<div onclick=\"ntStripShowGrid()\" style=\"font-size:9px;font-weight:700;color:#c47a45;cursor:pointer;margin-bottom:10px;text-align:right;\">Change icon \\u2192</div>':'')\r\n          +'<div style=\"font-size:9px;font-weight:700;color:#8c7b6e;letter-spacing:.06em;text-transform:uppercase;margin-bottom:6px;\">Position</div>'\r\n          +'<div style=\"display:flex;gap:5px;margin-bottom:10px;\">'+posPillsHTML()+'</div>'\r\n          +'<div style=\"font-size:9px;font-weight:700;color:#8c7b6e;letter-spacing:.06em;text-transform:uppercase;margin-bottom:6px;\">Rotate</div>'\r\n          +rotRowHTML('line')\r\n          +doneRemoveBar(totalStripLines>1?'ntStripSelectLine(0)':'ntLineStripClose()','ntLineRemoveFromLine('+(lineIdx-1)+')')\r\n          +'</div>';\r\n      }\r\n    }\r\n  });\r\n\r\n  // Global done/remove only for single line (multi-line has per-line buttons)\r\n  if(totalStripLines===1){\r\n    var _singleHasIcon=window.s4LineOpts&&window.s4LineOpts[0]&&window.s4LineOpts[0].iconKey;\r\n    if(!_singleHasIcon){\r\n      // no icon yet \u2014 no buttons needed\r\n    }\r\n    // done/remove already inside the panel above for single line\r\n  } else {\r\n    // Multi: global Done at very bottom to close the whole strip\r\n    var _anyIcon=_allStripLines.some(function(l,i){return window.s4LineOpts&&window.s4LineOpts[i]&&window.s4LineOpts[i].iconKey;});\r\n    if(_anyIcon&&activeLine===0){\r\n      lineInner+=doneRemoveBar('ntLineStripClose()','ntLineStripRemoveAll()');\r\n    }\r\n  }\r\n\r\n  // \u2500\u2500 Letter strip inner content \u2500\u2500\r\n  var showLetterChangeGrid=!!window._ntLetterStripShowGrid;\r\n  var letterInner='';\r\n  if(selLetterIcon&&!showLetterChangeGrid){\r\n    letterInner='<div onclick=\"ntLetterStripShowGrid()\" style=\"display:flex;align-items:center;gap:8px;border:1.5px solid #e8d5c0;border-radius:10px;padding:8px 12px;background:#fff;cursor:pointer;margin-bottom:10px;\">'\r\n      +'<img src=\"'+selLetterIcon+'\" style=\"width:28px;height:28px;object-fit:contain;\">'\r\n      +'<div style=\"flex:1;font-size:11px;font-weight:700;color:#3d2b1a;\">Selected icon</div>'\r\n      +'<div style=\"font-size:10px;font-weight:700;color:#c47a45;\">Change \\u2192</div>'\r\n      +'</div>'\r\n      +'<div style=\"font-size:9px;font-weight:700;color:#8c7b6e;letter-spacing:.06em;text-transform:uppercase;margin-bottom:6px;\">Rotate</div>'\r\n      +rotRowHTML('letter')\r\n      +doneRemoveBar('ntLetterStripClose()','ntLetterStripRemove()');\r\n  } else {\r\n    letterInner='<div style=\"font-size:9px;font-weight:700;color:#8c7b6e;letter-spacing:.06em;text-transform:uppercase;margin-bottom:7px;\">Choose an icon \\u2014 tap line on canvas above to move it</div>'\r\n      +'<div style=\"display:grid;grid-template-columns:repeat(auto-fill,minmax(58px,1fr));gap:5px;margin-bottom:0;\">'+gridHTML(letterIcons,'letter')+'</div>'\r\n      +(selLetterIcon\r\n        ?'<div style=\"border-top:1px solid #fceedd;padding-top:10px;margin-top:10px;\">'\r\n          +'<div style=\"font-size:9px;font-weight:700;color:#8c7b6e;letter-spacing:.06em;text-transform:uppercase;margin-bottom:6px;\">Rotate</div>'\r\n          +rotRowHTML('letter')\r\n          +doneRemoveBar('ntLetterStripClose()','ntLetterStripRemove()')\r\n          +'</div>'\r\n        :'');\r\n  }\r\n\r\n\r\n  wrap.innerHTML=\r\n    (lineIcons.length?buildCard(lineOpen,lineIcons,selLineIcon,'Add an icon to your design','Tap to place beside a line','ntLineStripOpen()','ntLineStripClose()','ntLineStripRemove()',lineInner):'')\r\n    +(letterIcons.length?buildCard(letterOpen,letterIcons,selLetterIcon,'Add crown on a letter','Floats on top of one letter','ntLetterStripOpen()','ntLetterStripClose()','ntLetterStripRemove()',letterInner):'');\r\n  _restoreScroll();\r\n\r\n  // Single delegated click handler on the entire strip wrap\r\n  // This is bulletproof \u2014 no onclick strings, no per-element listeners\r\n  if(wrap._clickHandler)wrap.removeEventListener('click',wrap._clickHandler,true);\r\n  wrap._clickHandler=function(e){\r\n    var el=e.target;\r\n    // Walk up to find a data-line-n element\r\n    while(el&&el!==wrap){\r\n      var n=el.getAttribute&&el.getAttribute('data-line-n');\r\n      if(n!==null&&n!==undefined){\r\n        e.stopPropagation();\r\n        e.preventDefault();\r\n        window.ntStripSelectLine(parseInt(n));\r\n        return;\r\n      }\r\n      el=el.parentElement;\r\n    }\r\n  };\r\n  wrap.addEventListener('click',wrap._clickHandler,true);\r\n\r\n  // Auto-close strip when clicking outside it (acts as Done)\r\n  if(lineOpen||letterOpen){\r\n    if(wrap._outsideHandler)document.removeEventListener('click',wrap._outsideHandler,true);\r\n    wrap._outsideHandler=function(e){\r\n      if(!wrap.contains(e.target)){\r\n        if(lineOpen)window.ntLineStripClose();\r\n        else if(letterOpen)window.ntLetterStripClose();\r\n        document.removeEventListener('click',wrap._outsideHandler,true);\r\n        wrap._outsideHandler=null;\r\n      }\r\n    };\r\n    setTimeout(function(){\r\n      document.addEventListener('click',wrap._outsideHandler,true);\r\n    },200);\r\n  } else {\r\n    if(wrap._outsideHandler){\r\n      document.removeEventListener('click',wrap._outsideHandler,true);\r\n      wrap._outsideHandler=null;\r\n    }\r\n  }\r\n}\r\n\r\nwindow.ntStripSelectLine=function(n){\r\n  window._ntLineStripLine=n;\r\n  window._ntLineStripShowGrid=false;\r\n  if(n>0){\r\n    var i=n-1;\r\n    var _nlo=curLines.length;\r\n    var opt;\r\n    if(i<_nlo){opt=window.s4LineOpts&&window.s4LineOpts[i]?window.s4LineOpts[i]:{};}\r\n    else{var ni=i-_nlo;opt=window.s4NameLineOpts&&window.s4NameLineOpts[ni]?window.s4NameLineOpts[ni]:{};}\r\n    window._ntStripSelIcon=opt.iconKey||'';\r\n    window._ntLineStripPos=opt.iconSide||'left';\r\n    window._ntLineStripRot=opt.iconRotation||0;\r\n  }\r\n  ntRenderIconStrips();\r\n};\r\nwindow.ntLineRemoveFromLine=function(i){\r\n  var _nlo=curLines.length;\r\n  if(i<_nlo){\r\n    if(window.s4LineOpts&&window.s4LineOpts[i]){delete window.s4LineOpts[i].iconKey;delete window.s4LineOpts[i].iconSide;delete window.s4LineOpts[i].iconRotation;}\r\n  } else {\r\n    var ni=i-_nlo;\r\n    if(window.s4NameLineOpts&&window.s4NameLineOpts[ni]){delete window.s4NameLineOpts[ni].iconKey;delete window.s4NameLineOpts[ni].iconSide;delete window.s4NameLineOpts[ni].iconRotation;}\r\n  }\r\n  renderS4();try{renderS4SizeBar();}catch(e){}\r\n  var anyIcon=(window.s4LineOpts||[]).some(function(o){return o&&o.iconKey;})\r\n    ||(window.s4NameLineOpts||[]).some(function(o){return o&&o.iconKey;});\r\n  if(!anyIcon)window._ntStripSelIcon='';\r\n  window._ntLineStripLine=0;\r\n  ntRenderIconStrips();\r\n};\r\nwindow.ntLineStripRemoveAll=function(){\r\n  (window.s4LineOpts||[]).forEach(function(o){if(o){delete o.iconKey;delete o.iconSide;delete o.iconRotation;}});\r\n  (window.s4NameLineOpts||[]).forEach(function(o){if(o){delete o.iconKey;delete o.iconSide;delete o.iconRotation;}});\r\n  renderS4();try{renderS4SizeBar();}catch(e){}\r\n  window._ntStripSelIcon='';window._ntLineStripOpen=false;window._ntLineStripStep=0;\r\n  window._ntLineStripLine=0;window._ntLineStripShowGrid=false;\r\n  ntRenderIconStrips();\r\n};\r\nwindow.ntLineStripOpen=function(){\r\n  if(window._ntLineStripOpen)return;\r\n  window._ntLineStripOpen=true;window._ntLetterStripOpen=false;\r\n  var _totalSlots=curLines.length+(window.s4NameLines||[]).length;\r\n  if(_totalSlots===1){\r\n    window._ntLineStripLine=1; // single line \u2014 auto-select\r\n  } else {\r\n    window._ntLineStripLine=0; // multiple lines \u2014 show all, user chooses\r\n  }\r\n  ntRenderIconStrips();\r\n};\r\nwindow.ntLineStripClose=function(){\r\n  window._ntLineStripOpen=false;window._ntLineStripShowGrid=false;ntRenderIconStrips();\r\n  setTimeout(function(){\r\n    var s=document.getElementById('ntIconStripsWrap');\r\n    if(s){var sc=window._ntScroller;if(sc&&sc!==window)sc.scrollTop=Math.max(0,s.offsetTop-20);else s.scrollIntoView({behavior:'smooth',block:'nearest'});}\r\n  },150);\r\n};\r\nwindow.ntLetterStripOpen=function(){\r\n  if(window._ntLetterStripOpen)return;\r\n  window._ntLetterStripOpen=true;window._ntLineStripOpen=false;\r\n  ntRenderIconStrips();\r\n};\r\nwindow.ntLetterStripClose=function(){\r\n  window._ntLetterStripOpen=false;window._ntLetterStripShowGrid=false;ntRenderIconStrips();\r\n  setTimeout(function(){\r\n    var s=document.getElementById('ntIconStripsWrap');\r\n    if(s){var sc=window._ntScroller;if(sc&&sc!==window)sc.scrollTop=Math.max(0,s.offsetTop-20);else s.scrollIntoView({behavior:'smooth',block:'nearest'});}\r\n  },150);\r\n};\r\nwindow.ntStripShowGrid=function(){window._ntLineStripShowGrid=true;ntRenderIconStrips();};\r\nwindow.ntLetterStripShowGrid=function(){window._ntLetterStripShowGrid=true;ntRenderIconStrips();};\r\nwindow.ntStripSetLine=function(n){window._ntLineStripLine=n;window._ntLineStripStep=1;window._ntStripSelIcon='';window._ntLineStripShowGrid=false;ntRenderIconStrips();};\r\nwindow.ntStripPickIcon=function(el,prefix){\r\n  var src=el.getAttribute('data-src');\r\n  var lbl=el.getAttribute('data-label')||ntIconLabel&&ntIconLabel(src)||src.split('/').pop().split('?')[0].replace(/\\.[^.]+$/,'');\r\n  if(prefix==='line'){\r\n    window._ntStripSelIcon=src;window._ntLineStripShowGrid=false;\r\n    var li=(window._ntLineStripLine||1)-1;\r\n    var _nloP=curLines.length;\r\n    if(li<_nloP){\r\n      if(!window.s4LineOpts[li])window.s4LineOpts[li]={};\r\n      window.s4LineOpts[li].iconKey=src;window.s4LineOpts[li].iconLabel=lbl;\r\n      window.s4LineOpts[li].iconSide=window._ntLineStripPos||'left';\r\n      window.s4LineOpts[li].iconRotation=window._ntLineStripRot||0;\r\n    } else {\r\n      var niP=li-_nloP;\r\n      if(!window.s4NameLineOpts)window.s4NameLineOpts=[];\r\n      while(window.s4NameLineOpts.length<=niP)window.s4NameLineOpts.push({});\r\n      window.s4NameLineOpts[niP].iconKey=src;window.s4NameLineOpts[niP].iconLabel=lbl;\r\n      window.s4NameLineOpts[niP].iconSide=window._ntLineStripPos||'left';\r\n      window.s4NameLineOpts[niP].iconRotation=window._ntLineStripRot||0;\r\n    }\r\n    renderS4();try{renderS4SizeBar();}catch(e){}\r\n  } else {\r\n    window._ntLetterStripIcon=src;window._ntLetterStripShowGrid=false;\r\n    var _prevIL=window.ntLetterIcon||{};\r\n    window.ntLetterIcon={active:true,letter:'',line:window._ntLetterStripLine||0,charIdx:0,iconSrc:src,iconLabel:'',\r\n      px:_prevIL.px!=null?_prevIL.px:50,py:_prevIL.py!=null?_prevIL.py:15,\r\n      rotation:window._ntLetterStripRot||0};\r\n    if(typeof renderS4==='function')renderS4();\r\n    if(typeof ntRefreshIconLetterRow==='function')ntRefreshIconLetterRow();\r\n  }\r\n  // Rebuild to show selected state + options (grid collapses automatically)\r\n  ntRenderIconStrips();\r\n};\r\nwindow.ntStripSetPos=function(p){\r\n  window._ntLineStripPos=p;\r\n  var li=(window._ntLineStripLine||1)-1;\r\n  var _nlo=curLines.length;\r\n  if(li<_nlo){\r\n    if(window.s4LineOpts&&window.s4LineOpts[li]){window.s4LineOpts[li].iconSide=p;renderS4();}\r\n  } else {\r\n    var ni=li-_nlo;\r\n    if(!window.s4NameLineOpts)window.s4NameLineOpts=[];\r\n    while(window.s4NameLineOpts.length<=ni)window.s4NameLineOpts.push({});\r\n    window.s4NameLineOpts[ni].iconSide=p;renderS4();\r\n  }\r\n  ntRenderIconStrips();\r\n};\r\nwindow.ntStripRot=function(prefix,delta){\r\n  if(prefix==='line'){\r\n    window._ntLineStripRot=Math.max(-180,Math.min(180,(window._ntLineStripRot||0)+delta));\r\n    var li=(window._ntLineStripLine||1)-1;\r\n    var _nlo=curLines.length;\r\n    if(li<_nlo){\r\n      if(window.s4LineOpts&&window.s4LineOpts[li]){window.s4LineOpts[li].iconRotation=window._ntLineStripRot;renderS4();}\r\n    } else {\r\n      var ni=li-_nlo;\r\n      if(!window.s4NameLineOpts)window.s4NameLineOpts=[];\r\n      while(window.s4NameLineOpts.length<=ni)window.s4NameLineOpts.push({});\r\n      window.s4NameLineOpts[ni].iconRotation=window._ntLineStripRot;renderS4();\r\n    }\r\n  } else {\r\n    window._ntLetterStripRot=Math.max(-180,Math.min(180,(window._ntLetterStripRot||0)+delta));\r\n    if(window.ntLetterIcon)window.ntLetterIcon.rotation=window._ntLetterStripRot;\r\n    if(typeof renderS4==='function')renderS4();\r\n  }\r\n  ntRenderIconStrips();\r\n};\r\nwindow.ntLineStripRemove=function(){\r\n  var li=(window._ntLineStripLine||1)-1;\r\n  if(li>=0&&window.s4LineOpts&&window.s4LineOpts[li]){\r\n    delete window.s4LineOpts[li].iconKey;delete window.s4LineOpts[li].iconSide;delete window.s4LineOpts[li].iconRotation;\r\n    renderS4();try{renderS4SizeBar();}catch(e){}\r\n  }\r\n  window._ntStripSelIcon='';window._ntLineStripOpen=false;window._ntLineStripStep=0;\r\n  window._ntLineStripLine=curLines.length===1?1:0;window._ntLineStripShowGrid=false;\r\n  ntRenderIconStrips();\r\n};\r\nwindow.ntLetterStripRemove=function(){\r\n  window.ntLetterIcon={active:false,letter:'',line:0,charIdx:0,iconSrc:'',iconLabel:''};\r\n  window._ntLetterStripIcon='';window._ntLetterStripOpen=false;window._ntLetterStripShowGrid=false;\r\n  if(typeof renderS4==='function')renderS4();\r\n  if(typeof ntRefreshIconLetterRow==='function')ntRefreshIconLetterRow();\r\n  ntRenderIconStrips();\r\n};\r\nwindow.ntRenderIconStrips=ntRenderIconStrips;\r\n\r\nwindow.pc3 = pc3;\r\nwindow.pc4 = pc4;\r\nwindow.initS4 = initS4;\r\nwindow.renderS4 = renderS4;\r\nwindow.goPersonal = goPersonal;\r\nwindow.goMantra = goMantra;\r\nwindow.showSt = showSt;\r\nwindow.calcSizePrice = calcSizePrice;\r\nwindow.renderS4LineChips = renderS4LineChips;\r\nwindow.renderS4SizeBar = renderS4SizeBar;\r\nwindow.renderC4 = renderC4;\r\nwindow.adjustSizeS4 = adjustSizeS4;\r\n// Stub for removed function \u2014 called by initS4\r\nfunction ntShowAddIconBtn(){ /* icon add button \u2014 handled via ntILRow999/S4 */ }\r\n\r\n// NT_CUSTOM_ICONS \u2014 set by nukkad-customiser-section.liquid before this script loads\r\n// Retry once in case of race condition on slow connections\r\nwindow.NT_CUSTOM_ICONS = window.NT_CUSTOM_ICONS || [];\r\nsetTimeout(function(){\r\n  if(!window.NT_CUSTOM_ICONS.length&&window._NT_ICONS_PENDING){\r\n    window.NT_CUSTOM_ICONS=window._NT_ICONS_PENDING;\r\n  }\r\n},1000);\r\nwindow.adjustSize = adjustSize;\r\nwindow.toggleDesigner = toggleDesigner;\r\nwindow.mantraResizeDelta = mantraResizeDelta;\r\nwindow.mantraQtyDelta = mantraQtyDelta;\r\nwindow.mantraAddLine = mantraAddLine;\r\nwindow.setMantraFont = setMantraFont;\r\nwindow.setFont = setFont;\r\nwindow.setFont4 = setFont4;\r\nwindow.adjustQty = adjustQty;\r\nwindow.adjustQtyS4 = adjustQtyS4;\r\nwindow.s4GoBackToQuote = s4GoBackToQuote;\r\nwindow.s4FocusName = s4FocusName;\r\nwindow.designerState = designerState;\r\n\r\n// \u2500\u2500 EXPOSE IIFE-SCOPED STATE VIA GETTERS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n// curLines, customSizeOverride, mantraLines etc. live inside the IIFE.\r\n// The slider liquid functions (ntCommissionPersonal etc.) need them via window.\r\nObject.defineProperty(window, 'curLines', {\r\n  get: function(){ return curLines; },\r\n  set: function(v){ curLines = v; },\r\n  configurable: true\r\n});\r\nObject.defineProperty(window, 'customSizeOverride', {\r\n  get: function(){ return customSizeOverride; },\r\n  set: function(v){ customSizeOverride = v; },\r\n  configurable: true\r\n});\r\nObject.defineProperty(window, 'isNamed', {\r\n  get: function(){ return isNamed; },\r\n  set: function(v){ isNamed = v; },\r\n  configurable: true\r\n});\r\nObject.defineProperty(window, 'mantraLines', {\r\n  get: function(){ return mantraLines; },\r\n  configurable: true\r\n});\r\nObject.defineProperty(window, 'mantraCurInch', {\r\n  get: function(){ return mantraCurInch; },\r\n  configurable: true\r\n});\r\nObject.defineProperty(window, 'mantraQtyVal', {\r\n  get: function(){ return mantraQtyVal; },\r\n  configurable: true\r\n});\r\n\r\n})();\r\n\r\n// \u2500\u2500 APPLY DELIVERY + FAQ FROM CONFIG \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\nfunction ntApplyBottomSection(){\r\n  var cfg = window.NUKKAD_CONFIG || {};\r\n\r\n  // Delivery\r\n  var dd = document.getElementById('ntDeliveryDays');\r\n  if(dd && cfg.deliveryDays) dd.textContent = cfg.deliveryDays;\r\n  var ds = document.getElementById('ntDeliverySub');\r\n  if(ds && cfg.deliverySub) ds.textContent = cfg.deliverySub;\r\n\r\n  // FAQ\r\n  var faqWrap = document.getElementById('ntFaqWrap');\r\n  var faqItems = document.getElementById('ntFaqItems');\r\n  var faqs = cfg.faq || [];\r\n  if(faqWrap && faqItems && faqs.length){\r\n    faqWrap.style.display = 'block';\r\n    var openIdx = -1;\r\n    faqItems.innerHTML = faqs.filter(function(f){ return f.q && f.a; }).map(function(f, i){\r\n      return '<div style=\"background:#fff;border:1.5px solid #e8d5c0;border-radius:12px;margin-bottom:7px;overflow:hidden;\">'\r\n        +'<div onclick=\"ntToggleFaq('+i+')\" style=\"display:flex;align-items:center;justify-content:space-between;padding:12px 14px;cursor:pointer;font-family:\\'Poppins\\',sans-serif;font-weight:700;font-size:11px;color:#3d2b1a;gap:8px;\">'\r\n        +f.q\r\n        +'<span id=\"ntFaqIcon'+i+'\" style=\"font-size:16px;color:#c47a45;transition:transform .25s;flex-shrink:0;font-weight:300;line-height:1;\">+</span>'\r\n        +'</div>'\r\n        +'<div id=\"ntFaqAns'+i+'\" style=\"max-height:0;overflow:hidden;transition:max-height .3s ease,padding .3s ease;font-size:10px;color:#8c7b6e;line-height:1.65;padding:0 14px;\">'\r\n        +f.a\r\n        +'</div>'\r\n        +'</div>';\r\n    }).join('');\r\n  }\r\n}\r\n\r\nwindow._ntFaqOpen = -1;\r\nfunction ntToggleFaq(i){\r\n  var prev = window._ntFaqOpen;\r\n  if(prev >= 0 && prev !== i){\r\n    var pa = document.getElementById('ntFaqAns'+prev);\r\n    var pi = document.getElementById('ntFaqIcon'+prev);\r\n    if(pa){ pa.style.maxHeight='0'; pa.style.padding='0 14px'; }\r\n    if(pi){ pi.style.transform=''; pi.textContent='+'; }\r\n  }\r\n  var a = document.getElementById('ntFaqAns'+i);\r\n  var ic = document.getElementById('ntFaqIcon'+i);\r\n  var isOpen = (prev === i);\r\n  if(isOpen){\r\n    if(a){ a.style.maxHeight='0'; a.style.padding='0 14px'; }\r\n    if(ic){ ic.style.transform=''; ic.textContent='+'; }\r\n    window._ntFaqOpen = -1;\r\n  } else {\r\n    if(a){ a.style.maxHeight='200px'; a.style.padding='0 14px 13px'; }\r\n    if(ic){ ic.style.transform='rotate(45deg)'; ic.textContent='+'; }\r\n    window._ntFaqOpen = i;\r\n  }\r\n}\r\n\r\n// Call after config is applied\r\nsetTimeout(ntApplyBottomSection, 600);"],
  "mappings": "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",
  "names": ["raw", "match", "handles", "_mi", "_tbr", "dragSrc4", "p", "el"]
}
