{"product_id":"obdstar-ecu-master","title":"OBDSTAR ECU MASTER - Professional ECU Flasher: Car, Motorcycle, HD Truck Cloning","description":"\n\u003c!-- ============================================================\n     OBDSTAR ECU MASTER - Shopify Product Description (English\/LTR)\n     keyshop-online.com  |  v3\n     ============================================================ --\u003e\n\n\u003cdiv class=\"ks-ecum ks-ecum--en\" dir=\"ltr\" lang=\"en\"\u003e\n\n  \u003c!-- ===== HERO ===== --\u003e\n  \u003csection class=\"ks-ecum__hero\"\u003e\n    \u003cdiv class=\"ks-ecum__hero-bg\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"ks-ecum__hero-inner\"\u003e\n      \u003ch2 class=\"ks-ecum__hero-title\"\u003eECU MASTER\u003c\/h2\u003e\n      \u003cp class=\"ks-ecum__hero-sub\"\u003eOBDSTAR's professional ECU Flasher: clone, read, write and repair modules.\u003cbr\u003ePassenger cars, EVs, motorcycles, trucks and tractors, plus crash resets.\u003c\/p\u003e\n\n      \u003c!-- HERO VIDEO --\u003e\n      \u003cdiv class=\"ks-ecum__vwrap\" data-ks-role=\"heroVideo\"\u003e\n        \u003cdiv class=\"ks-ecum__vframe\"\u003e\n          \u003ciframe data-ks-role=\"heroIframe\" src=\"https:\/\/www.youtube.com\/embed\/ili6gRUcw9A?autoplay=1\u0026amp;mute=1\u0026amp;loop=1\u0026amp;playlist=ili6gRUcw9A\u0026amp;controls=0\u0026amp;rel=0\u0026amp;showinfo=0\u0026amp;iv_load_policy=3\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;enablejsapi=1\" title=\"OBDSTAR ECU MASTER in action\" frameborder=\"0\" allow=\"autoplay; encrypted-media; picture-in-picture\" allowfullscreen\u003e\u003c\/iframe\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__vbar\"\u003e\n          \u003cspan class=\"ks-ecum__vlive\"\u003e\u003cspan class=\"ks-ecum__vdot\"\u003e\u003c\/span\u003eSee it in action\u003c\/span\u003e\n          \u003cbutton type=\"button\" class=\"ks-ecum__vbtn\" data-ks-role=\"unmute\" data-muted=\"1\" aria-label=\"Turn sound on\"\u003e\n            \u003csvg class=\"ks-ecum__vico ks-ecum__vico--off\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M11 5L6 9H2v6h4l5 4V5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M23 9l-6 6M17 9l6 6\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n            \u003csvg class=\"ks-ecum__vico ks-ecum__vico--on\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M11 5L6 9H2v6h4l5 4V5z\"\u003e\u003c\/path\u003e\u003cpath d=\"M19.07 4.93a10 10 0 010 14.14M15.54 8.46a5 5 0 010 7.07\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n            \u003cspan data-ks-role=\"unmuteLabel\"\u003eSound on\u003c\/span\u003e\n          \u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cul class=\"ks-ecum__hero-bullets\"\u003e\n        \u003cli\u003e\n\u003cspan class=\"ks-ecum__check\"\u003e✓\u003c\/span\u003e Clones ECU\/TCM\/BCM, so you can fit a junkyard module instead of buying new\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"ks-ecum__check\"\u003e✓\u003c\/span\u003e Reads an open Master level memory file, with no outside vendor in the loop\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"ks-ecum__check\"\u003e✓\u003c\/span\u003e CAN-FD, MP001 and P003+ already inside. Nothing extra to buy\u003c\/li\u003e\n      \u003c\/ul\u003e\n\n      \u003cdiv class=\"ks-ecum__hero-note\"\u003e\n        \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M12 9v4M12 17h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n        \u003cspan\u003ePC based tool (Windows 10 and up). The software is split into 4 packages: \u003cstrong\u003eA \/ B \/ C \/ D\u003c\/strong\u003e. Buy only what you need.\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- ===== WHY \/ VALUE ===== --\u003e\n  \u003csection class=\"ks-ecum__section\"\u003e\n    \u003ch3 class=\"ks-ecum__h3\"\u003eWhy buy this tool\u003c\/h3\u003e\n    \u003cdiv class=\"ks-ecum__why\"\u003e\n      \u003cdiv class=\"ks-ecum__why-card\"\u003e\n        \u003cdiv class=\"ks-ecum__why-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M12 2v20M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n        \u003ch4\u003eSaves money on every module\u003c\/h4\u003e\n        \u003cp\u003eOEM software often demands a brand new module. Here you take a used one from a breaker, clone the data onto it and it runs. That price gap stays with you or your customer.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ks-ecum__why-card\"\u003e\n        \u003cdiv class=\"ks-ecum__why-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 2v6h6M16 13H8M16 17H8M10 9H8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n        \u003ch4\u003eSaves cars with no parts left\u003c\/h4\u003e\n        \u003cp\u003eOn older vehicles the manufacturer sometimes has no new module in stock at all. Cloning a used one is occasionally the only route back onto the road instead of the scrapyard.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ks-ecum__why-card\"\u003e\n        \u003cdiv class=\"ks-ecum__why-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M12 2l3 7h7l-5.5 4.5 2 7L12 16l-6.5 4.5 2-7L2 9h7z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n        \u003ch4\u003eOpen file, no vendor lock-in\u003c\/h4\u003e\n        \u003cp\u003eSlave tools (AutoTuner, Alientech, Magic) tie you to one master. Here you read the unencrypted memory file and do what you want with it, yourself or through any tuner you pick.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ks-ecum__why-card\"\u003e\n        \u003cdiv class=\"ks-ecum__why-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003crect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"\u003e\u003c\/rect\u003e\u003cpath d=\"M7 11V7a5 5 0 0110 0v4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n        \u003ch4\u003eA BSI\/BCM list you rarely find elsewhere\u003c\/h4\u003e\n        \u003cp\u003eOBDSTAR came up through the locksmith trade and it shows. Its body and security module coverage runs wider than most tuning tools that only chase engine and gearbox.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- ===== CONNECTION MODES + DEVICE VISUAL ===== --\u003e\n  \u003csection class=\"ks-ecum__section ks-ecum__section--modes\"\u003e\n    \u003ch3 class=\"ks-ecum__h3\"\u003eFour connection modes\u003c\/h3\u003e\n    \u003cp class=\"ks-ecum__sub-text\"\u003eFrom the most convenient down to deep chip level access. The tool moves between them depending on what the module allows.\u003c\/p\u003e\n    \u003cdiv class=\"ks-ecum__modes-wrap\"\u003e\n      \u003cdiv class=\"ks-ecum__modes-visual\"\u003e\n        \u003cdiv class=\"ks-ecum__hero-anim\" aria-label=\"OBDSTAR ECU MASTER device\"\u003e\n  \u003csvg viewbox=\"0 0 480 360\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\"\u003e\n    \u003cdefs\u003e\n      \u003clineargradient id=\"emBody\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"\u003e\n        \u003cstop offset=\"0\" stop-color=\"#3a3f45\"\u003e\u003c\/stop\u003e\u003cstop offset=\"0.5\" stop-color=\"#22262b\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#15181c\"\u003e\u003c\/stop\u003e\n      \u003c\/lineargradient\u003e\n      \u003clineargradient id=\"emFace\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"\u003e\n        \u003cstop offset=\"0\" stop-color=\"#1a1d21\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#0c0e10\"\u003e\u003c\/stop\u003e\n      \u003c\/lineargradient\u003e\n      \u003clineargradient id=\"emRubber\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"\u003e\n        \u003cstop offset=\"0\" stop-color=\"#4a4f56\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#2a2e33\"\u003e\u003c\/stop\u003e\n      \u003c\/lineargradient\u003e\n      \u003clineargradient id=\"emMetal\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"\u003e\n        \u003cstop offset=\"0\" stop-color=\"#e8ecef\"\u003e\u003c\/stop\u003e\u003cstop offset=\"0.5\" stop-color=\"#b6bdc4\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#8a929a\"\u003e\u003c\/stop\u003e\n      \u003c\/lineargradient\u003e\n      \u003cradialgradient id=\"emGlow\" cx=\"0.5\" cy=\"0.5\" r=\"0.5\"\u003e\n        \u003cstop offset=\"0\" stop-color=\"#ff6b1a\" stop-opacity=\"0.28\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#ff6b1a\" stop-opacity=\"0\"\u003e\u003c\/stop\u003e\n      \u003c\/radialgradient\u003e\n      \u003cfilter id=\"emShadow\" x=\"-30%\" y=\"-30%\" width=\"160%\" height=\"160%\"\u003e\n        \u003cfedropshadow dx=\"0\" dy=\"10\" stddeviation=\"12\" flood-color=\"#000\" flood-opacity=\"0.5\"\u003e\u003c\/fedropshadow\u003e\n      \u003c\/filter\u003e\n    \u003c\/defs\u003e\n\n    \u003cellipse cx=\"240\" cy=\"185\" rx=\"220\" ry=\"150\" fill=\"url(#emGlow)\"\u003e\n      \u003canimate attributename=\"opacity\" values=\"0.7;1;0.7\" dur=\"5s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\n    \u003c\/ellipse\u003e\n\n    \u003cg class=\"em-anim-device\" filter=\"url(#emShadow)\"\u003e\n      \u003c!-- rugged outer rubber housing --\u003e\n      \u003crect x=\"70\" y=\"70\" width=\"340\" height=\"220\" rx=\"34\" fill=\"url(#emRubber)\"\u003e\u003c\/rect\u003e\n      \u003c!-- corner bumpers --\u003e\n      \u003ccircle cx=\"104\" cy=\"104\" r=\"12\" fill=\"#2a2e33\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"376\" cy=\"104\" r=\"12\" fill=\"#2a2e33\"\u003e\u003c\/circle\u003e\n      \u003ccircle cx=\"104\" cy=\"256\" r=\"12\" fill=\"#2a2e33\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"376\" cy=\"256\" r=\"12\" fill=\"#2a2e33\"\u003e\u003c\/circle\u003e\n      \u003ccircle cx=\"104\" cy=\"104\" r=\"5\" fill=\"#15181c\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"376\" cy=\"104\" r=\"5\" fill=\"#15181c\"\u003e\u003c\/circle\u003e\n      \u003ccircle cx=\"104\" cy=\"256\" r=\"5\" fill=\"#15181c\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"376\" cy=\"256\" r=\"5\" fill=\"#15181c\"\u003e\u003c\/circle\u003e\n      \u003c!-- side grip ridges --\u003e\n      \u003crect x=\"86\" y=\"150\" width=\"10\" height=\"60\" rx=\"5\" fill=\"#3a3f45\"\u003e\u003c\/rect\u003e\n      \u003crect x=\"384\" y=\"150\" width=\"10\" height=\"60\" rx=\"5\" fill=\"#3a3f45\"\u003e\u003c\/rect\u003e\n      \u003c!-- main body --\u003e\n      \u003crect x=\"112\" y=\"92\" width=\"256\" height=\"176\" rx=\"18\" fill=\"url(#emBody)\"\u003e\u003c\/rect\u003e\n      \u003c!-- black glossy face --\u003e\n      \u003crect x=\"128\" y=\"104\" width=\"224\" height=\"128\" rx=\"12\" fill=\"url(#emFace)\"\u003e\u003c\/rect\u003e\n\n      \u003c!-- OBDSTAR logo --\u003e\n      \u003ctext x=\"152\" y=\"132\" fill=\"#ff3b30\" font-family=\"Arial,sans-serif\" font-size=\"13\" font-weight=\"800\" font-style=\"italic\"\u003eOBDSTAR\u003c\/text\u003e\n\n      \u003c!-- indicator lights --\u003e\n      \u003cg font-family=\"Arial\" font-size=\"7\" fill=\"#c9d1d9\"\u003e\n        \u003ccircle cx=\"230\" cy=\"126\" r=\"4\" fill=\"#3fb950\"\u003e\u003canimate attributename=\"opacity\" values=\"1;0.3;1\" dur=\"1.5s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\u003c\/circle\u003e\n        \u003ctext x=\"242\" y=\"129\"\u003eDC\u003c\/text\u003e\n        \u003ccircle cx=\"230\" cy=\"140\" r=\"4\" fill=\"#4ec5e3\"\u003e\u003canimate attributename=\"opacity\" values=\"0.3;1;0.3\" dur=\"1.2s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\u003c\/circle\u003e\n        \u003ctext x=\"242\" y=\"143\"\u003eUSB\u003c\/text\u003e\n        \u003ccircle cx=\"230\" cy=\"154\" r=\"4\" fill=\"#ff6b1a\"\u003e\u003canimate attributename=\"opacity\" values=\"1;0.3;1\" dur=\"0.9s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\u003c\/circle\u003e\n        \u003ctext x=\"242\" y=\"157\"\u003eCOMM\u003c\/text\u003e\n        \u003ccircle cx=\"230\" cy=\"168\" r=\"4\" fill=\"#f0d000\"\u003e\u003canimate attributename=\"opacity\" values=\"0.4;1;0.4\" dur=\"1.7s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\u003c\/circle\u003e\n        \u003ctext x=\"242\" y=\"171\"\u003eIG\u003c\/text\u003e\n      \u003c\/g\u003e\n\n      \u003c!-- ECU MASTER nameplate --\u003e\n      \u003crect x=\"196\" y=\"186\" width=\"112\" height=\"20\" rx=\"10\" fill=\"#1a1d21\" stroke=\"#ff3b30\" stroke-width=\"1\"\u003e\u003c\/rect\u003e\n      \u003ctext x=\"252\" y=\"200\" fill=\"#ff3b30\" font-family=\"Arial,sans-serif\" font-size=\"11\" font-weight=\"800\" text-anchor=\"middle\" letter-spacing=\"1\"\u003eECU MASTER\u003c\/text\u003e\n      \u003ctext x=\"180\" y=\"201\" fill=\"#8a929a\" font-family=\"Arial\" font-size=\"12\"\u003e‹\u003c\/text\u003e\n      \u003ctext x=\"320\" y=\"201\" fill=\"#8a929a\" font-family=\"Arial\" font-size=\"12\"\u003e›\u003c\/text\u003e\n\n      \u003c!-- port labels on face --\u003e\n      \u003cg font-family=\"Arial\" font-size=\"8\" fill=\"#8a929a\"\u003e\n        \u003ccircle cx=\"332\" cy=\"150\" r=\"7\" fill=\"none\" stroke=\"#8a929a\" stroke-width=\"1\"\u003e\u003c\/circle\u003e\u003ctext x=\"329\" y=\"153\"\u003eC2\u003c\/text\u003e\n        \u003ccircle cx=\"332\" cy=\"214\" r=\"7\" fill=\"none\" stroke=\"#8a929a\" stroke-width=\"1\"\u003e\u003c\/circle\u003e\u003ctext x=\"329\" y=\"217\"\u003eC3\u003c\/text\u003e\n        \u003ccircle cx=\"196\" cy=\"214\" r=\"7\" fill=\"none\" stroke=\"#8a929a\" stroke-width=\"1\"\u003e\u003c\/circle\u003e\u003ctext x=\"193\" y=\"217\"\u003eC4\u003c\/text\u003e\n        \u003ccircle cx=\"150\" cy=\"160\" r=\"6\" fill=\"none\" stroke=\"#8a929a\" stroke-width=\"0.8\"\u003e\u003c\/circle\u003e\n        \u003ccircle cx=\"150\" cy=\"182\" r=\"6\" fill=\"none\" stroke=\"#8a929a\" stroke-width=\"0.8\"\u003e\u003c\/circle\u003e\n      \u003c\/g\u003e\n\n      \u003c!-- front metal connector ports (C3\/C4 DB connectors at bottom edge) --\u003e\n      \u003cg\u003e\n        \u003crect x=\"150\" y=\"256\" width=\"70\" height=\"26\" rx=\"3\" fill=\"url(#emMetal)\" stroke=\"#6b7178\" stroke-width=\"1\"\u003e\u003c\/rect\u003e\n        \u003crect x=\"158\" y=\"262\" width=\"54\" height=\"8\" rx=\"2\" fill=\"#4a4f56\"\u003e\u003c\/rect\u003e\n        \u003crect x=\"248\" y=\"256\" width=\"70\" height=\"26\" rx=\"3\" fill=\"url(#emMetal)\" stroke=\"#6b7178\" stroke-width=\"1\"\u003e\u003c\/rect\u003e\n        \u003crect x=\"256\" y=\"262\" width=\"54\" height=\"8\" rx=\"2\" fill=\"#4a4f56\"\u003e\u003c\/rect\u003e\n        \u003c!-- shimmer --\u003e\n        \u003crect x=\"150\" y=\"256\" width=\"30\" height=\"26\" fill=\"#fff\" opacity=\"0\"\u003e\n          \u003canimate attributename=\"opacity\" values=\"0;0.4;0\" dur=\"2.4s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\n          \u003canimate attributename=\"x\" values=\"150;290;150\" dur=\"2.4s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\n        \u003c\/rect\u003e\n      \u003c\/g\u003e\n    \u003c\/g\u003e\n  \u003c\/svg\u003e\n\u003c\/div\u003e\n\n      \u003c\/div\u003e\n      \u003cdiv class=\"ks-ecum__modes\"\u003e\n        \u003cdiv class=\"ks-ecum__mode\"\u003e\n          \u003cdiv class=\"ks-ecum__mode-head\"\u003e\u003cspan class=\"ks-ecum__mode-tag ks-ecum__mode-tag--obd\"\u003eOBD\u003c\/span\u003e\u003c\/div\u003e\n          \u003cp\u003eWork straight through the diagnostic port without pulling the module. The easiest method, but you need stable voltage and the vehicle network awake.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__mode\"\u003e\n          \u003cdiv class=\"ks-ecum__mode-head\"\u003e\u003cspan class=\"ks-ecum__mode-tag ks-ecum__mode-tag--bench\"\u003eBENCH\u003c\/span\u003e\u003c\/div\u003e\n          \u003cp\u003eTake the module out of the car and connect directly to the connector pins on the bench. This is the most commonly used method when OBD is not an option.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__mode\"\u003e\n          \u003cdiv class=\"ks-ecum__mode-head\"\u003e\u003cspan class=\"ks-ecum__mode-tag ks-ecum__mode-tag--boot\"\u003eBOOT\u003c\/span\u003e\u003c\/div\u003e\n          \u003cp\u003eOpen the module cover and connect to the chip's BOOT point. Pull the signal into programming mode and read or write over K-line or CAN.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__mode\"\u003e\n          \u003cdiv class=\"ks-ecum__mode-head\"\u003e\u003cspan class=\"ks-ecum__mode-tag ks-ecum__mode-tag--jtag\"\u003eJTAG\/BDM\u003c\/span\u003e\u003c\/div\u003e\n          \u003cp\u003eDirect low level access to the chip through the debug interface. This is what is left when neither OBD nor BENCH will talk.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- ===== PACKAGES ===== --\u003e\n  \u003csection class=\"ks-ecum__section\"\u003e\n    \u003ch3 class=\"ks-ecum__h3\"\u003eFour software packages, pick what you need\u003c\/h3\u003e\n    \u003cp class=\"ks-ecum__sub-text\"\u003eBuy one package, a combination, or all of them (Full Version). The hardware is the same either way, the license is what opens the software.\u003c\/p\u003e\n    \u003cdiv class=\"ks-ecum__pkgs\"\u003e\n      \u003cdiv class=\"ks-ecum__pkg\"\u003e\n        \u003cspan class=\"ks-ecum__pkg-ghost\" aria-hidden=\"true\"\u003eA\u003c\/span\u003e\n        \u003cspan class=\"ks-ecum__pkg-tag\"\u003ePackage A\u003c\/span\u003e\n        \u003cstrong class=\"ks-ecum__pkg-name\"\u003ePassenger car and EV\u003c\/strong\u003e\n        \u003cp class=\"ks-ecum__pkg-desc\"\u003eCloning and repair of ECM, TCM, BODY\/BCM and BMS\/VCU\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ks-ecum__pkg\"\u003e\n        \u003cspan class=\"ks-ecum__pkg-ghost\" aria-hidden=\"true\"\u003eB\u003c\/span\u003e\n        \u003cspan class=\"ks-ecum__pkg-tag\"\u003ePackage B\u003c\/span\u003e\n        \u003cstrong class=\"ks-ecum__pkg-name\"\u003eMotorcycles\u003c\/strong\u003e\n        \u003cp class=\"ks-ecum__pkg-desc\"\u003eMotorcycle ECM cloning and programming, dedicated package\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ks-ecum__pkg\"\u003e\n        \u003cspan class=\"ks-ecum__pkg-ghost\" aria-hidden=\"true\"\u003eC\u003c\/span\u003e\n        \u003cspan class=\"ks-ecum__pkg-tag\"\u003ePackage C\u003c\/span\u003e\n        \u003cstrong class=\"ks-ecum__pkg-name\"\u003eTrucks and tractors\u003c\/strong\u003e\n        \u003cp class=\"ks-ecum__pkg-desc\"\u003eECM, TCM and BCM for commercial and heavy diesel vehicles\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ks-ecum__pkg\"\u003e\n        \u003cspan class=\"ks-ecum__pkg-ghost\" aria-hidden=\"true\"\u003eD\u003c\/span\u003e\n        \u003cspan class=\"ks-ecum__pkg-tag\"\u003ePackage D\u003c\/span\u003e\n        \u003cstrong class=\"ks-ecum__pkg-name\"\u003eCrash reset\u003c\/strong\u003e\n        \u003cp class=\"ks-ecum__pkg-desc\"\u003eAirbag, Battery Reset and SAS (steering angle)\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- ===== COMING SOON: MG1\/MD1 UNLOCK (collapsible) ===== --\u003e\n  \u003csection class=\"ks-ecum__section ks-ecum__section--unlock\"\u003e\n    \u003cdiv class=\"ks-ecum__unlock\"\u003e\n      \u003cbutton type=\"button\" class=\"ks-ecum__unlock-toggle\" data-ks-role=\"unlockToggle\" aria-expanded=\"false\"\u003e\n        \u003cspan class=\"ks-ecum__unlock-left\"\u003e\n          \u003cspan class=\"ks-ecum__soon\"\u003e\u003cspan class=\"ks-ecum__soon-dot\"\u003e\u003c\/span\u003eComing soon\u003c\/span\u003e\n          \u003cspan class=\"ks-ecum__unlock-title\"\u003eUnlocking locked Bosch MG1 \/ MD1 ECUs\u003c\/span\u003e\n          \u003cspan class=\"ks-ecum__unlock-teaser\"\u003eOBDSTAR has announced local unlocking for 6 locked MG1\/MD1 ECUs. Click for the full details.\u003c\/span\u003e\n        \u003c\/span\u003e\n        \u003cspan class=\"ks-ecum__unlock-arr\"\u003e+\u003c\/span\u003e\n      \u003c\/button\u003e\n\n      \u003cdiv class=\"ks-ecum__unlock-body\"\u003e\n        \u003cp\u003e\n          From mid 2020 Bosch built much stronger security into \u003cstrong\u003eMG1 and MD1\u003c\/strong\u003e ECUs, the ones sitting in a huge share of today's BMW, Mercedes, VW Group, Ford, Stellantis and Isuzu vehicles.\n          A programmer can still talk to the ECU, but the protected calibration area is simply shut. Without unlocking it you cannot read the original file and you cannot write a modified one.\n        \u003c\/p\u003e\n        \u003cp\u003e\n          Until now the answer was to pull the ECU out, ship it to a specialist unlock service abroad (AutoTuner, FEMTO and similar), wait a few days and get it back.\n          That costs shipping, it costs vehicle downtime, and there is always the risk the module gets lost or damaged on the way.\n        \u003c\/p\u003e\n\n        \u003cdiv class=\"ks-ecum__unlock-flow\"\u003e\n          \u003cdiv class=\"ks-ecum__flow-col ks-ecum__flow-col--old\"\u003e\n            \u003cdiv class=\"ks-ecum__flow-title\"\u003eHow it works today\u003c\/div\u003e\n            \u003col class=\"ks-ecum__flow-list\"\u003e\n              \u003cli\u003eRemove the ECU from the car\u003c\/li\u003e\n              \u003cli\u003eShip it to an unlock service abroad\u003c\/li\u003e\n              \u003cli\u003eWait several days\u003c\/li\u003e\n              \u003cli\u003eGet it back, only then start work\u003c\/li\u003e\n            \u003c\/ol\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__flow-arrow\"\u003e\n            \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\u003e\u003cpath d=\"M5 12h14M12 5l7 7-7 7\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__flow-col ks-ecum__flow-col--new\"\u003e\n            \u003cdiv class=\"ks-ecum__flow-title\"\u003eWhat this function promises\u003c\/div\u003e\n            \u003col class=\"ks-ecum__flow-list\"\u003e\n              \u003cli\u003eRemove the ECU\u003c\/li\u003e\n              \u003cli\u003eUnlock it on your own bench\u003c\/li\u003e\n              \u003cli\u003eRead, edit and write\u003c\/li\u003e\n              \u003cli\u003eBack in the car the same day\u003c\/li\u003e\n            \u003c\/ol\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003ch4 class=\"ks-ecum__h4\"\u003eThe ECUs announced for the first wave\u003c\/h4\u003e\n        \u003cdiv class=\"ks-ecum__ecu-grid\"\u003e\n          \u003cdiv class=\"ks-ecum__ecu\"\u003e\n\u003cstrong\u003eBosch MD1CP032\u003c\/strong\u003e\u003cspan\u003eBMW B57 • TC299\u003c\/span\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__ecu\"\u003e\n\u003cstrong\u003eBosch MG1CS024\u003c\/strong\u003e\u003cspan\u003eBMW B48\/B58 • TC298\u003c\/span\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__ecu\"\u003e\n\u003cstrong\u003eBosch MG1CS201\u003c\/strong\u003e\u003cspan\u003eBMW B48\/B58 • TC298\u003c\/span\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__ecu\"\u003e\n\u003cstrong\u003eBosch MD1CS069\u003c\/strong\u003e\u003cspan\u003eFCA • TC299\u003c\/span\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__ecu\"\u003e\n\u003cstrong\u003eBosch MD1CP006\u003c\/strong\u003e\u003cspan\u003eFord • TC298\u003c\/span\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__ecu\"\u003e\n\u003cstrong\u003eBosch MD1CS089\u003c\/strong\u003e\u003cspan\u003eISUZU and others • TC299 • Package C only\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cp class=\"ks-ecum__mini-note\"\u003eOBDSTAR says more models are on the way.\u003c\/p\u003e\n\n        \u003cdiv class=\"ks-ecum__req\"\u003e\n          \u003cdiv class=\"ks-ecum__req-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"10\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 16v-4M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n          \u003cdiv\u003e\n            \u003cstrong\u003eIf you are buying because of this function, read this first:\u003c\/strong\u003e it has been \u003cstrong\u003eannounced but not released yet\u003c\/strong\u003e. It will arrive in a software update,\n            and OBDSTAR notes that updates vary by product configuration. It also \u003cstrong\u003erequires the RH850\/V850 adapter kit (C4-06 adapter)\u003c\/strong\u003e, which is sold separately.\n            We will update this page the moment it actually ships.\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"ks-ecum__note-box\"\u003e\n          \u003cstrong\u003eWhat about locksmiths?\u003c\/strong\u003e The main win here is for tuning, no argument. But ECU replacement and cloning are everyday immobilizer jobs,\n          and as newer MG1\/MD1 units get more heavily protected, local unlocking could make some of those replacement jobs possible without sending the module anywhere.\n          It depends on the ECU family and the type of cloning: some modules can be handled through EEPROM or MCU data regardless, others need access to protected flash first.\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- ===== TABS ===== --\u003e\n  \u003csection class=\"ks-ecum__section\"\u003e\n    \u003cdiv class=\"ks-ecum__tabs-wrap\"\u003e\n      \u003cdiv class=\"ks-ecum__tabnav\" data-ks-role=\"tabnav\"\u003e\n        \u003cspan class=\"ks-ecum__tabnav-hint\"\u003e\n          \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M8 7l-4 5 4 5M16 7l4 5-4 5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n          Drag or scroll for more tabs\n        \u003c\/span\u003e\n        \u003cdiv class=\"ks-ecum__tabnav-track\" data-ks-role=\"tstrack\" role=\"scrollbar\" aria-label=\"Drag or scroll for more tabs\" tabindex=\"0\"\u003e\n          \u003cdiv class=\"ks-ecum__tabnav-thumb\" data-ks-role=\"tsthumb\"\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"ks-ecum__tabs-shell\"\u003e\n        \u003cdiv class=\"ks-ecum__tabs\" data-ks-role=\"tabs\"\u003e\n        \u003cbutton class=\"ks-ecum__tab ks-ecum__tab--active\" data-ks-tab=\"desc\"\u003eDescription\u003c\/button\u003e\n        \u003cbutton class=\"ks-ecum__tab\" data-ks-tab=\"coverage\"\u003eCoverage Table\u003c\/button\u003e\n        \u003cbutton class=\"ks-ecum__tab\" data-ks-tab=\"compare\"\u003eComparison\u003c\/button\u003e\n        \u003cbutton class=\"ks-ecum__tab\" data-ks-tab=\"specs\"\u003eSpecs\u003c\/button\u003e\n        \u003cbutton class=\"ks-ecum__tab\" data-ks-tab=\"kit\"\u003eWhat's Included\u003c\/button\u003e\n        \u003cbutton class=\"ks-ecum__tab\" data-ks-tab=\"video\"\u003eVideos\u003c\/button\u003e\n        \u003cbutton class=\"ks-ecum__tab\" data-ks-tab=\"downloads\"\u003eDownloads\u003c\/button\u003e\n        \u003cbutton class=\"ks-ecum__tab\" data-ks-tab=\"faq\"\u003eFAQ\u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- TAB: DESCRIPTION --\u003e\n    \u003cdiv class=\"ks-ecum__tab-content ks-ecum__tab-content--active\" data-ks-panel=\"desc\"\u003e\n      \u003cdiv class=\"ks-ecum__panel\"\u003e\n        \u003ch3 class=\"ks-ecum__h3\"\u003eWhat ECU MASTER is\u003c\/h3\u003e\n        \u003cp\u003e\n          The \u003cstrong\u003eOBDSTAR ECU MASTER\u003c\/strong\u003e is OBDSTAR's first professional ECU Flasher that runs off a computer.\n          It is built for cloning, reading, writing and repairing engine (ECM), transmission (TCM) and body (BCM\/BSI) modules,\n          across a wide range of passenger cars, EVs, motorcycles and heavy commercial vehicles: trucks, tractors and off-highway equipment.\n        \u003c\/p\u003e\n        \u003cp\u003e\n          It works in \u003cstrong\u003eOBD, BENCH and JTAG\/BDM\u003c\/strong\u003e, and ships with \u003cstrong\u003eCAN-FD, MP001 and P003+ built into the unit\u003c\/strong\u003e.\n          For most jobs that means no separate external adapters to buy.\n        \u003c\/p\u003e\n\n        \u003ch4 class=\"ks-ecum__h4\"\u003eTwo ways it pays for itself\u003c\/h4\u003e\n        \u003cul class=\"ks-ecum__list\"\u003e\n          \u003cli\u003e\n\u003cstrong\u003eModule cloning:\u003c\/strong\u003e read the data off the original module, write it to a replacement, done. A cheap, fast answer to ECU, TCM and BCM faults.\u003c\/li\u003e\n          \u003cli\u003e\n\u003cstrong\u003eMaster level chiptuning:\u003c\/strong\u003e once you hold the open memory file, performance work is on the table. Do it yourself or through any tuner, with nobody locking you in.\u003c\/li\u003e\n        \u003c\/ul\u003e\n\n        \u003cdiv class=\"ks-ecum__highlight\"\u003e\n          \u003cstrong\u003eNot only cloning and tuning.\u003c\/strong\u003e Package D adds airbag reset, Battery Reset and steering angle (SAS) repair, and a large share of modules also carry \u003cstrong\u003eIMMO OFF\u003c\/strong\u003e and Checksum. That is what turns an ordinary tuning tool into a full service platform.\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"ks-ecum__req\"\u003e\n          \u003cdiv class=\"ks-ecum__req-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003ccircle cx=\"12\" cy=\"12\" r=\"10\"\u003e\u003c\/circle\u003e\u003cpath d=\"M12 16v-4M12 8h.01\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n          \u003cdiv\u003e\n            \u003cstrong\u003eA word about power:\u003c\/strong\u003e some modules draw serious current, so for bench work use a regulated adjustable power supply rather than the charger in the box.\n            The unit handles up to \u003cstrong\u003e26V \/ 5A\u003c\/strong\u003e. Set the voltage according to each module's operation guide.\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- TAB: COVERAGE --\u003e\n    \u003cdiv class=\"ks-ecum__tab-content\" data-ks-panel=\"coverage\"\u003e\n      \u003cdiv class=\"ks-ecum__panel\"\u003e\n        \u003ch3 class=\"ks-ecum__h3\"\u003eFull coverage table\u003c\/h3\u003e\n        \u003cp class=\"ks-ecum__sub-text\"\u003ePick a software package, then a category. The search box filters every category inside the package you selected. \u003cstrong\u003eFor reference only, subject to software version.\u003c\/strong\u003e\u003c\/p\u003e\n\n        \u003cdiv class=\"ks-ecum__pkg-toggle\" data-ks-role=\"pkgtoggle\"\u003e\n          \u003cbutton class=\"ks-ecum__pkg-btn ks-ecum__pkg-btn--active\" data-ks-pkg=\"A\"\u003eA · Passenger Car\u003c\/button\u003e\n          \u003cbutton class=\"ks-ecum__pkg-btn\" data-ks-pkg=\"B\"\u003eB · Motorcycle\u003c\/button\u003e\n          \u003cbutton class=\"ks-ecum__pkg-btn\" data-ks-pkg=\"C\"\u003eC · Heavy Duty\u003c\/button\u003e\n          \u003cbutton class=\"ks-ecum__pkg-btn\" data-ks-pkg=\"D\"\u003eD · Crash Reset\u003c\/button\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"ks-ecum__cat-tabs\" data-ks-role=\"cattabs\"\u003e\u003c\/div\u003e\n\n        \u003cdiv class=\"ks-ecum__search-wrap\"\u003e\n          \u003csvg class=\"ks-ecum__search-icon\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003ccircle cx=\"11\" cy=\"11\" r=\"8\"\u003e\u003c\/circle\u003e\u003cpath d=\"M21 21l-4.35-4.35\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n          \u003cinput type=\"text\" class=\"ks-ecum__search\" data-ks-role=\"search\" placeholder=\"Search brand, ECU type or chip...\"\u003e\n          \u003cspan class=\"ks-ecum__results-count\" data-ks-role=\"count\"\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"ks-ecum__table-wrap\"\u003e\n          \u003ctable class=\"ks-ecum__table\"\u003e\n            \u003cthead data-ks-role=\"thead\"\u003e\u003c\/thead\u003e\n            \u003ctbody data-ks-role=\"tbody\"\u003e\u003c\/tbody\u003e\n          \u003c\/table\u003e\n          \u003cdiv class=\"ks-ecum__empty\" data-ks-role=\"empty\" style=\"display:none\"\u003eNo results found\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__loading\" data-ks-role=\"loading\"\u003eLoading coverage data...\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cp class=\"ks-ecum__footnote\" data-ks-role=\"agg-note\" style=\"display:none\"\u003e\u003c\/p\u003e\n        \u003cp class=\"ks-ecum__footnote\"\u003e\n          The list comes from manufacturer data and gets updated with software releases. You can also \u003ca href=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0739\/7336\/7096\/files\/ECU_MASTER_Coverage_Searchable.xlsx?v=1784901664\" class=\"ks-ecum__inline-link\" target=\"_blank\" rel=\"noopener\"\u003edownload the full list as an Excel file\u003c\/a\u003e. For a specific module, just ask us.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- TAB: COMPARE --\u003e\n    \u003cdiv class=\"ks-ecum__tab-content\" data-ks-panel=\"compare\"\u003e\n      \u003cdiv class=\"ks-ecum__panel\"\u003e\n        \u003ch3 class=\"ks-ecum__h3\"\u003eECU MASTER vs DC706 vs G3 FULL\u003c\/h3\u003e\n        \u003cp class=\"ks-ecum__sub-text\"\u003eAn honest comparison: on many functions the fully activated G3 is an exact match. The real difference is trucks and the platform.\u003c\/p\u003e\n        \u003cdiv class=\"ks-ecum__table-wrap ks-ecum__table-wrap--auto\"\u003e\n          \u003ctable class=\"ks-ecum__ctable\"\u003e\n            \u003cthead\u003e\n              \u003ctr\u003e\n\u003cth\u003eFeature\u003c\/th\u003e\n\u003cth\u003eECU MASTER\u003c\/th\u003e\n\u003cth\u003eDC706\u003c\/th\u003e\n\u003cth\u003eG3 FULL\u003c\/th\u003e\n\u003c\/tr\u003e\n            \u003c\/thead\u003e\n            \u003ctbody\u003e\n              \u003ctr\u003e\n\u003ctd\u003ePassenger ECM\/TCM cloning\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eYes\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eYes\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eYes, identical coverage\u003c\/td\u003e\n\u003c\/tr\u003e\n              \u003ctr\u003e\n\u003ctd\u003eMotorcycle ECM cloning\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eYes, package B\u003c\/td\u003e\n\u003ctd class=\"ks-ec-mid\"\u003ePartial\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eYes, near identical\u003c\/td\u003e\n\u003c\/tr\u003e\n              \u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eTrucks, tractors and HD\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eYes, package C\u003c\/td\u003e\n\u003ctd class=\"ks-ec-n\"\u003eNo\u003c\/td\u003e\n\u003ctd class=\"ks-ec-n\"\u003eNo\u003c\/td\u003e\n\u003c\/tr\u003e\n              \u003ctr\u003e\n\u003ctd\u003eAirbag, Battery and SAS reset\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eYes, package D\u003c\/td\u003e\n\u003ctd class=\"ks-ec-n\"\u003eNo, and cannot be added\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eYes, on the full version\u003c\/td\u003e\n\u003c\/tr\u003e\n              \u003ctr\u003e\n\u003ctd\u003eMP001 programmer\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eBuilt in\u003c\/td\u003e\n\u003ctd class=\"ks-ec-n\"\u003eBought separately\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eIncluded in the kit\u003c\/td\u003e\n\u003c\/tr\u003e\n              \u003ctr\u003e\n\u003ctd\u003eCAN-FD\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eBuilt in\u003c\/td\u003e\n\u003ctd class=\"ks-ec-n\"\u003eNeeds an adapter\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eBuilt in\u003c\/td\u003e\n\u003c\/tr\u003e\n              \u003ctr\u003e\n\u003ctd\u003eMarine (boats and jet-ski)\u003c\/td\u003e\n\u003ctd class=\"ks-ec-n\"\u003eNo\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eYes\u003c\/td\u003e\n\u003ctd class=\"ks-ec-mid\"\u003eIMMO only\u003c\/td\u003e\n\u003c\/tr\u003e\n              \u003ctr\u003e\n\u003ctd\u003ePlatform\u003c\/td\u003e\n\u003ctd class=\"ks-ec-mid\"\u003eWindows PC\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eStandalone tablet\u003c\/td\u003e\n\u003ctd class=\"ks-ec-y\"\u003eStandalone tablet\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003c\/tbody\u003e\n          \u003c\/table\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"ks-ecum__highlight ks-ecum__highlight--blue\"\u003e\n          \u003cstrong\u003eThe bottom line against G3 FULL:\u003c\/strong\u003e if you already own a fully activated G3, you get the same passenger and motorcycle cloning and the same crash resets.\n          What the ECU MASTER adds is \u003cstrong\u003etrucks, tractors and heavy equipment\u003c\/strong\u003e, plus a desktop working environment with a big screen that suits long flash jobs better.\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"ks-ecum__highlight\"\u003e\n          \u003cstrong\u003eAnd against dedicated tuning tools:\u003c\/strong\u003e the ECU MASTER is priced competitively next to Auto VEI (strong on BCM but very expensive, over 13,000 EUR) and The Genius (wide ECM\/TCM coverage, around 8,000 EUR), and it adds truck coverage and crash resets on top of them.\n        \u003c\/div\u003e\n\n        \u003cp class=\"ks-ecum__footnote\"\u003e\n          This comparison was checked against the official coverage lists: passenger car ECM cloning is identical between the G3 and the ECU MASTER (2,050 entries on both), and on motorcycles the gap is only 25 entries in the ECU MASTER's favour. The DC706 is still a good pick if you need portability and want to work without a laptop.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- TAB: SPECS --\u003e\n    \u003cdiv class=\"ks-ecum__tab-content\" data-ks-panel=\"specs\"\u003e\n      \u003cdiv class=\"ks-ecum__panel\"\u003e\n        \u003ch3 class=\"ks-ecum__h3\"\u003eTechnical specifications\u003c\/h3\u003e\n        \u003ctable class=\"ks-ecum__spec\"\u003e\n          \u003ctbody\u003e\n            \u003ctr\u003e\n\u003cth\u003eOperating System\u003c\/th\u003e\n\u003ctd\u003eWindows 10 or above\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003cth\u003eCPU\u003c\/th\u003e\n\u003ctd\u003eSTM32H723, STM32F407\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003cth\u003eProtocols\u003c\/th\u003e\n\u003ctd\u003eCAN (ISO 11898), J1708, ISO 15765, SAE J1939, ISO 9141, ISO 14230 (KWP2000), SAE J1850 and more\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003cth\u003eRead\/Write modes\u003c\/th\u003e\n\u003ctd\u003eOBD, BENCH, J-TAG\/BDM\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003cth\u003eWorking voltage\u003c\/th\u003e\n\u003ctd\u003eDC 14V \/ 24V (supports up to 26V \/ 5A from an external supply)\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003cth\u003eWorking temperature\u003c\/th\u003e\n\u003ctd\u003e-10°C to 55°C (14°F to 131°F)\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003cth\u003eStorage temperature\u003c\/th\u003e\n\u003ctd\u003e-20°C to 70°C (-4°F to 158°F)\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003cth\u003eWeight\u003c\/th\u003e\n\u003ctd\u003eAbout 0.7 kg\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003cth\u003eDimensions\u003c\/th\u003e\n\u003ctd\u003e176 x 115 x 31.7 mm\u003c\/td\u003e\n\u003c\/tr\u003e\n            \u003ctr\u003e\n\u003cth\u003eWarranty\u003c\/th\u003e\n\u003ctd\u003e1 year. Software upgrade period: 1 year from the registration date\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003c\/tbody\u003e\n        \u003c\/table\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- TAB: KIT --\u003e\n    \u003cdiv class=\"ks-ecum__tab-content\" data-ks-panel=\"kit\"\u003e\n      \u003cdiv class=\"ks-ecum__panel\"\u003e\n        \u003ch3 class=\"ks-ecum__h3\"\u003eStandard accessories\u003c\/h3\u003e\n        \u003cdiv class=\"ks-ecum__kit\"\u003e\n          \u003cdiv class=\"ks-ecum__kit-item\"\u003e\n\u003cspan class=\"ks-ecum__kit-badge\"\u003e1\u003c\/span\u003e\u003cdiv class=\"ks-ecum__kit-txt\"\u003e\n\u003cstrong\u003e14V \u0026amp; 60W\u003c\/strong\u003e\u003cspan\u003eCharger\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__kit-item\"\u003e\n\u003cspan class=\"ks-ecum__kit-badge\"\u003e2\u003c\/span\u003e\u003cdiv class=\"ks-ecum__kit-txt\"\u003e\n\u003cstrong\u003eM001C\u003c\/strong\u003e\u003cspan\u003eMain cable\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__kit-item\"\u003e\n\u003cspan class=\"ks-ecum__kit-badge\"\u003e3\u003c\/span\u003e\u003cdiv class=\"ks-ecum__kit-txt\"\u003e\n\u003cstrong\u003eUSB-A to USB-B\u003c\/strong\u003e\u003cspan\u003eCable to the PC\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__kit-item\"\u003e\n\u003cspan class=\"ks-ecum__kit-badge\"\u003e4\u003c\/span\u003e\u003cdiv class=\"ks-ecum__kit-txt\"\u003e\n\u003cstrong\u003eBENCH-C V1\u003c\/strong\u003e\u003cspan\u003eECU Flasher bench cable\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__kit-item\"\u003e\n\u003cspan class=\"ks-ecum__kit-badge\"\u003e5\u003c\/span\u003e\u003cdiv class=\"ks-ecum__kit-txt\"\u003e\n\u003cstrong\u003eJumper Wire\u003c\/strong\u003e\u003cspan\u003eJumper wire set in 8 specs\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__kit-item\"\u003e\n\u003cspan class=\"ks-ecum__kit-badge\"\u003e6\u003c\/span\u003e\u003cdiv class=\"ks-ecum__kit-txt\"\u003e\n\u003cstrong\u003e3-in-1 Jumper\u003c\/strong\u003e\u003cspan\u003eJumper extension wire\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__kit-item\"\u003e\n\u003cspan class=\"ks-ecum__kit-badge\"\u003e7\u003c\/span\u003e\u003cdiv class=\"ks-ecum__kit-txt\"\u003e\n\u003cstrong\u003eC4-01\u003c\/strong\u003e\u003cspan\u003eMulti-function read\/write board\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__kit-item\"\u003e\n\u003cspan class=\"ks-ecum__kit-badge\"\u003e8\u003c\/span\u003e\u003cdiv class=\"ks-ecum__kit-txt\"\u003e\n\u003cstrong\u003eC4-10 + W004 \/ W005 \/ W006\u003c\/strong\u003e\u003cspan\u003eJTAG\/BDM adapter and soldering kit\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003ch4 class=\"ks-ecum__h4\"\u003eOptional accessories, sold separately\u003c\/h4\u003e\n        \u003cdiv class=\"ks-ecum__opt\"\u003e\n          \u003cdiv class=\"ks-ecum__opt-item\"\u003e\n            \u003cstrong\u003eRH850\/V850 adapter kit\u003c\/strong\u003e\n            \u003cspan\u003eIncludes the C4-06 adapter. This is the kit that will be required for MG1\/MD1 unlocking once that function ships.\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__opt-item\"\u003e\n            \u003cstrong\u003eHeavy duty accessory kit\u003c\/strong\u003e\n            \u003cspan\u003e23 dedicated ECU connection cables for commercial and heavy diesel vehicles.\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__opt-item\"\u003e\n            \u003cstrong\u003ePassenger car accessory kit\u003c\/strong\u003e\n            \u003cspan\u003e30 dedicated TCM connection cables, instead of wiring up jumpers by hand.\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- TAB: VIDEOS --\u003e\n    \u003cdiv class=\"ks-ecum__tab-content\" data-ks-panel=\"video\"\u003e\n      \u003cdiv class=\"ks-ecum__panel\"\u003e\n        \u003ch3 class=\"ks-ecum__h3\"\u003eDemo videos\u003c\/h3\u003e\n        \u003cdiv class=\"ks-ecum__videos\"\u003e\n          \u003cdiv class=\"ks-ecum__video\"\u003e\u003cdiv class=\"ks-ecum__video-embed\"\u003e\u003ciframe src=\"https:\/\/www.youtube.com\/embed\/VGiMyQSISHo\" title=\"ECU Master demo 1\" loading=\"lazy\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen\u003e\u003c\/iframe\u003e\u003c\/div\u003e\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__video\"\u003e\u003cdiv class=\"ks-ecum__video-embed\"\u003e\u003ciframe src=\"https:\/\/www.youtube.com\/embed\/ili6gRUcw9A\" title=\"ECU Master demo 2\" loading=\"lazy\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen\u003e\u003c\/iframe\u003e\u003c\/div\u003e\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__video\"\u003e\u003cdiv class=\"ks-ecum__video-embed\"\u003e\u003ciframe src=\"https:\/\/www.youtube.com\/embed\/5PO9-guvUmU\" title=\"ECU Master demo 3\" loading=\"lazy\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen\u003e\u003c\/iframe\u003e\u003c\/div\u003e\u003c\/div\u003e\n          \u003cdiv class=\"ks-ecum__video\"\u003e\u003cdiv class=\"ks-ecum__video-embed\"\u003e\u003ciframe src=\"https:\/\/www.youtube.com\/embed\/CtAvo4D2BH8\" title=\"ECU Master demo 4\" loading=\"lazy\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen\u003e\u003c\/iframe\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- TAB: DOWNLOADS --\u003e\n    \u003cdiv class=\"ks-ecum__tab-content\" data-ks-panel=\"downloads\"\u003e\n      \u003cdiv class=\"ks-ecum__panel\"\u003e\n        \u003ch3 class=\"ks-ecum__h3\"\u003eDownloads\u003c\/h3\u003e\n        \u003cp class=\"ks-ecum__sub-text\"\u003eThese files are open to download, even before you buy\u003c\/p\u003e\n        \u003cdiv class=\"ks-ecum__dl\"\u003e\n          \u003ca class=\"ks-ecum__dl-card\" href=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0739\/7336\/7096\/files\/ECU_MASTER_Coverage_Searchable.xlsx?v=1784901664\" target=\"_blank\" rel=\"noopener\"\u003e\n            \u003cspan class=\"ks-ecum__dl-icon ks-ecum__dl-icon--xls\"\u003e\n              \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 2v6h6\"\u003e\u003c\/path\u003e\u003cpath d=\"M9 13l6 6M15 13l-6 6\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"ks-ecum__dl-body\"\u003e\n              \u003cstrong\u003eFull coverage list (Excel)\u003c\/strong\u003e\n              \u003cspan\u003eAbout 20,800 rows, split by packages A\/B\/C\/D with a separate sheet per category, auto filters and an index sheet.\u003c\/span\u003e\n              \u003cem\u003eTaken from the OBDSTAR website on July 24, 2026\u003c\/em\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"ks-ecum__dl-arrow\"\u003e\n              \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M12 3v13M6 12l6 6 6-6M4 21h16\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n            \u003c\/span\u003e\n          \u003c\/a\u003e\n\n          \u003ca class=\"ks-ecum__dl-card\" href=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0739\/7336\/7096\/files\/ECU_MASTER_User_Manual.pdf?v=1784901738\" target=\"_blank\" rel=\"noopener\"\u003e\n            \u003cspan class=\"ks-ecum__dl-icon ks-ecum__dl-icon--pdf\"\u003e\n              \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"\u003e\u003c\/path\u003e\u003cpath d=\"M14 2v6h6M16 13H8M16 17H8M10 9H8\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"ks-ecum__dl-body\"\u003e\n              \u003cstrong\u003eUser manual (PDF)\u003c\/strong\u003e\n              \u003cspan\u003eThe official OBDSTAR manual: connection, registration and activation, software updates, specs and working procedures.\u003c\/span\u003e\n              \u003cem\u003eOfficial manufacturer document\u003c\/em\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"ks-ecum__dl-arrow\"\u003e\n              \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u003e\u003cpath d=\"M12 3v13M6 12l6 6 6-6M4 21h16\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n            \u003c\/span\u003e\n          \u003c\/a\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- TAB: FAQ --\u003e\n    \u003cdiv class=\"ks-ecum__tab-content\" data-ks-panel=\"faq\"\u003e\n      \u003cdiv class=\"ks-ecum__panel\"\u003e\n        \u003ch3 class=\"ks-ecum__h3 ks-ecum__h3--faq\"\u003eFrequently asked questions\u003c\/h3\u003e\n        \u003cdiv class=\"ks-ecum__faq\"\u003e\n\u003cbutton class=\"ks-ecum__faq-q\" data-ks-faq type=\"button\"\u003e\u003cspan\u003eWhen will MG1\/MD1 unlocking be available?\u003c\/span\u003e\u003cspan class=\"ks-ecum__faq-arr\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cdiv class=\"ks-ecum__faq-a\"\u003eOBDSTAR has announced the function but \u003cstrong\u003ehas not released it yet\u003c\/strong\u003e. It will arrive in a software update and will require the RH850\/V850 adapter kit (C4-06 adapter), sold separately. We will update here as soon as it ships.\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__faq\"\u003e\n\u003cbutton class=\"ks-ecum__faq-q\" data-ks-faq type=\"button\"\u003e\u003cspan\u003eI already own a fully activated KeyMaster G3. Is the ECU MASTER worth it?\u003c\/span\u003e\u003cspan class=\"ks-ecum__faq-arr\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cdiv class=\"ks-ecum__faq-a\"\u003eDepends what you work on. For passenger car and motorcycle cloning and for crash resets, the full G3 gives you \u003cstrong\u003emore or less the same thing\u003c\/strong\u003e. The ECU MASTER adds \u003cstrong\u003etrucks, tractors and off-highway equipment\u003c\/strong\u003e, which the G3 does not cover, plus a desktop environment with a large screen. If you never touch heavy vehicles the case is weaker. Talk to us and we will help you decide.\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__faq\"\u003e\n\u003cbutton class=\"ks-ecum__faq-q\" data-ks-faq type=\"button\"\u003e\u003cspan\u003eIs there an annual subscription?\u003c\/span\u003e\u003cspan class=\"ks-ecum__faq-arr\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cdiv class=\"ks-ecum__faq-a\"\u003eYes. On registration and activation you get \u003cstrong\u003e12 months of subscription included\u003c\/strong\u003e. Renew before it runs out and you get a reduced price; after it expires the price goes back to the standard rate.\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__faq\"\u003e\n\u003cbutton class=\"ks-ecum__faq-q\" data-ks-faq type=\"button\"\u003e\u003cspan\u003eIf I do not renew, does the tool stop working?\u003c\/span\u003e\u003cspan class=\"ks-ecum__faq-arr\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cdiv class=\"ks-ecum__faq-a\"\u003eNo. The subscription only covers \u003cstrong\u003eupdates and downloads\u003c\/strong\u003e. Any software you already downloaded keeps working normally after it expires.\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__faq\"\u003e\n\u003cbutton class=\"ks-ecum__faq-q\" data-ks-faq type=\"button\"\u003e\u003cspan\u003eDo I need an external power supply?\u003c\/span\u003e\u003cspan class=\"ks-ecum__faq-arr\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cdiv class=\"ks-ecum__faq-a\"\u003eStrongly recommended. Some modules draw high current, so a \u003cstrong\u003eregulated adjustable power supply\u003c\/strong\u003e beats the charger that comes in the box. The unit handles up to \u003cstrong\u003e26V \/ 5A\u003c\/strong\u003e, and you set the voltage per the operation guide.\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__faq\"\u003e\n\u003cbutton class=\"ks-ecum__faq-q\" data-ks-faq type=\"button\"\u003e\u003cspan\u003eWhat computer do I need?\u003c\/span\u003e\u003cspan class=\"ks-ecum__faq-arr\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cdiv class=\"ks-ecum__faq-a\"\u003eA PC running \u003cstrong\u003eWindows 10 or later\u003c\/strong\u003e. The unit connects to it over a USB Type-B cable and acts as the interface to the module.\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__faq\"\u003e\n\u003cbutton class=\"ks-ecum__faq-q\" data-ks-faq type=\"button\"\u003e\u003cspan\u003eHow do I activate it after purchase?\u003c\/span\u003e\u003cspan class=\"ks-ecum__faq-arr\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cdiv class=\"ks-ecum__faq-a\"\u003eDownload and install the ECU MASTER software, connect the unit to your PC with the USB Type-B cable, go to [Personal Center] then [User Registration] and complete the registration. After that log in, click [Upgrade], tick everything and download all the software. We at KEYSHOP walk you through it.\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"ks-ecum__faq\"\u003e\n\u003cbutton class=\"ks-ecum__faq-q\" data-ks-faq type=\"button\"\u003e\u003cspan\u003eWhat warranty and support come with it?\u003c\/span\u003e\u003cspan class=\"ks-ecum__faq-arr\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cdiv class=\"ks-ecum__faq-a\"\u003eOne year of official OBDSTAR manufacturer warranty and one year of software updates. KEYSHOP provides professional technical support, helps with activation and updates, and stays with you after the sale.\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- ===== TRUST BAR ===== --\u003e\n  \u003csection class=\"ks-ecum__trust\"\u003e\n    \u003cdiv class=\"ks-ecum__trust-item\"\u003e\n\u003cdiv class=\"ks-ecum__trust-num\"\u003e4\u003c\/div\u003e\n\u003cdiv class=\"ks-ecum__trust-label\"\u003eFlexible software packages\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"ks-ecum__trust-item\"\u003e\n\u003cdiv class=\"ks-ecum__trust-num\"\u003eHD\u003c\/div\u003e\n\u003cdiv class=\"ks-ecum__trust-label\"\u003eTrucks and tractors\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"ks-ecum__trust-item\"\u003e\n\u003cdiv class=\"ks-ecum__trust-num\"\u003eOEM\u003c\/div\u003e\n\u003cdiv class=\"ks-ecum__trust-label\"\u003eGenuine OBDSTAR\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- ============================================================\n                            CSS\n============================================================ --\u003e\n\u003cstyle\u003e\n.ks-ecum{\n  --ks-bg:#0d1117;--ks-bg-2:#161b22;--ks-bg-3:#1f2630;\n  --ks-text:#e6edf3;--ks-text-2:#9ba8b8;\n  --ks-orange:#ff6b1a;--ks-orange-dark:#e85a0c;\n  --ks-blue:#4ec5e3;--ks-blue-dark:#2ba6c8;\n  --ks-green:#3fb950;--ks-red:#f85149;--ks-purple:#a78bfa;--ks-yellow:#f0d000;\n  --ks-border:rgba(255,255,255,.08);\n  --ks-radius:14px;--ks-radius-sm:8px;\n  font-family:'Heebo','Rubik','Segoe UI',system-ui,Arial,sans-serif;\n  color:var(--ks-text);background:var(--ks-bg);line-height:1.6;\n  margin:24px 0;border-radius:var(--ks-radius);overflow:hidden;box-shadow:0 10px 40px rgba(0,0,0,.25);\n}\n.ks-ecum *,.ks-ecum *::before,.ks-ecum *::after{box-sizing:border-box}\n.ks-ecum h2,.ks-ecum h3,.ks-ecum h4,.ks-ecum p,.ks-ecum ul{margin:0;padding:0}\n.ks-ecum ul,.ks-ecum ol{list-style:none !important}\n.ks-ecum ul li{list-style:none !important;list-style-type:none !important}\n.ks-ecum ul li::marker{content:\"\" !important}\n.ks-ecum img{max-width:100%;height:auto;display:block}\n.ks-ecum .ks-ecum__h3,.ks-ecum h3.ks-ecum__h3{color:#fff !important}\n.ks-ecum .ks-ecum__h4,.ks-ecum h4.ks-ecum__h4{color:#fff !important}\n.ks-ecum .ks-ecum__why-card h4,.ks-ecum .ks-ecum__mode-head{color:#fff !important}\n\n\/* HERO *\/\n.ks-ecum__hero{position:relative;padding:48px 32px;background:linear-gradient(135deg,#0d1117 0%,#161b22 50%,#1a2332 100%);overflow:hidden}\n.ks-ecum__hero-bg{position:absolute;inset:0;background:radial-gradient(circle at 20% 30%,rgba(255,107,26,.15) 0%,transparent 40%),radial-gradient(circle at 80% 70%,rgba(78,197,227,.12) 0%,transparent 40%);pointer-events:none}\n.ks-ecum__hero-inner{position:relative;max-width:900px;margin:0 auto}\n.ks-ecum__hero-title{margin-top:0;font-size:46px;font-weight:900;line-height:1.1;background:linear-gradient(90deg,#fff 0%,var(--ks-blue) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:14px;letter-spacing:-1px}\n.ks-ecum__hero-sub{font-size:16px;color:var(--ks-text-2);margin-bottom:22px}\n.ks-ecum__hero-bullets{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:34px 0 20px;padding:0 !important}\n.ks-ecum__hero-bullets li{display:flex;align-items:flex-start;gap:9px;font-size:14px;color:var(--ks-text);line-height:1.5}\n.ks-ecum__check{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--ks-orange);color:#fff;font-weight:700;font-size:13px;flex-shrink:0}\n.ks-ecum__hero-note{display:flex;align-items:center;gap:10px;background:rgba(78,197,227,.08);border:1px solid rgba(78,197,227,.25);border-radius:var(--ks-radius-sm);padding:12px 14px;font-size:13.5px;color:var(--ks-text)}\n.ks-ecum__hero-note svg{width:24px;height:24px;color:var(--ks-blue);flex-shrink:0}\n.ks-ecum__hero-note strong{color:#fff}\n.ks-ecum__hero-anim{position:relative;width:100%;max-width:420px}\n.ks-ecum__hero-anim svg{width:100%;height:auto;overflow:visible}\n.em-anim-device{transform-origin:240px 180px;animation:emFloat 4s ease-in-out infinite}\n@keyframes emFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}\n@media (prefers-reduced-motion:reduce){.em-anim-device{animation:none}}\n\n\/* SECTIONS *\/\n.ks-ecum__section{padding:40px 32px;background:var(--ks-bg-2);border-top:1px solid var(--ks-border)}\n.ks-ecum .ks-ecum__h3{font-size:26px;font-weight:800;color:#fff;margin-bottom:24px;position:relative;padding-bottom:12px}\n.ks-ecum .ks-ecum__h3::after{content:\"\";position:absolute;bottom:0;right:0;width:60px;height:3px;background:linear-gradient(90deg,var(--ks-orange),var(--ks-blue));border-radius:2px}\n.ks-ecum .ks-ecum__h3--faq{margin-bottom:32px}\n.ks-ecum .ks-ecum__h4{font-size:17px;font-weight:700;color:#fff;margin:0 0 8px}\n.ks-ecum__panel{max-width:1100px;margin:0 auto}\n.ks-ecum__panel p{color:var(--ks-text);font-size:15.5px;margin-bottom:14px}\n.ks-ecum__panel strong{color:#fff}\n.ks-ecum__sub-text{color:var(--ks-text-2);font-size:14px;margin-bottom:20px !important}\n.ks-ecum__footnote{color:var(--ks-text-2);font-size:13px;margin-top:14px !important;font-style:italic;line-height:1.7}\n.ks-ecum__mini-note{color:var(--ks-text-2);font-size:12.5px;margin:4px 0 16px !important;font-style:italic}\n.ks-ecum__list{display:flex;flex-direction:column;gap:8px;margin:8px 0}\n.ks-ecum__list li{position:relative;padding-right:22px;color:var(--ks-text-2);font-size:14.5px;line-height:1.6}\n.ks-ecum__list li::before{content:\"\";position:absolute;right:4px;top:8px;width:5px;height:5px;border-radius:50%;background:var(--ks-orange)}\n.ks-ecum__list strong{color:var(--ks-blue)}\n.ks-ecum__highlight{background:linear-gradient(90deg,rgba(255,107,26,.12),rgba(78,197,227,.08));border-right:3px solid var(--ks-orange);padding:14px 18px;border-radius:var(--ks-radius-sm);margin:18px 0;color:#fff;font-size:15px}\n.ks-ecum__highlight--blue{border-right-color:var(--ks-blue);background:linear-gradient(90deg,rgba(78,197,227,.12),rgba(255,107,26,.05))}\n\n\/* WHY CARDS *\/\n.ks-ecum__why{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;max-width:1100px;margin:0 auto}\n.ks-ecum__why-card{background:var(--ks-bg-3);border:1px solid var(--ks-border);border-radius:var(--ks-radius);padding:22px 18px;transition:transform .25s,border-color .25s,box-shadow .25s;position:relative;overflow:hidden}\n.ks-ecum__why-card::before{content:\"\";position:absolute;top:0;right:0;width:100%;height:3px;background:linear-gradient(90deg,var(--ks-orange),var(--ks-blue));transform:scaleX(0);transform-origin:right;transition:transform .3s}\n.ks-ecum__why-card:hover{transform:translateY(-4px);border-color:rgba(255,107,26,.4);box-shadow:0 12px 30px rgba(0,0,0,.3)}\n.ks-ecum__why-card:hover::before{transform:scaleX(1)}\n.ks-ecum__why-icon{width:46px;height:46px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,rgba(255,107,26,.15),rgba(78,197,227,.15));color:var(--ks-orange);border-radius:12px;margin-bottom:14px}\n.ks-ecum__why-icon svg{width:24px;height:24px}\n.ks-ecum__why-card h4{font-size:16px;font-weight:700;color:#fff;margin-bottom:6px}\n.ks-ecum__why-card p{font-size:13.5px;color:var(--ks-text-2);line-height:1.6;margin:0}\n\n\/* ===== GLOBAL SVG SAFETY (prevents oversized inline icons) ===== *\/\n.ks-ecum svg{max-width:100%;height:auto}\n.ks-ecum__req-icon svg,.ks-ecum__why-icon svg,.ks-ecum__hero-note svg,\n.ks-ecum__search-icon,.ks-ecum__flow-arrow svg,.ks-ecum__dl-icon svg,\n.ks-ecum__dl-arrow svg,.ks-ecum__vbtn svg{flex:0 0 auto}\n\n\/* ===== REQUIREMENT \/ WARNING BOX (was missing -\u003e caused giant SVG) ===== *\/\n.ks-ecum__req{display:flex;gap:14px;align-items:flex-start;background:rgba(248,81,73,.06);border:1px solid rgba(248,81,73,.25);border-radius:var(--ks-radius-sm);padding:16px 18px;margin:18px 0;font-size:14.5px;color:var(--ks-text);line-height:1.65}\n.ks-ecum__req-icon{flex:0 0 26px;width:26px;height:26px;display:flex;align-items:center;justify-content:center;margin-top:1px}\n.ks-ecum__req-icon svg{width:26px;height:26px;color:var(--ks-red);display:block}\n.ks-ecum__req strong{color:#fff}\n\n\/* PACKAGES *\/\n.ks-ecum__pkgs{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;max-width:1100px;margin:0 auto}\n.ks-ecum__pkg{position:relative;display:flex;flex-direction:column;background:var(--ks-bg-3);border:1px solid var(--ks-border);border-radius:var(--ks-radius);padding:18px 18px 20px;overflow:hidden;transition:transform .2s,border-color .2s}\n.ks-ecum__pkg:hover{transform:translateY(-3px);border-color:rgba(255,107,26,.45)}\n.ks-ecum__pkg-ghost{position:absolute;top:-14px;left:8px;font-size:76px;font-weight:900;line-height:1;color:rgba(255,107,26,.09);pointer-events:none;user-select:none;font-family:Arial,sans-serif}\n.ks-ecum__pkg-tag{position:relative;display:inline-block;align-self:flex-start;background:rgba(255,107,26,.15);color:var(--ks-orange);border:1px solid rgba(255,107,26,.4);padding:3px 11px;border-radius:999px;font-size:11.5px;font-weight:800;letter-spacing:.3px;margin-bottom:9px}\n.ks-ecum .ks-ecum__pkg-name{position:relative;display:block;color:#fff !important;font-size:16px;font-weight:700;line-height:1.35;margin-bottom:7px}\n.ks-ecum .ks-ecum__pkg-desc{position:relative;color:var(--ks-text-2);font-size:13px;line-height:1.6;margin:0}\n\n\/* ===== CONNECTION MODES SECTION ===== *\/\n.ks-ecum__modes-wrap{display:grid;grid-template-columns:0.85fr 1.15fr;gap:26px;align-items:center;max-width:1100px;margin:0 auto}\n.ks-ecum__modes-visual{position:relative}\n.ks-ecum__modes-visual .ks-ecum__hero-anim{max-width:100%;margin:0 auto}\n\n\/* ===== HERO VIDEO ===== *\/\n.ks-ecum__vwrap{position:relative;width:100%;margin:22px 0 0;border-radius:var(--ks-radius);overflow:hidden;background:#000;border:1px solid rgba(255,107,26,.3);box-shadow:0 22px 60px rgba(0,0,0,.6),0 0 0 1px rgba(78,197,227,.08)}\n.ks-ecum__vframe{position:relative;width:100%;aspect-ratio:16\/9;background:#000}\n.ks-ecum__vframe iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}\n.ks-ecum__vbar{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 12px;background:linear-gradient(90deg,rgba(255,107,26,.14),rgba(22,27,34,.95));border-top:1px solid rgba(255,255,255,.07)}\n.ks-ecum__vlive{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:700;color:#fff;letter-spacing:.2px}\n.ks-ecum__vdot{width:8px;height:8px;border-radius:50%;background:var(--ks-orange);flex:0 0 8px;animation:ksPulse 1.6s ease-in-out infinite}\n@keyframes ksPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.82)}}\n.ks-ecum__vbtn{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.16);color:var(--ks-text);font-family:inherit;font-size:12px;font-weight:600;padding:6px 11px;border-radius:999px;cursor:pointer;transition:background .2s,border-color .2s,color .2s}\n.ks-ecum__vbtn:hover{background:rgba(255,107,26,.2);border-color:var(--ks-orange);color:#fff}\n.ks-ecum__vico{width:15px;height:15px}\n.ks-ecum__vbtn[data-muted=\"1\"] .ks-ecum__vico--on{display:none}\n.ks-ecum__vbtn[data-muted=\"0\"] .ks-ecum__vico--off{display:none}\n.ks-ecum__vbtn[data-muted=\"0\"]{background:rgba(255,107,26,.18);border-color:rgba(255,107,26,.5);color:#fff}\n@media (prefers-reduced-motion:reduce){.ks-ecum__vdot{animation:none}}\n\n\/* ===== MG1\/MD1 UNLOCK SECTION ===== *\/\n.ks-ecum__section--modes{background:linear-gradient(170deg,#161b22 0%,#141a24 100%)}\n.ks-ecum__section--unlock{background:linear-gradient(160deg,#161b22 0%,#1a1420 60%,#161b22 100%);position:relative}\n.ks-ecum__section--unlock::before{content:\"\";position:absolute;inset:0;background:radial-gradient(circle at 85% 10%,rgba(255,107,26,.13) 0%,transparent 45%);pointer-events:none}\n.ks-ecum__unlock{position:relative;max-width:1100px;margin:0 auto}\n.ks-ecum__unlock-toggle{display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;background:var(--ks-bg-3);border:1px solid rgba(255,107,26,.3);border-radius:var(--ks-radius);padding:18px 20px;cursor:pointer;text-align:right;font-family:inherit;transition:border-color .2s,background .2s}\n.ks-ecum__unlock-toggle:hover{border-color:var(--ks-orange);background:rgba(255,107,26,.06)}\n.ks-ecum__unlock-left{display:flex;flex-direction:column;gap:6px;min-width:0}\n.ks-ecum__unlock-title{color:#fff;font-size:19px;font-weight:800;line-height:1.3}\n.ks-ecum__unlock-teaser{color:var(--ks-text-2);font-size:13.5px;line-height:1.5}\n.ks-ecum__unlock-arr{flex:0 0 32px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:rgba(255,107,26,.16);color:var(--ks-orange);font-size:22px;font-weight:400;line-height:1;transition:transform .25s}\n.ks-ecum__unlock--open .ks-ecum__unlock-arr{transform:rotate(45deg)}\n.ks-ecum__unlock-body{max-height:0;overflow:hidden;transition:max-height .4s ease}\n.ks-ecum__unlock--open .ks-ecum__unlock-body{max-height:2600px}\n.ks-ecum__unlock-body\u003e*:first-child{margin-top:20px}\n\n.ks-ecum__soon{display:inline-flex;align-items:center;gap:8px;background:rgba(255,107,26,.16);color:var(--ks-orange);border:1px solid rgba(255,107,26,.45);padding:6px 14px;border-radius:999px;font-size:12.5px;font-weight:700;margin-bottom:14px}\n.ks-ecum__soon-dot{width:7px;height:7px;border-radius:50%;background:var(--ks-orange);flex:0 0 7px;animation:ksPulse 1.8s ease-in-out infinite}\n.ks-ecum__unlock-flow{display:grid;grid-template-columns:1fr auto 1fr;gap:16px;align-items:center;margin:22px 0}\n.ks-ecum__flow-col{background:var(--ks-bg-3);border:1px solid var(--ks-border);border-radius:var(--ks-radius);padding:18px}\n.ks-ecum__flow-col--old{opacity:.78}\n.ks-ecum__flow-col--new{border-color:rgba(63,185,80,.42);background:linear-gradient(160deg,rgba(63,185,80,.08),var(--ks-bg-3))}\n.ks-ecum__flow-title{font-size:14px;font-weight:800;color:#fff;margin-bottom:12px;padding-bottom:9px;border-bottom:1px solid var(--ks-border)}\n.ks-ecum__flow-col--new .ks-ecum__flow-title{color:var(--ks-green)}\n.ks-ecum__flow-list{margin:0;padding:0 20px 0 0;list-style:decimal !important;color:var(--ks-text-2);font-size:13.5px;line-height:1.85}\n.ks-ecum__flow-list li{padding-right:2px;list-style:decimal !important;list-style-type:decimal !important}\n.ks-ecum__flow-list li::marker{content:counter(list-item) \". \" !important;color:var(--ks-text-2)}\n.ks-ecum__flow-arrow{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:linear-gradient(135deg,var(--ks-orange),var(--ks-orange-dark));flex:0 0 42px}\n.ks-ecum__flow-arrow svg{width:20px;height:20px;color:#fff}\n.ks-ecum__ecu-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:12px 0 6px}\n.ks-ecum__ecu{background:var(--ks-bg-3);border:1px solid var(--ks-border);border-right:3px solid var(--ks-orange);border-radius:var(--ks-radius-sm);padding:12px 14px}\n.ks-ecum__ecu strong{display:block;color:#fff;font-size:14px;font-family:'Consolas','Monaco',monospace;letter-spacing:.3px}\n.ks-ecum__ecu span{display:block;color:var(--ks-text-2);font-size:12px;margin-top:3px}\n\n\/* ===== DOWNLOADS ===== *\/\n.ks-ecum__dl{display:grid;grid-template-columns:1fr 1fr;gap:14px}\n.ks-ecum__dl-card{display:flex;align-items:center;gap:14px;background:var(--ks-bg-3);border:1px solid var(--ks-border);border-radius:var(--ks-radius);padding:18px;text-decoration:none;transition:transform .2s,border-color .2s,box-shadow .2s}\n.ks-ecum__dl-card:hover{transform:translateY(-3px);border-color:var(--ks-orange);box-shadow:0 12px 28px rgba(0,0,0,.3)}\n.ks-ecum__dl-icon{flex:0 0 46px;width:46px;height:46px;display:flex;align-items:center;justify-content:center;border-radius:11px}\n.ks-ecum__dl-icon svg{width:24px;height:24px}\n.ks-ecum__dl-icon--xls{background:rgba(63,185,80,.15);color:var(--ks-green)}\n.ks-ecum__dl-icon--pdf{background:rgba(248,81,73,.15);color:var(--ks-red)}\n.ks-ecum__dl-body{flex:1;min-width:0;display:block}\n.ks-ecum__dl-body strong{display:block;color:#fff;font-size:15px;margin-bottom:4px}\n.ks-ecum__dl-body span{display:block;color:var(--ks-text-2);font-size:13px;line-height:1.55}\n.ks-ecum__dl-body em{display:block;color:var(--ks-blue);font-size:11.5px;font-style:normal;margin-top:6px;opacity:.85}\n.ks-ecum__dl-arrow{flex:0 0 30px;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:rgba(255,255,255,.05);color:var(--ks-text-2);transition:background .2s,color .2s}\n.ks-ecum__dl-arrow svg{width:16px;height:16px}\n.ks-ecum__dl-card:hover .ks-ecum__dl-arrow{background:var(--ks-orange);color:#fff}\n.ks-ecum__inline-link{color:var(--ks-blue);text-decoration:underline;text-underline-offset:2px}\n.ks-ecum__inline-link:hover{color:var(--ks-orange)}\n\n\/* ===== SPEC GRID (table + device visual) ===== *\/\n.ks-ecum__table-wrap--auto{max-height:none;overflow:visible}\n\n\/* ===== TAB SCROLL INDICATOR ===== *\/\n.ks-ecum__tabnav{display:flex;align-items:center;gap:12px;margin-bottom:10px}\n.ks-ecum__tabnav--hidden{display:none}\n.ks-ecum__tabnav-hint{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;font-size:11.5px;font-weight:600;color:var(--ks-text-2);white-space:nowrap;letter-spacing:.2px;user-select:none}\n.ks-ecum__tabnav-hint svg{width:15px;height:15px;color:var(--ks-orange);flex:0 0 15px;animation:ksNudge 1.8s ease-in-out infinite}\n@keyframes ksNudge{0%,100%{opacity:.55;transform:scaleX(1)}50%{opacity:1;transform:scaleX(1.18)}}\n.ks-ecum__tabnav-track{position:relative;flex:1 1 auto;min-width:70px;height:11px;border-radius:999px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.06);cursor:grab;overflow:hidden;touch-action:none}\n.ks-ecum__tabnav-track:active{cursor:grabbing}\n.ks-ecum__tabnav-track:focus-visible{outline:2px solid var(--ks-orange);outline-offset:2px}\n.ks-ecum__tabnav-thumb{position:absolute;top:0;left:0;height:100%;width:40px;pointer-events:none;border-radius:999px;background:linear-gradient(90deg,var(--ks-orange),var(--ks-blue));transition:transform .1s linear,filter .2s;will-change:transform}\n.ks-ecum__tabnav-track:hover .ks-ecum__tabnav-thumb{filter:brightness(1.2)}\n.ks-ecum__tabnav--drag .ks-ecum__tabnav-thumb{transition:none;filter:brightness(1.25)}\n.ks-ecum__tabs-shell{position:relative}\n.ks-ecum__tabs-shell::before,.ks-ecum__tabs-shell::after{content:\"\";position:absolute;top:0;bottom:1px;width:38px;pointer-events:none;opacity:0;transition:opacity .25s;z-index:2}\n.ks-ecum__tabs-shell::before{left:0;background:linear-gradient(90deg,var(--ks-bg-2) 10%,rgba(22,27,34,0))}\n.ks-ecum__tabs-shell::after{right:0;background:linear-gradient(270deg,var(--ks-bg-2) 10%,rgba(22,27,34,0))}\n.ks-ecum__tabs-wrap--scrollable .ks-ecum__tabs-shell::before,\n.ks-ecum__tabs-wrap--scrollable .ks-ecum__tabs-shell::after{opacity:1}\n@media (prefers-reduced-motion:reduce){.ks-ecum__tabnav-hint svg{animation:none}}\n\n\/* TABS *\/\n.ks-ecum__tabs-wrap{position:relative;margin-bottom:24px}\n.ks-ecum__tabs{display:flex;gap:4px;border-bottom:1px solid var(--ks-border);overflow-x:auto;scrollbar-width:none;scroll-behavior:smooth;-webkit-overflow-scrolling:touch}\n.ks-ecum__tabs::-webkit-scrollbar{height:0}\n.ks-ecum__tab{background:transparent;border:none;color:var(--ks-text-2);font-family:inherit;font-size:15px;font-weight:600;padding:14px 18px;cursor:pointer;position:relative;white-space:nowrap;transition:color .2s;flex-shrink:0}\n.ks-ecum__tab::after{content:\"\";position:absolute;bottom:-1px;right:0;left:0;height:3px;background:var(--ks-orange);transform:scaleX(0);transition:transform .25s}\n.ks-ecum__tab:hover{color:#fff}\n.ks-ecum__tab--active{color:#fff !important}\n.ks-ecum__tab--active::after{transform:scaleX(1)}\n.ks-ecum__tab-content{display:none;animation:ksFade .3s}\n.ks-ecum__tab-content--active{display:block}\n@keyframes ksFade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}\n\n\/* COVERAGE: package toggle + cat tabs *\/\n.ks-ecum__pkg-toggle{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}\n.ks-ecum__pkg-btn{background:var(--ks-bg-3);border:1px solid var(--ks-border);color:var(--ks-text-2);font-family:inherit;font-size:14px;font-weight:700;padding:10px 18px;border-radius:var(--ks-radius-sm);cursor:pointer;transition:all .2s}\n.ks-ecum__pkg-btn:hover{color:#fff;border-color:var(--ks-orange)}\n.ks-ecum__pkg-btn--active{background:linear-gradient(135deg,var(--ks-orange),var(--ks-orange-dark));color:#fff !important;border-color:transparent}\n.ks-ecum__cat-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}\n.ks-ecum__cat-pill{background:transparent;border:1px solid var(--ks-border);color:var(--ks-text-2);font-family:inherit;font-size:13px;font-weight:600;padding:7px 14px;border-radius:999px;cursor:pointer;transition:all .2s}\n.ks-ecum__cat-pill:hover{color:#fff;border-color:var(--ks-blue)}\n.ks-ecum__cat-pill--active{background:var(--ks-blue);color:#0d1117 !important;border-color:var(--ks-blue)}\n\n\/* SEARCH *\/\n.ks-ecum__search-wrap{position:relative;margin-bottom:14px}\n.ks-ecum__search-icon{position:absolute;right:14px;top:50%;transform:translateY(-50%);width:18px;height:18px;color:var(--ks-text-2);pointer-events:none}\n.ks-ecum__search{width:100%;background:var(--ks-bg-3);border:1px solid var(--ks-border);color:var(--ks-text);font-family:inherit;font-size:14px;padding:12px 42px 12px 120px;border-radius:var(--ks-radius-sm);direction:rtl}\n.ks-ecum__search:focus{outline:none;border-color:var(--ks-orange);box-shadow:0 0 0 3px rgba(255,107,26,.15)}\n.ks-ecum__results-count{position:absolute;left:14px;top:50%;transform:translateY(-50%);font-size:12px;color:var(--ks-text-2);font-weight:600}\n\n\/* TABLE *\/\n.ks-ecum__table-wrap{background:var(--ks-bg-3);border:1px solid var(--ks-border);border-radius:var(--ks-radius);overflow:hidden;position:relative}\n.ks-ecum__table-wrap{max-height:560px;overflow-y:auto}\n.ks-ecum__table-wrap::-webkit-scrollbar{width:8px}\n.ks-ecum__table-wrap::-webkit-scrollbar-track{background:var(--ks-bg-2)}\n.ks-ecum__table-wrap::-webkit-scrollbar-thumb{background:var(--ks-border);border-radius:4px}\n.ks-ecum__table{width:100%;border-collapse:collapse;font-size:13px}\n.ks-ecum__table thead th{background:linear-gradient(135deg,var(--ks-bg-2),var(--ks-bg-3));position:sticky;top:0;z-index:1;text-align:right;padding:11px 12px;color:var(--ks-blue);font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.4px;border-bottom:2px solid var(--ks-border);white-space:nowrap}\n.ks-ecum__table tbody tr{border-bottom:1px solid var(--ks-border);transition:background .15s}\n.ks-ecum__table tbody tr:hover{background:rgba(255,107,26,.05)}\n.ks-ecum__table tbody tr:nth-child(odd){background:rgba(255,255,255,.015)}\n.ks-ecum__table tbody td{padding:9px 12px;color:var(--ks-text);vertical-align:top}\n.ks-ecum__cell-b{font-weight:700;color:#fff !important;white-space:nowrap}\n.ks-ecum__cell-mono{font-family:'Consolas','Monaco',monospace;color:var(--ks-blue) !important;font-size:12px}\n.ks-ecum__tag{display:inline-block;padding:2px 7px;border-radius:999px;font-size:10.5px;font-weight:700;margin:1px 0 1px 3px;white-space:nowrap}\n.ks-ecum__tag--r{background:rgba(78,197,227,.15);color:var(--ks-blue);border:1px solid rgba(78,197,227,.3)}\n.ks-ecum__tag--w{background:rgba(255,107,26,.15);color:var(--ks-orange);border:1px solid rgba(255,107,26,.3)}\n.ks-ecum__tag--x{background:rgba(63,185,80,.13);color:var(--ks-green);border:1px solid rgba(63,185,80,.28)}\n.ks-ecum__tag--m{background:rgba(167,139,250,.13);color:var(--ks-purple);border:1px solid rgba(167,139,250,.28)}\n.ks-ecum__empty{padding:40px 20px;text-align:center;color:var(--ks-text-2);font-style:italic}\n.ks-ecum__loading{padding:40px 20px;text-align:center;color:var(--ks-text-2);font-style:italic}\n\n\/* MODES *\/\n.ks-ecum__modes{display:grid;grid-template-columns:repeat(2,1fr);gap:13px}\n.ks-ecum__mode{background:var(--ks-bg-3);border:1px solid var(--ks-border);border-radius:var(--ks-radius);padding:16px 17px}\n.ks-ecum__mode-head{margin-bottom:10px}\n.ks-ecum__mode-tag{display:inline-block;font-size:14px;font-weight:800;padding:5px 14px;border-radius:8px;letter-spacing:.5px}\n.ks-ecum__mode-tag--obd{background:rgba(63,185,80,.15);color:var(--ks-green);border:1px solid rgba(63,185,80,.3)}\n.ks-ecum__mode-tag--bench{background:rgba(255,107,26,.15);color:var(--ks-orange);border:1px solid rgba(255,107,26,.3)}\n.ks-ecum__mode-tag--boot{background:rgba(78,197,227,.15);color:var(--ks-blue);border:1px solid rgba(78,197,227,.3)}\n.ks-ecum__mode-tag--jtag{background:rgba(167,139,250,.15);color:var(--ks-purple);border:1px solid rgba(167,139,250,.3)}\n.ks-ecum__mode p{font-size:13px;color:var(--ks-text-2);margin:0;line-height:1.6}\n\n\/* COMPARE TABLE *\/\n.ks-ecum__ctable{width:100%;border-collapse:collapse;font-size:14px}\n.ks-ecum__ctable th{background:linear-gradient(135deg,var(--ks-bg-2),var(--ks-bg-3));text-align:right;padding:13px 14px;color:#fff;font-weight:700;font-size:13.5px;border-bottom:2px solid var(--ks-border)}\n.ks-ecum__ctable th:not(:first-child){text-align:center}\n.ks-ecum__ctable td{padding:11px 14px;border-bottom:1px solid var(--ks-border);color:var(--ks-text-2)}\n.ks-ecum__ctable td:first-child{color:#fff;font-weight:600}\n.ks-ecum__ctable td:not(:first-child){text-align:center;font-weight:600}\n.ks-ecum__ctable tr:nth-child(odd) td{background:rgba(255,255,255,.015)}\n.ks-ec-y{color:var(--ks-green) !important}\n.ks-ec-n{color:var(--ks-red) !important}\n.ks-ec-mid{color:var(--ks-yellow) !important}\n\n\/* SPEC TABLE *\/\n.ks-ecum__spec{width:100%;border-collapse:collapse;background:var(--ks-bg-3);border-radius:var(--ks-radius);overflow:hidden;border:1px solid var(--ks-border)}\n.ks-ecum__spec tr{border-bottom:1px solid var(--ks-border)}\n.ks-ecum__spec tr:last-child{border-bottom:none}\n.ks-ecum__spec tr:nth-child(odd) td,.ks-ecum__spec tr:nth-child(odd) th{background:rgba(255,255,255,.02)}\n.ks-ecum__spec th{text-align:right;padding:13px 16px;color:var(--ks-blue);font-weight:600;width:34%;font-size:14.5px;border-left:1px solid var(--ks-border);vertical-align:top}\n.ks-ecum__spec td{padding:13px 16px;color:var(--ks-text);font-size:14.5px}\n\n\/* KIT *\/\n.ks-ecum__kit{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}\n.ks-ecum__kit-item{display:flex;align-items:center;gap:12px;background:var(--ks-bg-3);border:1px solid var(--ks-border);border-radius:var(--ks-radius-sm);padding:14px 16px}\n.ks-ecum__kit-badge{width:28px;height:28px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--ks-blue),var(--ks-blue-dark));color:#0d1117;font-weight:800;border-radius:50%;font-size:13px}\n.ks-ecum__kit-txt{min-width:0;display:flex;flex-direction:column;gap:2px}\n.ks-ecum__kit-item strong{color:#fff;font-size:14px;line-height:1.35}\n.ks-ecum__kit-item span{color:var(--ks-text-2);font-size:12.5px;line-height:1.45}\n\n\/* OPTIONAL ACCESSORIES (replaces bulleted list) *\/\n.ks-ecum__opt{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:6px}\n.ks-ecum__opt-item{background:var(--ks-bg-3);border:1px solid var(--ks-border);border-top:2px solid var(--ks-blue);border-radius:var(--ks-radius-sm);padding:15px 16px}\n.ks-ecum__opt-item strong{display:block;color:#fff;font-size:14px;margin-bottom:5px}\n.ks-ecum__opt-item span{display:block;color:var(--ks-text-2);font-size:12.5px;line-height:1.55}\n.ks-ecum__note-box{background:var(--ks-bg-3);border:1px solid var(--ks-border);border-radius:var(--ks-radius-sm);padding:16px 18px;margin-top:18px;font-size:14.5px;color:var(--ks-text-2)}\n.ks-ecum__note-box strong{color:#fff}\n\n\/* VIDEOS *\/\n.ks-ecum__videos{display:grid;grid-template-columns:repeat(2,1fr);gap:20px}\n.ks-ecum__video{background:var(--ks-bg-3);border-radius:var(--ks-radius-sm);overflow:hidden;border:1px solid var(--ks-border);transition:transform .2s,border-color .2s}\n.ks-ecum__video:hover{transform:translateY(-3px);border-color:var(--ks-orange)}\n.ks-ecum__video-embed{position:relative;aspect-ratio:16\/9;background:#000}\n.ks-ecum__video-embed iframe{position:absolute;inset:0;width:100%;height:100%;border:0}\n\n\/* FAQ *\/\n.ks-ecum__faq{background:var(--ks-bg-3);border:1px solid var(--ks-border);border-radius:var(--ks-radius-sm);margin-bottom:10px;overflow:hidden}\n.ks-ecum__faq-q{width:100%;background:transparent;border:none;color:#fff;font-family:inherit;font-size:15px;font-weight:600;padding:16px 20px;display:flex;justify-content:space-between;align-items:center;gap:14px;cursor:pointer;text-align:right;transition:background .2s}\n.ks-ecum__faq-q:hover{background:rgba(255,255,255,.03)}\n.ks-ecum__faq-arr{font-size:22px;color:var(--ks-orange);transition:transform .25s;flex-shrink:0;line-height:1}\n.ks-ecum__faq--open .ks-ecum__faq-arr{transform:rotate(45deg)}\n.ks-ecum__faq-a{max-height:0;overflow:hidden;transition:max-height .3s,padding .3s;padding:0 20px;color:var(--ks-text-2);font-size:14.5px;line-height:1.7}\n.ks-ecum__faq--open .ks-ecum__faq-a{max-height:600px;padding:0 20px 16px}\n.ks-ecum__faq-a strong{color:#fff}\n\n\/* TRUST *\/\n.ks-ecum__trust{display:grid;grid-template-columns:repeat(3,1fr);background:linear-gradient(135deg,#161b22,#0d1117);border-top:1px solid var(--ks-border)}\n.ks-ecum__trust-item{text-align:center;padding:28px 18px;border-left:1px solid var(--ks-border)}\n.ks-ecum__trust-item:last-child{border-left:none}\n.ks-ecum__trust-num{font-size:34px;font-weight:900;background:linear-gradient(90deg,var(--ks-orange),var(--ks-blue));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:6px;line-height:1}\n.ks-ecum__trust-label{font-size:13px;color:var(--ks-text-2);font-weight:500}\n\n\/* RESPONSIVE *\/\n@media (max-width:900px){\n  .ks-ecum__hero{padding:32px 20px}\n  .ks-ecum__hero-title{font-size:34px}\n  .ks-ecum__hero-inner{text-align:center}\n  .ks-ecum__hero-bullets{grid-template-columns:1fr;gap:10px;text-align:right}\n  .ks-ecum__hero-note{justify-content:center;text-align:right}\n  .ks-ecum__section{padding:30px 20px}\n  .ks-ecum__why{grid-template-columns:1fr}\n  .ks-ecum__pkgs{grid-template-columns:1fr 1fr}\n  .ks-ecum__modes-wrap{grid-template-columns:1fr;gap:18px}\n  .ks-ecum__modes-visual{max-width:340px;margin:0 auto;width:100%}\n  .ks-ecum__modes{grid-template-columns:1fr}\n  .ks-ecum__kit{grid-template-columns:1fr}\n  .ks-ecum__opt{grid-template-columns:1fr}\n  .ks-ecum__videos{grid-template-columns:1fr}\n  .ks-ecum__unlock-flow{grid-template-columns:1fr;gap:12px}\n  .ks-ecum__flow-arrow{transform:rotate(-90deg);margin:0 auto}\n  .ks-ecum__ecu-grid{grid-template-columns:1fr 1fr}\n  .ks-ecum__dl{grid-template-columns:1fr}\n  .ks-ecum__req{text-align:right}\n  .ks-ecum__trust{grid-template-columns:repeat(3,1fr)}\n  .ks-ecum__trust-item{padding:22px 10px}\n  .ks-ecum__trust-num{font-size:26px}\n  .ks-ecum__trust-label{font-size:12px}\n  .ks-ecum__ctable{font-size:12.5px}\n  .ks-ecum__ctable th,.ks-ecum__ctable td{padding:9px 8px}\n}\n@media (max-width:560px){\n  .ks-ecum__hero-title{font-size:28px}\n  .ks-ecum__pkgs{grid-template-columns:1fr}\n  .ks-ecum__tab{padding:12px 14px;font-size:14px}\n  .ks-ecum .ks-ecum__h3{font-size:22px}\n  .ks-ecum__search{padding:11px 38px 11px 90px;font-size:13px}\n  .ks-ecum__ecu-grid{grid-template-columns:1fr}\n  .ks-ecum__vbar{padding:8px 10px}\n  .ks-ecum__vlive{font-size:11px}\n  .ks-ecum__vbtn{font-size:11px;padding:5px 9px}\n  .ks-ecum__dl-card{padding:14px;gap:11px}\n  .ks-ecum__dl-icon{flex:0 0 40px;width:40px;height:40px}\n  .ks-ecum__req{flex-direction:column;gap:10px}\n  .ks-ecum__unlock-toggle{padding:16px}\n  .ks-ecum__unlock-title{font-size:16.5px}\n  .ks-ecum__unlock-teaser{font-size:12.5px}\n  .ks-ecum__trust{grid-template-columns:repeat(3,1fr)}\n  .ks-ecum__trust-num{font-size:22px}\n  .ks-ecum__trust-label{font-size:11px}\n}\n\n\/* ===== LTR (English) overrides ===== *\/\n.ks-ecum--en .ks-ecum__h3::after{right:auto;left:0}\n.ks-ecum--en .ks-ecum__list li{padding-right:0;padding-left:22px}\n.ks-ecum--en .ks-ecum__list li::before{right:auto;left:4px}\n.ks-ecum--en .ks-ecum__highlight{border-right:none;border-left:3px solid var(--ks-orange)}\n.ks-ecum--en .ks-ecum__highlight--blue{border-left-color:var(--ks-blue)}\n.ks-ecum--en .ks-ecum__ecu{border-right:1px solid var(--ks-border);border-left:3px solid var(--ks-orange)}\n.ks-ecum--en .ks-ecum__flow-list{padding:0 0 0 20px}\n.ks-ecum--en .ks-ecum__pkg-ghost{left:auto;right:8px}\n.ks-ecum--en .ks-ecum__search{padding:12px 42px 12px 120px;direction:ltr}\n.ks-ecum--en .ks-ecum__search-icon{right:auto;left:14px}\n.ks-ecum--en .ks-ecum__results-count{left:auto;right:14px}\n.ks-ecum--en .ks-ecum__table thead th,.ks-ecum--en .ks-ecum__ctable th,.ks-ecum--en .ks-ecum__spec th{text-align:left}\n.ks-ecum--en .ks-ecum__ctable th:not(:first-child){text-align:center}\n.ks-ecum--en .ks-ecum__spec th{border-left:none;border-right:1px solid var(--ks-border)}\n.ks-ecum--en .ks-ecum__faq-q,.ks-ecum--en .ks-ecum__unlock-toggle{text-align:left}\n.ks-ecum--en .ks-ecum__hero-note{text-align:left}\n.ks-ecum--en .ks-ecum__tag{margin:1px 3px 1px 0}\n@media (max-width:900px){\n  .ks-ecum--en .ks-ecum__req,.ks-ecum--en .ks-ecum__hero-bullets{text-align:left}\n  .ks-ecum--en .ks-ecum__flow-arrow{transform:rotate(90deg)}\n}\n\u003c\/style\u003e\n\n\u003c!-- ============================================================\n     COVERAGE DATA LOADER (external asset hosted on Shopify Files)\n============================================================ --\u003e\n\u003cscript\u003e\n(function(){\n  if(window.KS_ECUM_COVERAGE || window.__ksEcumCovRequested) return;\n  window.__ksEcumCovRequested = true;\n  var s=document.createElement('script');\n  s.src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0739\/7336\/7096\/files\/ecu-master-coverage.js?v=1784901613\";\n  s.async=true;\n  s.onload=function(){ if(window.__ksEcumInitCoverage) window.__ksEcumInitCoverage(); };\n  s.onerror=function(){\n    document.querySelectorAll('[data-ks-role=\"loading\"]').forEach(function(el){\n      el.textContent='We could not load the coverage table. You can download the full file from the Downloads tab.';\n    });\n  };\n  document.head.appendChild(s);\n})();\n\u003c\/script\u003e\n\n\u003c!-- ============================================================\n                            JS\n============================================================ --\u003e\n\u003cscript\u003e\n(function(){\n  var CAT_LABELS = {\n    A:{ECM:'ECM · Engine',TCM:'TCM · Trans',BODY:'BODY\/BCM',BMS:'BMS\/VCU · EV'},\n    B:{ECM:'ECM · Moto'},\n    C:{ECM:'ECM · Engine',TCM:'TCM · Trans',BCM:'BCM · Body'},\n    D:{AIRBAG:'Airbag',BATTERY:'Battery Reset',SAS:'SAS · Steering'}\n  };\n\n  \/* ---- Hero video: muted autoplay, pauses off-screen \/ off-tab, unmute toggle ---- *\/\n  function initHeroVideo(root){\n    var wrap = root.querySelector('[data-ks-role=\"heroVideo\"]');\n    if(!wrap || wrap.__ksVidInited) return;\n    wrap.__ksVidInited = true;\n    var frame = wrap.querySelector('[data-ks-role=\"heroIframe\"]');\n    var btn   = wrap.querySelector('[data-ks-role=\"unmute\"]');\n    var label = wrap.querySelector('[data-ks-role=\"unmuteLabel\"]');\n    if(!frame) return;\n\n    var muted = true, inView = true, ready = false;\n    function send(func, args){\n      if(!frame.contentWindow) return;\n      try{\n        frame.contentWindow.postMessage(JSON.stringify({event:'command', func:func, args:args||[]}), '*');\n      }catch(e){}\n    }\n    frame.addEventListener('load', function(){ ready = true; });\n\n    function shouldPlay(){ return inView \u0026\u0026 !document.hidden; }\n    function sync(){ if(shouldPlay()) send('playVideo'); else send('pauseVideo'); }\n\n    document.addEventListener('visibilitychange', sync);\n\n    if('IntersectionObserver' in window){\n      var io = new IntersectionObserver(function(entries){\n        entries.forEach(function(e){ inView = e.isIntersecting; });\n        sync();\n      }, {threshold:0.2});\n      io.observe(wrap);\n    }\n\n    if(btn){\n      btn.addEventListener('click', function(){\n        muted = !muted;\n        if(muted){ send('mute'); }\n        else { send('unMute'); send('setVolume',[70]); send('playVideo'); }\n        btn.setAttribute('data-muted', muted ? '1' : '0');\n        btn.setAttribute('aria-label', muted ? 'Turn sound on' : 'Mute');\n        if(label) label.textContent = muted ? 'Sound on' : 'Mute';\n      });\n    }\n  }\n\n  function initEcum(root){\n    if(root.__ksEcumInited) return;\n    root.__ksEcumInited = true;\n    var tabsBar = root.querySelector('[data-ks-role=\"tabs\"]');\n    initHeroVideo(root);\n\n    \/* main tabs *\/\n    root.querySelectorAll('[data-ks-tab]').forEach(function(tab){\n      tab.addEventListener('click', function(){\n        var id=tab.getAttribute('data-ks-tab');\n        root.querySelectorAll('[data-ks-tab]').forEach(function(t){t.classList.remove('ks-ecum__tab--active');});\n        root.querySelectorAll('[data-ks-panel]').forEach(function(p){p.classList.remove('ks-ecum__tab-content--active');});\n        tab.classList.add('ks-ecum__tab--active');\n        var panel=root.querySelector('[data-ks-panel=\"'+id+'\"]');\n        if(panel) panel.classList.add('ks-ecum__tab-content--active');\n        if(tabsBar){\n          var br=tabsBar.getBoundingClientRect(), tr=tab.getBoundingClientRect();\n          tabsBar.scrollBy({left:(tr.left+tr.width\/2)-(br.left+br.width\/2),behavior:'smooth'});\n        }\n      });\n    });\n\n    \/* FAQ *\/\n    root.querySelectorAll('[data-ks-faq]').forEach(function(btn){\n      btn.addEventListener('click', function(){\n        var faq=btn.parentElement, open=faq.classList.contains('ks-ecum__faq--open');\n        root.querySelectorAll('.ks-ecum__faq').forEach(function(f){f.classList.remove('ks-ecum__faq--open');});\n        if(!open) faq.classList.add('ks-ecum__faq--open');\n      });\n    });\n\n    \/* MG1\/MD1 unlock section toggle *\/\n    var unlockBtn = root.querySelector('[data-ks-role=\"unlockToggle\"]');\n    if(unlockBtn){\n      var unlockBox = unlockBtn.closest('.ks-ecum__unlock');\n      unlockBtn.addEventListener('click', function(){\n        var open = unlockBox.classList.toggle('ks-ecum__unlock--open');\n        unlockBtn.setAttribute('aria-expanded', open ? 'true' : 'false');\n      });\n    }\n\n    \/* ---- Coverage widget ---- *\/\n    var pkgToggle = root.querySelector('[data-ks-role=\"pkgtoggle\"]');\n    var catTabs   = root.querySelector('[data-ks-role=\"cattabs\"]');\n    var theadEl   = root.querySelector('[data-ks-role=\"thead\"]');\n    var tbodyEl   = root.querySelector('[data-ks-role=\"tbody\"]');\n    var searchEl  = root.querySelector('[data-ks-role=\"search\"]');\n    var countEl   = root.querySelector('[data-ks-role=\"count\"]');\n    var emptyEl   = root.querySelector('[data-ks-role=\"empty\"]');\n    var loadEl    = root.querySelector('[data-ks-role=\"loading\"]');\n    var aggNote   = root.querySelector('[data-ks-role=\"agg-note\"]');\n    if(!pkgToggle) return;\n\n    var state={pkg:'A',cat:null,q:''};\n\n    function esc(s){if(s==null)return'';return String(s).replace(\/[\u0026\u003c\u003e\"']\/g,function(c){return{'\u0026':'\u0026amp;','\u003c':'\u0026lt;','\u003e':'\u0026gt;','\"':'\u0026quot;',\"'\":'\u0026#39;'}[c];});}\n\n    function renderCatTabs(){\n      var D=window.KS_ECUM_COVERAGE;\n      if(!D||!D[state.pkg]) return;\n      var cats=Object.keys(D[state.pkg]);\n      if(!state.cat||cats.indexOf(state.cat)===-1) state.cat=cats[0];\n      var html='';\n      cats.forEach(function(c){\n        var lbl=(CAT_LABELS[state.pkg]\u0026\u0026CAT_LABELS[state.pkg][c])||c;\n        var n=D[state.pkg][c].rows.length;\n        html+='\u003cbutton type=\"button\" class=\"ks-ecum__cat-pill'+(c===state.cat?' ks-ecum__cat-pill--active':'')+'\" data-ks-cat=\"'+esc(c)+'\"\u003e'+esc(lbl)+' ('+n+')\u003c\/button\u003e';\n      });\n      catTabs.innerHTML=html;\n    }\n\n    function buildHeader(withCat){\n      var p=state.pkg,c=state.cat;\n      var catCol=withCat?'\u003cth\u003eCategory\u003c\/th\u003e':'';\n      if(p==='D'\u0026\u0026c==='AIRBAG'\u0026\u0026!withCat) return '\u003ctr\u003e\u003cth\u003eBrand\u003c\/th\u003e\u003cth\u003eSupported Part Numbers\u003c\/th\u003e\u003cth\u003eMethods\u003c\/th\u003e\u003c\/tr\u003e';\n      if(p==='D'\u0026\u0026c==='BATTERY'\u0026\u0026!withCat) return '\u003ctr\u003e\u003cth\u003eBrand\u003c\/th\u003e\u003cth\u003eSystem\u003c\/th\u003e\u003cth\u003eInfo\u003c\/th\u003e\u003c\/tr\u003e';\n      if(p==='D'\u0026\u0026c==='SAS'\u0026\u0026!withCat) return '\u003ctr\u003e\u003cth\u003eBrand\u003c\/th\u003e\u003cth\u003eSystem\u003c\/th\u003e\u003cth\u003ePart Number\u003c\/th\u003e\u003cth\u003eModule Mfr\u003c\/th\u003e\u003c\/tr\u003e';\n      return '\u003ctr\u003e\u003cth\u003eBrand\u003c\/th\u003e'+catCol+'\u003cth\u003eECU Brand\u003c\/th\u003e\u003cth\u003eType\u003c\/th\u003e\u003cth\u003eChip (Dump)\u003c\/th\u003e\u003cth\u003eMode\u003c\/th\u003e\u003cth\u003eCapabilities\u003c\/th\u003e\u003c\/tr\u003e';\n    }\n    function rowHtmlEcu(r,catLabel){\n      var caps='';\n      if(r.c\u0026\u0026r.c.indexOf('R')!==-1)caps+='\u003cspan class=\"ks-ecum__tag ks-ecum__tag--r\"\u003eRead\u003c\/span\u003e';\n      if(r.c\u0026\u0026r.c.indexOf('W')!==-1)caps+='\u003cspan class=\"ks-ecum__tag ks-ecum__tag--w\"\u003eWrite\u003c\/span\u003e';\n      if(r.x)r.x.forEach(function(e){caps+='\u003cspan class=\"ks-ecum__tag ks-ecum__tag--'+(e==='IMMO OFF'?'m':'x')+'\"\u003e'+esc(e)+'\u003c\/span\u003e';});\n      if(!caps)caps='\u003cspan style=\"color:#666\"\u003e-\u003c\/span\u003e';\n      var catCell=catLabel!=null?'\u003ctd\u003e\u003cspan class=\"ks-ecum__tag ks-ecum__tag--m\"\u003e'+esc(catLabel)+'\u003c\/span\u003e\u003c\/td\u003e':'';\n      return '\u003ctr\u003e\u003ctd class=\"ks-ecum__cell-b\"\u003e'+esc(r.b)+'\u003c\/td\u003e'+catCell+'\u003ctd\u003e'+esc(r.e)+'\u003c\/td\u003e\u003ctd\u003e'+esc(r.t)+'\u003c\/td\u003e\u003ctd class=\"ks-ecum__cell-mono\"\u003e'+esc(r.d)+'\u003c\/td\u003e\u003ctd class=\"ks-ecum__cell-mono\"\u003e'+esc(r.m)+'\u003c\/td\u003e\u003ctd\u003e'+caps+'\u003c\/td\u003e\u003c\/tr\u003e';\n    }\n\n    function rowMatch(r,q){\n      if(!q)return true; q=q.toLowerCase();\n      for(var k in r){ if(r.hasOwnProperty(k)){ var v=r[k]; if(Array.isArray(v))v=v.join(' '); if(String(v).toLowerCase().indexOf(q)!==-1)return true; } }\n      return false;\n    }\n\n    function catLabelOf(pkg,cat){ return (CAT_LABELS[pkg]\u0026\u0026CAT_LABELS[pkg][cat])||cat; }\n\n    function renderRowsGeneric(list,p,c,withCat){\n      \/\/ list = array of {r, cat} when withCat, else array of r\n      var html='',i,r,cat;\n      for(i=0;i\u003clist.length;i++){\n        if(withCat){ r=list[i].r; cat=list[i].cat; } else { r=list[i]; cat=c; }\n        if(p==='D'\u0026\u0026cat==='AIRBAG'\u0026\u0026!withCat){ html+='\u003ctr\u003e\u003ctd class=\"ks-ecum__cell-b\"\u003e'+esc(r.b)+'\u003c\/td\u003e\u003ctd\u003e\u003cspan class=\"ks-ecum__tag ks-ecum__tag--x\"\u003e'+r.n+' parts\u003c\/span\u003e\u003c\/td\u003e\u003ctd class=\"ks-ecum__cell-mono\"\u003e'+esc(r.m)+'\u003c\/td\u003e\u003c\/tr\u003e'; }\n        else if(p==='D'\u0026\u0026cat==='BATTERY'\u0026\u0026!withCat){ html+='\u003ctr\u003e\u003ctd class=\"ks-ecum__cell-b\"\u003e'+esc(r.b)+'\u003c\/td\u003e\u003ctd\u003e'+esc(r.sys)+'\u003c\/td\u003e\u003ctd class=\"ks-ecum__cell-mono\"\u003e'+esc(r.info)+'\u003c\/td\u003e\u003c\/tr\u003e'; }\n        else if(p==='D'\u0026\u0026cat==='SAS'\u0026\u0026!withCat){ html+='\u003ctr\u003e\u003ctd class=\"ks-ecum__cell-b\"\u003e'+esc(r.b)+'\u003c\/td\u003e\u003ctd\u003e'+esc(r.sys)+'\u003c\/td\u003e\u003ctd class=\"ks-ecum__cell-mono\"\u003e'+esc(r.pn)+'\u003c\/td\u003e\u003ctd\u003e'+esc(r.mfr)+'\u003c\/td\u003e\u003c\/tr\u003e'; }\n        else if(p==='D'\u0026\u0026withCat){\n          \/\/ unified crash view during cross-cat search: show brand + category + a detail\n          var detail = cat==='AIRBAG'? (r.n+' parts · '+esc(r.m)) : cat==='BATTERY'? (esc(r.sys)+' '+esc(r.info)) : (esc(r.sys)+' '+esc(r.pn));\n          html+='\u003ctr\u003e\u003ctd class=\"ks-ecum__cell-b\"\u003e'+esc(r.b)+'\u003c\/td\u003e\u003ctd\u003e\u003cspan class=\"ks-ecum__tag ks-ecum__tag--m\"\u003e'+esc(catLabelOf(p,cat))+'\u003c\/span\u003e\u003c\/td\u003e\u003ctd colspan=\"4\" class=\"ks-ecum__cell-mono\"\u003e'+detail+'\u003c\/td\u003e\u003c\/tr\u003e';\n        }\n        else { html+=rowHtmlEcu(r, withCat?catLabelOf(p,cat):null); }\n      }\n      return html;\n    }\n\n    function renderTable(){\n      var D=window.KS_ECUM_COVERAGE;\n      if(!D){ if(loadEl)loadEl.style.display='block'; return; }\n      if(loadEl)loadEl.style.display='none';\n      var p=state.pkg, q=state.q.trim();\n      var CAP=600;\n\n      if(q){\n        \/\/ CROSS-CATEGORY search across ALL categories in the package\n        var all=[], cats=Object.keys(D[p]);\n        cats.forEach(function(cat){\n          D[p][cat].rows.forEach(function(r){ if(rowMatch(r,q)) all.push({r:r,cat:cat}); });\n        });\n        var totalAll=0; cats.forEach(function(cat){ totalAll+=D[p][cat].rows.length; });\n        theadEl.innerHTML=buildHeader(true);\n        if(aggNote)aggNote.style.display='none';\n        if(!all.length){ tbodyEl.innerHTML=''; if(emptyEl)emptyEl.style.display='block'; if(countEl)countEl.textContent='0 \/ '+totalAll; return; }\n        if(emptyEl)emptyEl.style.display='none';\n        var capped=all.length\u003eCAP?all.slice(0,CAP):all;\n        tbodyEl.innerHTML=renderRowsGeneric(capped,p,null,true);\n        if(countEl)countEl.textContent=(capped.length\u003call.length?capped.length+'+':all.length)+' \/ '+totalAll;\n        return;\n      }\n\n      \/\/ No query: show selected category only\n      var catObj=D[p][state.cat], rows=catObj.rows;\n      theadEl.innerHTML=buildHeader(false);\n      if(aggNote){\n        if(catObj.agg){ aggNote.style.display='block'; aggNote.innerHTML='\u003cstrong\u003eNote:\u003c\/strong\u003e the Airbag table shows a per-brand summary ('+catObj.total.toLocaleString()+' part numbers in total). To find a specific model, type the brand name.'; }\n        else aggNote.style.display='none';\n      }\n      if(!rows.length){ tbodyEl.innerHTML=''; if(emptyEl)emptyEl.style.display='block'; if(countEl)countEl.textContent='0 \/ 0'; return; }\n      if(emptyEl)emptyEl.style.display='none';\n      var capped2=rows.length\u003eCAP?rows.slice(0,CAP):rows;\n      tbodyEl.innerHTML=renderRowsGeneric(capped2,p,state.cat,false);\n      if(countEl)countEl.textContent=(capped2.length\u003crows.length?capped2.length+'+':rows.length)+' \/ '+rows.length;\n    }\n\n    pkgToggle.addEventListener('click',function(ev){\n      var b=ev.target.closest\u0026\u0026ev.target.closest('[data-ks-pkg]'); if(!b)return;\n      var p=b.getAttribute('data-ks-pkg'); if(p===state.pkg)return;\n      pkgToggle.querySelectorAll('[data-ks-pkg]').forEach(function(x){x.classList.remove('ks-ecum__pkg-btn--active');});\n      b.classList.add('ks-ecum__pkg-btn--active');\n      state.pkg=p; state.cat=null; state.q=''; if(searchEl)searchEl.value='';\n      renderCatTabs(); renderTable();\n    });\n\n    catTabs.addEventListener('click',function(ev){\n      var b=ev.target.closest\u0026\u0026ev.target.closest('[data-ks-cat]'); if(!b)return;\n      var c=b.getAttribute('data-ks-cat'); if(c===state.cat)return;\n      state.cat=c; state.q=''; if(searchEl)searchEl.value='';\n      renderCatTabs(); renderTable();\n    });\n\n    if(searchEl){var db;searchEl.addEventListener('input',function(){clearTimeout(db);db=setTimeout(function(){state.q=searchEl.value;renderTable();},140);});}\n\n    function boot(){ if(window.KS_ECUM_COVERAGE){ renderCatTabs(); renderTable(); } else { if(loadEl)loadEl.style.display='block'; } }\n    root.__ksEcumBoot=boot;\n    boot();\n  }\n\n  window.__ksEcumInitCoverage=function(){\n    document.querySelectorAll('.ks-ecum').forEach(function(w){ if(w.__ksEcumBoot)w.__ksEcumBoot(); });\n  };\n\n  function initAll(){ document.querySelectorAll('.ks-ecum').forEach(function(w){initEcum(w);}); }\n  if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',initAll);}else{initAll();}\n  setTimeout(initAll,500); setTimeout(initAll,1500);\n})();\n\u003c\/script\u003e\n\n\u003c!-- ============================================================\n     TAB STRIP SCROLLBAR\n     Fully delegated off `document`, so it survives the theme\n     cloning \/ re-rendering the product description.\n============================================================ --\u003e\n\u003cscript\u003e\n(function(){\n  if(window.__ksEcumTabBarLoaded) return;\n  window.__ksEcumTabBarLoaded = true;\n\n  var W='.ks-ecum__tabs-wrap',\n      BAR='[data-ks-role=\"tabs\"]',\n      NAV='[data-ks-role=\"tabnav\"]',\n      TRACK='[data-ks-role=\"tstrack\"]',\n      THUMB='[data-ks-role=\"tsthumb\"]';\n\n  function up(el, sel){\n    while(el \u0026\u0026 el.nodeType === 1){\n      if(el.matches \u0026\u0026 el.matches(sel)) return el;\n      el = el.parentElement;\n    }\n    return null;\n  }\n  function parts(wrap){\n    if(!wrap) return null;\n    var bar=wrap.querySelector(BAR), nav=wrap.querySelector(NAV),\n        track=wrap.querySelector(TRACK), thumb=wrap.querySelector(THUMB);\n    if(!bar || !nav || !track || !thumb) return null;\n    return {wrap:wrap, bar:bar, nav:nav, track:track, thumb:thumb};\n  }\n\n  \/* RTL scrollLeft semantics differ per engine: probe once per wrap *\/\n  function modeOf(P){\n    if(P.wrap.__ksMode) return P.wrap.__ksMode;\n    var m='ltr';\n    try{\n      if(window.getComputedStyle(P.bar).direction === 'rtl'){\n        var prev=P.bar.scrollLeft;\n        P.bar.scrollLeft = -1;\n        m = P.bar.scrollLeft \u003c 0 ? 'negative' : 'reverse';\n        P.bar.scrollLeft = prev;\n      }\n    }catch(e){ m='ltr'; }\n    P.wrap.__ksMode = m;\n    return m;\n  }\n\n  function maxScroll(bar){ return Math.max(0, bar.scrollWidth - bar.clientWidth); }\n\n  function getP(bar, mode){\n    var m = maxScroll(bar);\n    if(m \u003c= 0) return 0;\n    var v = (mode === 'ltr') ? bar.scrollLeft \/ m\n          : (mode === 'negative') ? -bar.scrollLeft \/ m\n          : (m - bar.scrollLeft) \/ m;\n    return Math.min(1, Math.max(0, v));\n  }\n  function setP(bar, mode, p){\n    var m = maxScroll(bar);\n    p = Math.min(1, Math.max(0, p));\n    if(mode === 'ltr') bar.scrollLeft = m * p;\n    else if(mode === 'negative') bar.scrollLeft = -m * p;\n    else bar.scrollLeft = m * (1 - p);\n  }\n\n  function render(P){\n    if(!P) return;\n    var m = maxScroll(P.bar);\n    if(m \u003c= 2){\n      P.nav.classList.add('ks-ecum__tabnav--hidden');\n      P.wrap.classList.remove('ks-ecum__tabs-wrap--scrollable');\n      return;\n    }\n    P.nav.classList.remove('ks-ecum__tabnav--hidden');\n    P.wrap.classList.add('ks-ecum__tabs-wrap--scrollable');\n    var tw = P.track.clientWidth;\n    if(tw \u003c= 0) return;\n    var mode = modeOf(P);\n    var thumbW = Math.max(30, Math.min(tw, Math.round(tw * (P.bar.clientWidth \/ P.bar.scrollWidth))));\n    var travel = Math.max(0, tw - thumbW);\n    var p = getP(P.bar, mode);\n    var x = (mode === 'ltr') ? travel * p : travel * (1 - p);\n    P.thumb.style.width = thumbW + 'px';\n    P.thumb.style.transform = 'translateX(' + x + 'px)';\n    P.track.setAttribute('aria-valuenow', Math.round(p * 100));\n  }\n  function renderAll(){\n    var list = document.querySelectorAll(W);\n    for(var i = 0; i \u003c list.length; i++) render(parts(list[i]));\n  }\n\n  \/* ---------- dragging the thumb ---------- *\/\n  var drag = null;\n\n  function pointerP(P, mode, clientX){\n    var r = P.track.getBoundingClientRect();\n    var thumbW = P.thumb.offsetWidth;\n    var travel = Math.max(1, P.track.clientWidth - thumbW);\n    var x = Math.min(travel, Math.max(0, clientX - r.left - thumbW \/ 2));\n    var frac = x \/ travel;\n    return (mode === 'ltr') ? frac : 1 - frac;\n  }\n  function begin(target, clientX, pointerId){\n    var P = parts(up(target, W));\n    if(!P || maxScroll(P.bar) \u003c= 2) return false;\n    var mode = modeOf(P);\n    drag = {P:P, mode:mode};\n    P.nav.classList.add('ks-ecum__tabnav--drag');\n    P.bar.style.scrollBehavior = 'auto';\n    if(pointerId != null){ try{ P.track.setPointerCapture(pointerId); }catch(e){} }\n    setP(P.bar, mode, pointerP(P, mode, clientX));\n    render(P);\n    return true;\n  }\n  function move(clientX){\n    if(!drag) return;\n    setP(drag.P.bar, drag.mode, pointerP(drag.P, drag.mode, clientX));\n    render(drag.P);\n  }\n  function end(){\n    if(!drag) return;\n    drag.P.nav.classList.remove('ks-ecum__tabnav--drag');\n    drag.P.bar.style.scrollBehavior = '';\n    drag = null;\n  }\n\n  if(typeof window.PointerEvent === 'function'){\n    document.addEventListener('pointerdown', function(e){\n      var t = up(e.target, TRACK); if(!t) return;\n      if(begin(t, e.clientX, e.pointerId) \u0026\u0026 e.cancelable) e.preventDefault();\n    }, true);\n    document.addEventListener('pointermove', function(e){\n      if(!drag) return; move(e.clientX); if(e.cancelable) e.preventDefault();\n    }, true);\n    document.addEventListener('pointerup', end, true);\n    document.addEventListener('pointercancel', end, true);\n  } else {\n    document.addEventListener('mousedown', function(e){\n      var t = up(e.target, TRACK); if(!t) return;\n      if(begin(t, e.clientX, null) \u0026\u0026 e.cancelable) e.preventDefault();\n    }, true);\n    document.addEventListener('mousemove', function(e){ if(drag) move(e.clientX); }, true);\n    document.addEventListener('mouseup', end, true);\n    document.addEventListener('touchstart', function(e){\n      var t = up(e.target, TRACK); if(!t || !e.touches[0]) return;\n      if(begin(t, e.touches[0].clientX, null) \u0026\u0026 e.cancelable) e.preventDefault();\n    }, {capture:true, passive:false});\n    document.addEventListener('touchmove', function(e){\n      if(drag \u0026\u0026 e.touches[0]){ move(e.touches[0].clientX); if(e.cancelable) e.preventDefault(); }\n    }, {capture:true, passive:false});\n    document.addEventListener('touchend', end, true);\n  }\n\n  \/* keyboard support on the track *\/\n  document.addEventListener('keydown', function(e){\n    var t = up(e.target, TRACK); if(!t) return;\n    var P = parts(up(t, W)); if(!P) return;\n    var mode = modeOf(P), p = getP(P.bar, mode), step = 0.18;\n    if(e.key === 'ArrowRight'){ setP(P.bar, mode, mode === 'ltr' ? p + step : p - step); render(P); e.preventDefault(); }\n    else if(e.key === 'ArrowLeft'){ setP(P.bar, mode, mode === 'ltr' ? p - step : p + step); render(P); e.preventDefault(); }\n  }, true);\n\n  \/* scroll doesn't bubble, but it does fire on document during capture,\n     so this catches tab-click auto-scroll, wheel and touch swipes alike *\/\n  document.addEventListener('scroll', function(e){\n    var el = e.target;\n    if(!drag \u0026\u0026 el \u0026\u0026 el.nodeType === 1 \u0026\u0026 el.matches \u0026\u0026 el.matches(BAR)){\n      render(parts(up(el, W)));\n    }\n  }, true);\n\n  window.addEventListener('resize', renderAll);\n  window.addEventListener('load', renderAll);\n  if(document.readyState === 'loading') document.addEventListener('DOMContentLoaded', renderAll);\n  else renderAll();\n\n  \/* keeps things correct while fonts\/layout settle and if the theme re-renders *\/\n  var n = 0;\n  var iv = setInterval(function(){ renderAll(); if(++n \u003e 60) clearInterval(iv); }, 500);\n\n  if(window.ResizeObserver){\n    try{\n      var ro = new ResizeObserver(renderAll);\n      var watch = function(){\n        var bars = document.querySelectorAll(BAR);\n        for(var i = 0; i \u003c bars.length; i++){\n          if(!bars[i].__ksRo){ bars[i].__ksRo = 1; ro.observe(bars[i]); }\n        }\n      };\n      watch(); setTimeout(watch, 1200); setTimeout(watch, 4000);\n    }catch(e){}\n  }\n})();\n\u003c\/script\u003e\n","brand":"OBDSTAR","offers":[{"title":"A- CAR","offer_id":52111291318492,"sku":"OBDS46000","price":1449.0,"currency_code":"USD","in_stock":true},{"title":"B- MOTORCYCLE","offer_id":52111291351260,"sku":"OBDS47000","price":829.0,"currency_code":"USD","in_stock":true},{"title":"C- TRUCKS","offer_id":52111291384028,"sku":"OBDS48000","price":2050.0,"currency_code":"USD","in_stock":true},{"title":"D- AIRBAG","offer_id":52111291416796,"sku":"OBDS49000","price":629.0,"currency_code":"USD","in_stock":true},{"title":"A+C- CAR\/TRUCKS","offer_id":52111291449564,"sku":"OBDS50000","price":3050.0,"currency_code":"USD","in_stock":true},{"title":"A+B+C- CAR\/MOTO\/TRUCKS","offer_id":52111291482332,"sku":"OBDS51000","price":3190.0,"currency_code":"USD","in_stock":true},{"title":"A+B+C+D- FULL","offer_id":52111291515100,"sku":"OBDS52000","price":3490.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0667\/1391\/1516\/files\/OBDS39000_2.jpg?v=1784911261","url":"https:\/\/keyshop-online.com\/products\/obdstar-ecu-master","provider":"Keyshop-Online","version":"1.0","type":"link"}