{"product_id":"paarl-adventure-festival-special","title":"Paarl Adventure Festival Special + Free Cap","description":"\u003cp\u003e\u003cstrong\u003ePaarl Adventure Festival special – 25% off Armour-Ride frame protection, plus a FREE Armour-Ride trucker cap with every purchase. Festival price only valid at the event, 26–27 September 2026.\u003c\/strong\u003e\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eKit + professional install (pay a R1,000 deposit now):\u003c\/strong\u003e\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003e95% Kit + Install: R3,375 (normally R4,500) – balance R2,375 due at install\u003c\/li\u003e\n\u003cli\u003e65% Kit + Install: R2,290 (normally R3,050) – balance R1,290 due at install\u003c\/li\u003e\n\u003c\/ul\u003e\u003cp\u003e\u003cstrong\u003eDIY kit (paid in full now):\u003c\/strong\u003e\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003e95% DIY Kit: R1,875 (normally R2,500)\u003c\/li\u003e\n\u003cli\u003e65% DIY Kit: R1,240 (normally R1,650)\u003c\/li\u003e\n\u003c\/ul\u003e\u003cp\u003e\u003cstrong\u003eFree cap:\u003c\/strong\u003e Show your order confirmation at the Armour-Ride stand and we'll hand you your cap on the spot. Can't get back to the stand? We'll give it to you at your install or ship it with your DIY kit.\u003c\/p\u003e\u003cp\u003e\u003cstrong\u003eTerms:\u003c\/strong\u003e Installs must be booked within 30 days of purchase at our Cape Town workshop. Install deposits are transferable to another rider but non-refundable. 95% kits are cut specifically for your frame and are subject to a pattern being available – enter your bike details when you select a 95% option and we'll confirm before cutting or shipping.\u003c\/p\u003e\n\u003cstyle\u003e\n.ar-frame{display:none;flex-basis:100%;width:100%;box-sizing:border-box;margin:10px 0 14px;padding:16px;background:#161616;border:1px solid #ff5c00;border-radius:8px}\n.ar-frame.is-on{display:block}\n.ar-frame h4{margin:0 0 4px;font-size:16px;color:#fff}\n.ar-frame p{margin:0 0 14px;font-size:13px;color:#9a9a9a}\n.ar-frame .ar-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}\n.ar-frame label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:#cfcfcf;margin:0;padding:0;border:0;background:none}\n.ar-frame input,.ar-frame select{width:100%;box-sizing:border-box;padding:10px;background:#0d0d0d;border:1px solid #262626;border-radius:6px;color:#fff;font-size:15px}\n.ar-frame input:focus,.ar-frame select:focus{border-color:#ff5c00;outline:none}\n@media (max-width:480px){.ar-frame .ar-grid{grid-template-columns:1fr}}\n\u003c\/style\u003e\n\u003cdiv class=\"ar-frame\" id=\"ar-frame\"\u003e\n\u003ch4\u003eYour bike details\u003c\/h4\u003e\n\u003cp\u003eYour 95% kit is cut to your exact frame. Tell us what you ride.\u003c\/p\u003e\n\u003cdiv class=\"ar-grid\"\u003e\n\u003clabel\u003eBrand \u003cinput type=\"text\" name=\"properties[Bike brand]\" placeholder=\"e.g. Specialized\"\u003e\u003c\/label\u003e\n\u003clabel\u003eModel \u0026amp; trim \u003cinput type=\"text\" name=\"properties[Bike model]\" placeholder=\"e.g. Epic 8 Comp\"\u003e\u003c\/label\u003e\n\u003clabel\u003eYear \u003cinput type=\"text\" name=\"properties[Bike year]\" placeholder=\"e.g. 2024\" inputmode=\"numeric\"\u003e\u003c\/label\u003e\n\u003clabel\u003eFrame size \u003cselect name=\"properties[Frame size]\"\u003e\u003coption value=\"\"\u003eSelect size\u003c\/option\u003e\n\u003coption\u003eXS\u003c\/option\u003e\n\u003coption\u003eS\u003c\/option\u003e\n\u003coption\u003eM\u003c\/option\u003e\n\u003coption\u003eL\u003c\/option\u003e\n\u003coption\u003eXL\u003c\/option\u003e\n\u003coption\u003eXXL\u003c\/option\u003e\n\u003coption\u003eS1\u003c\/option\u003e\n\u003coption\u003eS2\u003c\/option\u003e\n\u003coption\u003eS3\u003c\/option\u003e\n\u003coption\u003eS4\u003c\/option\u003e\n\u003coption\u003eS5\u003c\/option\u003e\n\u003coption\u003eS6\u003c\/option\u003e\n\u003coption\u003eNot sure\u003c\/option\u003e\u003c\/select\u003e\u003c\/label\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\nfunction init(){\nvar NEEDS_BIKE=['49988803461269','49988803526805'];\nvar box=document.getElementById('ar-frame');\nvar form=document.querySelector('form[action*=\"\/cart\/add\"]');\nif(!box||!form)return;\nif(!form.id)form.id='ar-product-form';\nvar fields=box.querySelectorAll('[name^=\"properties\"]');\nfields.forEach(function(el){el.setAttribute('form',form.id);});\nfunction place(){\nvar radios=document.querySelectorAll('input[type=\"radio\"]');\nfor(var i=0;i\u003cradios.length;i++){\nvar r=radios[i];\nif(r.checked\u0026\u0026String(r.value).indexOf('95%')===0){\nvar lab=(r.id\u0026\u0026document.querySelector('label[for=\"'+r.id+'\"]'))||r.closest('label')||r;\nif(lab.nextSibling!==box)lab.parentNode.insertBefore(box,lab.nextSibling);\nreturn;\n}\n}\nvar sels=document.querySelectorAll('select');\nfor(var j=0;j\u003csels.length;j++){\nvar s=sels[j];\nif(box.contains(s))continue;\nvar o=s.options[s.selectedIndex];\nif(o\u0026\u0026String(o.value||o.text).indexOf('95%')===0){\nvar anchor=s.closest('.select')||s;\nif(anchor.nextSibling!==box)anchor.parentNode.insertBefore(box,anchor.nextSibling);\nreturn;\n}\n}\nvar btn=form.querySelector('[type=\"submit\"],[name=\"add\"]');\nif(btn\u0026\u0026btn.parentNode\u0026\u0026btn.previousSibling!==box)btn.parentNode.insertBefore(box,btn);\n}\nvar last=null;\nfunction update(){\nvar idEl=form.querySelector('[name=\"id\"]');\nvar id=idEl?String(idEl.value):'';\nif(id===last)return;\nlast=id;\nvar on=NEEDS_BIKE.indexOf(id)!==-1;\nif(on)place();\nbox.classList.toggle('is-on',on);\nfields.forEach(function(el){el.required=on;el.disabled=!on;});\n}\nupdate();\ndocument.addEventListener('change',function(){setTimeout(function(){last=null;update();},80);});\nsetInterval(update,400);\nform.addEventListener('click',function(e){\nvar t=e.target.closest('[type=\"submit\"],[name=\"add\"]');\nif(!t)return;\nlast=null;update();\nif(box.classList.contains('is-on')\u0026\u0026!form.checkValidity()){\ne.preventDefault();e.stopImmediatePropagation();form.reportValidity();\n}\n},true);\n}\nif(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',init);}else{init();}\n})();\n\u003c\/script\u003e","brand":"Armour-Ride","offers":[{"title":"95% Kit + Install – R1,000 deposit (fest price R3,375)","offer_id":49988803461269,"sku":"PAF-DEP-95","price":1000.0,"currency_code":"ZAR","in_stock":true},{"title":"65% Kit + Install – R1,000 deposit (fest price R2,290)","offer_id":49988803494037,"sku":"PAF-DEP-65","price":1000.0,"currency_code":"ZAR","in_stock":true},{"title":"95% DIY Kit – paid in full","offer_id":49988803526805,"sku":"PAF-DIY-95","price":1875.0,"currency_code":"ZAR","in_stock":true},{"title":"65% DIY Kit – paid in full","offer_id":49988803559573,"sku":"PAF-DIY-65","price":1240.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0106\/2328\/7360\/files\/Gemini_Generated_Image_4gfwrk4gfwrk4gfw_092d63a0-be05-48b7-a5f7-d24c8e91eb1c.jpg?v=1790327745","url":"https:\/\/armour-ride.com\/products\/paarl-adventure-festival-special","provider":"ARMOUR-RIDE","version":"1.0","type":"link"}