{"product_id":"engine-configurator","title":"Engine Configurator","description":"\u003cdiv class=\"rk-engine-builder\" id=\"rk-builder-24\"\u003e\n\u003cstyle\u003e\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@500;600;700\u0026family=IBM+Plex+Sans:wght@400;500;600\u0026family=IBM+Plex+Mono:wght@400;500;600\u0026display=swap');\n\n  #rk-builder-24{\n    --rk-graphite:#17181a;\n    --rk-panel:#212325;\n    --rk-panel-2:#292b2e;\n    --rk-line:#3a3e42;\n    --rk-blueprint:#7fb3d9;\n    --rk-chalk:#eeeae2;\n    --rk-steel-2:#9aa0a6;\n    --rk-safety:#ff5a1f;\n\n    all:initial;\n    display:block;\n    width:100%;\n    max-width:720px;\n    margin:0 auto;\n    font-family:'IBM Plex Sans',Arial,sans-serif;\n    color:var(--rk-chalk);\n    box-sizing:border-box;\n  }\n  #rk-builder-24 *{ box-sizing:border-box; }\n\n  #rk-builder-24 .mono{ font-family:'IBM Plex Mono',monospace; }\n  #rk-builder-24 .display{ font-family:'Oswald',Arial,sans-serif; text-transform:uppercase; letter-spacing:.03em; }\n\n  #rk-builder-24 .rk-eyebrow{\n    display:inline-flex; align-items:center; gap:8px;\n    font-family:'IBM Plex Mono',monospace; font-size:11px; letter-spacing:.14em;\n    color:var(--rk-safety); border:1px solid var(--rk-safety); padding:5px 10px; border-radius:2px;\n    margin:0 0 14px; text-transform:uppercase;\n  }\n  #rk-builder-24 .rk-eyebrow::before{ content:\"\"; width:6px; height:6px; background:var(--rk-safety); display:block; flex:none; }\n\n  #rk-builder-24 h2.rk-h{\n    font-family:'Oswald',Arial,sans-serif; text-transform:uppercase; letter-spacing:.03em;\n    font-size:15px; color:var(--rk-chalk); margin:26px 0 4px;\n  }\n  #rk-builder-24 p.rk-lede{\n    color:var(--rk-steel-2); font-size:13.5px; line-height:1.6; margin:0 0 18px;\n  }\n\n  #rk-builder-24 .rk-card{\n    background:var(--rk-panel); border:1px solid var(--rk-line); border-radius:4px;\n    padding:20px; margin-bottom:16px; width:100%;\n  }\n  #rk-builder-24 .rk-card h3{\n    font-family:'Oswald',Arial,sans-serif; text-transform:uppercase; letter-spacing:.03em;\n    font-size:18px; margin:0 0 3px; display:flex; align-items:center; gap:8px; color:var(--rk-chalk);\n  }\n  #rk-builder-24 .rk-card h3 .idx{ color:var(--rk-safety); font-family:'IBM Plex Mono',monospace; font-size:12px; }\n  #rk-builder-24 .rk-card .rk-sub{ color:var(--rk-steel-2); font-size:12.5px; margin:0 0 16px; }\n\n  #rk-builder-24 label.rk-label{\n    display:block; font-family:'IBM Plex Mono',monospace; font-size:11px; letter-spacing:.06em;\n    color:var(--rk-steel-2); text-transform:uppercase; margin-bottom:6px;\n  }\n  #rk-builder-24 select.rk-select{\n    width:100%; background:var(--rk-panel-2); color:var(--rk-chalk); border:1px solid var(--rk-line);\n    padding:11px 12px; border-radius:3px; font-family:'IBM Plex Sans',Arial,sans-serif; font-size:14px;\n    margin:0 0 16px; appearance:none; -webkit-appearance:none;\n    background-image:linear-gradient(45deg, transparent 50%, var(--rk-steel-2) 50%), linear-gradient(135deg, var(--rk-steel-2) 50%, transparent 50%);\n    background-position:calc(100% - 18px) center, calc(100% - 13px) center;\n    background-size:5px 5px, 5px 5px; background-repeat:no-repeat;\n    max-width:100%;\n  }\n  #rk-builder-24 select.rk-select:focus{ outline:2px solid var(--rk-safety); outline-offset:1px; }\n\n  #rk-builder-24 .rk-toggle-row{ display:flex; gap:0; margin-bottom:18px; border:1px solid var(--rk-line); border-radius:3px; overflow:hidden; width:fit-content; max-width:100%; }\n  #rk-builder-24 .rk-toggle-row button{\n    font-family:'IBM Plex Mono',monospace; font-size:11.5px; letter-spacing:.06em; text-transform:uppercase;\n    background:var(--rk-panel-2); color:var(--rk-steel-2); border:none; padding:9px 16px; cursor:pointer;\n  }\n  #rk-builder-24 .rk-toggle-row button.active{ background:var(--rk-safety); color:#1a1a1a; font-weight:600; }\n  #rk-builder-24 .rk-toggle-row button:not(.active):hover{ color:var(--rk-chalk); }\n\n  #rk-builder-24 .rk-mods-grid{ display:grid; gap:10px; width:100%; }\n  #rk-builder-24 .rk-mod-row{\n    display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap;\n    background:var(--rk-panel-2); border:1px solid var(--rk-line); border-radius:3px; padding:11px 12px;\n  }\n  #rk-builder-24 .rk-mod-row .rk-mod-left{ display:flex; align-items:center; gap:10px; min-width:0; }\n  #rk-builder-24 .rk-mod-row input[type=checkbox]{\n    width:17px; height:17px; accent-color:var(--rk-safety); cursor:pointer; flex:none;\n  }\n  #rk-builder-24 .rk-mod-row .rk-mod-name{ font-size:13.5px; word-break:break-word; }\n  #rk-builder-24 .rk-mod-row .rk-mod-price{ font-family:'IBM Plex Mono',monospace; font-size:13px; color:var(--rk-blueprint); white-space:nowrap; margin-left:auto; }\n\n  #rk-builder-24 .rk-note{ font-size:11.5px; color:var(--rk-steel-2); margin-top:14px; line-height:1.6; border-top:1px dashed var(--rk-line); padding-top:12px; }\n\n  #rk-builder-24 .rk-plate{\n    background:var(--rk-panel); border:1px solid var(--rk-safety); border-radius:4px; margin-top:8px; overflow:hidden;\n  }\n  #rk-builder-24 .rk-plate-head{\n    position:relative; padding:16px 18px 12px; border-bottom:1px solid var(--rk-line);\n    background:linear-gradient(180deg, rgba(255,90,31,.10), transparent);\n  }\n  #rk-builder-24 .rk-plate-head .rk-brand{ font-family:'Oswald',Arial,sans-serif; font-size:12px; letter-spacing:.12em; color:var(--rk-safety); }\n  #rk-builder-24 .rk-plate-head .rk-model{ font-family:'Oswald',Arial,sans-serif; font-size:18px; font-weight:700; margin-top:2px; color:var(--rk-chalk); }\n  #rk-builder-24 .rk-plate-head .rk-serial{ font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--rk-steel-2); margin-top:5px; }\n  #rk-builder-24 .rk-plate-body{ padding:14px 18px; }\n  #rk-builder-24 .rk-plate-line{\n    display:flex; justify-content:space-between; gap:10px; font-size:12.5px; padding:6px 0;\n    border-bottom:1px solid rgba(255,255,255,.06);\n  }\n  #rk-builder-24 .rk-plate-line .l-name{ color:var(--rk-chalk); }\n  #rk-builder-24 .rk-plate-line .l-price{ font-family:'IBM Plex Mono',monospace; color:var(--rk-steel-2); white-space:nowrap; }\n  #rk-builder-24 .rk-plate-line.base .l-price{ color:var(--rk-blueprint); }\n  #rk-builder-24 #rk-builder-24-items:empty::after{\n    content:\"No performance options selected yet.\"; color:var(--rk-steel-2); font-size:12px; font-style:italic;\n  }\n  #rk-builder-24 .rk-plate-total{\n    display:flex; justify-content:space-between; align-items:baseline; padding:16px 18px;\n    border-top:1px solid var(--rk-line); background:var(--rk-panel-2);\n  }\n  #rk-builder-24 .rk-plate-total .t-label{ font-family:'IBM Plex Mono',monospace; font-size:11px; letter-spacing:.08em; color:var(--rk-steel-2); text-transform:uppercase; }\n  #rk-builder-24 .rk-plate-total .t-value{ font-family:'IBM Plex Mono',monospace; font-size:26px; color:var(--rk-safety); font-weight:600; }\n\n  #rk-builder-24 .rk-footnote{\n    text-align:center; color:var(--rk-steel-2); font-size:11px; font-family:'IBM Plex Mono',monospace; margin-top:16px;\n  }\n  #rk-builder-24 .rk-footnote a{ color:var(--rk-chalk); }\n\u003c\/style\u003e\n\n\u003cspan class=\"rk-eyebrow\"\u003eRED TOP · 2.4 · LE5 · LEA\u003c\/span\u003e\n\u003ch2 class=\"rk-h\"\u003eBuild Your Engine\u003c\/h2\u003e\n\u003cp class=\"rk-lede\"\u003eConfigure the short block and cylinder head independently, stock or full performance. Every Red Top is hand-assembled in-house by Rough Knuckle Racing.\u003c\/p\u003e\n\n\u003cdiv class=\"rk-card\"\u003e\n  \u003ch3\u003e\n\u003cspan class=\"idx\"\u003e00\u003c\/span\u003e Engine Code\u003c\/h3\u003e\n  \u003cp class=\"rk-sub\"\u003eSelect the specific 2.4 engine code for this build.\u003c\/p\u003e\n  \u003clabel class=\"rk-label\"\u003eEngine Code\u003c\/label\u003e\n  \u003cselect class=\"rk-select\" id=\"rk-builder-24-engcode\"\u003e\n    \u003coption value=\"LE5\"\u003eLE5\u003c\/option\u003e\n    \u003coption value=\"LEA\"\u003eLEA\u003c\/option\u003e\n  \u003c\/select\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"rk-card\" data-section=\"block\"\u003e\n  \u003ch3\u003e\n\u003cspan class=\"idx\"\u003e01\u003c\/span\u003e Short Block\u003c\/h3\u003e\n  \u003cp class=\"rk-sub\"\u003eRotating assembly, oiling system \u0026amp; bottom-end hardware.\u003c\/p\u003e\n\n  \u003cdiv class=\"rk-toggle-row\" data-toggle=\"block\"\u003e\n    \u003cbutton type=\"button\" class=\"active\" data-mode=\"stock\"\u003eStock\u003c\/button\u003e\n    \u003cbutton type=\"button\" data-mode=\"performance\"\u003ePerformance\u003c\/button\u003e\n  \u003c\/div\u003e\n\n  \u003clabel class=\"rk-label\"\u003eConnecting Rods\u003c\/label\u003e\n  \u003cselect class=\"rk-select\" data-group=\"block\" data-key=\"rods\"\u003e\n    \u003coption value=\"stock\" data-price=\"0\"\u003eStock Rods (+$0)\u003c\/option\u003e\n    \u003coption value=\"stock-arp\" data-price=\"100\"\u003eStock Rods w\/ ARP Rod Bolts (+$100)\u003c\/option\u003e\n    \u003coption value=\"molnar\" data-price=\"525\"\u003eForged Molnar Rods (+$525)\u003c\/option\u003e\n  \u003c\/select\u003e\n\n  \u003clabel class=\"rk-label\"\u003ePistons\u003c\/label\u003e\n  \u003cselect class=\"rk-select\" data-group=\"block\" data-key=\"pistons\"\u003e\n    \u003coption value=\"stock\" data-price=\"0\"\u003eStock Pistons (+$0)\u003c\/option\u003e\n    \u003coption value=\"forged\" data-price=\"775\"\u003eForged Pistons (+$775)\u003c\/option\u003e\n  \u003c\/select\u003e\n\n  \u003clabel class=\"rk-label\" style=\"margin-top:2px;\"\u003eAdditional Short Block Mods\u003c\/label\u003e\n  \u003cdiv class=\"rk-mods-grid\"\u003e\n    \u003clabel class=\"rk-mod-row\"\u003e\n      \u003cspan class=\"rk-mod-left\"\u003e\u003cinput type=\"checkbox\" data-group=\"block\" data-key=\"chain-delete\" data-price=\"175\" data-name=\"Short Chain \/ Balance Shaft Delete\"\u003e\u003cspan class=\"rk-mod-name\"\u003eShort Chain \/ Balance Shaft Delete\u003c\/span\u003e\u003c\/span\u003e\n      \u003cspan class=\"rk-mod-price\"\u003e+$175\u003c\/span\u003e\n    \u003c\/label\u003e\n    \u003clabel class=\"rk-mod-row\"\u003e\n      \u003cspan class=\"rk-mod-left\"\u003e\u003cinput type=\"checkbox\" data-group=\"block\" data-key=\"oil-pump\" data-price=\"299\" data-name=\"Boundary Oil Pump\"\u003e\u003cspan class=\"rk-mod-name\"\u003eBoundary Oil Pump\u003c\/span\u003e\u003c\/span\u003e\n      \u003cspan class=\"rk-mod-price\"\u003e+$299\u003c\/span\u003e\n    \u003c\/label\u003e\n    \u003clabel class=\"rk-mod-row\"\u003e\n      \u003cspan class=\"rk-mod-left\"\u003e\u003cinput type=\"checkbox\" data-group=\"block\" data-key=\"crank\" data-price=\"375\" data-name=\"Lightweight Balanced Crankshaft (-6 lbs)\"\u003e\u003cspan class=\"rk-mod-name\"\u003eLightweight Balanced Crankshaft (-6 lbs)\u003c\/span\u003e\u003c\/span\u003e\n      \u003cspan class=\"rk-mod-price\"\u003e+$375\u003c\/span\u003e\n    \u003c\/label\u003e\n    \u003clabel class=\"rk-mod-row\"\u003e\n      \u003cspan class=\"rk-mod-left\"\u003e\u003cinput type=\"checkbox\" data-group=\"block\" data-key=\"tensioner\" data-price=\"100\" data-name=\"Mechanical Chain Tensioner\"\u003e\u003cspan class=\"rk-mod-name\"\u003eMechanical Chain Tensioner\u003c\/span\u003e\u003c\/span\u003e\n      \u003cspan class=\"rk-mod-price\"\u003e+$100\u003c\/span\u003e\n    \u003c\/label\u003e\n    \u003clabel class=\"rk-mod-row\"\u003e\n      \u003cspan class=\"rk-mod-left\"\u003e\u003cinput type=\"checkbox\" data-group=\"block\" data-key=\"miata-pan\" data-price=\"949\" data-name=\"Ecotec Miata Oil Pan\"\u003e\u003cspan class=\"rk-mod-name\"\u003eEcotec Miata Oil Pan\u003c\/span\u003e\u003c\/span\u003e\n      \u003cspan class=\"rk-mod-price\"\u003e+$949\u003c\/span\u003e\n    \u003c\/label\u003e\n  \u003c\/div\u003e\n  \u003cp class=\"rk-note\"\u003eStock quick-select sets Connecting Rods to Stock Rods and Pistons to Stock. Performance sets Rods to Forged Molnar and Pistons to Forged. \"Stock Rods w\/ ARP Rod Bolts\" is a manual mid-tier option in between.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"rk-card\" data-section=\"head\"\u003e\n  \u003ch3\u003e\n\u003cspan class=\"idx\"\u003e02\u003c\/span\u003e Cylinder Head\u003c\/h3\u003e\n  \u003cp class=\"rk-sub\"\u003eValvetrain, cams \u0026amp; head hardware.\u003c\/p\u003e\n\n  \u003cdiv class=\"rk-toggle-row\" data-toggle=\"head\"\u003e\n    \u003cbutton type=\"button\" class=\"active\" data-mode=\"stock\"\u003eStock\u003c\/button\u003e\n    \u003cbutton type=\"button\" data-mode=\"performance\"\u003ePerformance\u003c\/button\u003e\n  \u003c\/div\u003e\n\n  \u003clabel class=\"rk-label\"\u003eCamshafts\u003c\/label\u003e\n  \u003cselect class=\"rk-select\" data-group=\"head\" data-key=\"cams\"\u003e\n    \u003coption value=\"stock\" data-price=\"0\"\u003eStock Cams (+$0)\u003c\/option\u003e\n    \u003coption value=\"endurance\" data-price=\"850\"\u003eVVT Endurance Race Cams (+$850)\u003c\/option\u003e\n    \u003coption value=\"sprint\" data-price=\"900\"\u003eSprint Race Cams (+$900)\u003c\/option\u003e\n  \u003c\/select\u003e\n\n  \u003clabel class=\"rk-label\"\u003eValves\u003c\/label\u003e\n  \u003cselect class=\"rk-select\" data-group=\"head\" data-key=\"valves\"\u003e\n    \u003coption value=\"stock\" data-price=\"0\"\u003eStock Valves (+$0)\u003c\/option\u003e\n    \u003coption value=\"intake\" data-price=\"130\"\u003eOversized Intake Valves (+$130)\u003c\/option\u003e\n    \u003coption value=\"exhaust\" data-price=\"120\"\u003eStellite Exhaust Valves (+$120)\u003c\/option\u003e\n    \u003coption value=\"both\" data-price=\"250\"\u003eOversized Intake + Stellite Exhaust (+$250)\u003c\/option\u003e\n  \u003c\/select\u003e\n\n  \u003clabel class=\"rk-label\" style=\"margin-top:2px;\"\u003eAdditional Cylinder Head Mods\u003c\/label\u003e\n  \u003cdiv class=\"rk-mods-grid\"\u003e\n    \u003clabel class=\"rk-mod-row\"\u003e\n      \u003cspan class=\"rk-mod-left\"\u003e\u003cinput type=\"checkbox\" data-group=\"head\" data-key=\"springs\" data-price=\"150\" data-name=\"82# Valve Springs\"\u003e\u003cspan class=\"rk-mod-name\"\u003e82# Valve Springs\u003c\/span\u003e\u003c\/span\u003e\n      \u003cspan class=\"rk-mod-price\"\u003e+$150\u003c\/span\u003e\n    \u003c\/label\u003e\n    \u003clabel class=\"rk-mod-row\"\u003e\n      \u003cspan class=\"rk-mod-left\"\u003e\u003cinput type=\"checkbox\" data-group=\"head\" data-key=\"valve-job\" data-price=\"275\" data-name=\"Valve Job\"\u003e\u003cspan class=\"rk-mod-name\"\u003eValve Job\u003c\/span\u003e\u003c\/span\u003e\n      \u003cspan class=\"rk-mod-price\"\u003e+$275\u003c\/span\u003e\n    \u003c\/label\u003e\n    \u003clabel class=\"rk-mod-row\"\u003e\n      \u003cspan class=\"rk-mod-left\"\u003e\u003cinput type=\"checkbox\" data-group=\"head\" data-key=\"porting\" data-price=\"950\" data-name=\"Performance Porting\"\u003e\u003cspan class=\"rk-mod-name\"\u003ePerformance Porting\u003c\/span\u003e\u003c\/span\u003e\n      \u003cspan class=\"rk-mod-price\"\u003e+$950\u003c\/span\u003e\n    \u003c\/label\u003e\n    \u003clabel class=\"rk-mod-row\"\u003e\n      \u003cspan class=\"rk-mod-left\"\u003e\u003cinput type=\"checkbox\" data-group=\"head\" data-key=\"studs\" data-price=\"180\" data-name=\"ARP Head Studs\"\u003e\u003cspan class=\"rk-mod-name\"\u003eARP Head Studs\u003c\/span\u003e\u003c\/span\u003e\n      \u003cspan class=\"rk-mod-price\"\u003e+$180\u003c\/span\u003e\n    \u003c\/label\u003e\n    \u003clabel class=\"rk-mod-row\"\u003e\n      \u003cspan class=\"rk-mod-left\"\u003e\u003cinput type=\"checkbox\" data-group=\"head\" data-key=\"vvt-delete\" data-price=\"295\" data-name=\"VVT Delete \/ Adjustable Camshaft Gears\"\u003e\u003cspan class=\"rk-mod-name\"\u003eVVT Delete \/ Adjustable Camshaft Gears\u003c\/span\u003e\u003c\/span\u003e\n      \u003cspan class=\"rk-mod-price\"\u003e+$295\u003c\/span\u003e\n    \u003c\/label\u003e\n  \u003c\/div\u003e\n  \u003cp class=\"rk-note\"\u003eSprint Race Cams auto-selects Adjustable Cam Gears. Any race cam (Endurance or Sprint) auto-selects 82# Valve Springs. Any oversized valve option auto-selects Valve Job. Moving a dropdown back to stock automatically unchecks the matching box.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"rk-plate\"\u003e\n  \u003cdiv class=\"rk-plate-head\"\u003e\n    \u003cdiv class=\"rk-brand\"\u003eROUGH KNUCKLE RACING\u003c\/div\u003e\n    \u003cdiv class=\"rk-model\"\u003e2.4 Red Top — \u003cspan id=\"rk-builder-24-platecode\"\u003eLE5\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"rk-serial mono\"\u003eBUILD NO. \u003cspan id=\"rk-builder-24-serial\"\u003e—\u003c\/span\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"rk-plate-body\"\u003e\n    \u003cdiv class=\"rk-plate-line base\"\u003e\n      \u003cspan class=\"l-name\"\u003eBase Engine (Stock Block \u0026amp; Head)\u003c\/span\u003e\n      \u003cspan class=\"l-price\"\u003e$4,125\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv id=\"rk-builder-24-items\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"rk-plate-total\"\u003e\n    \u003cspan class=\"t-label\"\u003eTotal\u003c\/span\u003e\n    \u003cspan class=\"t-value mono\" id=\"rk-builder-24-total\"\u003e$4,125\u003c\/span\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cp class=\"rk-footnote\"\u003eFull lineup \u0026amp; contact at \u003ca href=\"https:\/\/RoughKnuckleRacing.com\" target=\"_blank\" rel=\"noopener\"\u003eRoughKnuckleRacing.com\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n  var root = document.getElementById('rk-builder-24');\n  if(!root) return;\n\n  var BASE_PRICE = 4125;\n\n  var engineSelect = root.querySelector('#rk-builder-24-engcode');\n  var plateCode = root.querySelector('#rk-builder-24-platecode');\n  var plateSerial = root.querySelector('#rk-builder-24-serial');\n  var itemsEl = root.querySelector('#rk-builder-24-items');\n  var totalEl = root.querySelector('#rk-builder-24-total');\n\n  var camSelect = root.querySelector('select[data-group=\"head\"][data-key=\"cams\"]');\n  var valveSelect = root.querySelector('select[data-group=\"head\"][data-key=\"valves\"]');\n  var vvtDeleteCheckbox = root.querySelector('input[data-group=\"head\"][data-key=\"vvt-delete\"]');\n  var valveJobCheckbox = root.querySelector('input[data-group=\"head\"][data-key=\"valve-job\"]');\n  var springsCheckbox = root.querySelector('input[data-group=\"head\"][data-key=\"springs\"]');\n\n  function updateEngineCode(){\n    var code = engineSelect.value;\n    plateCode.textContent = code;\n    var suffix = Math.random().toString(36).slice(2,6).toUpperCase();\n    plateSerial.textContent = 'RK-' + code + '-' + suffix;\n  }\n  engineSelect.addEventListener('change', function(){ updateEngineCode(); render(); });\n\n  root.querySelectorAll('select.rk-select[data-group]').forEach(function(sel){\n    sel.addEventListener('change', function(){\n      if(sel === camSelect){\n        vvtDeleteCheckbox.checked = (camSelect.value === 'sprint');\n        springsCheckbox.checked = (camSelect.value !== 'stock');\n      }\n      if(sel === valveSelect){\n        valveJobCheckbox.checked = (valveSelect.value !== 'stock');\n      }\n      render();\n    });\n  });\n\n  root.querySelectorAll('input[type=checkbox][data-group]').forEach(function(cb){\n    cb.addEventListener('change', render);\n  });\n\n  root.querySelectorAll('.rk-toggle-row').forEach(function(row){\n    var section = row.getAttribute('data-toggle');\n    row.querySelectorAll('button').forEach(function(btn){\n      btn.addEventListener('click', function(){\n        row.querySelectorAll('button').forEach(function(b){ b.classList.remove('active'); });\n        btn.classList.add('active');\n        var mode = btn.getAttribute('data-mode');\n        if(section === 'block'){\n          var rodsSel = root.querySelector('select[data-group=\"block\"][data-key=\"rods\"]');\n          var pistonSel = root.querySelector('select[data-group=\"block\"][data-key=\"pistons\"]');\n          rodsSel.value = mode === 'performance' ? 'molnar' : 'stock';\n          pistonSel.value = mode === 'performance' ? 'forged' : 'stock';\n        }\n        if(section === 'head'){\n          camSelect.value = mode === 'performance' ? 'endurance' : 'stock';\n          valveSelect.value = mode === 'performance' ? 'both' : 'stock';\n          vvtDeleteCheckbox.checked = (camSelect.value === 'sprint');\n          springsCheckbox.checked = (camSelect.value !== 'stock');\n          valveJobCheckbox.checked = (valveSelect.value !== 'stock');\n        }\n        render();\n      });\n    });\n  });\n\n  function currency(n){ return '$' + n.toLocaleString('en-US'); }\n\n  function render(){\n    var total = BASE_PRICE;\n    var items = [];\n\n    root.querySelectorAll('select.rk-select[data-group]').forEach(function(sel){\n      var opt = sel.options[sel.selectedIndex];\n      var price = parseInt(opt.getAttribute('data-price'), 10) || 0;\n      if(price \u003e 0){\n        total += price;\n        items.push({ name: opt.textContent.replace(\/\\s*\\(\\+\\$[\\d,]+\\)$\/, ''), price: price });\n      }\n    });\n\n    root.querySelectorAll('input[type=checkbox][data-group]').forEach(function(cb){\n      if(cb.checked){\n        var price = parseInt(cb.getAttribute('data-price'), 10) || 0;\n        total += price;\n        items.push({ name: cb.getAttribute('data-name'), price: price });\n      }\n    });\n\n    itemsEl.innerHTML = items.map(function(it){\n      return '\u003cdiv class=\"rk-plate-line\"\u003e\u003cspan class=\"l-name\"\u003e' + it.name + '\u003c\/span\u003e\u003cspan class=\"l-price\"\u003e+' + currency(it.price) + '\u003c\/span\u003e\u003c\/div\u003e';\n    }).join('');\n\n    totalEl.textContent = currency(total);\n  }\n\n  updateEngineCode();\n  render();\n})();\n\u003c\/script\u003e","brand":"Rough Knuckle Racing","offers":[{"title":"525","offer_id":45845982216275,"sku":null,"price":525.0,"currency_code":"USD","in_stock":true},{"title":"225","offer_id":45845982249043,"sku":null,"price":225.0,"currency_code":"USD","in_stock":true}],"url":"https:\/\/roughknuckleracing.com\/products\/engine-configurator","provider":"Rough Knuckle Racing","version":"1.0","type":"link"}