{"product_id":"electric-scooter-for-adults-350w-motor-36v-10-4ah-removable-battery-10-pneumatic-tires-up-to-20-mph-28-mile-range-foldable-commuter-e-scooter","title":"Electric Scooter for Adults – 350W Motor, 36V 10.4Ah Removable Battery, 10\" Pneumatic Tires, Up to 20 MPH \u0026 28-Mile Range, Foldable Commuter E-Scooter","description":"\u003cbody\u003e\n\n\n\n\u003cmeta charset=\"utf-8\"\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n\u003ctitle\u003eX21 Electric Scooter — 350W Foldable Commuter with Removable Battery\u003c\/title\u003e\n\u003cmeta name=\"description\" content=\"Meet the X21: a 350W foldable e-scooter for adults with a removable 36V battery, 10-inch off-road tires, dual disc brakes and app-connected controls. Up to 20 mph (US) and 22-28 mi per charge.\"\u003e\n\n\n  \u003cmain class=\"x21-page\"\u003e\n    \u003cdiv class=\"rte\"\u003e\n\u003carticle class=\"x21-desc\" data-x21-desc\u003e\n  \u003c!-- Hero --\u003e\n  \u003csection class=\"x21-hero reveal\"\u003e\n    \u003cp class=\"x21-eyebrow\"\u003eCommute \u0026amp; Outdoor Series\u003c\/p\u003e\n    \u003ch2\u003eYour city, on your schedule.\u003c\/h2\u003e\n    \u003cp class=\"x21-lead\"\u003eMeet the X21 — a foldable electric scooter for adults, built for the daily commute and ready for the outdoor ride beyond it: the train-to-office last mile, the cross-campus dash, and the weekend trail detour.\u003c\/p\u003e\n    \u003cp\u003eA removable battery you can charge anywhere, grippy 10-inch off-road tires, and front-and-rear suspension add up to one simple promise — get there relaxed, on time, and in control.\u003c\/p\u003e\n\n    \u003cdiv class=\"x21-stats\" aria-label=\"Key specifications\"\u003e\n      \u003cdiv class=\"x21-stat\"\u003e\n        \u003cspan class=\"x21-stat-value\"\u003e\u003cspan data-count=\"20\"\u003e20\u003c\/span\u003e\u003csmall\u003emph\u003c\/small\u003e\u003c\/span\u003e\n        \u003cspan class=\"x21-stat-label\"\u003eTop speed (US)\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"x21-stat\"\u003e\n        \u003cspan class=\"x21-stat-value\"\u003e\u003cspan data-count=\"28\"\u003e28\u003c\/span\u003e\u003csmall\u003emi\u003c\/small\u003e\u003c\/span\u003e\n        \u003cspan class=\"x21-stat-label\"\u003eMax. range \/ charge*\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"x21-stat\"\u003e\n        \u003cspan class=\"x21-stat-value\"\u003e\u003cspan data-count=\"374\"\u003e374\u003c\/span\u003e\u003csmall\u003eWh\u003c\/small\u003e\u003c\/span\u003e\n        \u003cspan class=\"x21-stat-label\"\u003eRemovable battery\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"x21-stat\"\u003e\n        \u003cspan class=\"x21-stat-value\"\u003e\u003cspan data-count=\"265\"\u003e265\u003c\/span\u003e\u003csmall\u003elb\u003c\/small\u003e\u003c\/span\u003e\n        \u003cspan class=\"x21-stat-label\"\u003eMax. rider load\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- Feature grid --\u003e\n  \u003csection class=\"x21-section reveal\"\u003e\n    \u003cp class=\"x21-eyebrow\"\u003eWhy X21\u003c\/p\u003e\n    \u003ch3\u003eCompact on weekdays. Capable on weekends.\u003c\/h3\u003e\n\n    \u003cdiv class=\"x21-grid\"\u003e\n      \u003cdiv class=\"x21-card\"\u003e\n        \u003cspan class=\"x21-icon\" aria-hidden=\"true\"\u003e\n          \u003csvg viewbox=\"0 0 24 24\" focusable=\"false\"\u003e\u003crect x=\"2\" y=\"8\" width=\"17\" height=\"9\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M21 11v3\"\u003e\u003c\/path\u003e\u003cpath d=\"M6 12.5h7\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n        \u003c\/span\u003e\n        \u003ch4\u003eCharge anywhere\u003c\/h4\u003e\n        \u003cp\u003eThe 36V 10.4Ah lithium battery lifts out in seconds. Charge it under your desk or in your apartment — no need to park the whole scooter next to an outlet.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"x21-card\"\u003e\n        \u003cspan class=\"x21-icon\" aria-hidden=\"true\"\u003e\n          \u003csvg viewbox=\"0 0 24 24\" focusable=\"false\"\u003e\u003cpath d=\"M13 2 4 14h6l-1 8 9-12h-6l1-8z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n        \u003c\/span\u003e\n        \u003ch4\u003eEfficient 350W brushless drive\u003c\/h4\u003e\n        \u003cp\u003eQuiet, smooth, and low-maintenance. Three speed levels are region-tuned to 20 mph (32 km\/h) for the US version and 15.5 mph (25 km\/h) for the EU version — ideal for commuting and outdoor riding alike.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"x21-card\"\u003e\n        \u003cspan class=\"x21-icon\" aria-hidden=\"true\"\u003e\n          \u003csvg viewbox=\"0 0 24 24\" focusable=\"false\"\u003e\u003cpath d=\"M4 8c2.5-4 5.5-4 8 0s5.5 4 8 0\"\u003e\u003c\/path\u003e\u003cpath d=\"M4 15c2.5-4 5.5-4 8 0s5.5 4 8 0\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n        \u003c\/span\u003e\n        \u003ch4\u003eGrip for streets \u0026amp; trails\u003c\/h4\u003e\n        \u003cp\u003e10-inch off-road tires keep their grip across city roads and light trails, while automotive-style air dual shock absorption smooths out cracked pavement, brick, and bike-lane seams.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"x21-card\"\u003e\n        \u003cspan class=\"x21-icon\" aria-hidden=\"true\"\u003e\n          \u003csvg viewbox=\"0 0 24 24\" focusable=\"false\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"8\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"2\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 6.5v.2M17 9.5v.2M17 14.5v.2M12 17.5v.2M7 14.5v.2M7 9.5v.2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n        \u003c\/span\u003e\n        \u003ch4\u003eDual disc braking\u003c\/h4\u003e\n        \u003cp\u003eFront and rear disc brakes, supported by electronic E-ABS, deliver reliable, balanced stopping power — in traffic and on the trail.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- Battery highlight --\u003e\n  \u003csection class=\"x21-battery reveal\"\u003e\n    \u003cp class=\"x21-eyebrow\"\u003eRemovable battery\u003c\/p\u003e\n    \u003ch3\u003eTake the charge with you.\u003c\/h3\u003e\n    \u003cp\u003eApartment living, office days, dorm rooms — the X21 fits the places a car can't. Pop the battery out, plug it in wherever you are, and ride out with 22–28 miles (35–45 km) of range per charge.\u003c\/p\u003e\n\n    \u003cdiv class=\"x21-meter\" aria-hidden=\"true\"\u003e\u003cspan class=\"x21-meter-fill\"\u003e\u003c\/span\u003e\u003c\/div\u003e\n\n    \u003cdiv class=\"x21-facts\"\u003e\n      \u003cspan class=\"x21-fact\"\u003e\u003cstrong\u003e36V 10.4Ah\u003c\/strong\u003e · 374 Wh\u003c\/span\u003e\n      \u003cspan class=\"x21-fact\"\u003e\u003cstrong\u003e5–6 hrs\u003c\/strong\u003e full charge\u003c\/span\u003e\n      \u003cspan class=\"x21-fact\"\u003e\u003cstrong\u003eRemovable\u003c\/strong\u003e lithium pack\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- Ride modes (interactive tabs; all panels visible without JS) --\u003e\n  \u003csection class=\"x21-section reveal\"\u003e\n    \u003cp class=\"x21-eyebrow\"\u003eRide your way\u003c\/p\u003e\n    \u003ch3\u003eThree speeds. One simple choice.\u003c\/h3\u003e\n\n    \u003cdiv class=\"x21-tabs\"\u003e\n      \u003cdiv class=\"x21-tablist\" role=\"tablist\" aria-label=\"Speed levels\"\u003e\n        \u003cbutton class=\"x21-tab\" type=\"button\" role=\"tab\" id=\"x21-tab-1\" aria-controls=\"x21-mode-1\" aria-selected=\"true\" data-x21-tab\u003eSpeed 1\u003c\/button\u003e\n        \u003cbutton class=\"x21-tab\" type=\"button\" role=\"tab\" id=\"x21-tab-2\" aria-controls=\"x21-mode-2\" aria-selected=\"false\" tabindex=\"-1\" data-x21-tab\u003eSpeed 2\u003c\/button\u003e\n        \u003cbutton class=\"x21-tab\" type=\"button\" role=\"tab\" id=\"x21-tab-3\" aria-controls=\"x21-mode-3\" aria-selected=\"false\" tabindex=\"-1\" data-x21-tab\u003eSpeed 3\u003c\/button\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"x21-mode\" role=\"tabpanel\" id=\"x21-mode-1\" aria-labelledby=\"x21-tab-1\" data-x21-panel\u003e\n        \u003ch4\u003eSpeed 1 — Take it easy\u003c\/h4\u003e\n        \u003cp\u003eGentle starts for crowded paths, campuses, and shared lanes — and the friendliest setting for stretching your range.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"x21-mode\" role=\"tabpanel\" id=\"x21-mode-2\" aria-labelledby=\"x21-tab-2\" data-x21-panel\u003e\n        \u003ch4\u003eSpeed 2 — Everyday city pace\u003c\/h4\u003e\n        \u003cp\u003eThe balanced default for commuting: responsive enough for traffic flow, efficient enough for the ride home.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"x21-mode\" role=\"tabpanel\" id=\"x21-mode-3\" aria-labelledby=\"x21-tab-3\" data-x21-panel\u003e\n        \u003ch4\u003eSpeed 3 — Full pace\u003c\/h4\u003e\n        \u003cp\u003eOpen it up to 20 mph (32 km\/h) on the US version — the EU version is limited to 15.5 mph (25 km\/h) — where local rules allow. Arrive sooner, still sweat-free.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cp class=\"x21-app-note\"\u003e\u003cstrong\u003eApp-connected, dashboard-clear.\u003c\/strong\u003e Pair with the companion app to adjust ride settings, and keep speed and battery in view on the digital display while you ride.\u003c\/p\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- Everyday life --\u003e\n  \u003csection class=\"x21-section reveal\"\u003e\n    \u003cp class=\"x21-eyebrow\"\u003eMade for every day\u003c\/p\u003e\n    \u003ch3\u003eFolds into your routine — literally.\u003c\/h3\u003e\n\n    \u003cdiv class=\"x21-scenarios\" aria-label=\"Ways to ride\"\u003e\n      \u003cspan class=\"x21-chip\"\u003eTrain-to-office last mile\u003c\/span\u003e\n      \u003cspan class=\"x21-chip\"\u003eCampus \u0026amp; dorm runs\u003c\/span\u003e\n      \u003cspan class=\"x21-chip\"\u003eCoffee \u0026amp; errands\u003c\/span\u003e\n      \u003cspan class=\"x21-chip\"\u003eWeekend light trails\u003c\/span\u003e\n      \u003cspan class=\"x21-chip\"\u003eApartment-friendly storage\u003c\/span\u003e\n    \u003c\/div\u003e\n\n    \u003cul class=\"x21-checklist\"\u003e\n      \u003cli\u003e\n\u003cstrong\u003eFold, carry, store.\u003c\/strong\u003e At just 37.5 lb (17 kg), the aluminum alloy frame folds down in 3 seconds for trunks, hall closets, and under-desk storage — portable without feeling flimsy.\u003c\/li\u003e\n      \u003cli\u003e\n\u003cstrong\u003eReady for real weather.\u003c\/strong\u003e An IP54 rating shrugs off splashes and light rain on the ride to work.\u003c\/li\u003e\n      \u003cli\u003e\n\u003cstrong\u003eSee and be seen.\u003c\/strong\u003e Bright dual LED headlights and a rear taillight improve visibility for night rides and low-light commutes.\u003c\/li\u003e\n      \u003cli\u003e\n\u003cstrong\u003eCertified \u0026amp; covered.\u003c\/strong\u003e CE and UL 2272 safety certified, backed by a 12-month warranty and professional after-sales support.\u003c\/li\u003e\n      \u003cli\u003e\n\u003cstrong\u003eOne clean color.\u003c\/strong\u003e Finished in understated black that goes with everything you own.\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/section\u003e\n\n  \u003chr\u003e\n\n  \u003c!-- Specifications --\u003e\n  \u003csection class=\"x21-section reveal\"\u003e\n    \u003ch3\u003eTechnical specifications\u003c\/h3\u003e\n    \u003cdiv class=\"x21-spec-wrap\"\u003e\n      \u003ctable\u003e\n        \u003ctbody\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eModel\u003c\/th\u003e\n\u003ctd\u003eX21\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eMotor\u003c\/th\u003e\n\u003ctd\u003e350W brushless motor\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eTop speed\u003c\/th\u003e\n\u003ctd\u003eUp to 20 mph \/ 32 km\/h (US) · 15.5 mph \/ 25 km\/h (EU)\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eRange per charge\u003c\/th\u003e\n\u003ctd\u003e22–28 mi (35–45 km)*\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eBattery\u003c\/th\u003e\n\u003ctd\u003e36V 10.4Ah (374 Wh) removable lithium battery\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eCharge time\u003c\/th\u003e\n\u003ctd\u003e5–6 hours\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eRide modes\u003c\/th\u003e\n\u003ctd\u003e3 speed levels\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eControls\u003c\/th\u003e\n\u003ctd\u003eDigital display · app control support\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eTires\u003c\/th\u003e\n\u003ctd\u003e10″ off-road pneumatic tubeless tires\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eSuspension\u003c\/th\u003e\n\u003ctd\u003eFront \u0026amp; rear suspension · automotive-style air dual shock absorption\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eBrakes\u003c\/th\u003e\n\u003ctd\u003eFront \u0026amp; rear disc brakes + electronic E-ABS\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eFrame\u003c\/th\u003e\n\u003ctd\u003eAluminum alloy · 3-second folding system\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eMax. load\u003c\/th\u003e\n\u003ctd\u003e265 lb (120 kg)\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eNet weight\u003c\/th\u003e\n\u003ctd\u003e37.5 lb (17 kg)\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eWater resistance\u003c\/th\u003e\n\u003ctd\u003eIP54 (splash \u0026amp; light-rain resistant)\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eLighting\u003c\/th\u003e\n\u003ctd\u003eDual LED headlights · rear taillight\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eColor\u003c\/th\u003e\n\u003ctd\u003eBlack\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eCharger plug\u003c\/th\u003e\n\u003ctd\u003eUS \/ EU \/ JP plug, matched to your region\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eCertifications\u003c\/th\u003e\n\u003ctd\u003eCE · UL 2272 · FCC · RoHS · LVD · EMC\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003eWarranty\u003c\/th\u003e\n\u003ctd\u003e12-month warranty · professional after-sales support\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003cth scope=\"row\"\u003ePackage size \/ weight\u003c\/th\u003e\n\u003ctd\u003e47.2 × 7.9 × 22.4 in (120 × 20 × 57 cm) · 50.7 lb (23.0 kg) gross\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003c\/tbody\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- Before you ride --\u003e\n  \u003csection class=\"x21-section reveal\"\u003e\n    \u003ch3\u003eGood to know before you ride\u003c\/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003e*Range and top speed vary with rider weight, terrain, wind, temperature, tire pressure, and selected speed level. Maximum range is achieved under optimal, low-speed conditions.\u003c\/li\u003e\n      \u003cli\u003eIP54 protects against splashes and light rain. Do not ride through deep or standing water, and dry the scooter before charging.\u003c\/li\u003e\n      \u003cli\u003eDesigned for adult riders. E-scooter age and riding rules differ by state and city — check your local regulations, and always wear a helmet.\u003c\/li\u003e\n    \u003c\/ul\u003e\n    \u003cp\u003e\u003cem\u003eNot sure if the X21 fits your commute? Tell our team your route and we'll help you decide — every X21 is backed by a 12-month warranty and professional after-sales support.\u003c\/em\u003e\u003c\/p\u003e\n  \u003c\/section\u003e\n\u003c\/article\u003e\n\n    \u003c\/div\u003e\n  \u003c\/main\u003e\n\u003cscript\u003e\n\/* ============================================================\n   X21 — Product description enhancements (vanilla JS, no deps)\n   Progressive: with JS off \/ old browsers, all content and\n   final numbers are already visible in the HTML.\n   ============================================================ *\/\n(function () {\n  'use strict';\n\n  var reduceMotion = window.matchMedia \u0026\u0026\n    window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n  \/* ---------- Ride-mode tabs ---------- *\/\n  function initTabs(root) {\n    var tabs = Array.prototype.slice.call(root.querySelectorAll('[data-x21-tab]'));\n    var panels = Array.prototype.slice.call(root.querySelectorAll('[data-x21-panel]'));\n    if (!tabs.length || !panels.length) return;\n\n    root.classList.add('x21-js-ready');\n\n    function select(tab, moveFocus) {\n      tabs.forEach(function (t) {\n        var active = t === tab;\n        t.setAttribute('aria-selected', active ? 'true' : 'false');\n        t.tabIndex = active ? 0 : -1;\n      });\n      panels.forEach(function (p) {\n        p.hidden = p.id !== tab.getAttribute('aria-controls');\n      });\n      if (moveFocus) tab.focus();\n    }\n\n    tabs.forEach(function (tab, i) {\n      tab.addEventListener('click', function () { select(tab, false); });\n      tab.addEventListener('keydown', function (e) {\n        var idx = null;\n        if (e.key === 'ArrowRight') idx = (i + 1) % tabs.length;\n        else if (e.key === 'ArrowLeft') idx = (i - 1 + tabs.length) % tabs.length;\n        else if (e.key === 'Home') idx = 0;\n        else if (e.key === 'End') idx = tabs.length - 1;\n        if (idx !== null) { e.preventDefault(); select(tabs[idx], true); }\n      });\n    });\n\n    select(tabs[0], false);\n  }\n\n  \/* ---------- Animated counters ---------- *\/\n  function format(value, decimals) {\n    return decimals \u003e 0\n      ? value.toFixed(decimals)\n      : Math.round(value).toLocaleString('en-US');\n  }\n\n  function animateCount(el) {\n    var target = parseFloat(el.getAttribute('data-count'));\n    var decimals = parseInt(el.getAttribute('data-decimals') || '0', 10);\n    if (isNaN(target) || !window.requestAnimationFrame) {\n      el.textContent = format(target, decimals);\n      return;\n    }\n    var duration = 1100, start = null;\n    function frame(ts) {\n      if (start === null) start = ts;\n      var p = Math.min((ts - start) \/ duration, 1);\n      var eased = 1 - Math.pow(1 - p, 3);\n      el.textContent = format(target * eased, decimals);\n      if (p \u003c 1) window.requestAnimationFrame(frame);\n      else el.textContent = format(target, decimals);\n    }\n    window.requestAnimationFrame(frame);\n  }\n\n  \/* ---------- Scroll reveal + counters ---------- *\/\n  function initMotion(root) {\n    if (reduceMotion || !('IntersectionObserver' in window)) return; \/\/ final state already in HTML\n\n    var vh = window.innerHeight || document.documentElement.clientHeight;\n\n    var reveals = Array.prototype.slice.call(root.querySelectorAll('.reveal'));\n    reveals.forEach(function (el) {\n      \/\/ Hide only elements below the fold, so nothing flashes on load\n      if (el.getBoundingClientRect().top \u003e vh * 0.94) el.classList.add('is-waiting');\n    });\n    var revealIO = new IntersectionObserver(function (entries) {\n      entries.forEach(function (en) {\n        if (en.isIntersecting) {\n          en.target.classList.remove('is-waiting');\n          en.target.classList.add('is-inview');\n          revealIO.unobserve(en.target);\n        }\n      });\n    }, { threshold: 0.12, rootMargin: '0px 0px -6% 0px' });\n    reveals.forEach(function (el) { revealIO.observe(el); });\n\n    var counters = Array.prototype.slice.call(root.querySelectorAll('[data-count]'));\n    var countIO = new IntersectionObserver(function (entries) {\n      entries.forEach(function (en) {\n        if (en.isIntersecting) { animateCount(en.target); countIO.unobserve(en.target); }\n      });\n    }, { threshold: 0.4 });\n    counters.forEach(function (el) { countIO.observe(el); });\n  }\n\n  function init() {\n    Array.prototype.forEach.call(\n      document.querySelectorAll('[data-x21-desc]'),\n      function (root) { initTabs(root); initMotion(root); }\n    );\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else { init(); }\n})();\n\u003c\/script\u003e\n\n\u003cstyle\u003e\n\/* Standalone page shell only — omit when merging into Shopify. *\/\n:root {\n  --color-foreground: 18, 18, 18;\n  --color-background: 255, 255, 255;\n  --font-heading-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, \"Segoe UI\", sans-serif;\n  --font-body-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, \"Segoe UI\", sans-serif;\n}\nhtml { -webkit-text-size-adjust: 100%; }\nbody { margin: 0; background: #f3f5f9; }\n.x21-page {\n  max-width: 720px; margin: 0 auto; min-height: 100vh;\n  background: #fff; padding: 36px 34px 48px;\n  box-shadow: 0 0 0 1px rgba(18, 18, 18, 0.05), 0 18px 50px rgba(18, 18, 18, 0.07);\n}\n@media (max-width: 600px) { .x21-page { padding: 20px 16px 36px; } }\n\n\/* ============================================================\n   X21 — Product description styles (scoped to .x21-desc)\n   Shopify Dawn \/ OS 2.0 token-compatible. Safe to merge into\n   base.css: every selector is scoped, nothing touches body.\n   ============================================================ *\/\n.x21-desc {\n  --x21-fg-rgb: var(--color-foreground, 18, 18, 18);\n  --x21-bg-rgb: var(--color-background, 255, 255, 255);\n  --x21-ink: rgb(var(--x21-fg-rgb));\n  --x21-muted: rgba(var(--x21-fg-rgb), 0.72);\n  --x21-line: rgba(var(--x21-fg-rgb), 0.14);\n  --x21-surface: rgba(var(--x21-fg-rgb), 0.04);\n  --x21-accent: #2451e6;\n  --x21-accent-2: #00bfa6;\n  --x21-radius: 18px;\n  color: var(--x21-ink);\n  font-family: var(--font-body-family, -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, \"Segoe UI\", sans-serif);\n  font-size: 16px;\n  line-height: 1.65;\n  overflow-wrap: break-word;\n  container-type: inline-size;\n}\n.x21-desc *,\n.x21-desc *::before,\n.x21-desc *::after { box-sizing: border-box; }\n\n.x21-desc h2,\n.x21-desc h3,\n.x21-desc h4 {\n  font-family: var(--font-heading-family, -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, \"Segoe UI\", sans-serif);\n  color: var(--x21-ink);\n  margin-top: 0;\n}\n.x21-desc h3 { font-size: 22px; line-height: 1.25; letter-spacing: -0.01em; margin-bottom: 14px; }\n.x21-desc h4 { font-size: 16px; line-height: 1.35; margin-bottom: 6px; }\n.x21-desc p { margin: 0 0 14px; }\n.x21-desc ul { margin: 0 0 16px; padding-left: 22px; }\n.x21-desc li { margin-bottom: 8px; }\n.x21-desc hr { border: 0; border-top: 1px solid var(--x21-line); margin: 34px 0 0; }\n.x21-desc :focus-visible { outline: 2px solid var(--x21-accent); outline-offset: 2px; }\n\n.x21-desc .x21-section { margin-top: 38px; }\n.x21-desc .x21-eyebrow {\n  font-size: 11px; font-weight: 700; letter-spacing: 0.16em;\n  text-transform: uppercase; color: var(--x21-accent); margin: 0 0 10px;\n}\n\n\/* --- Hero --- *\/\n.x21-desc .x21-hero {\n  position: relative; overflow: hidden;\n  border: 1px solid var(--x21-line); border-radius: 24px;\n  padding: 30px 26px 26px;\n  background:\n    radial-gradient(120% 140% at 105% -10%, rgba(0, 191, 166, 0.16), rgba(0, 191, 166, 0) 55%),\n    radial-gradient(120% 160% at -10% 110%, rgba(36, 81, 230, 0.14), rgba(36, 81, 230, 0) 55%),\n    var(--x21-surface);\n}\n.x21-desc .x21-hero::after {\n  content: \"\"; position: absolute; width: 260px; height: 260px;\n  right: -120px; top: -130px; border-radius: 50%;\n  border: 1px solid rgba(36, 81, 230, 0.22); pointer-events: none;\n}\n.x21-desc .x21-hero h2 {\n  font-size: 36px; font-size: clamp(30px, 6vw, 42px);\n  line-height: 1.05; letter-spacing: -0.02em; margin-bottom: 14px; max-width: 14ch;\n}\n.x21-desc .x21-lead { font-size: 18px; font-size: clamp(16.5px, 2.6vw, 19px); line-height: 1.5; font-weight: 600; }\n.x21-desc .x21-hero p { color: var(--x21-muted); max-width: 56ch; }\n.x21-desc .x21-hero .x21-lead { color: var(--x21-ink); }\n\n.x21-desc .x21-stats {\n  display: grid; gap: 10px; margin-top: 24px;\n  grid-template-columns: repeat(auto-fit, minmax(min(118px, 100%), 1fr));\n}\n.x21-desc .x21-stat {\n  background: rgba(var(--x21-bg-rgb), 0.82);\n  border: 1px solid var(--x21-line); border-radius: 14px; padding: 13px 14px 11px;\n}\n.x21-desc .x21-stat-value { display: flex; align-items: baseline; gap: 4px; font-size: 28px; font-weight: 800; line-height: 1.05; letter-spacing: -0.02em; }\n.x21-desc .x21-stat-value small { font-size: 13px; font-weight: 700; color: var(--x21-accent); }\n.x21-desc .x21-stat-label { display: block; margin-top: 4px; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--x21-muted); }\n\n\/* --- Feature cards --- *\/\n.x21-desc .x21-grid {\n  display: grid; gap: 12px;\n  grid-template-columns: repeat(auto-fit, minmax(min(190px, 100%), 1fr));\n}\n.x21-desc .x21-card {\n  border: 1px solid var(--x21-line); border-radius: var(--x21-radius);\n  background: rgb(var(--x21-bg-rgb)); padding: 18px;\n  transition: transform 200ms ease, box-shadow 200ms ease;\n}\n@media (hover: hover) and (pointer: fine) {\n  .x21-desc .x21-card:hover {\n    transform: translateY(-3px);\n    box-shadow: 0 12px 28px rgba(var(--x21-fg-rgb), 0.12);\n  }\n}\n.x21-desc .x21-card p { font-size: 14.5px; color: var(--x21-muted); margin: 0; }\n.x21-desc .x21-icon {\n  display: inline-flex; align-items: center; justify-content: center;\n  width: 44px; height: 44px; border-radius: 50%; margin-bottom: 12px;\n  background: linear-gradient(135deg, var(--x21-accent), var(--x21-accent-2)); color: #fff;\n}\n.x21-desc .x21-icon svg {\n  width: 24px; height: 24px; fill: none; stroke: currentColor;\n  stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round;\n}\n\n\/* --- Battery highlight (dark panel) --- *\/\n.x21-desc .x21-battery {\n  margin-top: 38px; border-radius: 24px; padding: 28px 26px; color: #fff;\n  background: linear-gradient(135deg, #0d1220 0%, #16264d 58%, #063f59 100%);\n  overflow: hidden;\n}\n.x21-desc .x21-battery h3 { color: #fff; }\n.x21-desc .x21-battery .x21-eyebrow { color: #7dd3fc; }\n.x21-desc .x21-battery p { color: rgba(255, 255, 255, 0.78); max-width: 54ch; }\n.x21-desc .x21-meter {\n  height: 18px; margin: 20px 10px 16px 0; padding: 3px; position: relative;\n  border: 1px solid rgba(255, 255, 255, 0.4); border-radius: 999px;\n}\n.x21-desc .x21-meter::after {\n  content: \"\"; position: absolute; right: -8px; top: 50%; width: 4px; height: 8px;\n  transform: translateY(-50%); border-radius: 2px; background: rgba(255, 255, 255, 0.55);\n}\n.x21-desc .x21-meter-fill {\n  display: block; width: 84%; height: 100%; border-radius: 999px;\n  background: linear-gradient(90deg, var(--x21-accent-2), #8dffcf);\n  transform-origin: left center; transition: transform 1s ease;\n}\n.x21-desc .reveal.is-waiting .x21-meter-fill { transform: scaleX(0.08); }\n.x21-desc .x21-facts { display: flex; flex-wrap: wrap; gap: 8px; }\n.x21-desc .x21-fact {\n  font-size: 13px; padding: 7px 12px; border-radius: 999px;\n  border: 1px solid rgba(255, 255, 255, 0.18); background: rgba(255, 255, 255, 0.08);\n}\n\n\/* --- Ride-mode tabs (progressive: panels all visible until JS runs) --- *\/\n.x21-desc .x21-tabs { border: 1px solid var(--x21-line); border-radius: var(--x21-radius); padding: 18px; background: rgb(var(--x21-bg-rgb)); }\n.x21-desc .x21-tablist { display: none; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }\n.x21-desc.x21-js-ready .x21-tablist { display: flex; }\n.x21-desc .x21-tab {\n  appearance: none; -webkit-appearance: none; cursor: pointer;\n  font: inherit; font-size: 14px; font-weight: 600;\n  color: var(--x21-ink); background: var(--x21-surface);\n  border: 1px solid var(--x21-line); border-radius: 999px; padding: 8px 16px;\n  transition: background 200ms ease, color 200ms ease, border-color 200ms ease;\n}\n.x21-desc .x21-tab[aria-selected=\"true\"] {\n  background: var(--x21-ink); color: rgb(var(--x21-bg-rgb)); border-color: var(--x21-ink);\n}\n.x21-desc .x21-mode { padding-top: 14px; border-top: 1px solid var(--x21-line); }\n.x21-desc .x21-mode:first-of-type { border-top: 0; padding-top: 0; }\n.x21-desc.x21-js-ready .x21-mode { border-top: 0; padding-top: 0; }\n.x21-desc .x21-mode[hidden] { display: none !important; }\n.x21-desc .x21-mode p { color: var(--x21-muted); margin: 0; }\n.x21-desc .x21-app-note {\n  margin-top: 16px; padding: 6px 0 6px 16px;\n  border-left: 3px solid var(--x21-accent); color: var(--x21-muted);\n}\n.x21-desc .x21-app-note strong { color: var(--x21-ink); }\n\n\/* --- Scenarios + checklist --- *\/\n.x21-desc .x21-scenarios { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }\n.x21-desc .x21-chip {\n  font-size: 13px; font-weight: 600; padding: 7px 13px; border-radius: 999px;\n  background: var(--x21-surface); border: 1px solid var(--x21-line);\n}\n.x21-desc .x21-checklist { list-style: none; padding: 0; margin: 0; }\n.x21-desc .x21-checklist li { position: relative; padding-left: 32px; margin-bottom: 12px; color: var(--x21-muted); }\n.x21-desc .x21-checklist li strong { color: var(--x21-ink); }\n.x21-desc .x21-checklist li::before {\n  content: \"\\2713\"; position: absolute; left: 0; top: 1px;\n  width: 21px; height: 21px; border-radius: 50%;\n  display: inline-flex; align-items: center; justify-content: center;\n  font-size: 12px; font-weight: 800; color: #fff;\n  background: linear-gradient(135deg, var(--x21-accent), var(--x21-accent-2));\n}\n\n\/* --- Specification table --- *\/\n.x21-desc .x21-spec-wrap { border: 1px solid var(--x21-line); border-radius: 16px; overflow: hidden; }\n.x21-desc table { width: 100%; border-collapse: collapse; margin: 0; font-size: 14px; line-height: 1.5; }\n.x21-desc th,\n.x21-desc td { padding: 10px 14px; text-align: left; vertical-align: top; border-top: 1px solid var(--x21-line); }\n.x21-desc tbody tr:first-child th,\n.x21-desc tbody tr:first-child td { border-top: 0; }\n.x21-desc th[scope=\"row\"] { width: 36%; font-weight: 700; background: var(--x21-surface); }\n\n\/* Stacked specs when the CONTAINER is narrow (right-hand column) *\/\n@container (max-width: 520px) {\n  .x21-desc table, .x21-desc tbody, .x21-desc tr,\n  .x21-desc th, .x21-desc td { display: block; width: 100%; }\n  .x21-desc tr { padding: 10px 14px; border-top: 1px solid var(--x21-line); }\n  .x21-desc tbody tr:first-child { border-top: 0; }\n  .x21-desc th, .x21-desc td { border-top: 0; padding: 0; background: none; }\n  .x21-desc th[scope=\"row\"] { width: 100%; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--x21-muted); }\n  .x21-desc td { padding-top: 2px; }\n  .x21-desc .x21-hero { padding: 22px 18px 20px; }\n  .x21-desc .x21-battery { padding: 22px 18px; }\n}\n\/* Same stacking via viewport for browsers without container queries *\/\n@media (max-width: 520px) {\n  .x21-desc { font-size: 15px; }\n  .x21-desc h3 { font-size: 20px; }\n  .x21-desc table, .x21-desc tbody, .x21-desc tr,\n  .x21-desc th, .x21-desc td { display: block; width: 100%; }\n  .x21-desc tr { padding: 10px 14px; border-top: 1px solid var(--x21-line); }\n  .x21-desc tbody tr:first-child { border-top: 0; }\n  .x21-desc th, .x21-desc td { border-top: 0; padding: 0; background: none; }\n  .x21-desc th[scope=\"row\"] { width: 100%; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--x21-muted); }\n  .x21-desc td { padding-top: 2px; }\n}\n\n\/* --- Scroll reveal (JS adds .is-waiting only below the fold) --- *\/\n.x21-desc .reveal { transition: opacity 600ms ease, transform 600ms ease; }\n.x21-desc .reveal.is-waiting { opacity: 0; transform: translateY(16px); }\n.x21-desc .reveal.is-inview { opacity: 1; transform: none; }\n\n@media (prefers-reduced-motion: reduce) {\n  .x21-desc .reveal, .x21-desc .x21-card,\n  .x21-desc .x21-tab, .x21-desc .x21-meter-fill { transition: none !important; }\n  .x21-desc .reveal.is-waiting { opacity: 1; transform: none; }\n  .x21-desc .reveal.is-waiting .x21-meter-fill { transform: none; }\n}\n\n@media print {\n  .x21-desc .x21-tablist { display: none !important; }\n  .x21-desc .x21-mode[hidden] { display: block !important; }\n  .x21-desc .reveal { opacity: 1 !important; transform: none !important; }\n}\n\u003c\/style\u003e\n\n\n\u003c\/body\u003e","brand":"sfpnest","offers":[{"title":"Default Title","offer_id":54237253959974,"sku":null,"price":359.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1030\/5562\/2438\/files\/ElectricScooter350W10InchEscooter32KM_5.jpg?v=1793266341","url":"https:\/\/sfpnest.com\/products\/electric-scooter-for-adults-350w-motor-36v-10-4ah-removable-battery-10-pneumatic-tires-up-to-20-mph-28-mile-range-foldable-commuter-e-scooter","provider":"sfpnest","version":"1.0","type":"link"}