{"product_id":"bicycle-rear-turn-signal-light-with-directional-remote","title":"Bicycle Rear Turn Signal Light with Directional Remote","description":"\u003cdiv class=\"wb23-details\"\u003e\n\u003ch2\u003e🚲 Add Directional Lighting to Your Bike\u003c\/h2\u003e\n\u003cp\u003eGive your bicycle a rear-facing light with directional remote controls. The pictured set pairs a horizontally arranged rear lamp with a separate controller featuring left and right arrow buttons.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0996\/9837\/7015\/files\/6390d9ee303e80e607b7b8840ba2577669e80c4d-9e1550c2d7b3-ebc88e2a4f3c.jpg?v=1792746102\" alt=\"01_product\"\u003e\u003c\/p\u003e\n\u003ch2\u003e↔️ Directional Controls\u003c\/h2\u003e\n\u003cp\u003eThe remote’s arrow buttons provide a straightforward way to select a direction. Follow the supplied operating instructions and test the light’s response before setting off.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0996\/9837\/7015\/files\/f83c86b1125b248b9fe889f70e2fd7804e043b07-30c6790d760b-e49a727c9ae0.jpg?v=1792746121\" alt=\"02_scene\"\u003e\u003c\/p\u003e\n\u003ch2\u003e🔎 Distinctive Dual-Lens Design\u003c\/h2\u003e\n\u003cp\u003eThe lamp has mirrored curved lenses around black central panels. An orange square button is visible on each half, with a black bridge joining the two sections.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0996\/9837\/7015\/files\/e17e6ef7b746f00168825070aa7372ca1ac95eb6-b10a13d550fd-4fbe2ecf21ae.jpg?v=1792746131\" alt=\"03_group\"\u003e\u003c\/p\u003e\n\u003ch2\u003e🖤 Matching Remote\u003c\/h2\u003e\n\u003cp\u003eThe separate black controller has white directional arrow buttons and a round lower button. Its contrasting button design makes the controls visually distinct.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0996\/9837\/7015\/files\/26333c515b4da8df4ac2d596372662a6ece37171-d1f5911a74eb-f088313172d7.jpg?v=1792746140\" alt=\"04_comparison\"\u003e\u003c\/p\u003e\n\u003ch2\u003e🌆 For Everyday Cycling Moments\u003c\/h2\u003e\n\u003cp\u003eAdd the set to your bicycle’s rear-light setup for commutes, local rides or evening outings. Check mounting compatibility with your bicycle before purchase and follow the supplied fitting instructions.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0996\/9837\/7015\/files\/088fd6c662a99de967456398238c6a7ac7dcf5dc-d5307c0733be-ce2a32bfc71a.jpg?v=1792746153\" alt=\"05_details\"\u003e\u003c\/p\u003e\n\u003ch2\u003e📋 Getting Started\u003c\/h2\u003e\n\u003cp\u003eFit the rear light and controller according to the supplied instructions. Position the light facing rearward, check that the mounting is secure and test the directional controls before riding.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0996\/9837\/7015\/files\/2e1f8a4af59e3d1f09e04bbcf5ed00dbe9a31268-8ef0125236fa-4c5b25a1bc62.jpg?v=1792746165\" alt=\"06_texture\"\u003e\u003c\/p\u003e\n\u003ch2\u003e❓ Where Is the Light Installed?\u003c\/h2\u003e\n\u003cp\u003eThis product is intended for the rear of a bicycle. Use the supplied mounting instructions to choose a compatible position and ensure the light is visible from behind.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0996\/9837\/7015\/files\/b8b15c111c5ff3f7c40daff729e3da04b485fa7c-4bb62014d396-86b7b8bdcdd9.jpg?v=1792746183\" alt=\"07_caution\"\u003e\u003c\/p\u003e\n\u003ch2\u003e❓ What Should I Check Before a Ride?\u003c\/h2\u003e\n\u003cp\u003eCheck the mounting, light operation and remote response. Follow local cycling rules and continue to use appropriate signalling and riding practices.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0996\/9837\/7015\/files\/321c7420d2e1103ddf7dfd58376c845c8404498c-c29556b02f67-1404e42fd930.jpg?v=1792746196\" alt=\"08_instructions\"\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003cstyle\u003e.wb26-purchase{width:100%;margin:18px 0}.wb26-heading{text-align:center;letter-spacing:1px}.wb26-tier{border:2px solid #d1bddc;border-radius:12px;margin:12px 0;overflow:hidden}.wb26-tier.is-selected{border-color:#71358c;background:#f1eaf5}.wb26-bar{display:flex;align-items:center;gap:14px;padding:18px;cursor:pointer}.wb26-bar strong{font-size:19px}.wb26-bar small{display:block}.wb26-prices{margin-left:auto;text-align:right;white-space:nowrap}.wb26-prices b{display:block;color:#71358c;font-size:21px}.wb26-prices s{font-size:15px}.wb26-options{padding:0 18px 15px}.wb26-options[hidden]{display:none}.wb26-item{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0}.wb26-item label{flex:1;min-width:100px;font-size:13px}.wb26-item select{display:block;width:100%;padding:9px;border:1px solid #aaa;border-radius:4px;background:white;color:#222}.wb26-error{color:#b42318}.wb26-atc{background:#71358c;color:#fff;margin:18px 0 10px}.wb26-buy{background:white;color:#71358c;border:2px solid #71358c}.wb26-single-quantity input{width:75px;padding:10px}.wb26-product variant-selects,.wb26-product variant-radios,.wb26-product quantity-breaks,.wb26-product [id^=\"sticky-atc-\"]{display:none!important}.wb23-details{overflow-wrap:anywhere}.wb23-details img,.wb23-details video{max-width:100%;height:auto}.wb23-details .animate-item,.wb23-details .animate--hidden{opacity:1!important;visibility:visible!important;transform:none!important}\u003c\/style\u003e\u003cscript\u003e(() =\u003e {\n  const cfg={\"id\": \"15477418131549\", \"tiers\": [], \"options\": [{\"name\": \"Title\", \"values\": [\"Default Title\"]}], \"variants\": [{\"id\": \"67836045099101\", \"options\": [\"Default Title\"], \"price\": 3699, \"compare\": 5699}]};\n  if(cfg.options.length===1\u0026\u0026cfg.options[0].name==='Title'\u0026\u0026cfg.options[0].values.length===1\u0026\u0026cfg.options[0].values[0]==='Default Title')cfg.options=[];\n  const original=document.querySelector('product-form.main-product-form');\n  if(!original||original.querySelector('[name=\"product-id\"]')?.value!==cfg.id)return;\n  const esc=s=\u003eString(s).replace(\/[\u0026\u003c\u003e\"']\/g,c=\u003e({'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;','\"':'\u0026quot;',\"'\":'\u0026#39;'}[c]));\n  const money=n=\u003enew Intl.NumberFormat('en-US',{style:'currency',currency:'USD'}).format(n\/100);\n  const host=document.createElement('div');host.className='wb26-purchase';\n  const form=document.createElement('form');form.action='\/cart\/add';form.method='post';\n  host.appendChild(form);original.replaceWith(host);\n  const section=host.closest('[id^=\"MainProduct-\"]')||document;\n  section.querySelectorAll('variant-selects,variant-radios,quantity-breaks,[id^=\"sticky-atc-\"]').forEach(x=\u003ex.hidden=true);\n  let selected=Math.max(0,cfg.tiers.findIndex(x=\u003ex.selected));\n  if(!cfg.tiers.length)cfg.tiers=[{q:1,title:'Quantity',plain:true}];\n  const optionsMarkup=(tier,i)=\u003eArray.from({length:tier.q},(_,j)=\u003e'\u003cdiv class=\"wb26-item\"\u003e\u003cspan\u003eItem '+(j+1)+'\u003c\/span\u003e'+cfg.options.map((o,k)=\u003e'\u003clabel\u003e'+esc(o.name)+'\u003cselect data-item=\"'+j+'\" data-option=\"'+k+'\" aria-label=\"Item '+(j+1)+' '+esc(o.name)+'\"\u003e'+o.values.map(v=\u003e'\u003coption value=\"'+esc(v)+'\"\u003e'+esc(v)+'\u003c\/option\u003e').join('')+'\u003c\/select\u003e\u003c\/label\u003e').join('')+'\u003c\/div\u003e').join('');\n  form.innerHTML=(cfg.tiers[0].plain?'':'\u003ch3 class=\"wb26-heading\"\u003eBUNDLE \u0026amp; SAVE\u003c\/h3\u003e')+cfg.tiers.map((t,i)=\u003e'\u003cdiv class=\"wb26-tier\"\u003e\u003clabel class=\"wb26-bar\"\u003e\u003cinput type=\"radio\" name=\"wb26-tier\" value=\"'+i+'\" '+(i===selected?'checked':'')+'\u003e\u003cspan\u003e\u003cstrong\u003e'+esc(t.title)+'\u003c\/strong\u003e\u003csmall class=\"wb26-saving\"\u003e\u003c\/small\u003e\u003c\/span\u003e\u003cspan class=\"wb26-prices\"\u003e\u003cb\u003e\u003c\/b\u003e\u003cs\u003e\u003c\/s\u003e\u003c\/span\u003e\u003c\/label\u003e\u003cdiv class=\"wb26-options\" '+(i===selected?'':'hidden')+'\u003e'+optionsMarkup(t,i)+'\u003c\/div\u003e\u003c\/div\u003e').join('')+(cfg.tiers[0].plain?'\u003clabel class=\"wb26-single-quantity\"\u003eQuantity \u003cinput type=\"number\" name=\"quantity\" value=\"1\" min=\"1\" max=\"99\"\u003e\u003c\/label\u003e':'')+'\u003cp class=\"wb26-error\" role=\"alert\" hidden\u003e\u003c\/p\u003e\u003cbutton type=\"submit\" class=\"button button--full-width wb26-atc\"\u003eADD TO CART\u003c\/button\u003e\u003cbutton type=\"button\" class=\"button button--full-width wb26-buy\"\u003eBUY IT NOW\u003c\/button\u003e';\n  const tierEls=[...form.querySelectorAll('.wb26-tier')];\n  const initial=cfg.variants.find(v=\u003ev.id===new URLSearchParams(location.search).get('variant'))||cfg.variants[0];\n  form.querySelectorAll('select[data-option]').forEach(s=\u003es.value=initial.options[Number(s.dataset.option)]);\n  function chosen(i){return [...tierEls[i].querySelectorAll('.wb26-item')].map(row=\u003e{const vals=[...row.querySelectorAll('select')].map(x=\u003ex.value);return vals.length?cfg.variants.find(v=\u003ev.options.every((x,k)=\u003ex===vals[k])):cfg.variants[0];});}\n  function update(){tierEls.forEach((el,i)=\u003e{const t=cfg.tiers[i],vs=chosen(i);let base=vs.reduce((n,v)=\u003en+(v?.price||0),0),compare=vs.reduce((n,v)=\u003en+(v?.compare||v?.price||0),0),total=t.total??vs.reduce((n,v)=\u003en+(v?v.price-Math.floor(v.price*(t.percent||0)\/100):0),0);el.querySelector('.wb26-prices b').textContent=money(total);el.querySelector('.wb26-prices s').textContent=compare\u003etotal?money(compare):'';el.querySelector('.wb26-saving').textContent=compare\u003etotal?'You save '+money(compare-total):'';el.classList.toggle('is-selected',i===selected);el.querySelector('.wb26-options').hidden=i!==selected;el.dataset.total=total;});}\n  form.addEventListener('change',e=\u003e{if(e.target.name==='wb26-tier')selected=Number(e.target.value);update();const v=chosen(selected)[Number(e.target.dataset.item)||0];if(v){if(v.imageIndex!==undefined)section.querySelector('[aria-label=\"Load image '+(v.imageIndex+1)+' in gallery view\"]')?.click();const price=section.querySelector('[id^=\"main-price-\"]');price?.querySelectorAll('.main-price').forEach(x=\u003ex.textContent=money(v.price));const compare=price?.querySelector('.main-comapre-price');if(compare)compare.textContent=money(v.compare);price?.classList.toggle('price--on-sale',v.compare\u003ev.price);const badge=price?.querySelector('.badge__percentage-saved');if(badge)badge.textContent=String(Math.round((v.compare-v.price)\/v.compare*100));}});update();\n  let checkout=false;\n  form.querySelector('.wb26-buy').addEventListener('click',()=\u003e{checkout=true;form.requestSubmit();});\n  form.addEventListener('submit',async e=\u003e{e.preventDefault();e.stopImmediatePropagation();const buttons=[...form.querySelectorAll('button')],error=form.querySelector('.wb26-error');if(buttons.some(x=\u003ex.disabled))return;error.hidden=true;const t=cfg.tiers[selected],vs=chosen(selected);if(vs.some(x=\u003e!x)){error.textContent='Please choose an available combination for each item.';error.hidden=false;checkout=false;return;}const q=t.plain?Number(form.elements.quantity.value):1;if(!Number.isInteger(q)||q\u003c1||q\u003e99){error.textContent='Please enter a quantity from 1 to 99.';error.hidden=false;checkout=false;return;}const items=[];vs.forEach(v=\u003e{const row=items.find(x=\u003ex.id===v.id);if(row)row.quantity+=q;else items.push({id:v.id,quantity:q});});buttons.forEach(x=\u003ex.disabled=true);let added=false;try{const cart=document.querySelector('cart-drawer'),sections=cart?.getSectionsToRender?.().map(x=\u003ex.id)||[];const res=await fetch('\/cart\/add.js',{method:'POST',headers:{'Content-Type':'application\/json','Accept':'application\/json'},body:JSON.stringify({items,sections,sections_url:location.pathname})});let result=await res.json();if(!res.ok||result.status)throw new Error(result.description||'Unable to add this selection.');added=true;if(t.code){const r=await fetch('\/cart\/update.js',{method:'POST',headers:{'Content-Type':'application\/json','Accept':'application\/json'},body:JSON.stringify({discount:t.code,sections,sections_url:location.pathname})});const updated=await r.json();if(!r.ok)throw new Error('Items added. Please check the bundle discount in your cart before checkout.');result=updated;}if(checkout){location.assign('\/checkout');return;}if(cart?.renderContents\u0026\u0026result.sections){cart.setActiveElement?.(buttons[0]);cart.classList.remove('is-empty');cart.renderContents(result);}else location.assign('\/cart');}catch(failure){error.textContent=(added?'Items are in your cart. ':'')+(failure.message||'Unable to add this selection.');error.hidden=false;}finally{buttons.forEach(x=\u003ex.disabled=false);checkout=false;}});\n  const details=document.querySelector('.wb23-details'),main=document.querySelector('[id^=\"MainProduct-\"]');\n  if(details\u0026\u0026main){const full=document.createElement('div');full.className='page-width wb26-full-details';main.after(full);full.appendChild(details);}\n  document.body.classList.add('wb26-product');host.dataset.ready='true';\n})();\n\u003c\/script\u003e","brand":"Lumiieren","offers":[{"title":"Default Title","offer_id":67836045099101,"sku":"WH02732610233604-分体转向尾灯","price":36.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0683\/0748\/4765\/files\/pt-image-b11a37eaf266.jpg?v=1792978072","url":"https:\/\/www.lumiieren.com\/products\/bicycle-rear-turn-signal-light-with-directional-remote","provider":"Lumiieren","version":"1.0","type":"link"}