{"product_id":"kit-sospensione-design","title":"Kit Sospensione Design","description":"\u003cstyle\u003e\n#kits-likht{color:#141414;margin:0}\n#kits-likht *{box-sizing:border-box}\n.kits-eyebrow{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:#8a8a8a;margin-bottom:8px}\n.kits-h2{font-size:26px;line-height:1.15;margin:0 0 8px;font-weight:600}\n.kits-sub{color:#5c5c5c;max-width:62ch;margin:0 0 6px;font-size:15px;line-height:1.5}\n.kits-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:30px;margin-top:26px;align-items:start}\n.kits-b{margin-bottom:26px}\n.kits-q{font-weight:600;font-size:16px;margin-bottom:11px;display:flex;align-items:center;gap:10px}\n.kits-q span{width:23px;height:23px;border-radius:50%;background:#141414;color:#fff;font-size:13px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}\n.kits-opts{display:flex;flex-wrap:wrap;gap:9px}\n.kits-opt{background:#fff;border:1px solid #e0e0e0;border-radius:10px;padding:11px 15px;cursor:pointer;font:inherit;font-size:15px;text-align:left;line-height:1.3;transition:border-color .15s,box-shadow .15s;color:#141414}\n.kits-opt small{display:block;color:#8a8a8a;font-size:12px;margin-top:3px}\n.kits-opt:hover{border-color:#b0b0b0}\n.kits-opt.on{border-color:#141414;box-shadow:inset 0 0 0 1px #141414}\n.kits-num .kits-opt{min-width:52px;text-align:center}\n.kits-hide{display:none}\n.kits-sub2{font-size:14px;color:#5c5c5c;margin:14px 0 9px}\n.kits-sel{height:44px;padding:0 12px;border:1px solid #d6d6d6;border-radius:9px;background:#fff;font:inherit;font-size:14.5px;color:#141414;min-width:180px}\n.kits-card{position:sticky;top:24px;background:#fafafa;border:1px solid #e6e6e6;border-radius:14px;padding:20px}\n.kits-r{display:flex;justify-content:space-between;gap:12px;font-size:13.5px;color:#5c5c5c;padding:5px 0;border-bottom:1px dashed #e6e6e6}\n.kits-r i{font-style:normal;font-variant-numeric:tabular-nums;white-space:nowrap}\n.kits-tot{display:flex;justify-content:space-between;align-items:baseline;margin:14px 0;padding-top:12px;border-top:1px solid #e0e0e0}\n.kits-tot b{font-size:25px;font-variant-numeric:tabular-nums}\n.kits-cta{width:100%;background:#141414;color:#fff;border:0;border-radius:10px;padding:14px 18px;font:inherit;font-weight:600;cursor:pointer}\n.kits-cta:hover{background:#000}\n.kits-cta:disabled{background:#c9c9c9;cursor:not-allowed}\n.kits-msg{font-size:13px;margin-top:9px;color:#5c5c5c;min-height:1em}\n.kits-msg.kits-err{color:#b3261e}\n.kits-safe{font-size:12.5px;color:#8a8a8a;margin:12px 0 0;line-height:1.45}\n.kits-nota{font-size:12.5px;color:#8a8a8a;margin:8px 0 0}\n\u003c\/style\u003e\n\n\u003cdiv id=\"kits-likht\"\u003e\n  \u003cdiv class=\"kits-eyebrow\"\u003eConfiguratore\u003c\/div\u003e\n  \u003ch2 class=\"kits-h2\"\u003eKit Sospensione Design\u003c\/h2\u003e\n  \u003cp class=\"kits-sub\"\u003eUn rosone, un cavo tessile e le luci che vuoi tu: scegli quante ne appendi, la finitura e il colore del cavo. Ti arriva tutto abbinato, pronto da montare.\u003c\/p\u003e\n\n  \u003cdiv class=\"kits-grid\"\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"kits-b\"\u003e\n        \u003cdiv class=\"kits-q\"\u003e\n\u003cspan\u003e1\u003c\/span\u003e Quante luci appendi?\u003c\/div\u003e\n        \u003cdiv class=\"kits-opts kits-num\" data-el=\"luci\"\u003e\u003c\/div\u003e\n        \u003cp class=\"kits-nota\" data-el=\"notaLuci\"\u003e\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"kits-b kits-hide\" data-el=\"formaBox\"\u003e\n        \u003cdiv class=\"kits-q\"\u003e\n\u003cspan\u003e2\u003c\/span\u003e Che rosone?\u003c\/div\u003e\n        \u003cdiv class=\"kits-opts\" data-el=\"forma\"\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt on\" data-v=\"tondo\"\u003eTondo\u003csmall data-el=\"pTondo\"\u003e\u003c\/small\u003e\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"rett\"\u003eRettangolare\u003csmall data-el=\"pRett\"\u003e\u003c\/small\u003e\u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"kits-b\"\u003e\n        \u003cdiv class=\"kits-q\"\u003e\n\u003cspan\u003e3\u003c\/span\u003e Finitura del rosone e dei decentratori\u003c\/div\u003e\n        \u003cdiv class=\"kits-opts\" data-el=\"fin\"\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"bianco\"\u003eBianco satinato\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt on\" data-v=\"nero\"\u003eNero satinato\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"ottone\"\u003eOttone\u003csmall\u003ecosta di più sul rosone\u003c\/small\u003e\u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"kits-b\"\u003e\n        \u003cdiv class=\"kits-q\"\u003e\n\u003cspan\u003e4\u003c\/span\u003e Colore del cavo\u003c\/div\u003e\n        \u003cdiv class=\"kits-opts\" data-el=\"cavo\"\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt on\" data-v=\"nero\"\u003eNero\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"bianco\"\u003eBianco\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"grigio\"\u003eGrigio\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"marrone\"\u003eMarrone\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"oro\"\u003eOro\u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv\u003e\n      \u003cdiv class=\"kits-b\"\u003e\n        \u003cdiv class=\"kits-q\"\u003e\n\u003cspan\u003e5\u003c\/span\u003e Portalampada\u003c\/div\u003e\n        \u003cdiv class=\"kits-opts\" data-el=\"porta\"\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt on\" data-v=\"liscio\"\u003eLiscio\u003csmall data-el=\"pLiscio\"\u003eslanciato\u003c\/small\u003e\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"zigrinato\"\u003eZigrinato\u003csmall data-el=\"pZigr\"\u003econ ghiera\u003c\/small\u003e\u003c\/button\u003e\n        \u003c\/div\u003e\n        \u003cp class=\"kits-sub2\"\u003eDi che colore?\u003c\/p\u003e\n        \u003cdiv class=\"kits-opts\" data-el=\"finPorta\"\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"bianco\"\u003eBianco satinato\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt on\" data-v=\"nero\"\u003eNero satinato\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"ottone\"\u003eOttone\u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"kits-b\"\u003e\n        \u003cdiv class=\"kits-q\"\u003e\n\u003cspan\u003e6\u003c\/span\u003e Decentratore\u003c\/div\u003e\n        \u003cdiv class=\"kits-opts\" data-el=\"dec\"\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt on\" data-v=\"alto\"\u003eAlto\u003csmall data-el=\"pAlto\"\u003estelo con piastra a soffitto\u003c\/small\u003e\u003c\/button\u003e\n          \u003cbutton type=\"button\" class=\"kits-opt\" data-v=\"basso\"\u003eBasso\u003csmall data-el=\"pBasso\"\u003ecilindro a filo soffitto\u003c\/small\u003e\u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"kits-b\"\u003e\n        \u003cdiv class=\"kits-q\"\u003e\n\u003cspan\u003e7\u003c\/span\u003e Lampadine \u003cspan style=\"width:auto;height:auto;background:none;color:#8a8a8a;font-weight:400;font-size:13px\"\u003efacoltative\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"kits-opts\"\u003e\n          \u003cselect class=\"kits-sel\" data-el=\"lampFin\"\u003e\n            \u003coption value=\"\"\u003eSenza lampadine\u003c\/option\u003e\n            \u003coption value=\"trasparente\"\u003eTrasparenti\u003c\/option\u003e\n            \u003coption value=\"satinata\"\u003eSatinate\u003c\/option\u003e\n            \u003coption value=\"globo\"\u003eGlobo trasparente — solo 2700K\u003c\/option\u003e\n          \u003c\/select\u003e\n          \u003cselect class=\"kits-sel kits-hide\" data-el=\"lampTemp\"\u003e\u003coption value=\"\"\u003eScegli la tonalità\u003c\/option\u003e\u003c\/select\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv\u003e\n      \u003cdiv class=\"kits-card\"\u003e\n        \u003cdiv data-el=\"dist\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"kits-tot\"\u003e\n\u003cspan\u003eTotale\u003c\/span\u003e\u003cb data-el=\"tot\"\u003e—\u003c\/b\u003e\n\u003c\/div\u003e\n        \u003cbutton type=\"button\" class=\"kits-cta\" data-el=\"add\"\u003eAggiungi al carrello\u003c\/button\u003e\n        \u003cp class=\"kits-msg\" data-el=\"msg\"\u003e\u003c\/p\u003e\n        \u003cp class=\"kits-safe\"\u003ePrezzi IVA inclusa. Prima di spedire ricontrolliamo tutto: fori del rosone, lunghezza del cavo e quantità. Se qualcosa non torna ti chiamiamo.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n  function boot(){\n    var root = document.getElementById('kits-likht');\n    if(!root || root.dataset.on) return;\n    root.dataset.on = '1';\n\n    \/* i prezzi si leggono dalle schede prodotto: qui ci sono solo i codici *\/\n    var F = ['bianco','nero','ottone'];   \/* ordine dei suffissi in ogni terzina *\/\n\n    var ROSONI = {\n      r1:   { fori:1,  forma:'tondo', nome:'Rosone 1 foro',              h:['gea-gsob10','gea-gsob11','gea-gsob12'] },\n      r3:   { fori:3,  forma:'tondo', nome:'Rosone 3 fori',              h:['gea-gsob30','gea-gsob31','gea-gsob32'] },\n      r3r:  { fori:3,  forma:'rett',  nome:'Rosone rettangolare 3 fori', h:['gea-gsob40','gea-gsob41','gea-gsob42'] },\n      r5:   { fori:5,  forma:'tondo', nome:'Rosone 5 fori',              h:['gea-gsob50','gea-gsob51','gea-gsob52'] },\n      r5r:  { fori:5,  forma:'rett',  nome:'Rosone rettangolare 5 fori', h:['gea-gsob20','gea-gsob21','gea-gsob22'] },\n      r12:  { fori:12, forma:'tondo', nome:'Rosone 12 fori',             h:['gea-gsob01','gea-gsob02','gea-gsob03'] }\n    };\n    var PORTA = {\n      liscio:    { nome:'Portalampada liscio',    h:['gea-gsop70','gea-gsop71','gea-gsop72'] },\n      zigrinato: { nome:'Portalampada zigrinato', h:['gea-gsop90','gea-gsop91','gea-gsop92'] }\n    };\n    var DEC = {\n      alto:  { nome:'Decentratore alto',  h:['gea-gsobl10','gea-gsobl11','gea-gsobl12'] },\n      basso: { nome:'Decentratore basso', h:['gea-gsobl01','gea-gsobl02','gea-gsobl03'] }\n    };\n    var CAVI = { nero:'gea-gsocn2', bianco:'gea-gsocw2', grigio:'gea-gsocg2', marrone:'gea-gsocm2', oro:'gea-gsoco2' };\n    var LAMP = { trasparente:'lampadina-trasparente-e27-8-5w',\n                 satinata:'lampadina-gu10-4-9w-copia',\n                 globo:'globo-trasparente-e27-7w' };\n    \/* il globo esiste solo trasparente e solo 2700K: niente scelta di tonalita' *\/\n    var SOLO_2700 = { globo:1 };\n    var NOME_LAMP = { trasparente:'Lampadine E27 trasparenti', satinata:'Lampadine E27 satinate',\n                      globo:'Globo trasparente E27 7W' };\n\n    var P = {}, VID = {}, LVAR = { trasparente:{}, satinata:{}, globo:{} };\n    \/* fin = finitura di rosone e decentratori; finPorta = colore del portalampada,\n       che si sceglie a parte perche' spesso si vuole in contrasto *\/\n    var S = { luci:1, forma:'tondo', fin:'nero', finPorta:'nero', cavo:'nero',\n              porta:'liscio', dec:'alto', lampFin:'', lampTemp:'' };\n\n    function eur(n){ return n.toFixed(2).replace('.', ',') + ' \\u20ac'; }\n    function el(k){ return root.querySelector('[data-el=\"' + k + '\"]'); }\n    function idx(){ return F.indexOf(S.fin); }\n    function idxPorta(){ return F.indexOf(S.finPorta); }\n\n    \/* il rosone piu' piccolo che regge N luci, nella forma scelta *\/\n    function rosone(){\n      var n = S.luci, cand = [];\n      for(var k in ROSONI) if(ROSONI[k].fori \u003e= n) cand.push(k);\n      cand.sort(function(a,b){ return ROSONI[a].fori - ROSONI[b].fori; });\n      var minFori = ROSONI[cand[0]].fori;\n      var pari = cand.filter(function(k){ return ROSONI[k].fori === minFori; });\n      var scelto = pari.filter(function(k){ return ROSONI[k].forma === S.forma; });\n      return scelto.length ? scelto[0] : pari[0];\n    }\n    function formeDisponibili(){\n      var n = S.luci, minFori = 99, out = {};\n      for(var k in ROSONI) if(ROSONI[k].fori \u003e= n) minFori = Math.min(minFori, ROSONI[k].fori);\n      for(var k2 in ROSONI) if(ROSONI[k2].fori === minFori) out[ROSONI[k2].forma] = k2;\n      return out;\n    }\n\n    function distinta(){\n      var i = idx(), d = [];\n      d.push({ h: ROSONI[rosone()].h[i], q:1, n: ROSONI[rosone()].nome });\n      d.push({ h: CAVI[S.cavo], q:1, n:'Cavo tessile 20 m \\u00b7 ' + S.cavo });\n      d.push({ h: DEC[S.dec].h[i], q:S.luci, n: DEC[S.dec].nome });\n      d.push({ h: PORTA[S.porta].h[idxPorta()], q:S.luci, n: PORTA[S.porta].nome + ' ' + S.finPorta });\n      return d;\n    }\n\n    function totale(){\n      var t = 0, manca = false;\n      distinta().forEach(function(r){\n        var p = P[r.h];\n        if(typeof p !== 'number') manca = true; else t += p * r.q;\n      });\n      if(S.lampFin \u0026\u0026 S.lampTemp){\n        var v = LVAR[S.lampFin][S.lampTemp];\n        if(v) t += v.price * S.luci; else manca = true;\n      }\n      return manca ? null : t;\n    }\n\n    function disegnaLuci(){\n      var html = '';\n      for(var n = 1; n \u003c= 12; n++)\n        html += '\u003cbutton type=\"button\" class=\"kits-opt' + (n === S.luci ? ' on' : '') + '\" data-v=\"' + n + '\"\u003e' + n + '\u003c\/button\u003e';\n      el('luci').innerHTML = html;\n      el('luci').querySelectorAll('button').forEach(function(b){\n        b.addEventListener('click', function(){ S.luci = parseInt(b.getAttribute('data-v'), 10); render(); });\n      });\n    }\n\n    function render(){\n      el('luci').querySelectorAll('button').forEach(function(b){\n        b.className = 'kits-opt' + (parseInt(b.getAttribute('data-v'),10) === S.luci ? ' on' : '');\n      });\n      ['fin','finPorta','cavo','porta','dec'].forEach(function(k){\n        el(k).querySelectorAll('button').forEach(function(b){\n          b.className = 'kits-opt' + (b.getAttribute('data-v') === S[k] ? ' on' : '');\n        });\n      });\n\n      \/* la scelta tondo\/rettangolare compare solo dove esistono entrambi *\/\n      var forme = formeDisponibili();\n      if(forme.tondo \u0026\u0026 forme.rett){\n        el('formaBox').className = 'kits-b';\n        el('forma').querySelectorAll('button').forEach(function(b){\n          b.className = 'kits-opt' + (b.getAttribute('data-v') === S.forma ? ' on' : '');\n        });\n        el('pTondo').textContent = '';\n        el('pRett').textContent  = '';\n      } else {\n        el('formaBox').className = 'kits-b kits-hide';\n        if(!forme[S.forma]) S.forma = 'tondo';\n      }\n\n      var ros = ROSONI[rosone()];\n      el('notaLuci').textContent = ros.fori \u003e S.luci\n        ? 'Con ' + S.luci + (S.luci === 1 ? ' luce montiamo' : ' luci montiamo') + ' un ' + ros.nome.toLowerCase() + ': i fori in pi\\u00f9 restano chiusi.'\n        : '';\n\n      [['pLiscio','liscio','porta','slanciato'],['pZigr','zigrinato','porta','con ghiera'],\n       ['pAlto','alto','dec','stelo con piastra a soffitto'],['pBasso','basso','dec','cilindro a filo soffitto']]\n      .forEach(function(x){\n        el(x[0]).textContent = x[3];\n      });\n\n      \/* i passaggi nascosti non devono bucare la numerazione *\/\n      var n = 0;\n      root.querySelectorAll('.kits-b').forEach(function(b){\n        if(b.className.indexOf('kits-hide') \u003e -1) return;\n        var s = b.querySelector('.kits-q \u003e span');\n        if(s) s.textContent = ++n;\n      });\n\n      function cap(s){ return s.charAt(0).toUpperCase() + s.slice(1); }\n      var righe = [];\n      righe.push('\u003cdiv class=\"kits-r\"\u003e\u003cspan\u003eLuci\u003c\/span\u003e\u003ci\u003e' + S.luci + '\u003c\/i\u003e\u003c\/div\u003e');\n      righe.push('\u003cdiv class=\"kits-r\"\u003e\u003cspan\u003eRosone\u003c\/span\u003e\u003ci\u003e' + ros.nome.replace(\/^Rosone\\s*\/, '') + '\u003c\/i\u003e\u003c\/div\u003e');\n      righe.push('\u003cdiv class=\"kits-r\"\u003e\u003cspan\u003eFinitura rosone e decentratori\u003c\/span\u003e\u003ci\u003e' + cap(S.fin) + '\u003c\/i\u003e\u003c\/div\u003e');\n      righe.push('\u003cdiv class=\"kits-r\"\u003e\u003cspan\u003eColore cavo\u003c\/span\u003e\u003ci\u003e' + cap(S.cavo) + '\u003c\/i\u003e\u003c\/div\u003e');\n      righe.push('\u003cdiv class=\"kits-r\"\u003e\u003cspan\u003ePortalampada\u003c\/span\u003e\u003ci\u003e' + PORTA[S.porta].nome + ' ' + cap(S.finPorta) + '\u003c\/i\u003e\u003c\/div\u003e');\n      righe.push('\u003cdiv class=\"kits-r\"\u003e\u003cspan\u003eDecentratore\u003c\/span\u003e\u003ci\u003e' + DEC[S.dec].nome + '\u003c\/i\u003e\u003c\/div\u003e');\n      if(S.lampFin \u0026\u0026 S.lampTemp){\n        righe.push('\u003cdiv class=\"kits-r\"\u003e\u003cspan\u003eLampadine\u003c\/span\u003e\u003ci\u003e' + NOME_LAMP[S.lampFin] + ' ' + S.lampTemp + '\u003c\/i\u003e\u003c\/div\u003e');\n      }\n      el('dist').innerHTML = righe.join('');\n\n      var t = totale();\n      el('tot').textContent = t === null ? '\\u2014' : eur(t);\n      var attesa = S.lampFin \u0026\u0026 !S.lampTemp;\n      el('add').disabled = (t === null) || attesa;\n      el('add').textContent = attesa ? 'Scegli la tonalit\\u00e0 delle lampadine' : 'Aggiungi al carrello';\n    }\n\n    ['fin','finPorta','cavo','porta','dec','forma'].forEach(function(k){\n      el(k).addEventListener('click', function(e){\n        var b = e.target.closest('button'); if(!b) return;\n        S[k] = b.getAttribute('data-v'); render();\n      });\n    });\n    el('lampFin').addEventListener('change', function(e){\n      S.lampFin = e.target.value;\n      var unica = SOLO_2700[S.lampFin];\n      S.lampTemp = unica ? '2700K' : '';\n      \/* col globo la tonalita' e' una sola: la scelta non serve e la togliamo *\/\n      el('lampTemp').className = (S.lampFin \u0026\u0026 !unica) ? 'kits-sel' : 'kits-sel kits-hide';\n      el('lampTemp').value = S.lampTemp;\n      render();\n    });\n    el('lampTemp').addEventListener('change', function(e){ S.lampTemp = e.target.value; render(); });\n\n    function carica(){\n      var tutti = [];\n      for(var k in ROSONI) tutti = tutti.concat(ROSONI[k].h);\n      for(var p in PORTA)  tutti = tutti.concat(PORTA[p].h);\n      for(var d in DEC)    tutti = tutti.concat(DEC[d].h);\n      for(var c in CAVI)   tutti.push(CAVI[c]);\n      for(var l in LAMP)   tutti.push(LAMP[l]);\n      return Promise.all(tutti.map(function(h){\n        return fetch('\/products\/' + h + '.js')\n          .then(function(r){ return r.ok ? r.json() : null; })\n          .then(function(pr){\n            if(!pr || !pr.variants || !pr.variants[0]) return;\n            VID[h] = pr.variants[0].id;\n            P[h] = pr.variants[0].price \/ 100;\n            for(var f in LAMP) if(LAMP[f] === h){\n              pr.variants.forEach(function(v){ LVAR[f][v.title] = { id:v.id, price:v.price\/100 }; });\n            }\n          }).catch(function(){});\n      }));\n    }\n\n    function riempiTonalita(){\n      var visti = {}, sel = el('lampTemp');\n      \/* solo le lampadine con piu' tonalita': il globo non entra nella lista *\/\n      ['trasparente','satinata'].forEach(function(f){\n        Object.keys(LVAR[f]).forEach(function(t){\n          if(visti[t]) return; visti[t] = 1;\n          var o = document.createElement('option'); o.value = t; o.textContent = t; sel.appendChild(o);\n        });\n      });\n    }\n\n    el('add').addEventListener('click', function(){\n      var righe = distinta();\n      var manc = righe.filter(function(r){ return !VID[r.h]; });\n      if(manc.length){\n        el('msg').className = 'kits-msg kits-err';\n        el('msg').textContent = 'Componente non disponibile: ' + manc[0].n + '. Scrivici e lo sistemiamo subito.';\n        return;\n      }\n      var et = S.luci + (S.luci === 1 ? ' luce' : ' luci') + ' \\u00b7 rosone ' + S.fin +\n               ' \\u00b7 portalampada ' + S.finPorta + ' \\u00b7 cavo ' + S.cavo;\n      var items = righe.map(function(r){\n        return { id: VID[r.h], quantity: r.q, properties: { 'Kit sospensione': et } };\n      });\n      if(S.lampFin \u0026\u0026 S.lampTemp){\n        var v = LVAR[S.lampFin][S.lampTemp];\n        if(v) items.push({ id: v.id, quantity: S.luci, properties: { 'Kit sospensione': et } });\n      }\n      el('add').disabled = true;\n      el('msg').className = 'kits-msg';\n      el('msg').textContent = 'Aggiungo al carrello\\u2026';\n      fetch('\/cart\/add.js', { method:'POST', headers:{'Content-Type':'application\/json'},\n                              body: JSON.stringify({ items: items }) })\n      .then(function(r){ return r.json().then(function(j){ return {ok:r.ok, j:j}; }); })\n      .then(function(res){\n        el('add').disabled = false;\n        if(res.ok){\n          el('msg').className = 'kits-msg';\n          el('msg').textContent = 'Kit aggiunto al carrello.';\n          fetch('\/cart.js').then(function(r){ return r.json(); }).then(function(c){\n            var b = document.querySelectorAll('.cart-count-bubble span:first-child');\n            for(var i = 0; i \u003c b.length; i++) b[i].textContent = c.item_count;\n          }).catch(function(){});\n        } else {\n          el('msg').className = 'kits-msg kits-err';\n          el('msg').textContent = (res.j \u0026\u0026 res.j.description) || 'Non sono riuscito ad aggiungerlo. Riprova.';\n        }\n      })\n      .catch(function(){\n        el('add').disabled = false;\n        el('msg').className = 'kits-msg kits-err';\n        el('msg').textContent = 'Non sono riuscito ad aggiungerlo. Riprova.';\n      });\n    });\n\n    \/* il configuratore sta nella descrizione: lo risaliamo sopra i bottoni\n       di acquisto e nascondiamo prezzo e bottone nativi *\/\n    function spostaSopraCarrello(){\n      if(root.dataset.su) return;\n      var anc = null, s = ['product-form','.product-form','.product-form__buttons','.shopify-payment-button'];\n      for(var i = 0; i \u003c s.length \u0026\u0026 !anc; i++){\n        var e = document.querySelector(s[i]);\n        if(e \u0026\u0026 e.parentNode \u0026\u0026 !root.contains(e)) anc = e;\n      }\n      if(!anc) return;\n      anc.parentNode.insertBefore(root, anc);\n      root.dataset.su = '1';\n      var box = anc.closest('.product__info-container') || anc.parentNode;\n      box.querySelectorAll('product-form, .product-form, .price, .product__tax, noscript, ' +\n                           '.product-form__quantity, .quantity__label, quantity-input, .quantity')\n         .forEach(function(n){ if(!root.contains(n)) n.style.display = 'none'; });\n    }\n\n    disegnaLuci();\n    render();\n    spostaSopraCarrello();\n    carica().then(function(){ riempiTonalita(); render(); spostaSopraCarrello(); });\n  }\n\n  if(document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n})();\n\u003c\/script\u003e\n","brand":"Likht","offers":[{"title":"Default Title","offer_id":56656845832532,"sku":"KITSOSP-CFG","price":114.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1048\/8227\/4644\/files\/Screenshot2026-08-03alle11.27.19.png?v=1785749374","url":"https:\/\/likht.it\/products\/kit-sospensione-design","provider":"Likht","version":"1.0","type":"link"}