{"product_id":"floating-target-game","title":"Hover Ball Blaster","description":"\u003cscript id=\"cl-timer\"\u003e(function(){var K='cl_dl',n=Date.now(),e=parseInt(sessionStorage.getItem(K)||0,10);if(!e||e-n\u003e9e5){e=n+9e5;sessionStorage.setItem(K,e)}function m(i){var d=document.createElement('div');d.id=i;d.style.cssText='text-align:center;margin:2px 0 16px;font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:#8a8a8a';d.innerHTML='\u003cspan class=\"cl-tl\"\u003eReserved for\u003c\/span\u003e \u003cspan class=\"cl-tc\" style=\"color:#1a1a1a\"\u003e15:00\u003c\/span\u003e';return d}setInterval(function(){var b=document.querySelector('#cl-sets,#cl-bp');if(b\u0026\u0026b.parentNode){var p=document.getElementById('cl-tp')||m('cl-tp');if(p.nextElementSibling!==b)b.parentNode.insertBefore(p,b)}var c=document.querySelector('#clyro-cd .cd-body');if(c\u0026\u0026!document.getElementById('cl-td'))c.insertBefore(m('cl-td'),c.firstChild);var l=e-Date.now(),t=l\u003e0?Math.floor(l\/1000):0,x=('0'+Math.floor(t\/60)).slice(-2)+':'+('0'+t%60).slice(-2);[].forEach.call(document.querySelectorAll('.cl-tc'),function(o){o.textContent=l\u003e0?x:''});if(l\u003c=0)[].forEach.call(document.querySelectorAll('.cl-tl'),function(o){o.textContent='Offer expired'})},1000)})();\u003c\/script\u003e\u003cp\u003eA small fan blows five foam balls into the air and holds them there. You knock them down with the blaster in the box, or with any foam-dart blaster you already own. Hit a ball and it drops into the cup, then the fan floats it straight back up, so the game keeps going without anyone resetting it.\u003c\/p\u003e\n\n\u003cp\u003eRuns on the USB cable or four AA batteries. Set-up takes about a minute and it packs away flat. Made for ages six and up.\u003c\/p\u003e\n\n\u003cp\u003eOne set is the base, the blaster, ten balls and the darts. Two sets sit side by side so everyone has a blaster and you race to clear all five. Three sets make lanes across the room for a bracket. On two sets the second game is 40% off, on three the third is free, both taken off in the cart.\u003c\/p\u003e\n\n\u003cstyle\u003e\n#cl-sets{margin:6px 0 18px}\n#cl-sets .clb-head{display:flex;align-items:center;gap:12px;margin:0 0 14px}\n#cl-sets .clb-line{flex:1;height:1px;background:currentColor;opacity:.35}\n#cl-sets .clb-title{font-size:1.2rem;letter-spacing:.22em;text-transform:uppercase;font-weight:700}\n#cl-sets .clb-card{position:relative;border:2px solid rgba(244,241,234,.28);border-radius:10px;padding:1.5rem 1.6rem;margin:0 0 1.1rem;display:flex;align-items:center;gap:1.2rem;cursor:pointer}\n#cl-sets .clb-card.sel{border-color:#c81e2d}\n#cl-sets .clb-radio{width:2rem;height:2rem;border:2px solid rgba(244,241,234,.4);border-radius:50%;flex:none;position:relative}\n#cl-sets .clb-card.sel .clb-radio{border-color:#c81e2d}\n#cl-sets .clb-card.sel .clb-radio:after{content:\"\";position:absolute;inset:4px;background:#c81e2d;border-radius:50%}\n#cl-sets .clb-main{flex:1;min-width:0}\n#cl-sets .clb-t{font-weight:700;font-size:1.5rem;line-height:1.25;display:flex;align-items:center;gap:.8rem;flex-wrap:wrap}\n#cl-sets .clb-pill{background:#c81e2d;color:#fff;font-size:1.02rem;font-weight:700;letter-spacing:.08em;padding:.25rem .7rem;border-radius:4px;white-space:nowrap}\n#cl-sets .clb-c{font-size:1.25rem;opacity:.7;margin-top:.35rem}\n#cl-sets .clb-price{text-align:right;flex:none}\n#cl-sets .clb-p{font-size:1.6rem;font-weight:700}\n#cl-sets .clb-was{font-size:1.2rem;opacity:.55;text-decoration:line-through}\n#cl-sets .clb-badge{position:absolute;top:-1.05rem;right:1.2rem;background:#c81e2d;color:#fff;font-size:1.02rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;padding:.35rem .9rem}\n#cl-sets .clb-extra{border:1px solid rgba(23,23,27,.18);border-radius:10px;padding:1.2rem 1.4rem;margin:0 0 1.1rem;background:#fff}\n#cl-sets .clb-extra h4{margin:0 0 .8rem;font-size:1.1rem;letter-spacing:.18em;text-transform:uppercase;font-weight:700;color:#17171b}\n#cl-sets .clb-lab{font-size:1.05rem;letter-spacing:.1em;text-transform:uppercase;opacity:.6;margin:.6rem 0 .4rem}\n#cl-sets .clb-opts{display:flex;flex-wrap:wrap;gap:.5rem}\n#cl-sets .clb-opt{display:inline-block;user-select:none;border:1px solid rgba(23,23,27,.35);border-radius:4px;padding:.55rem .9rem;font-size:1.25rem;cursor:pointer;background:#fff;color:#17171b;font-family:inherit;line-height:1}\n#cl-sets .clb-opt.on{background:#b3182a !important;color:#fff !important;border-color:#b3182a !important}\n#cl-sets .clb-note{font-size:1.15rem;opacity:.65;margin:.2rem 0 1rem}\n\u003c\/style\u003e\n\u003cdiv id=\"cl-sets\" hidden\u003e\u003c\/div\u003e\n\u003cscript id=\"cl-sets-js\"\u003e\n(function () {\n  var HANDLE = 'floating-target-game';\n  var chosen = 1;\n  var P = null, unit = 0, cmp = 0, vid = 0;\n  function money(cents) {\n    var cur = (window.Shopify \u0026\u0026 Shopify.currency \u0026\u0026 Shopify.currency.active) || 'USD';\n    try { return new Intl.NumberFormat(undefined, { style: 'currency', currency: cur }).format(cents \/ 100); }\n    catch (e) { return (cents \/ 100).toFixed(2) + ' ' + cur; }\n  }\n  function tiers() {\n    return [\n      { qty: 1, title: 'One game', sub: '', total: unit, was: cmp \u003e unit ? cmp : 0 },\n      { qty: 2, title: 'Head to head', sub: 'Free shipping', total: unit * 2 - Math.floor(unit * 0.4), was: unit * 2, tag: 'Most popular' },\n      { qty: 3, title: 'Run a tournament', sub: 'Free shipping', total: unit * 2, was: unit * 3 }\n    ];\n  }\n  function render() {\n    var box = document.getElementById('cl-sets');\n    if (!box) return;\n    var html = '\u003cdiv class=\"clb-head\"\u003e\u003cspan class=\"clb-line\"\u003e\u003c\/span\u003e\u003cspan class=\"clb-title\"\u003eHow many\u003c\/span\u003e\u003cspan class=\"clb-line\"\u003e\u003c\/span\u003e\u003c\/div\u003e';\n    tiers().forEach(function (t) {\n      html += '\u003cdiv class=\"clb-card' + (t.qty === chosen ? ' sel' : '') + '\" data-qty=\"' + t.qty + '\"\u003e' +\n        (t.tag ? '\u003cspan class=\"clb-badge\"\u003e' + t.tag + '\u003c\/span\u003e' : '') +\n        '\u003cspan class=\"clb-radio\"\u003e\u003c\/span\u003e\u003cspan class=\"clb-main\"\u003e\u003cspan class=\"clb-t\"\u003e' + t.title +\n        (t.qty \u003e 1 ? ' \u003cspan class=\"clb-pill\"\u003eSAVE ' + money(t.was - t.total) + '\u003c\/span\u003e' : '') + '\u003c\/span\u003e' +\n        '\u003cdiv class=\"clb-c\"\u003e' + t.sub + '\u003c\/div\u003e\u003c\/span\u003e' +\n        '\u003cspan class=\"clb-price\"\u003e\u003cdiv class=\"clb-p\"\u003e' + money(t.total) + '\u003c\/div\u003e' + (t.qty \u003e 1 ? '\u003cdiv class=\"clb-was\"\u003e' + money(t.was) + '\u003c\/div\u003e' : '') + '\u003c\/span\u003e\u003c\/div\u003e';\n    });\n    box.innerHTML = html;\n    box.hidden = false;\n    price();\n    sticky();\n  }\n  function price() {\n    var t = tiers()[chosen - 1];\n    var info = document.querySelector('.product__info-container');\n    if (!info) return;\n    info.querySelectorAll('.price-item--sale, .price__regular .price-item--regular').forEach(function (el) { el.textContent = money(t.total); });\n    info.querySelectorAll('s.price-item--regular').forEach(function (el) { el.textContent = t.was ? money(t.was) : ''; el.style.display = t.was ? '' : 'none'; });\n  }\n  function sticky() {\n    var s = document.getElementById('cl-sticky-sub');\n    if (s) s.textContent = (chosen === 1 ? 'One game' : chosen + ' games') + ' — ' + money(tiers()[chosen - 1].total);\n  }\n  function coreAdd() {\n    var f = document.createElement('form');\n    f.method = 'post'; f.action = '\/cart\/add'; f.className = 'cl-core-add'; f.style.display = 'none';\n    f.innerHTML = '\u003cinput name=\"id\" value=\"' + vid + '\"\u003e\u003cinput name=\"quantity\" value=\"' + chosen + '\"\u003e';\n    document.body.appendChild(f);\n    if (f.requestSubmit) f.requestSubmit(); else f.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));\n    setTimeout(function () { if (f.parentNode) f.parentNode.removeChild(f); }, 3000);\n  }\n  document.addEventListener('click', function (e) {\n    var card = e.target.closest \u0026\u0026 e.target.closest('#cl-sets .clb-card');\n    if (card) { chosen = Number(card.getAttribute('data-qty')) || 1; render(); return; }\n    var add = e.target.closest \u0026\u0026 e.target.closest('.product__info-container button[name=\"add\"], .product__info-container .product-form__submit, #cl-sticky-btn');\n    if (add \u0026\u0026 vid) { e.preventDefault(); e.stopImmediatePropagation(); coreAdd(); }\n  }, true);\n  document.addEventListener('submit', function (e) {\n    var f = e.target;\n    if (f \u0026\u0026 f.matches \u0026\u0026 f.matches('form[action*=\"\/cart\/add\"]') \u0026\u0026 !f.classList.contains('cl-core-add') \u0026\u0026 vid) { e.preventDefault(); e.stopImmediatePropagation(); coreAdd(); }\n  }, true);\n  function place() {\n    var box = document.getElementById('cl-sets');\n    var info = document.querySelector('.product__info-container');\n    if (!box || !info || box.dataset.placed) return;\n    var btn = info.querySelector('button[name=\"add\"], .product-form__submit');\n    if (!btn) return;\n    var host = btn.closest('product-form') || btn.closest('form');\n    while (host \u0026\u0026 host.parentNode !== info) host = host.parentNode;\n    if (!host) return;\n    host.parentNode.insertBefore(box, host);\n    box.dataset.placed = '1';\n  }\n  function boot() {\n    fetch('\/products\/' + HANDLE + '.js', { credentials: 'same-origin' }).then(function (r) { return r.json(); }).then(function (p) {\n      P = p; var v = p.variants[0]; unit = v.price; cmp = v.compare_at_price || 0; vid = v.id;\n      place(); render();\n      setInterval(function () { place(); price(); }, 1500);\n    }).catch(function () {});\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot); else boot();\n})();\n\u003c\/script\u003e\n\n\n\u003cscript\u003e\n(function(){function f(){document.querySelectorAll('.cl-marquee__t span').forEach(function(s){if(s.textContent.trim()==='Free shipping'){s.textContent='Free shipping over $50';}});}\nf();var n=0;var iv=setInterval(function(){f();if(++n\u003e20){clearInterval(iv);}},500);\nif(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',f);}\n})();\n\u003c\/script\u003e","brand":"Clyro","offers":[{"title":"Default Title","offer_id":58745896042828,"sku":"CL-FTG-01","price":43.95,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1079\/2524\/2188\/files\/5ded1fd5-776b-4fe2-baef-93b6007d341c.jpg?v=1788948300","url":"https:\/\/clyro22.com\/products\/floating-target-game","provider":"clyro","version":"1.0","type":"link"}