{"product_id":"build-your-carbon-set-save-up-to-25","title":"Build Your Carbon Set – Save up to 25%","description":"\u003cdiv class=\"tqb\" id=\"tqb\"\u003e\n  \u003cdiv class=\"tqb__head\"\u003e\n    \u003cp class=\"tqb__sub\"\u003ePick your Sur-Ron Light Bee carbon-look parts. \u003cstrong\u003e3+ parts → 10% off\u003c\/strong\u003e, the \u003cstrong\u003ecomplete set → 25% off\u003c\/strong\u003e. The discount is applied automatically in your cart — stack it with any code at checkout.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"tqb__tiers\" id=\"tqbTiers\"\u003e\n    \u003cdiv class=\"tqb__tier\" data-tier=\"0\"\u003e\n\u003cspan class=\"tqb__pct\"\u003e0%\u003c\/span\u003e\u003cspan class=\"tqb__lbl\"\u003e1–2 parts\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"tqb__tier\" data-tier=\"10\"\u003e\n\u003cspan class=\"tqb__pct\"\u003e10%\u003c\/span\u003e\u003cspan class=\"tqb__lbl\"\u003e3+ parts\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"tqb__tier\" data-tier=\"25\"\u003e\n\u003cspan class=\"tqb__pct\"\u003e25%\u003c\/span\u003e\u003cspan class=\"tqb__lbl\"\u003eComplete set\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"tqb__progress\"\u003e\u003cdiv class=\"tqb__progress-bar\" id=\"tqbBar\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003cp class=\"tqb__hint\" id=\"tqbHint\"\u003eSelect at least 3 parts to unlock 10% off.\u003c\/p\u003e\n\n  \u003cdiv class=\"tqb__quick\"\u003e\n    \u003cbutton type=\"button\" class=\"tqb__link\" id=\"tqbAll\"\u003eAdd all 6 · −25%\u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"tqb__link tqb__link--muted\" id=\"tqbClear\"\u003eClear\u003c\/button\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"tqb__list\" id=\"tqbList\"\u003e\u003c\/div\u003e\n\n  \u003cdiv class=\"tqb__summary\" id=\"tqbSummary\"\u003e\n    \u003cdiv class=\"tqb__summary-info\"\u003e\n      \u003cspan class=\"tqb__count\" id=\"tqbCount\"\u003e0 parts selected\u003c\/span\u003e\n      \u003cspan class=\"tqb__prices\"\u003e\n        \u003cspan class=\"tqb__strike\" id=\"tqbStrike\"\u003e\u003c\/span\u003e\n        \u003cspan class=\"tqb__total\" id=\"tqbTotal\"\u003e€0,00\u003c\/span\u003e\n        \u003cspan class=\"tqb__save\" id=\"tqbSave\"\u003e\u003c\/span\u003e\n      \u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cbutton type=\"button\" class=\"tqb__cta\" id=\"tqbCta\" disabled\u003eSelect parts to start\u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cp class=\"tqb__trust\"\u003eSecure checkout · Same-day shipping from Germany\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function () {\n  var PARTS = [\n    {id:\"57347997925756\", title:\"Shock Fender – Splash Guard\",       handle:\"surron-light-bee-shock-fender-carbon-optik\", price:19.99, img:\"https:\/\/cdn.shopify.com\/s\/files\/1\/0964\/8937\/4076\/files\/2O5A7294.jpg?v=1789456139\"},\n    {id:\"57347991273852\", title:\"Switch Cover\",                       handle:\"surron-light-bee-schalterabdeckung-carbon-optik\", price:15.95, img:\"https:\/\/cdn.shopify.com\/s\/files\/1\/0964\/8937\/4076\/files\/2O5A7322.jpg?v=1789456143\"},\n    {id:\"57347983507836\", title:\"Chain Guard\",                        handle:\"surron-light-bee-kettenschutzt-carbon-optik\", price:19.99, img:\"https:\/\/cdn.shopify.com\/s\/files\/1\/0964\/8937\/4076\/files\/2O5A7310.jpg?v=1789456132\"},\n    {id:\"57347974791548\", title:\"Shock Absorber Cover\",               handle:\"surron-light-bee-stossdampferabdeckung\", price:22.95, img:\"https:\/\/cdn.shopify.com\/s\/files\/1\/0964\/8937\/4076\/files\/2O5A7304.jpg?v=1789456131\"},\n    {id:\"57347970367868\", title:\"Battery Cover\",                      handle:\"suron-light-bee-battarieabdeckung-carbon-optik\", price:28.95, img:\"https:\/\/cdn.shopify.com\/s\/files\/1\/0964\/8937\/4076\/files\/2O5A7268.jpg?v=1789456171\"},\n    {id:\"57347966402940\", title:\"Motor Cover\",                        handle:\"surron-lighte-bee-motorabdeckung-carbon-optik\", price:17.95, img:\"https:\/\/cdn.shopify.com\/s\/files\/1\/0964\/8937\/4076\/files\/2O5A7327.jpg?v=1789456143\"}\n  ];\n  var TOTAL = PARTS.length;\n  var selected = {};\n  var STORE = 'tqcCarbonBuilder';\n  function saveSel() { try { localStorage.setItem(STORE, JSON.stringify(Object.keys(selected))); } catch (e) {} }\n  function loadSel() {\n    try {\n      var raw = localStorage.getItem(STORE);\n      if (!raw) return;\n      (JSON.parse(raw) || []).forEach(function (id) {\n        for (var i = 0; i \u003c PARTS.length; i++) { if (PARTS[i].id === id) { selected[id] = PARTS[i]; break; } }\n      });\n    } catch (e) {}\n  }\n  var fmt = function (n) {\n    try { return new Intl.NumberFormat('de-DE', {style:'currency', currency:'EUR'}).format(n); }\n    catch (e) { return '€' + n.toFixed(2).replace('.', ','); }\n  };\n  var imgUrl = function (u) { return u + (u.indexOf('?') \u003e -1 ? '\u0026' : '?') + 'width=200'; };\n  var root = document.getElementById('tqb');\n  var list = root ? root.querySelector('#tqbList') : null;\n  if (!list) return;\n\n  PARTS.forEach(function (p) {\n    var row = document.createElement('div');\n    row.className = 'tqb__row';\n    row.setAttribute('data-id', p.id);\n    row.innerHTML =\n      '\u003ca class=\"tqb__thumb\" href=\"\/products\/' + p.handle + '\" aria-label=\"' + p.title + '\"\u003e\u003cimg src=\"' + imgUrl(p.img) + '\" alt=\"' + p.title + '\" loading=\"lazy\"\u003e\u003c\/a\u003e' +\n      '\u003cspan class=\"tqb__meta\"\u003e\u003cspan class=\"tqb__name\"\u003e' + p.title + '\u003c\/span\u003e\u003cspan class=\"tqb__price\"\u003e' + fmt(p.price) + '\u003c\/span\u003e\u003c\/span\u003e' +\n      '\u003cspan class=\"tqb__toggle\" aria-hidden=\"true\"\u003e\u003c\/span\u003e';\n    list.appendChild(row);\n    row.addEventListener('click', function (e) {\n      if (e.target.closest('.tqb__thumb')) return;\n      if (selected[p.id]) { delete selected[p.id]; } else { selected[p.id] = p; }\n      saveSel(); render();\n    });\n  });\n\n  var bar = root.querySelector('#tqbBar');\n  var hint = root.querySelector('#tqbHint');\n  var countEl = root.querySelector('#tqbCount');\n  var totalEl = root.querySelector('#tqbTotal');\n  var strikeEl = root.querySelector('#tqbStrike');\n  var saveEl = root.querySelector('#tqbSave');\n  var cta = root.querySelector('#tqbCta');\n  var tiersEl = root.querySelector('#tqbTiers');\n\n  function pctFor(n) { return n \u003e= TOTAL ? 25 : (n \u003e= 3 ? 10 : 0); }\n\n  function render() {\n    var ids = Object.keys(selected);\n    var n = ids.length, sub = 0;\n    ids.forEach(function (id) { sub += selected[id].price; });\n    var pct = pctFor(n);\n    var total = sub * (1 - pct \/ 100);\n    var save = sub - total;\n\n    root.querySelectorAll('.tqb__row').forEach(function (r) {\n      r.classList.toggle('is-on', !!selected[r.getAttribute('data-id')]);\n    });\n    tiersEl.querySelectorAll('.tqb__tier').forEach(function (el) {\n      var tv = parseInt(el.getAttribute('data-tier'), 10);\n      el.classList.toggle('is-active', pct === tv);\n    });\n    bar.style.width = Math.min(100, (n \/ TOTAL) * 100) + '%';\n\n    if (n === 0) { hint.textContent = 'Select at least 3 parts to unlock 10% off.'; }\n    else if (n \u003c 3) { hint.textContent = 'Add ' + (3 - n) + ' more part' + (3 - n === 1 ? '' : 's') + ' to unlock 10% off.'; }\n    else if (n \u003c TOTAL) { hint.textContent = '10% unlocked! Add ' + (TOTAL - n) + ' more for the full set \u0026 25% off.'; }\n    else { hint.textContent = 'Complete set — maximum 25% off unlocked. 🔥'; }\n\n    countEl.textContent = n + (n === 1 ? ' part selected' : ' parts selected');\n    totalEl.textContent = fmt(total);\n    if (pct \u003e 0) {\n      strikeEl.textContent = fmt(sub); strikeEl.style.display = '';\n      saveEl.textContent = 'Save ' + fmt(save) + ' (–' + pct + '%)'; saveEl.style.display = '';\n    } else { strikeEl.style.display = 'none'; saveEl.style.display = 'none'; }\n\n    if (n === 0) { cta.disabled = true; cta.textContent = 'Select parts to start'; }\n    else if (pct === 25) { cta.disabled = false; cta.textContent = 'Add full set \u0026 save 25% →'; }\n    else if (pct === 10) { cta.disabled = false; cta.textContent = 'Add bundle \u0026 save 10% →'; }\n    else { cta.disabled = false; cta.textContent = 'Add ' + n + (n === 1 ? ' part' : ' parts') + ' →'; }\n  }\n\n  root.querySelector('#tqbAll').addEventListener('click', function () {\n    PARTS.forEach(function (p) { selected[p.id] = p; }); saveSel(); render();\n  });\n  root.querySelector('#tqbClear').addEventListener('click', function () { selected = {}; saveSel(); render(); });\n\n  loadSel();\n\n  cta.addEventListener('click', function () {\n    var ids = Object.keys(selected);\n    if (!ids.length) return;\n    var items = ids.map(function (id) { return { id: parseInt(id, 10), quantity: 1 }; });\n    cta.disabled = true; cta.textContent = 'Adding…';\n    fetch('\/cart\/add.js', { method:'POST', headers:{'Content-Type':'application\/json','Accept':'application\/json'}, body: JSON.stringify({ items: items, sections: ['cart-drawer-section'], sections_url: '\/' }) })\n      .then(function (r) { return r.json(); })\n      .then(function (data) {\n        if (data \u0026\u0026 data.sections \u0026\u0026 data.sections['cart-drawer-section']) {\n          var el = document.getElementById('shopify-section-cart-drawer-section');\n          if (el) { el.innerHTML = data.sections['cart-drawer-section']; }\n        }\n        return fetch('\/cart.js').then(function (r) { return r.json(); });\n      })\n      .then(function (cart) {\n        document.querySelectorAll('.cart-bubble').forEach(function (b) { b.classList.remove('visually-hidden'); });\n        document.querySelectorAll('.cart-bubble__text-count').forEach(function (c) { c.classList.remove('hidden'); c.textContent = cart.item_count; });\n        var drawer = document.querySelector('theme-drawer#cart-drawer');\n        if (drawer \u0026\u0026 typeof drawer.open === 'function') { drawer.open(); selected = {}; saveSel(); cta.disabled = false; render(); }\n        else { window.location.href = '\/cart'; }\n      })\n      .catch(function () { cta.disabled = false; render(); alert('Something went wrong adding to cart. Please try again.'); });\n  });\n\n  render();\n})();\n\u003c\/script\u003e\n\n\u003cstyle\u003e\n  .product-details product-price,\n  .product-details .buy-buttons-block,\n  .product-details variant-picker,\n  .product-details .divider,\n  sticky-add-to-cart { display: none !important; }\n\n  .product-details .tq-pay { order: 1; margin-top: 22px; padding-top: 22px; border-top: 1px solid rgba(128,128,128,.3); }\n  .product-details .tq-fit,\n  .product-details .tq-specs { order: 2; }\n\n  .tq-fit__item { border-radius: 0 !important; background: #000 !important; border: 1px solid rgba(255,255,255,.55) !important; }\n  .tq-fit__badge { border-radius: 0 !important; color: #fff !important; }\n  .tq-fit__badge--yes { background: #22c55e !important; }\n  .tq-fit__badge--no { background: #ef4444 !important; }\n\n  .tqb__tier, .tqb__progress, .tqb__progress-bar, .tqb__row, .tqb__thumb, .tqb__toggle, .tqb__summary, .tqb__cta { border-radius: 0 !important; }\n\n  .tqb { --tqb-fg: #ffffff; color: var(--tqb-fg); margin-top: 4px; }\n  .tqb *, .tqb *::before, .tqb *::after { box-sizing: border-box; }\n  .tqb__sub { margin: 0 0 18px; font-size: .95rem; line-height: 1.5; opacity: .82; }\n  .tqb__sub strong { opacity: 1; }\n\n  .tqb__tiers { display: grid; grid-template-columns: repeat(3,1fr); gap: 8px; margin-bottom: 12px; }\n  .tqb__tier { display: flex; flex-direction: column; gap: 2px; padding: 9px 10px; border: 1px solid rgba(128,128,128,.35); }\n  .tqb__pct { font-size: 1.05rem; font-weight: 800; line-height: 1; }\n  .tqb__lbl { font-size: .62rem; letter-spacing: .05em; text-transform: uppercase; opacity: .6; }\n  .tqb__tier.is-active { border-color: currentColor; background: currentColor; }\n  .tqb__tier.is-active .tqb__pct, .tqb__tier.is-active .tqb__lbl { color: #000; }\n  .tqb__tier.is-active .tqb__lbl { opacity: .7; }\n\n  .tqb__progress { height: 5px; background: rgba(128,128,128,.3); overflow: hidden; }\n  .tqb__progress-bar { height: 100%; width: 0; background: currentColor; transition: width .35s cubic-bezier(.4,0,.2,1); }\n  .tqb__hint { margin: 10px 0 0; font-size: .88rem; font-weight: 600; opacity: .9; min-height: 1.1em; }\n\n  .tqb__quick { display: flex; gap: 16px; margin: 16px 0 10px; }\n  .tqb__link { background: none; border: 0; padding: 0; color: inherit; font: inherit; font-size: .78rem; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; cursor: pointer; border-bottom: 1px solid currentColor; }\n  .tqb__link:hover { opacity: .7; }\n  .tqb__link--muted { opacity: .55; font-weight: 600; }\n\n  .tqb__list { display: flex; flex-direction: column; gap: 8px; }\n  .tqb__row { display: flex; align-items: center; gap: 12px; padding: 8px; border: 1px solid rgba(128,128,128,.3); cursor: pointer; transition: border-color .15s ease, background .15s ease; }\n  .tqb__row:hover { border-color: rgba(128,128,128,.6); }\n  .tqb__row.is-on { border-color: currentColor; background: rgba(128,128,128,.12); }\n  .tqb__thumb { display: block; flex: 0 0 auto; width: 54px; height: 54px; overflow: hidden; background: radial-gradient(120% 120% at 50% 35%, #f4f4f4 0%, #cfcfcf 100%); cursor: pointer; }\n  .tqb__thumb:hover { opacity: .85; }\n  .tqb__thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }\n  .tqb__meta { flex: 1 1 auto; display: flex; flex-direction: column; gap: 2px; min-width: 0; }\n  .tqb__name { font-size: .9rem; font-weight: 700; line-height: 1.2; }\n  .tqb__price { font-size: .85rem; opacity: .7; }\n  .tqb__toggle { flex: 0 0 auto; position: relative; width: 26px; height: 26px; border: 2px solid rgba(128,128,128,.6); transition: .15s ease; }\n  .tqb__toggle::after { content: \"✓\"; position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 800; opacity: 0; transform: scale(.5); transition: .15s ease; }\n  .tqb__row.is-on .tqb__toggle { border-color: currentColor; background: currentColor; }\n  .tqb__row.is-on .tqb__toggle::after { color: #000; opacity: 1; transform: scale(1); }\n\n  .tqb__summary { position: static; margin-top: 16px; display: flex; flex-direction: column; gap: 12px; padding: 14px; border: 1px solid rgba(128,128,128,.4); background: rgba(20,20,20,.92); backdrop-filter: blur(8px); box-shadow: 0 12px 32px rgba(0,0,0,.45); }\n  .tqb__summary-info { display: flex; flex-direction: column; gap: 3px; }\n  .tqb__count { font-size: .7rem; letter-spacing: .08em; text-transform: uppercase; opacity: .6; }\n  .tqb__prices { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }\n  .tqb__strike { text-decoration: line-through; opacity: .5; font-size: .95rem; }\n  .tqb__total { font-size: 1.45rem; font-weight: 800; }\n  .tqb__save { font-size: .8rem; font-weight: 700; color: #fff; }\n  .tqb__cta { width: 100%; padding: 15px 20px; border: 1px solid #fff; background: #fff; color: #000; font-weight: 800; font-size: 1rem; cursor: pointer; transition: transform .15s ease, opacity .15s ease; }\n  .tqb__cta:hover:not(:disabled) { transform: translateY(-2px); }\n  .tqb__cta:disabled { opacity: .4; cursor: not-allowed; }\n  .tqb__trust { margin: 12px 0 0; font-size: .75rem; text-align: center; opacity: .55; }\n\u003c\/style\u003e\n","brand":"TQ Customs","offers":[{"title":"Default Title","offer_id":57479152959868,"sku":null,"price":125.78,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0964\/8937\/4076\/files\/2O5A7294.jpg?v=1789456139","url":"https:\/\/tqcustoms.eu\/products\/build-your-carbon-set-save-up-to-25","provider":"TQ Customs","version":"1.0","type":"link"}