{"product_id":"vaporesso-gtx-one-pro-mod","title":"Vaporesso - GTX One Pro Mod","description":"\u003c!-- =========================\n  GTX One Pro Mod — Full Listing (mod only, no images)\n  Structure: Compatible tanks → (empty banner shell) → carousel → copy → battery → FAQ → nicotine guide\n  Notes: All CSS\/JS scoped to #gtx-one-pro-mod to avoid theme conflicts\n========================= --\u003e\n\n\u003csection id=\"gtx-one-pro-mod\"\u003e\n  \u003cstyle\u003e\n    \/* ===== Scoped CSS for GTX One Pro Mod ===== *\/\n    #gtx-one-pro-mod .pods-card {\n      max-width: 860px; margin: 0 auto 26px; border: 1px solid #e5e7eb; background: #ffffff;\n      border-radius: 12px; box-shadow: 0 4px 12px rgb(0 0 0 \/ 0.06); padding: 18px;\n      font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Open Sans\", \"Helvetica Neue\", sans-serif;\n    }\n    #gtx-one-pro-mod .pods-header { display:flex; align-items:center; gap:10px; margin: 0 0 10px; }\n    #gtx-one-pro-mod .pods-header h2 { font-size: 1.25rem; margin:0; color:#1f2937; }\n    #gtx-one-pro-mod .pods-desc { color:#4b5563; margin: 2px 0 14px; }\n\n    #gtx-one-pro-mod .pods-grid {\n      display:grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px;\n    }\n    #gtx-one-pro-mod .pods-item {\n      border:1px solid #eef0f3; background:#f9fafb; border-radius:12px; padding:14px;\n      text-align:center; display:flex; flex-direction:column; align-items:center; gap:12px;\n    }\n    #gtx-one-pro-mod .pods-title { font-weight:700; color:#111827; line-height:1.3; }\n    #gtx-one-pro-mod .pods-link {\n      display:inline-block; text-decoration:none; font-weight:600; white-space:nowrap;\n      padding:8px 12px; border-radius:8px; border:1px solid #d1d5db; background:#ffffff;\n      transition: transform .15s ease, box-shadow .15s ease, background-color .15s ease;\n    }\n    #gtx-one-pro-mod .pods-link:hover { transform: translateY(-1px); box-shadow: 0 4px 10px rgb(0 0 0 \/ 0.08); background:#f3f4f6; }\n\n    \/* Banner shell (empty by request — no images) *\/\n    #gtx-one-pro-mod .top-banner { text-align:center; margin: 0 0 18px; min-height: 0; }\n\n    \/* Carousel *\/\n    #gtx-one-pro-mod .carousel-container {\n      max-width: 600px; margin: 0 auto 32px; background: #f9fafb; border-radius: 10px;\n      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); padding: 25px 40px; color: #222; position: relative; overflow: hidden;\n    }\n    #gtx-one-pro-mod .carousel-slide {\n      display: none; text-align: center; font-weight: 600; font-size: 18px; line-height: 1.4; color: #2a2a72;\n      min-height: 130px; opacity: 0; transition: opacity 0.35s ease;\n    }\n    #gtx-one-pro-mod .carousel-slide.active { display: block; opacity: 1; }\n    #gtx-one-pro-mod .carousel-icon { font-size: 48px; margin-bottom: 12px; color: #5c5cad; user-select: none; }\n    #gtx-one-pro-mod .carousel-arrow {\n      position: absolute; bottom: 20px; font-size: 28px; font-weight: bold; color: #5c5cad; cursor: pointer;\n      background: #e2e2f0; border-radius: 50%; width: 40px; height: 40px; line-height: 38px; text-align: center;\n      transition: background-color 0.3s ease, transform 0.2s ease; user-select: none; border: 0;\n    }\n    #gtx-one-pro-mod .carousel-arrow:hover { background: #c1c6f7; transform: scale(1.08); }\n    #gtx-one-pro-mod .carousel-arrow.left { left: 20px; }\n    #gtx-one-pro-mod .carousel-arrow.right { right: 20px; }\n    #gtx-one-pro-mod .carousel-dots { text-align: center; margin-top: 18px; }\n    #gtx-one-pro-mod .carousel-dot {\n      display: inline-block; width: 10px; height: 10px; background: #bbb; border-radius: 50%;\n      margin: 0 5px; cursor: pointer; transition: background-color 0.3s ease;\n    }\n    #gtx-one-pro-mod .carousel-dot.active { background: #5c5cad; }\n\n    \/* Battery animation *\/\n    #gtx-one-pro-mod .battery-section {\n      max-width: 400px; margin: 30px auto; padding: 20px; text-align: center;\n      background: #f8f8f8; border-radius: 12px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n    }\n    #gtx-one-pro-mod .battery-title { font-size: 1.5rem; font-weight: bold; color: #2c2c6c; margin-bottom: 15px; }\n    #gtx-one-pro-mod .battery-wrapper {\n      position: relative; width: 180px; height: 70px; margin: 0 auto 10px; background: #fff;\n      border-radius: 30px; border: 3px solid #2c2c6c; display: flex; align-items: center; justify-content: space-between;\n      padding: 0 12px; box-sizing: border-box; overflow: hidden;\n    }\n    #gtx-one-pro-mod .battery-wrapper::after {\n      content: ''; position: absolute; top: 23px; right: -20px; width: 15px; height: 25px; background: #2c2c6c; border-radius: 6px;\n    }\n    #gtx-one-pro-mod .battery-bar { width: 25px; height: 45px; background: #cccccc; border-radius: 10px; border: 1.5px solid #999999; opacity: 0.3; }\n    #gtx-one-pro-mod .battery-bar.fill-1 { animation: gxFill 4s infinite; animation-delay: 0s; }\n    #gtx-one-pro-mod .battery-bar.fill-2 { animation: gxFill 4s infinite; animation-delay: 1s; }\n    #gtx-one-pro-mod .battery-bar.fill-3 { animation: gxFill 4s infinite; animation-delay: 2s; }\n    #gtx-one-pro-mod .battery-bar.fill-4 { animation: gxFill 4s infinite; animation-delay: 3s; }\n    @keyframes gxFill {\n      0%, 25% { background: #cccccc; opacity: 0.3; border-color: #999999; }\n      50%, 100% { background: #30c853; opacity: 1; border-color: #27a432; box-shadow: 0 0 6px #4ade80; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      #gtx-one-pro-mod .battery-bar { animation: none; }\n    }\n\n    \/* FAQ + Nicotine guide *\/\n    #gtx-one-pro-mod .faq-container { max-width: 600px; margin: 30px auto; background: #f9f9f9; border-radius: 12px; box-shadow: 0 4px 12px rgb(0 0 0 \/ 0.1); padding: 20px; }\n    #gtx-one-pro-mod .faq-title { font-size: 1.8rem; font-weight: 700; color: #2c2c6c; margin-bottom: 20px; text-align: center; }\n    #gtx-one-pro-mod .faq-item { border-bottom: 1px solid #ddd; }\n    #gtx-one-pro-mod .faq-question { cursor: pointer; padding: 15px 10px; font-weight: 600; color: #1e1e3f; position: relative; transition: background-color 0.3s ease; }\n    #gtx-one-pro-mod .faq-question:hover { background-color: #e0f7e9; }\n    #gtx-one-pro-mod .faq-question::after { content: \"➤\"; font-size: 1.2rem; position: absolute; right: 15px; top: 50%; transform: translateY(-50%) rotate(0deg); transition: transform 0.3s ease; color: #30c853; }\n    #gtx-one-pro-mod .faq-question.active::after { transform: translateY(-50%) rotate(90deg); }\n    #gtx-one-pro-mod .faq-answer {\n      max-height: 0; overflow: hidden; padding: 0 10px; color: #444; font-size: 1rem; line-height: 1.5;\n      transition: max-height 0.35s ease, padding-top 0.35s ease, padding-bottom 0.35s ease;\n    }\n    #gtx-one-pro-mod .faq-answer.open { max-height: 500px; padding: 10px; }\n\n    #gtx-one-pro-mod .nicotine-guide { max-width: 800px; margin: 40px auto; padding: 20px; text-align: center; }\n    #gtx-one-pro-mod .nicotine-title { font-size: 2rem; font-weight: 700; color: #2c2c6c; margin-bottom: 20px; }\n    #gtx-one-pro-mod .nicotine-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 15px; }\n    #gtx-one-pro-mod .nicotine-box {\n      background: linear-gradient(145deg, #ffffff, #f1f1f1); border-radius: 12px; padding: 20px;\n      box-shadow: 0 4px 10px rgba(0,0,0,0.1); transition: transform 0.2s ease, box-shadow 0.2s ease;\n    }\n    #gtx-one-pro-mod .nicotine-box:hover { transform: translateY(-5px); box-shadow: 0 8px 16px rgba(0,0,0,0.2); }\n    #gtx-one-pro-mod .nicotine-icon { font-size: 2rem; margin-bottom: 10px; }\n    #gtx-one-pro-mod .nicotine-level { font-size: 1.25rem; font-weight: 700; color: #2c2c6c; margin-bottom: 8px; }\n    #gtx-one-pro-mod .nicotine-info { font-size: .95rem; color:#333; line-height:1.4; }\n    #gtx-one-pro-mod .nicotine-note { margin-top: 25px; font-size: .9rem; color:#444; background:#f5f6fa; padding:10px; border-radius:8px; border-left:4px solid #5c5cad; }\n\n    #gtx-one-pro-mod .center { text-align:center; }\n  \u003c\/style\u003e\n\n  \u003c!-- Compatible Tanks (mod only) --\u003e\n  \u003cdiv class=\"pods-card\" role=\"complementary\" aria-label=\"Compatible tanks\"\u003e\n    \u003cdiv class=\"pods-header\"\u003e\n      \u003cdiv aria-hidden=\"true\" style=\"font-size: 1.4rem;\"\u003e🧩\u003c\/div\u003e\n      \u003ch2\u003eCompatible Tanks\u003c\/h2\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"pods-desc\"\u003eStandard 510 connection. Works best with compact MTL tanks up to \u003cstrong\u003e23 mm\u003c\/strong\u003e diameter.\u003c\/div\u003e\n    \u003cdiv class=\"pods-grid\"\u003e\n      \u003cdiv class=\"pods-item\"\u003e\n        \u003cdiv class=\"pods-title\"\u003eShop All 510 Tanks\u003c\/div\u003e\n        \u003ca class=\"pods-link\" href=\"https:\/\/myvapestore.co.uk\/collections\/tanks\" rel=\"noopener noreferrer\" title=\"Browse 510 tanks\" target=\"_blank\"\u003eView\u003c\/a\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"pods-item\"\u003e\n        \u003cdiv class=\"pods-title\"\u003eRecommended: MTL Tanks\u003c\/div\u003e\n        \u003ca class=\"pods-link\" href=\"https:\/\/myvapestore.co.uk\/collections\/mtl-tanks\" rel=\"noopener noreferrer\" title=\"Browse MTL tanks\" target=\"_blank\"\u003eView\u003c\/a\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Banner (empty by request: no images) --\u003e\n  \u003cdiv class=\"top-banner\" aria-hidden=\"true\"\u003e\u003c\/div\u003e\n\n  \u003c!-- Carousel --\u003e\n  \u003cdiv class=\"carousel-container\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Key Features\"\u003e\n    \u003cdiv class=\"carousel-slide active\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 of 4\"\u003e\n      \u003cdiv class=\"carousel-icon\" aria-hidden=\"true\"\u003e⚡\u003c\/div\u003e\n      \u003cdiv\u003e\n\u003cstrong\u003eWattage Control:\u003c\/strong\u003e precise adjustable power \u003cstrong\u003e5–40 W\u003c\/strong\u003e for MTL\/RDL tuning\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"carousel-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 of 4\"\u003e\n      \u003cdiv class=\"carousel-icon\" aria-hidden=\"true\"\u003e🔩\u003c\/div\u003e\n      \u003cdiv\u003e\n\u003cstrong\u003e510 Thread:\u003c\/strong\u003e pairs with most MTL\/RDL tanks; best ≤ \u003cstrong\u003e23 mm\u003c\/strong\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"carousel-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 of 4\"\u003e\n      \u003cdiv class=\"carousel-icon\" aria-hidden=\"true\"\u003e🔋\u003c\/div\u003e\n      \u003cdiv\u003e\n\u003cstrong\u003eBattery:\u003c\/strong\u003e integrated \u003cstrong\u003e3000 mAh\u003c\/strong\u003e high-density cell\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"carousel-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"4 of 4\"\u003e\n      \u003cdiv class=\"carousel-icon\" aria-hidden=\"true\"\u003e🔌\u003c\/div\u003e\n      \u003cdiv\u003e\n\u003cstrong\u003eCharging:\u003c\/strong\u003e \u003cstrong\u003eUSB-C\u003c\/strong\u003e fast charging up to \u003cstrong\u003e2 A\u003c\/strong\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cbutton type=\"button\" class=\"carousel-arrow left\" aria-label=\"Previous slide\"\u003e←\u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"carousel-arrow right\" aria-label=\"Next slide\"\u003e→\u003c\/button\u003e\n    \u003cdiv class=\"carousel-dots\" aria-label=\"Slide indicators\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003ch2 class=\"center\"\u003eGTX One Pro Mod\u003c\/h2\u003e\n  \u003cp class=\"center\"\u003e\n    Compact regulated box with clean wattage control and a standard \u003cstrong\u003e510\u003c\/strong\u003e top plate. Designed for\n    reliable \u003cstrong\u003eMTL\/RDL\u003c\/strong\u003e performance with smaller tanks, it delivers steady output via the\n    \u003cstrong\u003eAXON\u003c\/strong\u003e platform, a clear \u003cstrong\u003e0.87\" OLED\u003c\/strong\u003e, and \u003cstrong\u003eUSB-C (2 A)\u003c\/strong\u003e quick charge.\n    No tank or coils in the box. Mod only.\n  \u003c\/p\u003e\n\n  \u003c!-- Battery Animation --\u003e\n  \u003cdiv class=\"battery-section\" aria-labelledby=\"gtxpro-battery-title\"\u003e\n    \u003cdiv id=\"gtxpro-battery-title\" class=\"battery-title\"\u003e🔋 Battery — Real-World Runtime\u003c\/div\u003e\n    \u003cdiv class=\"battery-wrapper\" aria-hidden=\"true\"\u003e\n      \u003cdiv class=\"battery-bar fill-1\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"battery-bar fill-2\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"battery-bar fill-3\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"battery-bar fill-4\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"battery-info\"\u003e3000 mAh internal cell. Typical users get a full day or more between charges.\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003ch2\u003eSpecifications\u003c\/h2\u003e\n  \u003cul\u003e\n    \u003cli\u003e\n\u003cstrong\u003eOutput:\u003c\/strong\u003e 5–40 W adjustable wattage\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eBattery:\u003c\/strong\u003e 3000 mAh integrated (high-density)\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eCharging:\u003c\/strong\u003e USB-C, 5V\/2A\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eDisplay:\u003c\/strong\u003e 0.87″ OLED\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eThreading:\u003c\/strong\u003e 510 connection\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eBest With:\u003c\/strong\u003e MTL tanks up to 23 mm\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eControls:\u003c\/strong\u003e two adjustment buttons + fire; lock button\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eChipset:\u003c\/strong\u003e AXON with Smart Mode\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eProtections:\u003c\/strong\u003e overcharge \/ short \/ low-voltage \/ timeout\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eIn the Box:\u003c\/strong\u003e GTX One Pro Mod, USB-C cable, user guide\u003c\/li\u003e\n  \u003c\/ul\u003e\n\n  \u003c!-- FAQ --\u003e\n  \u003cdiv class=\"faq-container\"\u003e\n    \u003ch2 class=\"faq-title\"\u003eFrequently Asked Questions\u003c\/h2\u003e\n    \u003cdiv class=\"faq-item\"\u003e\n      \u003cdiv class=\"faq-question\" role=\"button\" tabindex=\"0\" aria-expanded=\"false\"\u003eDoes this include a tank or coils?\u003c\/div\u003e\n      \u003cdiv class=\"faq-answer\" aria-hidden=\"true\"\u003eNo. This is the \u003cstrong\u003emod only\u003c\/strong\u003e. Add any compatible 510 tank separately.\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"faq-item\"\u003e\n      \u003cdiv class=\"faq-question\" role=\"button\" tabindex=\"0\" aria-expanded=\"false\"\u003eWhich tanks fit best?\u003c\/div\u003e\n      \u003cdiv class=\"faq-answer\" aria-hidden=\"true\"\u003eCompact MTL tanks up to \u003cstrong\u003e23 mm\u003c\/strong\u003e sit flush and perform best at moderate wattage.\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"faq-item\"\u003e\n      \u003cdiv class=\"faq-question\" role=\"button\" tabindex=\"0\" aria-expanded=\"false\"\u003eWhat e-liquids should I use?\u003c\/div\u003e\n      \u003cdiv class=\"faq-answer\" aria-hidden=\"true\"\u003eMatch your tank’s coil: most MTL coils prefer 50\/50 nic salts or freebase in the 5–20 mg range.\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"faq-item\"\u003e\n      \u003cdiv class=\"faq-question\" role=\"button\" tabindex=\"0\" aria-expanded=\"false\"\u003eIs there temperature control?\u003c\/div\u003e\n      \u003cdiv class=\"faq-answer\" aria-hidden=\"true\"\u003eNo. It’s wattage control only on this model.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Nicotine Guide --\u003e\n  \u003cdiv class=\"nicotine-guide\" aria-labelledby=\"nicotine-title\"\u003e\n    \u003cdiv id=\"nicotine-title\" class=\"nicotine-title\"\u003e💡 Nicotine Strength Guide\u003c\/div\u003e\n    \u003cdiv class=\"nicotine-grid\"\u003e\n      \u003cdiv class=\"nicotine-box\" aria-label=\"Light smokers 1 to 5 cigarettes\"\u003e\n        \u003cdiv class=\"nicotine-icon\" aria-hidden=\"true\"\u003e🚬\u003c\/div\u003e\n        \u003cdiv class=\"nicotine-level\"\u003e1–5 Cigarettes\u003c\/div\u003e\n        \u003cdiv class=\"nicotine-info\"\u003eUse \u003cstrong\u003e5–10 mg Nic Salts\u003c\/strong\u003e for light smokers.\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"nicotine-box\" aria-label=\"Moderate smokers 6 to 10 cigarettes\"\u003e\n        \u003cdiv class=\"nicotine-icon\" aria-hidden=\"true\"\u003e🚬🚬\u003c\/div\u003e\n        \u003cdiv class=\"nicotine-level\"\u003e6–10 Cigarettes\u003c\/div\u003e\n        \u003cdiv class=\"nicotine-info\"\u003eTry \u003cstrong\u003e10–15 mg Nic Salts\u003c\/strong\u003e for balance.\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"nicotine-box\" aria-label=\"Regular smokers 11 to 20 cigarettes\"\u003e\n        \u003cdiv class=\"nicotine-icon\" aria-hidden=\"true\"\u003e🚬🚬🚬\u003c\/div\u003e\n        \u003cdiv class=\"nicotine-level\"\u003e11–20 Cigarettes\u003c\/div\u003e\n        \u003cdiv class=\"nicotine-info\"\u003eGo for \u003cstrong\u003e15–20 mg Nic Salts\u003c\/strong\u003e to satisfy cravings.\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"nicotine-box\" aria-label=\"Heavy smokers 20 plus\"\u003e\n        \u003cdiv class=\"nicotine-icon\" aria-hidden=\"true\"\u003e🔥\u003c\/div\u003e\n        \u003cdiv class=\"nicotine-level\"\u003e20+ Cigarettes\u003c\/div\u003e\n        \u003cdiv class=\"nicotine-info\"\u003e\n\u003cstrong\u003e20 mg Nic Salts\u003c\/strong\u003e (UK max) for the strongest effect.\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"nicotine-note\"\u003eNic salts deliver smoother hits and faster absorption. Stay within the UK 20 mg\/ml limit. 18+ only.\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- JS: Carousel + FAQ (scoped to #gtx-one-pro-mod) --\u003e\n  \u003cscript\u003e\n    (function() {\n      var root = document.getElementById('gtx-one-pro-mod');\n      if (!root) return;\n\n      \/\/ ===== Carousel =====\n      var slides = Array.prototype.slice.call(root.querySelectorAll('.carousel-slide'));\n      var dotsWrap = root.querySelector('.carousel-dots');\n      var btnPrev = root.querySelector('.carousel-arrow.left');\n      var btnNext = root.querySelector('.carousel-arrow.right');\n      var current = 0;\n\n      function updateAria() {\n        slides.forEach(function(slide, i) {\n          slide.setAttribute('aria-hidden', i !== current);\n          slide.setAttribute('aria-label', (i + 1) + ' of ' + slides.length);\n        });\n      }\n\n      function goTo(i) {\n        if (!slides.length) return;\n        current = (i + slides.length) % slides.length;\n        slides.forEach(function(s, idx){ s.classList.toggle('active', idx === current); });\n        var dots = dotsWrap.querySelectorAll('.carousel-dot');\n        Array.prototype.forEach.call(dots, function(d, idx){ d.classList.toggle('active', idx === current); d.setAttribute('aria-current', idx === current ? 'true' : 'false'); });\n        updateAria();\n      }\n\n      function buildDots() {\n        if (!slides.length || !dotsWrap) return;\n        dotsWrap.innerHTML = '';\n        slides.forEach(function(_, idx){\n          var dot = document.createElement('button');\n          dot.type = 'button';\n          dot.className = 'carousel-dot' + (idx === 0 ? ' active' : '');\n          dot.setAttribute('aria-label', 'Go to slide ' + (idx + 1));\n          dot.addEventListener('click', function(){ goTo(idx); });\n          dotsWrap.appendChild(dot);\n        });\n      }\n\n      if (btnPrev) btnPrev.addEventListener('click', function(){ goTo(current - 1); });\n      if (btnNext) btnNext.addEventListener('click', function(){ goTo(current + 1); });\n\n      \/\/ Keyboard control\n      root.addEventListener('keydown', function(e){\n        if (e.key === 'ArrowLeft') { e.preventDefault(); goTo(current - 1); }\n        if (e.key === 'ArrowRight') { e.preventDefault(); goTo(current + 1); }\n      });\n\n      buildDots();\n      goTo(0);\n\n      \/\/ ===== FAQ =====\n      var questions = Array.prototype.slice.call(root.querySelectorAll('.faq-question'));\n      questions.forEach(function(q){\n        var answer = q.nextElementSibling;\n        function toggle() {\n          var isOpen = answer.classList.toggle('open');\n          q.classList.toggle('active', isOpen);\n          q.setAttribute('aria-expanded', isOpen ? 'true' : 'false');\n          answer.setAttribute('aria-hidden', isOpen ? 'false' : 'true');\n        }\n        q.addEventListener('click', toggle);\n        q.addEventListener('keydown', function(e){ if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); toggle(); } });\n      });\n    })();\n  \u003c\/script\u003e\n\u003c\/section\u003e\n","brand":"VAPORESSO","offers":[{"title":"Red","offer_id":55952787276151,"sku":"VAPOR-GTXONE-PRO-MOD-RED","price":24.99,"currency_code":"GBP","in_stock":false},{"title":"Silver","offer_id":55952787308919,"sku":"VAPOR-GTXONE-PRO-MOD-SILV","price":24.99,"currency_code":"GBP","in_stock":false},{"title":"Black","offer_id":55952787341687,"sku":"VAPOR-GTXONE-PRO-MOD-BLK","price":24.99,"currency_code":"GBP","in_stock":false},{"title":"Pink","offer_id":55952787374455,"sku":"VAPOR-GTXONE-PRO-MOD-PNK","price":24.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/2549\/9280\/files\/GTXONEPRO_MOD.png?v=1760432160","url":"https:\/\/myvapestore.co.uk\/products\/vaporesso-gtx-one-pro-mod","provider":"My Vape Store","version":"1.0","type":"link"}