{"id":192021,"date":"2026-08-19T13:04:25","date_gmt":"2026-08-19T11:04:25","guid":{"rendered":"https:\/\/newmobility.news\/?page_id=192021"},"modified":"2026-08-20T08:30:46","modified_gmt":"2026-08-20T06:30:46","slug":"newmobility-news-tco-test-8x27","status":"publish","type":"page","link":"https:\/\/newmobility.news\/nl\/newmobility-news-tco-test-8x27\/","title":{"rendered":"NMN TCO-calculator-test"},"content":{"rendered":"\n<style>\n\/* Hide the normal WordPress page title on this calculator page *\/\n#primary .entry-title,\nmain .entry-title,\nmain .wp-block-post-title {\n  display: none !important;\n}\n<\/style>\n\n<style>\n#nmn-tco{\n  --red:#d61f26;--red2:#b9151b;--ink:#15171a;--muted:#667085;--line:#e5e7eb;\n  --ok:#147a52;--warn:#b45309;--warnbg:#fff7ed;--auto:#075985;--autobg:#f0f9ff;\n  --ice:#6b7280;--hev:#ca8a04;--phev:#0f766e;--bev:#1d4ed8;\n  font-family:Arial,Helvetica,sans-serif;color:var(--ink);max-width:1220px;margin:24px auto 48px\n}\n#nmn-tco *{box-sizing:border-box}\n#nmn-tco .hero{color:#fff;border-radius:22px;padding:28px 26px;background:linear-gradient(135deg,#111318 0%,#20242b 48%,var(--red) 100%);box-shadow:0 8px 24px rgba(17,24,39,.10)}\n#nmn-tco .eyebrow{font-size:12px;text-transform:uppercase;letter-spacing:.12em;font-weight:800;color:#ffd9da}\n#nmn-tco h2{margin:7px 0 9px;font-size:34px;line-height:1.08;color:#fff}\n#nmn-tco .sub{margin:0;max-width:860px;color:#f3f4f6;line-height:1.5}\n#nmn-tco .pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:15px}\n#nmn-tco .hero-pill{padding:7px 11px;border-radius:999px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.14);font-size:12px;font-weight:700}\n#nmn-tco .panel{margin-top:18px;background:#fff;border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:0 7px 20px rgba(17,24,39,.06)}\n#nmn-tco .panel-title{margin:0 0 14px;font-size:21px;font-weight:800}\n#nmn-tco .tco-explain{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(280px,.75fr);gap:16px;align-items:start}\n#nmn-tco .tco-copy p{margin:0 0 10px;font-size:13px;line-height:1.55;color:#475467}\n#nmn-tco .tco-flow{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin-top:12px}\n#nmn-tco .tco-chip{padding:7px 9px;border-radius:999px;background:#f3f4f6;border:1px solid var(--line);font-size:11px;font-weight:800;color:#374151}\n#nmn-tco .tco-plus{font-size:13px;font-weight:900;color:#98a2b3}\n#nmn-tco .tco-formula{border:1px solid #bfdbfe;background:#eff6ff;border-radius:13px;padding:14px}\n#nmn-tco .tco-formula strong{display:block;margin-bottom:7px;font-size:13px;color:#1e3a8a}\n#nmn-tco .tco-eq{font-size:13px;line-height:1.55;color:#1e3a8a;font-weight:800}\n#nmn-tco .tco-note{margin-top:9px;font-size:11px;line-height:1.45;color:#475569}\n#nmn-tco .tco-link{display:inline-block;margin-top:7px;font-size:11px;font-weight:800;color:#075985;text-decoration:none}\n#nmn-tco .tco-link:hover{text-decoration:underline}\n#nmn-tco .legend{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}\n#nmn-tco .legend-item{border:1px solid var(--line);border-radius:12px;padding:12px;background:#fafafa}\n#nmn-tco .legend-top{display:flex;align-items:center;gap:8px;margin-bottom:5px}\n#nmn-tco .legend-icon,#nmn-tco .car-icon{display:flex;align-items:center;justify-content:center;color:#fff}\n#nmn-tco .legend-icon{width:27px;height:27px;border-radius:8px;font-size:14px}\n#nmn-tco .legend-item strong{font-size:12px}\n#nmn-tco .legend-item p{font-size:11px;line-height:1.4;color:#59606b;margin:0}\n#nmn-tco .toggle{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:14px}\n#nmn-tco button{font:inherit}\n#nmn-tco .country{border:1px solid #d1d5db;background:#fff;padding:10px 14px;border-radius:999px;font-weight:800;cursor:pointer;color:#222}\n#nmn-tco .country.active{background:var(--red);border-color:var(--red);color:#fff}\n#nmn-tco .grid{display:grid;gap:14px}\n#nmn-tco .global{grid-template-columns:repeat(4,minmax(0,1fr))}\n#nmn-tco .cars{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:18px}\n#nmn-tco .cars.two-cars{grid-template-columns:repeat(2,minmax(0,1fr))}\n#nmn-tco .results.two-cars{grid-template-columns:repeat(2,minmax(0,1fr))}\n#nmn-tco .card-head-actions{display:flex;align-items:center;gap:7px}\n#nmn-tco .add-car{border:1px dashed #94a3b8;background:#fff;color:#334155;border-radius:11px;padding:11px 15px;font-size:13px;font-weight:900;cursor:pointer}\n#nmn-tco .add-car:hover{border-color:var(--red);color:var(--red)}\n#nmn-tco .remove-car{border:1px solid #fecaca;background:#fff;color:#b91c1c;border-radius:8px;padding:6px 8px;font-size:10px;font-weight:900;cursor:pointer}\n#nmn-tco .remove-car:hover{background:#fef2f2}\n#nmn-tco .card{background:#fff;border:1px solid var(--line);border-radius:17px;overflow:hidden;box-shadow:0 7px 20px rgba(17,24,39,.06)}\n#nmn-tco .card-head{display:flex;align-items:center;justify-content:space-between;padding:15px 17px;border-bottom:1px solid var(--line)}\n#nmn-tco .car-title{display:flex;align-items:center;gap:9px}\n#nmn-tco .car-icon{width:36px;height:36px;border-radius:10px;font-size:18px}\n#nmn-tco .type-ice{background:var(--ice)}\n#nmn-tco .type-hev{background:var(--hev)}\n#nmn-tco .type-phev{background:var(--phev)}\n#nmn-tco .type-bev{background:var(--bev)}\n#nmn-tco .badge{padding:6px 9px;border-radius:999px;color:#fff;font-size:11px;font-weight:800}\n#nmn-tco .card-body{padding:16px 17px}\n#nmn-tco .field{margin-bottom:11px}\n#nmn-tco label{display:block;margin-bottom:5px;font-size:12px;font-weight:800;color:#4b5563}\n#nmn-tco input,#nmn-tco select{width:100%;padding:10px 11px;border:1px solid #d1d5db;border-radius:9px;background:#fff;font-size:14px;color:#111}\n#nmn-tco input:focus,#nmn-tco select:focus{outline:2px solid rgba(214,31,38,.14);border-color:var(--red)}\n#nmn-tco .row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}\n#nmn-tco .section{margin:15px 0 8px;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:#6b7280}\n#nmn-tco .hint{font-size:11px;color:var(--muted);line-height:1.4;margin-top:4px}\n#nmn-tco .power-help{margin-top:6px;padding:8px 10px;border-radius:9px;background:#f8fafc;border:1px solid var(--line);font-size:11px;line-height:1.4;color:#475569}\n#nmn-tco .usedbox{margin:4px 0 13px;padding:11px 12px;border:1px solid #e9d5ff;background:#faf5ff;border-radius:11px}\n#nmn-tco .usedbox .section{color:#6d28d9;margin-top:0}\n#nmn-tco .note{margin-top:9px;padding:11px 12px;border-radius:10px;background:#fff7ed;border-left:4px solid #fb923c;font-size:12px;line-height:1.45;color:#7c2d12}\n#nmn-tco .taxbox{margin-top:6px;padding:11px;border:1px solid var(--line);border-radius:11px;background:#fafafa}\n#nmn-tco .taxbox.auto{border-color:#7dd3fc;background:var(--autobg)}\n#nmn-tco .taxbox.manual{border-color:#fdba74;background:var(--warnbg)}\n#nmn-tco .taxbadge{display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border-radius:999px;font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.06em}\n#nmn-tco .taxbadge.auto{background:#e0f2fe;color:#075985}\n#nmn-tco .taxbadge.manual{background:#ffedd5;color:#9a3412}\n#nmn-tco .tax-summary{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:9px 0}\n#nmn-tco .tax-summary div{background:#fff;border:1px solid var(--line);border-radius:9px;padding:9px}\n#nmn-tco .tax-summary span{display:block;font-size:10px;color:var(--muted);font-weight:800;text-transform:uppercase;letter-spacing:.04em}\n#nmn-tco .tax-summary b{display:block;font-size:16px;margin-top:3px}\n#nmn-tco details.tax-details{margin-top:8px}\n#nmn-tco details.tax-details summary{cursor:pointer;font-size:12px;font-weight:800;color:#374151}\n#nmn-tco .tax-inner{margin-top:9px;padding-top:9px;border-top:1px solid var(--line)}\n#nmn-tco .official-link{display:inline-block;margin-top:5px;font-size:11px;font-weight:800;color:#075985;text-decoration:none}\n#nmn-tco .official-link:hover{text-decoration:underline}\n#nmn-tco .actions{display:flex;gap:11px;align-items:center;flex-wrap:wrap;margin-top:16px}\n#nmn-tco .action{border:0;border-radius:11px;padding:12px 17px;background:linear-gradient(180deg,var(--red),var(--red2));color:#fff;font-size:15px;font-weight:800;cursor:pointer;box-shadow:0 7px 16px rgba(214,31,38,.22)}\n#nmn-tco .pdf-action{border:1px solid #1f2937;border-radius:11px;padding:11px 15px;background:#1f2937;color:#fff;font-size:13px;font-weight:900;cursor:pointer}\n#nmn-tco .pdf-action:hover{background:#111827}\n#nmn-tco .pdf-status{font-size:11px;color:var(--muted)}\n\n#nmn-tco .small{font-size:12px;color:var(--muted)}\n#nmn-tco .results{grid-template-columns:repeat(3,minmax(0,1fr))}\n#nmn-tco .result{position:relative;border:1px solid var(--line);border-radius:14px;padding:15px;background:#fff;min-height:145px}\n#nmn-tco .result.best{border:2px solid var(--ok)}\n#nmn-tco .result.best:after{content:'Best choice';position:absolute;right:0;top:0;background:var(--ok);color:#fff;padding:6px 9px;border-bottom-left-radius:9px;font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.06em}\n#nmn-tco .type-label{font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:#6b7280}\n#nmn-tco .status{display:inline-block;margin-top:5px;padding:4px 7px;border-radius:999px;background:#f3f4f6;font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.05em;color:#4b5563}\n#nmn-tco .status.used,#nmn-tco .status.demo{background:#f3e8ff;color:#6d28d9}\n#nmn-tco .valuation-box{margin:10px 0;padding:10px 11px;border:1px solid #dbe3ee;border-radius:10px;background:#f8fafc}\n#nmn-tco .valuation-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}\n#nmn-tco .valuation-item{padding:8px;border-radius:8px;background:#fff;border:1px solid #e5e7eb}\n#nmn-tco .valuation-item span{display:block;font-size:10px;color:#6b7280;line-height:1.25}\n#nmn-tco .valuation-item b{display:block;margin-top:3px;font-size:13px;color:#111827}\n#nmn-tco .auto-resale{display:flex!important;align-items:flex-start;gap:7px;margin-top:9px;font-size:11px!important;font-weight:800!important;color:#374151!important;text-transform:none!important;letter-spacing:0!important}\n#nmn-tco .auto-resale input{width:auto!important;margin-top:2px}\n@media(max-width:700px){#nmn-tco .valuation-grid{grid-template-columns:1fr}}\n\n#nmn-tco .monthly{font-size:31px;font-weight:900;margin:8px 0 2px}\n#nmn-tco .metric{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px solid #f1f2f4;font-size:13px}\n#nmn-tco .metric:last-child{border-bottom:0}\n#nmn-tco .winner{margin-top:15px;padding:12px 13px;border-radius:11px;background:#f5faf7;border-left:4px solid var(--ok);line-height:1.5}\n#nmn-tco .comparison{margin-top:11px;padding:12px 13px;border:1px solid var(--line);border-radius:11px;background:#fafafa;font-size:13px;line-height:1.5}\n#nmn-tco .bars{margin-top:15px}\n#nmn-tco .bar-row{display:grid;grid-template-columns:120px 1fr 95px;gap:10px;align-items:center;margin:8px 0;font-size:12px}\n#nmn-tco .track{height:12px;background:#eceff1;border-radius:99px;overflow:hidden}\n#nmn-tco .fill{height:100%;border-radius:99px}\n#nmn-tco .disclaimer{font-size:11px;color:#6b7280;line-height:1.5;margin-top:15px}\n#nmn-tco .copyright{margin-top:10px;padding-top:10px;border-top:1px solid #e5e7eb;font-size:10px;line-height:1.45;color:#8a94a3;text-align:center}\n\n#nmn-tco .hidden{display:none!important}\n@media(max-width:960px){\n  #nmn-tco .global{grid-template-columns:1fr 1fr}\n  #nmn-tco .cars,#nmn-tco .results{grid-template-columns:1fr}\n  #nmn-tco .legend{grid-template-columns:1fr 1fr}\n  #nmn-tco .bar-row{grid-template-columns:90px 1fr 90px}\n}\n@media(max-width:560px){\n  #nmn-tco .global,#nmn-tco .row2,#nmn-tco .legend,#nmn-tco .tax-summary,#nmn-tco .tco-explain{grid-template-columns:1fr}\n  #nmn-tco h2{font-size:28px}\n  #nmn-tco .hero{padding:22px 18px}\n}\n<\/style>\n\n<div id=\"nmn-tco\">\n  <div class=\"hero\">\n    <div class=\"eyebrow\">Newmobility.news<\/div>\n    <h2>NMN TCO Calculator<\/h2>\n    <p class=\"sub\">Compare any three cars. Choose ICE, HEV, PHEV or BEV independently, and mix new, demo and used cars. The calculator covers Belgium, the Netherlands and Luxembourg, with automatic 2026 vehicle-tax calculations where supported.<\/p>\n    <div class=\"pills\">\n      <span class=\"hero-pill\">\ud83d\ude98 Any 3 cars<\/span>\n      <span class=\"hero-pill\">\u26fd ICE \u00b7 \u267b\ufe0f HEV \u00b7 \ud83d\udd0c PHEV \u00b7 \ud83d\udd0b BEV<\/span>\n      <span class=\"hero-pill\">\ud83c\udde7\ud83c\uddea Belgium tax auto<\/span>\n      <span class=\"hero-pill\">\ud83c\uddf3\ud83c\uddf1 Dutch MRB assisted<\/span>\n      <span class=\"hero-pill\">\ud83c\uddf1\ud83c\uddfa Luxembourg tax auto<\/span>\n      <span class=\"hero-pill\">Tax rules: 19 Aug 2026<\/span>\n      <span class=\"hero-pill\">\u2713 Benelux number formats<\/span>\n      <span class=\"hero-pill\">\u21bb Full recalculation<\/span>\n      <span class=\"hero-pill\">Build v5.8<\/span>\n    <\/div>\n  <\/div>\n\n  <div class=\"panel\" id=\"how-tco-works\">\n    <div class=\"panel-title\">What is TCO?<\/div>\n    <div class=\"tco-explain\">\n      <div class=\"tco-copy\">\n        <p><strong>Total Cost of Ownership (TCO)<\/strong> is the estimated total cost of owning and using a car over the period you select. It looks beyond the purchase price and combines the main costs that change between cars and powertrains.<\/p>\n        <div class=\"tco-flow\">\n          <span class=\"tco-chip\">Depreciation<\/span><span class=\"tco-plus\">+<\/span>\n          <span class=\"tco-chip\">Energy \/ fuel<\/span><span class=\"tco-plus\">+<\/span>\n          <span class=\"tco-chip\">Maintenance<\/span><span class=\"tco-plus\">+<\/span>\n          <span class=\"tco-chip\">Insurance<\/span><span class=\"tco-plus\">+<\/span>\n          <span class=\"tco-chip\">Taxes<\/span><span class=\"tco-plus\">+<\/span>\n          <span class=\"tco-chip\">Extra repairs*<\/span>\n        <\/div>\n        <p class=\"tco-note\">*Extra repairs \/ wear are only added when you enter them for a used or demo car. Financing, parking, tyres, subsidies and exceptional one-off costs are excluded unless explicitly stated.<\/p>\n      <\/div>\n      <div class=\"tco-formula\">\n        <strong>How NMN calculates it<\/strong>\n        <div class=\"tco-eq\">Depreciation = purchase price today \u2212 expected resale value<\/div>\n        <div class=\"tco-eq\">TCO = depreciation + running costs + taxes + insurance + maintenance<\/div>\n        <div class=\"tco-eq\">Monthly TCO = total TCO \u00f7 number of months owned<\/div>\n        <div class=\"tco-note\"><strong>Important:<\/strong> expected resale value is already included through depreciation. It is not deducted a second time.<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"panel\">\n    <div class=\"panel-title\">Which powertrain should I choose?<\/div>\n    <div class=\"legend\">\n      <div class=\"legend-item\"><div class=\"legend-top\"><span class=\"legend-icon type-ice\">\u26fd<\/span><strong>ICE<\/strong><\/div><p>Petrol or diesel. Mild hybrids (MHEV) can be entered here using their actual fuel consumption.<\/p><\/div>\n      <div class=\"legend-item\"><div class=\"legend-top\"><span class=\"legend-icon type-hev\">\u267b\ufe0f<\/span><strong>HEV<\/strong><\/div><p>Full hybrid without a plug. Its battery assists the engine and recharges while driving and braking.<\/p><\/div>\n      <div class=\"legend-item\"><div class=\"legend-top\"><span class=\"legend-icon type-phev\">\ud83d\udd0c<\/span><strong>PHEV<\/strong><\/div><p>Plug-in hybrid. Enter fuel and electric use. How often you charge has a major effect on TCO.<\/p><\/div>\n      <div class=\"legend-item\"><div class=\"legend-top\"><span class=\"legend-icon type-bev\">\ud83d\udd0b<\/span><strong>BEV<\/strong><\/div><p>Fully electric. Running cost depends strongly on electricity use and where you normally charge.<\/p><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"panel\">\n    <div class=\"panel-title\">\u2699\ufe0f Your setup<\/div>\n    <div class=\"toggle\">\n      <button type=\"button\" class=\"country active\" data-country=\"BE\">\ud83c\udde7\ud83c\uddea Belgium<\/button>\n      <button type=\"button\" class=\"country\" data-country=\"NL\">\ud83c\uddf3\ud83c\uddf1 Netherlands<\/button>\n      <button type=\"button\" class=\"country\" data-country=\"LU\">\ud83c\uddf1\ud83c\uddfa Luxembourg<\/button>\n    <\/div>\n    <div class=\"grid global\">\n      <div class=\"field\" data-be-only><label>Belgian region<\/label><select data-id=\"beRegion\"><option>Flanders<\/option><option>Brussels<\/option><option>Wallonia<\/option><\/select><\/div>\n      <div class=\"field hidden\" data-nl-only><label>Dutch province<\/label><select data-id=\"nlProvince\"><option>Drenthe<\/option><option>Flevoland<\/option><option>Friesland<\/option><option>Gelderland<\/option><option>Groningen<\/option><option selected>Limburg<\/option><option>Noord-Brabant<\/option><option>Noord-Holland<\/option><option>Overijssel<\/option><option>Utrecht<\/option><option>Zeeland<\/option><option>Zuid-Holland<\/option><\/select><\/div>\n      <div class=\"field\"><label>Ownership period<\/label><select data-id=\"years\"><option>3<\/option><option selected>5<\/option><option>6<\/option><option>8<\/option><\/select><\/div>\n      <div class=\"field\"><label>Kilometres per year<\/label><input data-id=\"km\" type=\"text\" inputmode=\"decimal\" value=\"20000\" step=\"1000\"><\/div>\n      <div class=\"field\"><label>Petrol price \u20ac\/l<\/label><input data-id=\"petrolPrice\" type=\"text\" inputmode=\"decimal\" value=\"1.81\" step=\"0.01\"><\/div>\n      <div class=\"field\"><label>Diesel price \u20ac\/l<\/label><input data-id=\"dieselPrice\" type=\"text\" inputmode=\"decimal\" value=\"2.16\" step=\"0.01\"><\/div>\n      <div class=\"field\"><label>Home electricity \u20ac\/kWh<\/label><input data-id=\"homePrice\" type=\"text\" inputmode=\"decimal\" value=\"0.35\" step=\"0.01\"><\/div>\n      <div class=\"field\"><label>Public AC \u20ac\/kWh<\/label><input data-id=\"publicPrice\" type=\"text\" inputmode=\"decimal\" value=\"0.52\" step=\"0.01\"><\/div>\n      <div class=\"field\"><label>Fast charging \u20ac\/kWh<\/label><input data-id=\"fastPrice\" type=\"text\" inputmode=\"decimal\" value=\"0.72\" step=\"0.01\"><\/div>\n    <\/div>\n    <div class=\"note\" data-id=\"countryNote\"><\/div>\n    <div class=\"hint\" data-id=\"energyPriceNote\" style=\"margin-top:8px\"><strong>Energy-price defaults:<\/strong> latest available national averages\/benchmarks are loaded when you switch country. Fuel: EU weekly averages (13 Aug 2026). Home electricity: latest Eurostat household benchmark (H2 2025). Public AC\/fast charging: latest available market averages. All values remain editable.<\/div>\n    <div class=\"hint\" style=\"margin-top:8px\">Number formats: both Benelux and international notation are accepted, for example <strong>14.950<\/strong> or <strong>14950<\/strong> for \u20ac14,950 and <strong>5,2<\/strong> or <strong>5.2<\/strong> for consumption.<\/div>\n  <\/div>\n\n  <div class=\"grid cars two-cars\" data-id=\"carsGrid\">\n\n    <!-- CAR 1 -->\n    <div class=\"card\" data-card=\"1\">\n      <div class=\"card-head\"><div class=\"car-title\"><div class=\"car-icon type-ice\" data-role=\"icon\">\u26fd<\/div><div><strong>Car 1<\/strong><div class=\"small\" data-role=\"subtitle\">Combustion engine<\/div><\/div><\/div><span class=\"badge type-ice\" data-role=\"badge\">ICE<\/span><\/div>\n      <div class=\"card-body\">\n        <div class=\"row2\"><div class=\"field\"><label>Name<\/label><input data-id=\"c1Name\" value=\"Car 1\"><\/div><div class=\"field\"><label>Powertrain<\/label><select data-id=\"c1Type\"><option selected>ICE<\/option><option>HEV<\/option><option>PHEV<\/option><option>BEV<\/option><\/select><div class=\"power-help\" data-role=\"powerHelp\"><\/div><\/div><\/div>\n        <div class=\"row2\"><div class=\"field\"><label>Vehicle status<\/label><select data-id=\"c1Status\"><option value=\"new\">New<\/option><option value=\"demo\">Demo \/ nearly new<\/option><option value=\"used\">Used<\/option><\/select><\/div><div class=\"field\"><label>Purchase price today \u20ac<\/label><input data-id=\"c1Price\" type=\"text\" inputmode=\"decimal\" value=\"32000\"><\/div><\/div>\n        <div data-new-only=\"c1\"><div class=\"field\"><label>Expected residual value %<\/label><input data-id=\"c1Residual\" type=\"text\" inputmode=\"decimal\" value=\"42\"><\/div><\/div>\n        <div class=\"usedbox hidden\" data-used-only=\"c1\">\n          <div class=\"section\">\ud83d\ude98 Used \/ demo details<\/div>\n          <div class=\"row2\">\n            <div class=\"field\">\n              <label>First registration date<\/label>\n              <input data-id=\"c1UsedFirstReg\" type=\"date\" value=\"\">\n              <div class=\"hint\">Also used as the vehicle age for the resale estimate and regional tax calculations.<\/div>\n            <\/div>\n            <div class=\"field\">\n              <label>Current mileage km<\/label>\n              <input data-id=\"c1CurrentKm\" type=\"text\" inputmode=\"decimal\" value=\"\" placeholder=\"e.g. 38000\">\n              <div class=\"hint\">Enter the odometer reading today.<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"valuation-box\">\n            <div class=\"valuation-grid\">\n              <div class=\"valuation-item\"><span>Expected mileage at resale<\/span><b data-used-mileage=\"1\">\u2014<\/b><\/div>\n              <div class=\"valuation-item\"><span>Vehicle age at resale<\/span><b data-used-age=\"1\">\u2014<\/b><\/div>\n              <div class=\"valuation-item\"><span>NMN suggested resale value<\/span><b data-used-suggested=\"1\">\u2014<\/b><\/div>\n            <\/div>\n            <label class=\"auto-resale\">\n              <input data-id=\"c1AutoResale\" type=\"checkbox\" checked>\n              <span>Use the NMN suggested resale value automatically<\/span>\n            <\/label>\n            <div class=\"hint\">Indicative NMN heuristic based on today&#8217;s purchase price, vehicle age, current mileage, expected age\/mileage at resale and powertrain. It is not a market valuation. Untick the box to enter your own resale estimate.<\/div>\n          <\/div>\n\n          <div class=\"row2\">\n            <div class=\"field\">\n              <label>Expected resale value \u20ac<\/label>\n              <input data-id=\"c1ResaleEuro\" type=\"text\" inputmode=\"decimal\" value=\"14500\">\n            <\/div>\n            <div class=\"field\">\n              <label>Extra repairs \/ wear \u20ac\/yr<\/label>\n              <input data-id=\"c1Repairs\" type=\"text\" inputmode=\"decimal\" value=\"400\">\n            <\/div>\n          <\/div>\n        <\/div>\n        <div data-type-block=\"ICE\" data-prefix=\"c1\"><div class=\"row2\"><div class=\"field\"><label>Fuel<\/label><select data-id=\"c1Fuel\"><option value=\"petrol\">Petrol<\/option><option value=\"diesel\">Diesel<\/option><\/select><\/div><div class=\"field\"><label>Consumption l\/100 km<\/label><input data-id=\"c1FuelCons\" type=\"text\" inputmode=\"decimal\" value=\"6.5\" step=\"0.1\"><\/div><\/div><\/div>\n        <div data-type-block=\"HEV\" data-prefix=\"c1\" class=\"hidden\"><div class=\"row2\"><div class=\"field\"><label>Fuel<\/label><select data-id=\"c1HevFuel\"><option value=\"petrol\">Petrol<\/option><option value=\"diesel\">Diesel<\/option><\/select><\/div><div class=\"field\"><label>Consumption l\/100 km<\/label><input data-id=\"c1HevFuelCons\" type=\"text\" inputmode=\"decimal\" value=\"4.8\" step=\"0.1\"><\/div><\/div><\/div>\n        <div data-type-block=\"PHEV\" data-prefix=\"c1\" class=\"hidden\"><div class=\"row2\"><div class=\"field\"><label>Fuel use l\/100 km*<\/label><input data-id=\"c1PhevFuelCons\" type=\"text\" inputmode=\"decimal\" value=\"6.0\" step=\"0.1\"><\/div><div class=\"field\"><label>Electric use kWh\/100 km<\/label><input data-id=\"c1PhevElecCons\" type=\"text\" inputmode=\"decimal\" value=\"19.0\" step=\"0.1\"><\/div><\/div><div class=\"field\"><label>Kilometres driven electrically %<\/label><input data-id=\"c1PhevElecShare\" type=\"text\" inputmode=\"decimal\" value=\"65\"><\/div><div class=\"section\">\u26a1 Charging mix<\/div><div class=\"row2\"><div class=\"field\"><label>Home %<\/label><input data-id=\"c1PhevHome\" type=\"text\" inputmode=\"decimal\" value=\"80\"><\/div><div class=\"field\"><label>Public AC %<\/label><input data-id=\"c1PhevPublic\" type=\"text\" inputmode=\"decimal\" value=\"20\"><\/div><\/div><div class=\"hint\">*Fuel use applies to combustion-engine kilometres.<\/div><\/div>\n        <div data-type-block=\"BEV\" data-prefix=\"c1\" class=\"hidden\"><div class=\"field\"><label>Consumption kWh\/100 km<\/label><input data-id=\"c1BevCons\" type=\"text\" inputmode=\"decimal\" value=\"17.5\" step=\"0.1\"><\/div><div class=\"section\">\u26a1 Charging mix<\/div><div class=\"row2\"><div class=\"field\"><label>Home %<\/label><input data-id=\"c1BevHome\" type=\"text\" inputmode=\"decimal\" value=\"70\"><\/div><div class=\"field\"><label>Public AC %<\/label><input data-id=\"c1BevPublic\" type=\"text\" inputmode=\"decimal\" value=\"20\"><\/div><\/div><div class=\"field\"><label>Fast charging %<\/label><input data-id=\"c1BevFast\" type=\"text\" inputmode=\"decimal\" value=\"10\"><\/div><\/div>\n        <div class=\"section\">\ud83d\udee0\ufe0f Annual fixed costs<\/div><div class=\"row2\"><div class=\"field\"><label>Maintenance \u20ac\/yr<\/label><input data-id=\"c1Maint\" type=\"text\" inputmode=\"decimal\" value=\"650\"><\/div><div class=\"field\"><label>Insurance \u20ac\/yr<\/label><input data-id=\"c1Ins\" type=\"text\" inputmode=\"decimal\" value=\"850\"><\/div><\/div>\n        <div data-tax-placeholder=\"1\"><\/div>\n      <\/div>\n    <\/div>\n\n    <!-- CAR 2 -->\n    <div class=\"card\" data-card=\"2\">\n      <div class=\"card-head\"><div class=\"car-title\"><div class=\"car-icon type-hev\" data-role=\"icon\">\u267b\ufe0f<\/div><div><strong>Car 2<\/strong><div class=\"small\" data-role=\"subtitle\">Full hybrid<\/div><\/div><\/div><span class=\"badge type-hev\" data-role=\"badge\">HEV<\/span><\/div>\n      <div class=\"card-body\">\n        <div class=\"row2\"><div class=\"field\"><label>Name<\/label><input data-id=\"c2Name\" value=\"Car 2\"><\/div><div class=\"field\"><label>Powertrain<\/label><select data-id=\"c2Type\"><option>ICE<\/option><option selected>HEV<\/option><option>PHEV<\/option><option>BEV<\/option><\/select><div class=\"power-help\" data-role=\"powerHelp\"><\/div><\/div><\/div>\n        <div class=\"row2\"><div class=\"field\"><label>Vehicle status<\/label><select data-id=\"c2Status\"><option value=\"new\">New<\/option><option value=\"demo\">Demo \/ nearly new<\/option><option value=\"used\">Used<\/option><\/select><\/div><div class=\"field\"><label>Purchase price today \u20ac<\/label><input data-id=\"c2Price\" type=\"text\" inputmode=\"decimal\" value=\"35000\"><\/div><\/div>\n        <div data-new-only=\"c2\"><div class=\"field\"><label>Expected residual value %<\/label><input data-id=\"c2Residual\" type=\"text\" inputmode=\"decimal\" value=\"44\"><\/div><\/div>\n        <div class=\"usedbox hidden\" data-used-only=\"c2\">\n          <div class=\"section\">\ud83d\ude98 Used \/ demo details<\/div>\n          <div class=\"row2\">\n            <div class=\"field\">\n              <label>First registration date<\/label>\n              <input data-id=\"c2UsedFirstReg\" type=\"date\" value=\"\">\n              <div class=\"hint\">Also used as the vehicle age for the resale estimate and regional tax calculations.<\/div>\n            <\/div>\n            <div class=\"field\">\n              <label>Current mileage km<\/label>\n              <input data-id=\"c2CurrentKm\" type=\"text\" inputmode=\"decimal\" value=\"\" placeholder=\"e.g. 38000\">\n              <div class=\"hint\">Enter the odometer reading today.<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"valuation-box\">\n            <div class=\"valuation-grid\">\n              <div class=\"valuation-item\"><span>Expected mileage at resale<\/span><b data-used-mileage=\"2\">\u2014<\/b><\/div>\n              <div class=\"valuation-item\"><span>Vehicle age at resale<\/span><b data-used-age=\"2\">\u2014<\/b><\/div>\n              <div class=\"valuation-item\"><span>NMN suggested resale value<\/span><b data-used-suggested=\"2\">\u2014<\/b><\/div>\n            <\/div>\n            <label class=\"auto-resale\">\n              <input data-id=\"c2AutoResale\" type=\"checkbox\" checked>\n              <span>Use the NMN suggested resale value automatically<\/span>\n            <\/label>\n            <div class=\"hint\">Indicative NMN heuristic based on today&#8217;s purchase price, vehicle age, current mileage, expected age\/mileage at resale and powertrain. It is not a market valuation. Untick the box to enter your own resale estimate.<\/div>\n          <\/div>\n\n          <div class=\"row2\">\n            <div class=\"field\">\n              <label>Expected resale value \u20ac<\/label>\n              <input data-id=\"c2ResaleEuro\" type=\"text\" inputmode=\"decimal\" value=\"16000\">\n            <\/div>\n            <div class=\"field\">\n              <label>Extra repairs \/ wear \u20ac\/yr<\/label>\n              <input data-id=\"c2Repairs\" type=\"text\" inputmode=\"decimal\" value=\"350\">\n            <\/div>\n          <\/div>\n        <\/div>\n        <div data-type-block=\"ICE\" data-prefix=\"c2\" class=\"hidden\"><div class=\"row2\"><div class=\"field\"><label>Fuel<\/label><select data-id=\"c2Fuel\"><option value=\"petrol\">Petrol<\/option><option value=\"diesel\">Diesel<\/option><\/select><\/div><div class=\"field\"><label>Consumption l\/100 km<\/label><input data-id=\"c2FuelCons\" type=\"text\" inputmode=\"decimal\" value=\"6.5\" step=\"0.1\"><\/div><\/div><\/div>\n        <div data-type-block=\"HEV\" data-prefix=\"c2\"><div class=\"row2\"><div class=\"field\"><label>Fuel<\/label><select data-id=\"c2HevFuel\"><option value=\"petrol\">Petrol<\/option><option value=\"diesel\">Diesel<\/option><\/select><\/div><div class=\"field\"><label>Consumption l\/100 km<\/label><input data-id=\"c2HevFuelCons\" type=\"text\" inputmode=\"decimal\" value=\"4.8\" step=\"0.1\"><\/div><\/div><div class=\"hint\">No charging cost is entered separately for an HEV.<\/div><\/div>\n        <div data-type-block=\"PHEV\" data-prefix=\"c2\" class=\"hidden\"><div class=\"row2\"><div class=\"field\"><label>Fuel use l\/100 km*<\/label><input data-id=\"c2PhevFuelCons\" type=\"text\" inputmode=\"decimal\" value=\"6.0\" step=\"0.1\"><\/div><div class=\"field\"><label>Electric use kWh\/100 km<\/label><input data-id=\"c2PhevElecCons\" type=\"text\" inputmode=\"decimal\" value=\"19.0\" step=\"0.1\"><\/div><\/div><div class=\"field\"><label>Kilometres driven electrically %<\/label><input data-id=\"c2PhevElecShare\" type=\"text\" inputmode=\"decimal\" value=\"65\"><\/div><div class=\"section\">\u26a1 Charging mix<\/div><div class=\"row2\"><div class=\"field\"><label>Home %<\/label><input data-id=\"c2PhevHome\" type=\"text\" inputmode=\"decimal\" value=\"80\"><\/div><div class=\"field\"><label>Public AC %<\/label><input data-id=\"c2PhevPublic\" type=\"text\" inputmode=\"decimal\" value=\"20\"><\/div><\/div><div class=\"hint\">*Fuel use applies to combustion-engine kilometres.<\/div><\/div>\n        <div data-type-block=\"BEV\" data-prefix=\"c2\" class=\"hidden\"><div class=\"field\"><label>Consumption kWh\/100 km<\/label><input data-id=\"c2BevCons\" type=\"text\" inputmode=\"decimal\" value=\"17.5\" step=\"0.1\"><\/div><div class=\"section\">\u26a1 Charging mix<\/div><div class=\"row2\"><div class=\"field\"><label>Home %<\/label><input data-id=\"c2BevHome\" type=\"text\" inputmode=\"decimal\" value=\"70\"><\/div><div class=\"field\"><label>Public AC %<\/label><input data-id=\"c2BevPublic\" type=\"text\" inputmode=\"decimal\" value=\"20\"><\/div><\/div><div class=\"field\"><label>Fast charging %<\/label><input data-id=\"c2BevFast\" type=\"text\" inputmode=\"decimal\" value=\"10\"><\/div><\/div>\n        <div class=\"section\">\ud83d\udee0\ufe0f Annual fixed costs<\/div><div class=\"row2\"><div class=\"field\"><label>Maintenance \u20ac\/yr<\/label><input data-id=\"c2Maint\" type=\"text\" inputmode=\"decimal\" value=\"550\"><\/div><div class=\"field\"><label>Insurance \u20ac\/yr<\/label><input data-id=\"c2Ins\" type=\"text\" inputmode=\"decimal\" value=\"875\"><\/div><\/div>\n        <div data-tax-placeholder=\"2\"><\/div>\n      <\/div>\n    <\/div>\n\n    <!-- CAR 3 -->\n    <div class=\"card hidden\" data-card=\"3\">\n      <div class=\"card-head\"><div class=\"car-title\"><div class=\"car-icon type-bev\" data-role=\"icon\">\ud83d\udd0b<\/div><div><strong>Car 3<\/strong><div class=\"small\" data-role=\"subtitle\">Battery electric<\/div><\/div><\/div><div class=\"card-head-actions\"><span class=\"badge type-bev\" data-role=\"badge\">BEV<\/span><button type=\"button\" class=\"remove-car\" data-id=\"removeCar3\">Remove<\/button><\/div><\/div>\n      <div class=\"card-body\">\n        <div class=\"row2\"><div class=\"field\"><label>Name<\/label><input data-id=\"c3Name\" value=\"Car 3\"><\/div><div class=\"field\"><label>Powertrain<\/label><select data-id=\"c3Type\"><option>ICE<\/option><option>HEV<\/option><option>PHEV<\/option><option selected>BEV<\/option><\/select><div class=\"power-help\" data-role=\"powerHelp\"><\/div><\/div><\/div>\n        <div class=\"row2\"><div class=\"field\"><label>Vehicle status<\/label><select data-id=\"c3Status\"><option value=\"new\">New<\/option><option value=\"demo\">Demo \/ nearly new<\/option><option value=\"used\">Used<\/option><\/select><\/div><div class=\"field\"><label>Purchase price today \u20ac<\/label><input data-id=\"c3Price\" type=\"text\" inputmode=\"decimal\" value=\"39000\"><\/div><\/div>\n        <div data-new-only=\"c3\"><div class=\"field\"><label>Expected residual value %<\/label><input data-id=\"c3Residual\" type=\"text\" inputmode=\"decimal\" value=\"40\"><\/div><\/div>\n        <div class=\"usedbox hidden\" data-used-only=\"c3\">\n          <div class=\"section\">\ud83d\ude98 Used \/ demo details<\/div>\n          <div class=\"row2\">\n            <div class=\"field\">\n              <label>First registration date<\/label>\n              <input data-id=\"c3UsedFirstReg\" type=\"date\" value=\"\">\n              <div class=\"hint\">Also used as the vehicle age for the resale estimate and regional tax calculations.<\/div>\n            <\/div>\n            <div class=\"field\">\n              <label>Current mileage km<\/label>\n              <input data-id=\"c3CurrentKm\" type=\"text\" inputmode=\"decimal\" value=\"\" placeholder=\"e.g. 38000\">\n              <div class=\"hint\">Enter the odometer reading today.<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"valuation-box\">\n            <div class=\"valuation-grid\">\n              <div class=\"valuation-item\"><span>Expected mileage at resale<\/span><b data-used-mileage=\"3\">\u2014<\/b><\/div>\n              <div class=\"valuation-item\"><span>Vehicle age at resale<\/span><b data-used-age=\"3\">\u2014<\/b><\/div>\n              <div class=\"valuation-item\"><span>NMN suggested resale value<\/span><b data-used-suggested=\"3\">\u2014<\/b><\/div>\n            <\/div>\n            <label class=\"auto-resale\">\n              <input data-id=\"c3AutoResale\" type=\"checkbox\" checked>\n              <span>Use the NMN suggested resale value automatically<\/span>\n            <\/label>\n            <div class=\"hint\">Indicative NMN heuristic based on today&#8217;s purchase price, vehicle age, current mileage, expected age\/mileage at resale and powertrain. It is not a market valuation. Untick the box to enter your own resale estimate.<\/div>\n          <\/div>\n\n          <div class=\"row2\">\n            <div class=\"field\">\n              <label>Expected resale value \u20ac<\/label>\n              <input data-id=\"c3ResaleEuro\" type=\"text\" inputmode=\"decimal\" value=\"17500\">\n            <\/div>\n            <div class=\"field\">\n              <label>Extra repairs \/ wear \u20ac\/yr<\/label>\n              <input data-id=\"c3Repairs\" type=\"text\" inputmode=\"decimal\" value=\"300\">\n            <\/div>\n          <\/div>\n        <\/div>\n        <div data-type-block=\"ICE\" data-prefix=\"c3\" class=\"hidden\"><div class=\"row2\"><div class=\"field\"><label>Fuel<\/label><select data-id=\"c3Fuel\"><option value=\"petrol\">Petrol<\/option><option value=\"diesel\">Diesel<\/option><\/select><\/div><div class=\"field\"><label>Consumption l\/100 km<\/label><input data-id=\"c3FuelCons\" type=\"text\" inputmode=\"decimal\" value=\"6.5\" step=\"0.1\"><\/div><\/div><\/div>\n        <div data-type-block=\"HEV\" data-prefix=\"c3\" class=\"hidden\"><div class=\"row2\"><div class=\"field\"><label>Fuel<\/label><select data-id=\"c3HevFuel\"><option value=\"petrol\">Petrol<\/option><option value=\"diesel\">Diesel<\/option><\/select><\/div><div class=\"field\"><label>Consumption l\/100 km<\/label><input data-id=\"c3HevFuelCons\" type=\"text\" inputmode=\"decimal\" value=\"4.8\" step=\"0.1\"><\/div><\/div><div class=\"hint\">No charging cost is entered separately for an HEV.<\/div><\/div>\n        <div data-type-block=\"PHEV\" data-prefix=\"c3\" class=\"hidden\"><div class=\"row2\"><div class=\"field\"><label>Fuel use l\/100 km*<\/label><input data-id=\"c3PhevFuelCons\" type=\"text\" inputmode=\"decimal\" value=\"6.0\" step=\"0.1\"><\/div><div class=\"field\"><label>Electric use kWh\/100 km<\/label><input data-id=\"c3PhevElecCons\" type=\"text\" inputmode=\"decimal\" value=\"19.0\" step=\"0.1\"><\/div><\/div><div class=\"field\"><label>Kilometres driven electrically %<\/label><input data-id=\"c3PhevElecShare\" type=\"text\" inputmode=\"decimal\" value=\"65\"><\/div><div class=\"section\">\u26a1 Charging mix<\/div><div class=\"row2\"><div class=\"field\"><label>Home %<\/label><input data-id=\"c3PhevHome\" type=\"text\" inputmode=\"decimal\" value=\"80\"><\/div><div class=\"field\"><label>Public AC %<\/label><input data-id=\"c3PhevPublic\" type=\"text\" inputmode=\"decimal\" value=\"20\"><\/div><\/div><div class=\"hint\">*Fuel use applies to combustion-engine kilometres.<\/div><\/div>\n        <div data-type-block=\"BEV\" data-prefix=\"c3\"><div class=\"field\"><label>Consumption kWh\/100 km<\/label><input data-id=\"c3BevCons\" type=\"text\" inputmode=\"decimal\" value=\"17.5\" step=\"0.1\"><\/div><div class=\"section\">\u26a1 Charging mix<\/div><div class=\"row2\"><div class=\"field\"><label>Home %<\/label><input data-id=\"c3BevHome\" type=\"text\" inputmode=\"decimal\" value=\"70\"><\/div><div class=\"field\"><label>Public AC %<\/label><input data-id=\"c3BevPublic\" type=\"text\" inputmode=\"decimal\" value=\"20\"><\/div><\/div><div class=\"field\"><label>Fast charging %<\/label><input data-id=\"c3BevFast\" type=\"text\" inputmode=\"decimal\" value=\"10\"><\/div><\/div>\n        <div class=\"section\">\ud83d\udee0\ufe0f Annual fixed costs<\/div><div class=\"row2\"><div class=\"field\"><label>Maintenance \u20ac\/yr<\/label><input data-id=\"c3Maint\" type=\"text\" inputmode=\"decimal\" value=\"400\"><\/div><div class=\"field\"><label>Insurance \u20ac\/yr<\/label><input data-id=\"c3Ins\" type=\"text\" inputmode=\"decimal\" value=\"950\"><\/div><\/div>\n        <div data-tax-placeholder=\"3\"><\/div>\n      <\/div>\n    <\/div>\n\n  <\/div>\n\n  <div class=\"actions\">\n    <button type=\"button\" class=\"add-car\" data-id=\"addCar3\">\uff0b Add third car<\/button>\n    <button type=\"button\" class=\"action\" data-id=\"calculate\">Calculate TCO<\/button>\n    <button type=\"button\" class=\"pdf-action\" data-id=\"downloadPdf\">\u2b07 Download PDF<\/button>\n    <span class=\"pdf-status\" data-id=\"pdfStatus\">Calculate TCO refreshes all current inputs. Download PDF recalculates once more before export.<\/span>\n  <\/div>\n\n  <div class=\"panel\">\n    <div class=\"panel-title\">\ud83d\udcca Comparison<\/div>\n    <a class=\"tco-link\" href=\"#how-tco-works\">\u24d8 How is this calculated?<\/a>\n    <div class=\"grid results two-cars\" data-id=\"resultsGrid\">\n      <div class=\"result\" data-result=\"1\"><strong>Car 1<\/strong><div class=\"small\">Enter your assumptions and calculate.<\/div><\/div>\n      <div class=\"result\" data-result=\"2\"><strong>Car 2<\/strong><div class=\"small\">Enter your assumptions and calculate.<\/div><\/div>\n      <div class=\"result hidden\" data-result=\"3\"><strong>Car 3<\/strong><div class=\"small\">Enter your assumptions and calculate.<\/div><\/div>\n    <\/div>\n    <div class=\"winner\" data-id=\"winner\">The lowest-TCO car will appear here.<\/div>\n    <div class=\"comparison\" data-id=\"comparisonNote\">Compare two cars, or add a third car when you want a broader Benelux comparison.<\/div>\n    <div class=\"bars\" data-id=\"bars\"><\/div>\n    <div class=\"disclaimer\">\n      Indicative editorial calculator, not a tax assessment or vehicle valuation. For used\/demo cars, the NMN suggested resale value is an editable heuristic based on today&#8217;s purchase price, vehicle age, current mileage, expected age\/mileage at resale and powertrain. Belgian automation assumes a standard privately owned\/non-leased passenger car and the rules\/rates applicable on 19 August 2026. Flemish BIV for non-BEV cars first registered before 2021 remains manual in this beta. Brussels automation uses the 2026 non-leasing passenger-car tables. Wallonia uses the TMC formula in force for registrations from 1 July 2025 and the 2026-2027 annual road-tax tariff; special reductions, exemptions and LPG supplements are not included. Dutch MRB uses the current quarterly amount supplied by the user from the official Belastingdienst calculator; future base-rate indexation is unknown and therefore not modelled. Luxembourg uses the standard \u20ac50 SNCA registration charge and the CO\u2082-based annual road-tax formula for M1 passenger cars first registered from 2001; pre-2001 annual tax remains manual and special exemptions\/refunds are excluded.\n    <\/div>\n    <div class=\"copyright\">\n      \u00a9 2026 B2BNews Agency. All rights reserved. The NMN TCO Calculator, its presentation and calculation methodology may not be reproduced or redistributed without permission.\n    <\/div>\n  <\/div>\n<\/div>\n\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/4.2.1\/jspdf.umd.min.js\"><\/script>\n<script>\n\/* NMN TCO Calculator v5.8 \u00b7 GA4 events: tco_calculator_used, tco_calculation, tco_pdf_download *\/\n(function(){\n  const root=document.getElementById('nmn-tco'); if(!root) return;\n  const q=(s,c=root)=>c.querySelector(s), qa=(s,c=root)=>Array.from(c.querySelectorAll(s));\n  const el=id=>q('[data-id=\"'+id+'\"]');\n\n  function numberMode(id){\n    const s=String(id||'');\n\n    \/\/ Unit prices must always be parsed as decimals.\n    \/\/ Examples: 0.350 \u20ac\/kWh, 0,35 \u20ac\/kWh, 1.81 \u20ac\/l.\n    if(['petrolPrice','dieselPrice','homePrice','publicPrice','fastPrice'].includes(s)) return 'decimal';\n\n    \/\/ Vehicle purchase price and other euro totals may use Benelux\n    \/\/ thousands separators such as 14.950 or 17.399.\n    if(\/(?:Price|ResaleEuro|Repairs|Maint|Ins|BivManual|NlQuarter|LuPre2001Annual|RegManual|RoadManual)$\/.test(s)) return 'money';\n\n    if(s==='km' || \/(?:CurrentKm|CC|CO2|BrKW|WaKW|WaMMA)$\/.test(s)) return 'integer';\n    return 'decimal';\n  }\n\n  function parseLocalizedNumber(raw,mode='decimal'){\n    let s=String(raw??'')\n      .trim()\n      .replace(\/\\s|\\u00a0|\\u202f\/g,'')\n      .replace(\/[\u20ac$\u00a3]\/g,'')\n      .replace(\/[\u2019']\/g,'');\n\n    if(!s) return 0;\n\n    const comma=s.lastIndexOf(',');\n    const dot=s.lastIndexOf('.');\n\n    if(comma>=0 && dot>=0){\n      if(comma>dot){\n        s=s.replace(\/\\.\/g,'').replace(',','.');\n      }else{\n        s=s.replace(\/,\/g,'');\n      }\n    }else if(comma>=0){\n      if((mode==='money' || mode==='integer') && \/^-?\\d{1,3}(,\\d{3})+$\/.test(s)){\n        s=s.replace(\/,\/g,'');\n      }else{\n        s=s.replace(',','.');\n      }\n    }else if(dot>=0){\n      if((mode==='money' || mode==='integer') && \/^-?\\d{1,3}(\\.\\d{3})+$\/.test(s)){\n        s=s.replace(\/\\.\/g,'');\n      }\n    }\n\n    const n=Number(s);\n    return Number.isFinite(n)?n:0;\n  }\n\n  const num=id=>{\n    const node=el(id);\n    return parseLocalizedNumber(node?node.value:'',numberMode(id));\n  };\n\n  const money=n=>new Intl.NumberFormat('en-BE',{style:'currency',currency:'EUR',maximumFractionDigits:0}).format(n);\n  const money2=n=>new Intl.NumberFormat('en-BE',{style:'currency',currency:'EUR',minimumFractionDigits:2,maximumFractionDigits:2}).format(n);\n  let country='BE';\n  let car3Active=false;\n\n  const countryPriceDefaults={\n    BE:{\n      petrol:'1.81',\n      diesel:'2.16',\n      home:'0.35',\n      publicAc:'0.52',\n      fast:'0.72',\n      label:'Belgium'\n    },\n    NL:{\n      petrol:'2.29',\n      diesel:'2.32',\n      home:'0.256',\n      publicAc:'0.48',\n      fast:'0.69',\n      label:'Netherlands'\n    },\n    LU:{\n      petrol:'1.62',\n      diesel:'1.80',\n      home:'0.267',\n      publicAc:'0.45',\n      fast:'0.59',\n      label:'Luxembourg'\n    }\n  };\n\n  function applyCountryPriceDefaults(c){\n    const p=countryPriceDefaults[c];\n    if(!p) return;\n    el('petrolPrice').value=p.petrol;\n    el('dieselPrice').value=p.diesel;\n    el('homePrice').value=p.home;\n    el('publicPrice').value=p.publicAc;\n    el('fastPrice').value=p.fast;\n\n    const note=el('energyPriceNote');\n    if(note){\n      note.innerHTML='<strong>'+p.label+' defaults loaded:<\/strong> petrol \u20ac'+p.petrol+'\/l \u00b7 diesel \u20ac'+p.diesel+'\/l \u00b7 home \u20ac'+p.home+'\/kWh \u00b7 public AC \u20ac'+p.publicAc+'\/kWh \u00b7 fast \u20ac'+p.fast+'\/kWh. These are indicative latest-available averages\/benchmarks and remain editable.';\n    }\n  }\n\n  const help={\n    ICE:'ICE: conventional petrol or diesel. Treat a mild hybrid (MHEV) as ICE and enter its actual fuel consumption.',\n    HEV:'HEV: full hybrid without a plug. Enter the car\u2019s actual combined fuel consumption.',\n    PHEV:'PHEV: plug-in hybrid. Enter fuel use, electric use and the share of kilometres you expect to drive electrically.',\n    BEV:'BEV: fully electric. Enter consumption plus your expected home, public AC and fast-charging mix.'\n  };\n  const defs={\n    ICE:{maint:650,ins:850,icon:'\u26fd',subtitle:'Combustion engine'},\n    HEV:{maint:550,ins:875,icon:'\u267b\ufe0f',subtitle:'Full hybrid'},\n    PHEV:{maint:600,ins:900,icon:'\ud83d\udd0c',subtitle:'Plug-in hybrid'},\n    BEV:{maint:400,ins:950,icon:'\ud83d\udd0b',subtitle:'Battery electric'}\n  };\n\n  function cls(t){return 'type-'+t.toLowerCase()}\n  function carEl(i,k){return q('[data-id=\"c'+i+k+'\"]')}\n  function carNum(i,k){\n    const node=carEl(i,k);\n    return parseLocalizedNumber(node?node.value:'',numberMode('c'+i+k));\n  }\n  function carType(i){return carEl(i,'Type').value}\n  function carStatus(i){return carEl(i,'Status').value}\n  function esc(s){return String(s).replace(\/[&<>\"']\/g,m=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#039;'}[m]))}\n  function statusText(s){return s==='new'?'New':s==='demo'?'Demo':'Used'}\n\n  function taxPanelHTML(i){\n    return `\n    <div class=\"section\">\ud83e\uddfe Taxes <span class=\"taxbadge auto\" data-taxbadge=\"${i}\">automatic<\/span><\/div>\n    <div class=\"taxbox auto\" data-taxbox=\"${i}\">\n      <div data-flanders-tax=\"${i}\">\n        <div class=\"tax-summary\">\n          <div><span>BIV \/ registration<\/span><b data-fl-biv=\"${i}\">\u2014<\/b><\/div>\n          <div><span>Annual road tax<\/span><b data-fl-road=\"${i}\">\u2014<\/b><\/div>\n        <\/div>\n        <div class=\"hint\" data-fl-msg=\"${i}\">Enter the tax details below.<\/div>\n        <details class=\"tax-details\" data-fl-details=\"${i}\">\n          <summary>Tax details used for Flanders<\/summary>\n          <div class=\"tax-inner\">\n            <div class=\"row2\">\n              <div class=\"field\"><label>First registration date<\/label><input data-id=\"c${i}FirstReg\" type=\"date\" value=\"2026-08-01\"><\/div>\n              <div class=\"field\"><label>Engine capacity cc<\/label><input data-id=\"c${i}CC\" type=\"text\" inputmode=\"decimal\" value=\"1498\" step=\"1\"><\/div>\n            <\/div>\n            <div class=\"row2\">\n              <div class=\"field\"><label>CO\u2082 g\/km<\/label><input data-id=\"c${i}CO2\" type=\"text\" inputmode=\"decimal\" value=\"120\" step=\"1\"><\/div>\n              <div class=\"field\"><label>Euro norm<\/label><select data-id=\"c${i}Euro\"><option value=\"0\">Euro 0<\/option><option value=\"1\">Euro 1<\/option><option value=\"2\">Euro 2<\/option><option value=\"3\">Euro 3<\/option><option value=\"4\">Euro 4<\/option><option value=\"5\">Euro 5<\/option><option value=\"6\" selected>Euro 6<\/option><\/select><\/div>\n            <\/div>\n            <div class=\"field\"><label>Tax fuel<\/label><select data-id=\"c${i}TaxFuel\"><option value=\"petrol\" selected>Petrol \/ other<\/option><option value=\"diesel\">Diesel<\/option><\/select><\/div>\n            <div class=\"field hidden\" data-biv-manual-wrap=\"${i}\"><label>BIV for pre-2021 car \u20ac<\/label><input data-id=\"c${i}BivManual\" type=\"text\" inputmode=\"decimal\" value=\"0\"><div class=\"hint\">Automatic Flemish BIV in this beta is enabled for BEVs and non-BEV cars first registered in 2021 or later.<\/div><\/div>\n          <\/div>\n        <\/details>\n      <\/div>\n\n      <div class=\"hidden\" data-brussels-tax=\"${i}\">\n        <div class=\"tax-summary\">\n          <div><span>BIV \/ registration<\/span><b data-br-biv=\"${i}\">\u2014<\/b><\/div>\n          <div><span>Annual road tax<\/span><b data-br-road=\"${i}\">\u2014<\/b><\/div>\n        <\/div>\n        <div class=\"hint\" data-br-msg=\"${i}\">Brussels 2026 non-leasing passenger-car tariffs.<\/div>\n        <details class=\"tax-details\">\n          <summary>Tax details used for Brussels<\/summary>\n          <div class=\"tax-inner\">\n            <div class=\"row2\">\n              <div class=\"field\"><label>First registration date<\/label><input data-id=\"c${i}BrFirstReg\" type=\"date\" value=\"2026-08-01\"><\/div>\n              <div class=\"field\"><label>Engine capacity cc<\/label><input data-id=\"c${i}BrCC\" type=\"text\" inputmode=\"decimal\" value=\"1498\" step=\"1\"><\/div>\n            <\/div>\n            <div class=\"field\"><label>Engine power kW<\/label><input data-id=\"c${i}BrKW\" type=\"text\" inputmode=\"decimal\" value=\"100\" step=\"1\"><div class=\"hint\">For HEV\/PHEV, use the combustion-engine power used for Brussels taxation.<\/div><\/div>\n          <\/div>\n        <\/details>\n      <\/div>\n\n      <div class=\"hidden\" data-wallonia-tax=\"${i}\">\n        <div class=\"tax-summary\">\n          <div><span>TMC \/ registration<\/span><b data-wa-tmc=\"${i}\">\u2014<\/b><\/div>\n          <div><span>Annual road tax<\/span><b data-wa-road=\"${i}\">\u2014<\/b><\/div>\n        <\/div>\n        <div class=\"hint\" data-wa-msg=\"${i}\">Walloon TMC formula + 2026-2027 annual road-tax tariff.<\/div>\n        <details class=\"tax-details\">\n          <summary>Tax details used for Wallonia<\/summary>\n          <div class=\"tax-inner\">\n            <div class=\"row2\">\n              <div class=\"field\"><label>First registration date<\/label><input data-id=\"c${i}WaFirstReg\" type=\"date\" value=\"2026-08-01\"><\/div>\n              <div class=\"field\"><label>Power kW (P.2)<\/label><input data-id=\"c${i}WaKW\" type=\"text\" inputmode=\"decimal\" value=\"100\" step=\"1\"><\/div>\n            <\/div>\n            <div class=\"row2\">\n              <div class=\"field\"><label>Maximum authorised mass (MMA) kg<\/label><input data-id=\"c${i}WaMMA\" type=\"text\" inputmode=\"decimal\" value=\"1900\" step=\"1\"><\/div>\n              <div class=\"field\"><label>Engine capacity cc<\/label><input data-id=\"c${i}WaCC\" type=\"text\" inputmode=\"decimal\" value=\"1498\" step=\"1\"><div class=\"hint\">Used for annual road tax. BEVs use the fixed minimum rate.<\/div><\/div>\n            <\/div>\n            <div class=\"row2\">\n              <div class=\"field\"><label>CO\u2082 g\/km<\/label><input data-id=\"c${i}WaCO2\" type=\"text\" inputmode=\"decimal\" value=\"120\" step=\"1\"><div class=\"hint\">For hybrids, use the simple\/mixed combined value, not the weighted combined value.<\/div><\/div>\n              <div class=\"field\"><label>CO\u2082 test cycle<\/label><select data-id=\"c${i}WaCycle\"><option value=\"WLTP\" selected>WLTP<\/option><option value=\"NEDC\">NEDC<\/option><\/select><\/div>\n            <\/div>\n          <\/div>\n        <\/details>\n      <\/div>\n\n      <div class=\"hidden\" data-luxembourg-tax=\"${i}\">\n        <div class=\"tax-summary\">\n          <div><span>Registration fee<\/span><b data-lu-reg=\"${i}\">\u20ac50.00<\/b><\/div>\n          <div><span>Annual road tax<\/span><b data-lu-road=\"${i}\">\u2014<\/b><\/div>\n        <\/div>\n        <div class=\"hint\" data-lu-msg=\"${i}\">Luxembourg M1 passenger-car taxation.<\/div>\n        <details class=\"tax-details\" data-lu-details=\"${i}\">\n          <summary>Tax details used for Luxembourg<\/summary>\n          <div class=\"tax-inner\">\n            <div class=\"row2\">\n              <div class=\"field\"><label>First registration date<\/label><input data-id=\"c${i}LuFirstReg\" type=\"date\" value=\"2026-08-01\"><\/div>\n              <div class=\"field\"><label>Official CO\u2082 g\/km<\/label><input data-id=\"c${i}LuCO2\" type=\"text\" inputmode=\"decimal\" value=\"120\" step=\"1\"><div class=\"hint\">Use NEDC for first registration 2001-2020 and WLTP from 2021.<\/div><\/div>\n            <\/div>\n            <div class=\"field\"><label>Fuel for road tax<\/label><select data-id=\"c${i}LuFuel\"><option value=\"other\" selected>Petrol \/ hybrid \/ other<\/option><option value=\"diesel\">Diesel<\/option><\/select><\/div>\n            <div class=\"field hidden\" data-lu-pre2001-wrap=\"${i}\"><label>Annual road tax for pre-2001 car \u20ac<\/label><input data-id=\"c${i}LuPre2001Annual\" type=\"text\" inputmode=\"decimal\" value=\"0\" step=\"1\"><div class=\"hint\">Cars first registered before 2001 are taxed by engine capacity. Enter the official annual amount here.<\/div><\/div>\n          <\/div>\n        <\/details>\n      <\/div>\n\n      <div class=\"hidden\" data-nl-tax=\"${i}\">\n        <div class=\"field\"><label>Current MRB shown by Belastingdienst \u20ac\/quarter<\/label><input data-id=\"c${i}NlQuarter\" type=\"text\" inputmode=\"decimal\" value=\"200\" step=\"1\"><\/div>\n        <div class=\"tax-summary\">\n          <div><span>Current annual MRB<\/span><b data-nl-year=\"${i}\">\u2014<\/b><\/div>\n          <div><span>MRB over ownership<\/span><b data-nl-total=\"${i}\">\u2014<\/b><\/div>\n        <\/div>\n        <div class=\"hint\">Enter the current quarterly amount from the official calculator. For a BEV, NMN derives the underlying full rate from the 2026 discounted amount and applies the statutory discount schedule: 30% through 2028, 25% in 2029, 0% from 2030. Future inflation\/indexation is not known and is not modelled.<\/div>\n        <a class=\"official-link\" href=\"https:\/\/www.belastingdienst.nl\/wps\/wcm\/connect\/nl\/auto-en-vervoer\/content\/hulpmiddel-motorrijtuigenbelasting-berekenen\" target=\"_blank\" rel=\"noopener\">Open official Belastingdienst MRB calculator \u2197<\/a>\n      <\/div>\n    <\/div>`;\n  }\n\n  [1,2,3].forEach(i=>q('[data-tax-placeholder=\"'+i+'\"]').innerHTML=taxPanelHTML(i));\n\n\n  function isoDateYearsAgo(yearsAgo){\n    const d=new Date();\n    d.setHours(12,0,0,0);\n    const months=Math.round(yearsAgo*12);\n    d.setMonth(d.getMonth()-months);\n    return d.toISOString().slice(0,10);\n  }\n\n  function seedUsedInputs(i){\n    const status=carStatus(i);\n    if(status==='new') return;\n\n    const reg=carEl(i,'UsedFirstReg');\n    const kmEl=carEl(i,'CurrentKm');\n\n    if(reg && !reg.value){\n      reg.value=isoDateYearsAgo(status==='demo' ? 0.5 : 3);\n    }\n    if(kmEl && String(kmEl.value||'').trim()===''){\n      kmEl.value=status==='demo' ? '5000' : '45000';\n    }\n  }\n\n  function vehicleAgeYears(dateString){\n    if(!dateString) return null;\n    const d=new Date(dateString+'T12:00:00');\n    if(Number.isNaN(d.getTime())) return null;\n    const now=new Date();\n    now.setHours(12,0,0,0);\n    if(d>now) return 0;\n    return Math.max(0,(now-d)\/(365.2425*24*60*60*1000));\n  }\n\n  function annualRetentionFor(type,age){\n    \/*\n     * Editorial resale heuristic, deliberately conservative.\n     * Depreciation generally slows as a vehicle ages.\n     * Powertrain curves only influence the suggestion; users can override it.\n     *\/\n    if(type==='BEV'){\n      if(age<1) return .86;\n      if(age<4) return .84;\n      if(age<6) return .85;\n      if(age<9) return .87;\n      if(age<12) return .89;\n      return .91;\n    }\n    if(type==='PHEV'){\n      if(age<1) return .82;\n      if(age<4) return .84;\n      if(age<7) return .86;\n      if(age<10) return .88;\n      return .90;\n    }\n    if(type==='HEV'){\n      if(age<1) return .84;\n      if(age<4) return .87;\n      if(age<7) return .89;\n      if(age<10) return .91;\n      return .92;\n    }\n    \/\/ ICE\n    if(age<1) return .83;\n    if(age<4) return .86;\n    if(age<7) return .88;\n    if(age<10) return .90;\n    return .92;\n  }\n\n  function suggestedUsedResale(i,years,kmYear){\n    const purchase=Math.max(0,carNum(i,'Price'));\n    const regEl=carEl(i,'UsedFirstReg');\n    const kmEl=carEl(i,'CurrentKm');\n    const reg=regEl ? regEl.value : '';\n    const kmRaw=kmEl ? String(kmEl.value||'').trim() : '';\n    const ageNow=vehicleAgeYears(reg);\n\n    if(!purchase || ageNow===null || kmRaw==='') return null;\n\n    const currentKm=Math.max(0,carNum(i,'CurrentKm'));\n    const futureKm=currentKm+Math.max(0,kmYear)*Math.max(0,years);\n    const futureAge=ageNow+Math.max(0,years);\n\n    let retention=1;\n    let elapsed=0;\n    while(elapsed<years-1e-9){\n      const step=Math.min(1,years-elapsed);\n      const ageAtMidpoint=ageNow+elapsed+step\/2;\n      retention*=Math.pow(annualRetentionFor(carType(i),ageAtMidpoint),step);\n      elapsed+=step;\n    }\n\n    \/\/ Reference mileage: 15,000 km per vehicle-year.\n    \/\/ Every 1,000 km above\/below that reference changes the estimate by 0.3%,\n    \/\/ capped to avoid unrealistic results.\n    const referenceKm=Math.max(5000,futureAge*15000);\n    const deviationThousands=(futureKm-referenceKm)\/1000;\n    const mileageFactor=Math.max(.75,Math.min(1.15,1-deviationThousands*.003));\n\n    let suggested=purchase*retention*mileageFactor;\n    suggested=Math.max(purchase*.05,Math.min(purchase*.90,suggested));\n\n    \/\/ Round to a useful market-style number rather than false precision.\n    suggested=Math.round(suggested\/250)*250;\n\n    return {\n      ageNow,\n      futureAge,\n      currentKm,\n      futureKm,\n      referenceKm,\n      mileageFactor,\n      suggested,\n      retention\n    };\n  }\n\n  function syncUsedFirstRegistrationToTaxes(i){\n    const source=carEl(i,'UsedFirstReg');\n    if(!source || !source.value || carStatus(i)==='new') return;\n    ['FirstReg','BrFirstReg','WaFirstReg','LuFirstReg'].forEach(key=>{\n      const target=carEl(i,key);\n      if(target) target.value=source.value;\n    });\n  }\n\n  function updateUsedValuation(i,forceApply=false){\n    if(carStatus(i)==='new') return null;\n\n    syncUsedFirstRegistrationToTaxes(i);\n\n    const years=Math.max(0,num('years'));\n    const kmYear=Math.max(0,num('km'));\n    const v=suggestedUsedResale(i,years,kmYear);\n\n    const mileageLabel=q('[data-used-mileage=\"'+i+'\"]');\n    const ageLabel=q('[data-used-age=\"'+i+'\"]');\n    const suggestionLabel=q('[data-used-suggested=\"'+i+'\"]');\n\n    if(!v){\n      if(mileageLabel) mileageLabel.textContent='Enter vehicle data';\n      if(ageLabel) ageLabel.textContent='Enter vehicle data';\n      if(suggestionLabel) suggestionLabel.textContent='Enter vehicle data';\n      return null;\n    }\n\n    if(mileageLabel) mileageLabel.textContent=Math.round(v.futureKm).toLocaleString('en-BE')+' km';\n    if(ageLabel) ageLabel.textContent=v.futureAge.toFixed(1)+' years';\n    if(suggestionLabel) suggestionLabel.textContent=money(v.suggested);\n\n    const auto=carEl(i,'AutoResale');\n    if((forceApply || (auto && auto.checked)) && carEl(i,'ResaleEuro')){\n      carEl(i,'ResaleEuro').value=String(Math.round(v.suggested));\n    }\n\n    return v;\n  }\n\n  function weighted(home,pub,fast){\n    const t=home+pub+fast;\n    return t>0?(home*num('homePrice')+pub*num('publicPrice')+fast*num('fastPrice'))\/t:num('homePrice');\n  }\n\n  function updateCard(i,changeDefaults){\n    const p='c'+i,type=carType(i),status=carStatus(i),card=q('[data-card=\"'+i+'\"]');\n    const icon=q('[data-role=\"icon\"]',card), badge=q('[data-role=\"badge\"]',card);\n    icon.className='car-icon '+cls(type); icon.textContent=defs[type].icon;\n    badge.className='badge '+cls(type); badge.textContent=type;\n    q('[data-role=\"subtitle\"]',card).textContent=defs[type].subtitle;\n    q('[data-role=\"powerHelp\"]',card).textContent=help[type];\n    qa('[data-type-block][data-prefix=\"'+p+'\"]').forEach(b=>b.classList.toggle('hidden',b.dataset.typeBlock!==type));\n    qa('[data-new-only=\"'+p+'\"]').forEach(b=>b.classList.toggle('hidden',status!=='new'));\n    qa('[data-used-only=\"'+p+'\"]').forEach(b=>b.classList.toggle('hidden',status==='new'));\n\n    if(changeDefaults){\n      carEl(i,'Maint').value=defs[type].maint;\n      carEl(i,'Ins').value=defs[type].ins;\n      if(type==='BEV'){\n        carEl(i,'CO2').value=0;\n        if(carEl(i,'WaCO2')) carEl(i,'WaCO2').value=0;\n        if(carEl(i,'WaCC')) carEl(i,'WaCC').value=0;\n        if(carEl(i,'BrCC')) carEl(i,'BrCC').value=0;\n        q('[data-fl-details=\"'+i+'\"]').open=false;\n      } else if(type==='PHEV'){\n        carEl(i,'CO2').value=35;\n        if(carEl(i,'WaCO2')) carEl(i,'WaCO2').value=140;\n        if(carEl(i,'WaCC') && carNum(i,'WaCC')===0) carEl(i,'WaCC').value=1498;\n        if(carEl(i,'BrCC') && carNum(i,'BrCC')===0) carEl(i,'BrCC').value=1498;\n      } else if(type==='HEV'){\n        carEl(i,'CO2').value=105;\n        if(carEl(i,'WaCO2')) carEl(i,'WaCO2').value=105;\n        if(carEl(i,'WaCC') && carNum(i,'WaCC')===0) carEl(i,'WaCC').value=1498;\n        if(carEl(i,'BrCC') && carNum(i,'BrCC')===0) carEl(i,'BrCC').value=1498;\n      } else {\n        carEl(i,'CO2').value=120;\n        if(carEl(i,'WaCO2')) carEl(i,'WaCO2').value=120;\n        if(carEl(i,'WaCC') && carNum(i,'WaCC')===0) carEl(i,'WaCC').value=1498;\n        if(carEl(i,'BrCC') && carNum(i,'BrCC')===0) carEl(i,'BrCC').value=1498;\n      }\n    }\n\n    if(carEl(i,'LuCO2')){\n      if(type==='BEV') carEl(i,'LuCO2').value=0;\n      else if(type==='PHEV') carEl(i,'LuCO2').value=35;\n      else if(type==='HEV') carEl(i,'LuCO2').value=105;\n      else carEl(i,'LuCO2').value=120;\n    }\n    updateTaxUI(i);\n  }\n\n  function flandersBaseTax(cc){\n    const table=[\n      [750,97.44],[950,121.92],[1150,176.28],[1350,230.28],[1550,284.76],[1750,339.12],\n      [1950,393.00],[2150,510.12],[2350,627.00],[2550,743.76],[2750,860.88],[3050,977.76],\n      [3250,1280.76],[3450,1584.00],[3650,1887.12],[3950,2189.52],[4150,2492.64]\n    ];\n    for(const [max,val] of table) if(cc<=max) return val;\n    return null;\n  }\n\n  function flandersEuroAdj(fuel,euro){\n    const p={0:.30,1:.10,2:.05,3:0,4:-.125,5:-.15,6:-.15};\n    const d={0:.50,1:.40,2:.35,3:.30,4:.25,5:.175,6:.15};\n    return (fuel==='diesel'?d:p)[euro] ?? 0;\n  }\n\n  function flandersAirComponent(fuel,euro){\n    const petrol={0:1577.21,1:705.35,2:210.92,3:132.21,4:31.76,5:28.54,6:28.54};\n    const diesel={0:3965.46,1:1163.40,2:862.26,3:683.30,4:646.88,5:636.20,6:628.29};\n    return (fuel==='diesel'?diesel:petrol)[euro] ?? 28.54;\n  }\n\n  function fullMonthsSince(dateString){\n    const d=new Date(dateString+'T00:00:00');\n    const ref=new Date('2026-08-19T00:00:00');\n    if(isNaN(d.getTime())) return 0;\n    let m=(ref.getFullYear()-d.getFullYear())*12+(ref.getMonth()-d.getMonth());\n    if(ref.getDate()<d.getDate()) m--;\n    return Math.max(0,m);\n  }\n\n  function ageCorrection(months){\n    if(months<12)return 1;if(months<24)return .9;if(months<36)return .8;if(months<48)return .7;\n    if(months<60)return .6;if(months<72)return .5;if(months<84)return .4;if(months<96)return .3;\n    if(months<108)return .2;return .1;\n  }\n\n  function flandersTaxes(i,years){\n    const type=carType(i);\n    if(type==='BEV'){\n      q('[data-biv-manual-wrap=\"'+i+'\"]').classList.add('hidden');\n      return {oneOff:61.50,annual:107.16,total:61.50+107.16*years,mode:'auto',msg:'2026 Flemish zero-emission flat rates.'};\n    }\n\n    const reg=carEl(i,'FirstReg').value;\n    const d=new Date(reg+'T00:00:00');\n    const regYear=isNaN(d.getTime())?2026:d.getFullYear();\n    const cc=carNum(i,'CC'), co2=carNum(i,'CO2'), euro=Number(carEl(i,'Euro').value), fuel=carEl(i,'TaxFuel').value;\n    const base=flandersBaseTax(cc);\n    let annual=0, roadMsg='';\n\n    if(base===null){\n      annual=0;\n      roadMsg='Engine capacity above 4,150 cc is not supported for Flemish annual tax in this beta.';\n    }else if(regYear<2016){\n      annual=Math.max(107.16,base*1.10);\n      roadMsg='Pre-2016 registration: fiscal-HP base tariff used without green adjustment.';\n    }else{\n      const threshold=regYear>=2021?149:122;\n      const c=Math.max(24,Math.min(500,co2));\n      const co2Adj=(c-threshold)*0.003;\n      const euroAdj=flandersEuroAdj(fuel,euro);\n      annual=Math.max(107.16,base*(1+co2Adj+euroAdj)*1.10);\n      roadMsg='Green road-tax formula: fiscal-HP base adjusted for CO\u2082, Euro norm and fuel, plus 10% municipal surcharge.';\n    }\n\n    let oneOff=0, bivMsg='';\n    if(regYear>=2021){\n      q('[data-biv-manual-wrap=\"'+i+'\"]').classList.add('hidden');\n      const months=fullMonthsSince(reg);\n      const lc=ageCorrection(months);\n      const qFactor=1.245; \/\/ 2026: 1.07 + 5*0.035\n      const air=flandersAirComponent(fuel,euro);\n      const raw=(Math.pow((co2*qFactor)\/246,6)*4500+air)*lc;\n      oneOff=Math.max(58.16,Math.min(14539.31,raw));\n      bivMsg='2021+ WLTP BIV formula with 2026 q-factor, air component and age correction.';\n    }else{\n      q('[data-biv-manual-wrap=\"'+i+'\"]').classList.remove('hidden');\n      oneOff=carNum(i,'BivManual');\n      bivMsg='Pre-2021 BIV remains manual in this beta.';\n    }\n\n    return {oneOff,annual,total:oneOff+annual*years,mode:'auto',msg:bivMsg+' '+roadMsg};\n  }\n\n\n  function fullYearsSince(dateString){\n    return Math.floor(fullMonthsSince(dateString)\/12);\n  }\n\n  function annualRoadTaxByCC(cc){\n    const table=[\n      [750,107.18],[950,134.11],[1150,193.91],[1350,253.31],[1550,313.24],[1750,373.16],\n      [1950,432.30],[2150,561.00],[2350,689.70],[2550,818.14],[2750,946.84],[3050,1075.54],\n      [3250,1408.70],[3450,1742.14],[3650,2075.57],[3950,2408.34],[4150,2741.77],\n      [4350,2891.33],[4650,3040.88],[4850,3190.44],[5050,3340.00],[5250,3489.55],\n      [5550,3639.11],[5750,3788.66],[5950,3938.22],[6150,4087.78],[6350,4237.33],\n      [6650,4386.89],[6850,4536.44],[7150,4686.00],[7350,4835.56],[7650,4985.11],\n      [7850,5134.67],[8150,5284.22],[8350,5433.78],[8650,5583.34],[8850,5732.89],\n      [9050,5882.45],[9150,6032.00],[9250,6181.56],[9350,6331.12],[9450,6480.67],\n      [9550,6630.23],[9650,6779.78],[9750,6929.34],[9850,7078.90],[10000,7228.45]\n    ];\n    for(const [max,val] of table) if(cc<=max) return val;\n    return null;\n  }\n\n  function brusselsPowerBand(cc,kw){\n    const ccBands=[1500,1900,2100,2700,3000,3400];\n    const kwBands=[70,85,100,110,120,155];\n    let ci=ccBands.findIndex(x=>cc<=x); if(ci<0) ci=6;\n    let ki=kwBands.findIndex(x=>kw<=x); if(ki<0) ki=6;\n    return Math.max(ci,ki);\n  }\n\n  function brusselsTaxes(i,years){\n    const type=carType(i);\n    if(type==='BEV'){\n      return {oneOff:78.88,annual:107.18,total:78.88+107.18*years,mode:'auto',msg:'Brussels 2026 non-leasing electric-car minimum rates.'};\n    }\n\n    const cc=Math.max(0,carNum(i,'BrCC'));\n    const kw=Math.max(0,carNum(i,'BrKW'));\n    const age=fullYearsSince(carEl(i,'BrFirstReg').value);\n    const bases=[78.88,157.76,634.89,1112.01,1589.14,3178.28,6357.85];\n    const factors=[1,.9,.8,.7,.6,.55,.5,.45,.4,.35,.3,.25,.2,.15,.1];\n    const band=brusselsPowerBand(cc,kw);\n    const factor=age>=15?0:factors[Math.max(0,age)];\n    const oneOff=age>=15?78.88:Math.max(78.88,bases[band]*factor);\n    const annual=annualRoadTaxByCC(cc);\n\n    if(annual===null){\n      return {oneOff,annual:0,total:oneOff,mode:'auto',msg:'BIV automatic. Annual tax for engine capacity above 10,000 cc is not supported in this beta.'};\n    }\n    return {oneOff,annual,total:oneOff+annual*years,mode:'auto',msg:'Brussels BIV uses the higher tax band from fiscal capacity\/engine size or kW, reduced for vehicle age; annual tax uses engine capacity.'};\n  }\n\n  function walloniaBaseByKW(kw){\n    if(kw<=70)return 64.01;\n    if(kw<=85)return 128.02;\n    if(kw<=100)return 515.20;\n    if(kw<=110)return 902.37;\n    if(kw<=120)return 1289.55;\n    if(kw<=155)return 2579.10;\n    return 5159.25;\n  }\n\n  function walloniaAgeFactor(age){\n    const f=[1,.9,.8,.7,.6,.55,.5,.45,.4,.35,.3,.25,.2,.15,.1];\n    return age>=15?0:f[Math.max(0,age)];\n  }\n\n  function walloniaEnergyCoefficient(type,kw){\n    if(type==='HEV'||type==='PHEV') return .8;\n    if(type==='BEV'){\n      if(kw<=120)return .01;\n      if(kw<=155)return .10;\n      if(kw<250)return .18;\n      return .26;\n    }\n    return 1;\n  }\n\n  function walloniaTaxes(i,years){\n    const type=carType(i);\n    const kw=Math.max(0,carNum(i,'WaKW'));\n    const mma=Math.max(1,carNum(i,'WaMMA'));\n    const cc=Math.max(0,carNum(i,'WaCC'));\n    const age=fullYearsSince(carEl(i,'WaFirstReg').value);\n    const co2=Math.max(0,carNum(i,'WaCO2'));\n    const cycle=carEl(i,'WaCycle').value;\n    const base=walloniaBaseByKW(kw);\n    const mb=age>=15?61.50:Math.max(61.50,base*walloniaAgeFactor(age));\n    const co2Factor=type==='BEV'?1:(co2\/(cycle==='NEDC'?115:136));\n    const massFactor=mma\/1838;\n    const energyFactor=walloniaEnergyCoefficient(type,kw);\n    const raw=mb*co2Factor*massFactor*energyFactor;\n    const oneOff=Math.max(50,Math.min(9000,raw));\n    const annual=type==='BEV'?107.18:annualRoadTaxByCC(cc);\n\n    if(annual===null){\n      return {oneOff,annual:0,total:oneOff,mode:'auto',msg:'Walloon TMC automatic. Annual tax for engine capacity above 10,000 cc is not supported in this beta.'};\n    }\n    return {\n      oneOff,annual,total:oneOff+annual*years,mode:'auto',\n      msg:'Walloon TMC = age-adjusted power base \u00d7 CO\u2082 factor \u00d7 MMA\/1838 \u00d7 powertrain coefficient, capped at \u20ac50\u2013\u20ac9,000. Family reductions\/exemptions are not included.'\n    };\n  }\n\n\n  function luxembourgCO2Factor(co2){\n    if(co2 < 90) return 0.5;\n    return 0.6 + 0.1*Math.floor((co2-90)\/10);\n  }\n\n  function luxembourgTaxes(i,years){\n    const registrationFee=50;\n    const type=carType(i);\n\n    if(type==='BEV'){\n      const pre=q('[data-lu-pre2001-wrap=\"'+i+'\"]');\n      if(pre) pre.classList.add('hidden');\n      return {\n        oneOff:registrationFee,\n        annual:30,\n        total:registrationFee+30*years,\n        mode:'auto',\n        msg:'Luxembourg: \u20ac50 standard registration charge and \u20ac30\/year minimum road tax for a battery-electric passenger car.'\n      };\n    }\n\n    const reg=carEl(i,'LuFirstReg').value;\n    const d=new Date(reg+'T00:00:00');\n    const regYear=isNaN(d.getTime()) ? 2026 : d.getFullYear();\n    const pre=q('[data-lu-pre2001-wrap=\"'+i+'\"]');\n\n    if(regYear < 2001){\n      if(pre) pre.classList.remove('hidden');\n      const annual=Math.max(0,carNum(i,'LuPre2001Annual'));\n      return {\n        oneOff:registrationFee,\n        annual,\n        total:registrationFee+annual*years,\n        mode:'manual',\n        msg:'Pre-2001 Luxembourg passenger cars are taxed by engine capacity, so the annual amount is entered manually.'\n      };\n    }\n\n    if(pre) pre.classList.add('hidden');\n    const co2=Math.max(0,carNum(i,'LuCO2'));\n    const fuel=carEl(i,'LuFuel').value;\n    const b=fuel==='diesel' ? 0.9 : 0.6;\n    const c=luxembourgCO2Factor(co2);\n    const annual=Math.max(30,co2*b*c);\n    const cycle=regYear>=2021 ? 'WLTP' : 'NEDC';\n\n    return {\n      oneOff:registrationFee,\n      annual,\n      total:registrationFee+annual*years,\n      mode:'auto',\n      msg:'Luxembourg '+cycle+' road tax: CO\u2082 \u00d7 '+(fuel==='diesel'?'0.9':'0.6')+' \u00d7 CO\u2082 factor '+c.toFixed(1)+', subject to the \u20ac30 annual minimum.'\n    };\n  }\n\n  function netherlandsTaxes(i,years){\n    const qtr=Math.max(0,carNum(i,'NlQuarter'));\n    const type=carType(i);\n    const currentAnnual=qtr*4;\n    let total=0;\n\n    if(type==='BEV'){\n      const fullQuarter=qtr\/0.70; \/\/ 2026 displayed amount reflects 30% discount\n      for(let n=0;n<years;n++){\n        const year=2026+n;\n        const discount=year<=2028?.30:(year===2029?.25:0);\n        total+=fullQuarter*4*(1-discount);\n      }\n    }else{\n      total=currentAnnual*years;\n    }\n    return {oneOff:0,annual:currentAnnual,total,mode:'assisted',msg:type==='BEV'?'Current official MRB + statutory BEV discount schedule; future indexation excluded.':'Current official MRB held constant over the ownership period; future indexation excluded.'};\n  }\n\n  function manualTaxes(i,years){\n    const oneOff=Math.max(0,carNum(i,'RegManual'));\n    const annual=Math.max(0,carNum(i,'RoadManual'));\n    return {oneOff,annual,total:oneOff+annual*years,mode:'manual',msg:'Manual regional tax values.'};\n  }\n\n  function getTaxes(i,years){\n    if(country==='NL') return netherlandsTaxes(i,years);\n    if(country==='LU') return luxembourgTaxes(i,years);\n    const region=el('beRegion').value;\n    if(region==='Flanders') return flandersTaxes(i,years);\n    if(region==='Brussels') return brusselsTaxes(i,years);\n    if(region==='Wallonia') return walloniaTaxes(i,years);\n    return {oneOff:0,annual:0,total:0,mode:'manual',msg:'No tax module selected.'};\n  }\n\n  function updateTaxUI(i){\n    const fl=q('[data-flanders-tax=\"'+i+'\"]');\n    const br=q('[data-brussels-tax=\"'+i+'\"]');\n    const wa=q('[data-wallonia-tax=\"'+i+'\"]');\n    const lu=q('[data-luxembourg-tax=\"'+i+'\"]');\n    const nl=q('[data-nl-tax=\"'+i+'\"]');\n    const badge=q('[data-taxbadge=\"'+i+'\"]'),box=q('[data-taxbox=\"'+i+'\"]');\n    const years=Math.max(1,num('years'));\n    [fl,br,wa,lu,nl].filter(Boolean).forEach(x=>x.classList.add('hidden'));\n\n    if(country==='NL'){\n      nl.classList.remove('hidden');\n      badge.className='taxbadge auto'; badge.textContent='assisted';\n      box.className='taxbox auto';\n      const t=netherlandsTaxes(i,years);\n      q('[data-nl-year=\"'+i+'\"]').textContent=money(t.annual);\n      q('[data-nl-total=\"'+i+'\"]').textContent=money(t.total);\n      return;\n    }\n\n    if(country==='LU'){\n      lu.classList.remove('hidden');\n      badge.className='taxbadge auto'; badge.textContent='automatic 2026';\n      box.className='taxbox auto';\n      const t=luxembourgTaxes(i,years);\n      q('[data-lu-reg=\"'+i+'\"]').textContent=money2(t.oneOff);\n      q('[data-lu-road=\"'+i+'\"]').textContent=money2(t.annual);\n      q('[data-lu-msg=\"'+i+'\"]').textContent=t.msg;\n      return;\n    }\n\n    const region=el('beRegion').value;\n    badge.className='taxbadge auto'; badge.textContent='automatic 2026';\n    box.className='taxbox auto';\n\n    if(region==='Flanders'){\n      fl.classList.remove('hidden');\n      const t=flandersTaxes(i,years);\n      q('[data-fl-biv=\"'+i+'\"]').textContent=money2(t.oneOff);\n      q('[data-fl-road=\"'+i+'\"]').textContent=money2(t.annual);\n      q('[data-fl-msg=\"'+i+'\"]').textContent=t.msg;\n    }else if(region==='Brussels'){\n      br.classList.remove('hidden');\n      const t=brusselsTaxes(i,years);\n      q('[data-br-biv=\"'+i+'\"]').textContent=money2(t.oneOff);\n      q('[data-br-road=\"'+i+'\"]').textContent=money2(t.annual);\n      q('[data-br-msg=\"'+i+'\"]').textContent=t.msg;\n    }else{\n      wa.classList.remove('hidden');\n      const t=walloniaTaxes(i,years);\n      q('[data-wa-tmc=\"'+i+'\"]').textContent=money2(t.oneOff);\n      q('[data-wa-road=\"'+i+'\"]').textContent=money2(t.annual);\n      q('[data-wa-msg=\"'+i+'\"]').textContent=t.msg;\n    }\n  }\n\n  function fixed(i,years){\n    const purchase=carNum(i,'Price'), used=carStatus(i)!=='new';\n    const residual=used?Math.min(purchase,Math.max(0,carNum(i,'ResaleEuro'))):purchase*carNum(i,'Residual')\/100;\n    return{\n      purchase,residual,depreciation:Math.max(0,purchase-residual),\n      repairs:used?carNum(i,'Repairs')*years:0,\n      maintenance:carNum(i,'Maint')*years,\n      insurance:carNum(i,'Ins')*years\n    };\n  }\n\n  function calcCar(i,years,kmYear){\n    const type=carType(i),f=fixed(i,years),tax=getTaxes(i,years);\n    let variablePerKm=0;\n\n    if(type==='ICE'){\n      const fuel=carEl(i,'Fuel').value,fp=fuel==='diesel'?num('dieselPrice'):num('petrolPrice');\n      variablePerKm=carNum(i,'FuelCons')\/100*fp;\n    }else if(type==='HEV'){\n      const fuel=carEl(i,'HevFuel').value,fp=fuel==='diesel'?num('dieselPrice'):num('petrolPrice');\n      variablePerKm=carNum(i,'HevFuelCons')\/100*fp;\n    }else if(type==='PHEV'){\n      const share=Math.min(100,Math.max(0,carNum(i,'PhevElecShare')))\/100;\n      const ep=weighted(carNum(i,'PhevHome'),carNum(i,'PhevPublic'),0);\n      variablePerKm=share*(carNum(i,'PhevElecCons')\/100*ep)+(1-share)*(carNum(i,'PhevFuelCons')\/100*num('petrolPrice'));\n    }else{\n      const ep=weighted(carNum(i,'BevHome'),carNum(i,'BevPublic'),carNum(i,'BevFast'));\n      variablePerKm=carNum(i,'BevCons')\/100*ep;\n    }\n\n    const energy=variablePerKm*kmYear*years;\n    const total=f.depreciation+f.repairs+f.maintenance+f.insurance+tax.total+energy;\n    const usedValuation=carStatus(i)==='new'?null:suggestedUsedResale(i,years,kmYear);\n    return {i,type,status:carStatus(i),name:carEl(i,'Name').value,...f,tax,energy,usedValuation,total,monthly:total\/(years*12),costKm:total\/(years*kmYear)};\n  }\n\n  function renderResult(r){\n    return '<div class=\"type-label\">'+r.type+'<\/div><strong>'+esc(r.name)+'<\/strong>'+\n      '<div><span class=\"status '+r.status+'\">'+statusText(r.status)+'<\/span><\/div>'+\n      '<div class=\"monthly\">'+money(r.monthly)+'<span style=\"font-size:14px\">\/month<\/span><\/div>'+\n      '<div class=\"small\">'+money2(r.costKm)+' per km \u00b7 '+money(r.total)+' total<\/div>'+\n      '<div style=\"margin-top:11px\">'+\n      '<div class=\"metric\"><span>Depreciation<\/span><b>'+money(r.depreciation)+'<\/b><\/div>'+\n      '<div class=\"metric\"><span>Energy \/ fuel<\/span><b>'+money(r.energy)+'<\/b><\/div>'+\n      '<div class=\"metric\"><span>Maintenance<\/span><b>'+money(r.maintenance)+'<\/b><\/div>'+\n      (r.status!=='new'?'<div class=\"metric\"><span>Extra repairs \/ wear<\/span><b>'+money(r.repairs)+'<\/b><\/div>':'')+\n      '<div class=\"metric\"><span>Insurance<\/span><b>'+money(r.insurance)+'<\/b><\/div>'+\n      '<div class=\"metric\"><span>Taxes over period<\/span><b>'+money(r.tax.total)+'<\/b><\/div>'+\n      (r.status!=='new' && r.usedValuation?'<div class=\"metric\"><span>Expected mileage at resale<\/span><b>'+Math.round(r.usedValuation.futureKm).toLocaleString('en-BE')+' km<\/b><\/div>':'')+\n      '<div class=\"metric\"><span>Expected resale value<\/span><b>'+money(r.residual)+'<\/b><\/div><\/div>';\n  }\n\n  function activeCarIndexes(){\n    return car3Active ? [1,2,3] : [1,2];\n  }\n\n  function setCar3Active(active){\n    car3Active=active;\n    const card3=q('[data-card=\"3\"]');\n    const result3=q('[data-result=\"3\"]');\n    const carsGrid=el('carsGrid');\n    const resultsGrid=el('resultsGrid');\n    card3.classList.toggle('hidden',!active);\n    result3.classList.toggle('hidden',!active);\n    carsGrid.classList.toggle('two-cars',!active);\n    resultsGrid.classList.toggle('two-cars',!active);\n    el('addCar3').classList.toggle('hidden',active);\n    calculate();\n  }\n\n  function calculate(){\n    const years=Math.max(1,num('years')),km=Math.max(1,num('km'));\n    const active=activeCarIndexes();\n    active.forEach(i=>{updateUsedValuation(i);updateTaxUI(i)});\n    const cars=active.map(i=>calcCar(i,years,km));\n    const min=Math.min(...cars.map(c=>c.total));\n    cars.forEach(c=>{const box=q('[data-result=\"'+c.i+'\"]');box.classList.remove('best');box.innerHTML=renderResult(c);if(c.total===min)box.classList.add('best')});\n    const sorted=[...cars].sort((a,b)=>a.total-b.total);\n    const scope=country==='BE'?'Belgium \u00b7 '+el('beRegion').value:(country==='NL'?'Netherlands \u00b7 '+el('nlProvince').value:'Luxembourg');\n    const savings=sorted.slice(1).map(c=>({name:c.name,amount:c.total-sorted[0].total}));\n    const savingsHtml=savings.map(s=>'<strong>'+money(s.amount)+'<\/strong> vs '+esc(s.name)).join(' and ');\n    el('winner').innerHTML='<strong>'+esc(sorted[0].name)+' has the lowest estimated TCO.<\/strong> In <strong>'+esc(scope)+'<\/strong>, it saves '+savingsHtml+' over '+years+' years.';\n    const unique=[...new Set(cars.map(c=>c.type))];\n    const countLabel=cars.length===2?'both cars':'all three cars';\n    el('comparisonNote').innerHTML=unique.length===1\n      ?'<strong>Like-for-like:<\/strong> '+countLabel+' are '+unique[0]+'s.'\n      :'<strong>Mixed powertrains:<\/strong> '+cars.map(c=>c.type).join(' vs ')+'.';\n    const max=Math.max(...cars.map(c=>c.total));\n    el('bars').innerHTML=cars.map(c=>'<div class=\"bar-row\"><strong>'+esc(c.name)+'<\/strong><div class=\"track\"><div class=\"fill '+cls(c.type)+'\" style=\"width:'+(c.total\/max*100).toFixed(1)+'%\"><\/div><\/div><b>'+money(c.total)+'<\/b><\/div>').join('');\n    updateCountryNote();\n  }\n\n  function recalculateEverything(showStatus=true){\n    \/*\n     * Master refresh:\n     * - commit the field currently being edited\n     * - re-read every current input value\n     * - recalculate taxes for every active car\n     * - recalculate TCO, comparison, bars and winner\n     *\/\n    const activeElement=document.activeElement;\n    if(activeElement && root.contains(activeElement) && typeof activeElement.blur==='function'){\n      activeElement.blur();\n    }\n\n    activeCarIndexes().forEach(i=>{\n      updateUsedValuation(i);\n      updateTaxUI(i);\n    });\n    calculate();\n\n    if(showStatus && el('pdfStatus')){\n      el('pdfStatus').textContent='TCO recalculated from all current inputs.';\n    }\n  }\n\n\n  function pdfLocationLabel(){\n    if(country==='BE') return 'Belgium - '+el('beRegion').value;\n    if(country==='NL') return 'Netherlands - '+el('nlProvince').value;\n    return 'Luxembourg';\n  }\n\n  function pdfFuelEnergyAssumption(i){\n    const type=carType(i);\n    if(type==='ICE'){\n      const fuel=carEl(i,'Fuel').value;\n      return (fuel==='diesel'?'Diesel':'Petrol')+' '+carNum(i,'FuelCons').toFixed(1)+' l\/100 km';\n    }\n    if(type==='HEV'){\n      const fuel=carEl(i,'HevFuel').value;\n      return 'HEV '+(fuel==='diesel'?'diesel':'petrol')+' '+carNum(i,'HevFuelCons').toFixed(1)+' l\/100 km';\n    }\n    if(type==='PHEV'){\n      return 'PHEV '+carNum(i,'PhevElecShare').toFixed(0)+'% electric; '+carNum(i,'PhevElecCons').toFixed(1)+' kWh\/100 km';\n    }\n    return 'BEV '+carNum(i,'BevCons').toFixed(1)+' kWh\/100 km';\n  }\n\n  function pdfColorForType(type){\n    if(type==='ICE') return [107,114,128];\n    if(type==='HEV') return [202,138,4];\n    if(type==='PHEV') return [15,118,110];\n    return [29,78,216];\n  }\n\n  function pdfSafeName(name){\n    return String(name||'car').replace(\/[^\\w\\-]+\/g,'-').replace(\/-+\/g,'-').replace(\/^-|-$\/g,'').slice(0,45) || 'car';\n  }\n\n\n  function inputMoney(i,key){\n    return carNum(i,key);\n  }\n\n  function inputResidualLabel(i){\n    if(carStatus(i)==='new'){\n      return carNum(i,'Residual').toFixed(0)+'%';\n    }\n    return money(inputMoney(i,'ResaleEuro'));\n  }\n\n  function inputConsumptionLabel(i){\n    const type=carType(i);\n    if(type==='ICE'){\n      const fuel=carEl(i,'Fuel').value==='diesel'?'Diesel':'Petrol';\n      return fuel+' '+carNum(i,'FuelCons').toFixed(1)+' l\/100 km';\n    }\n    if(type==='HEV'){\n      const fuel=carEl(i,'HevFuel').value==='diesel'?'Diesel':'Petrol';\n      return fuel+' '+carNum(i,'HevFuelCons').toFixed(1)+' l\/100 km';\n    }\n    if(type==='PHEV'){\n      return carNum(i,'PhevFuelCons').toFixed(1)+' l\/100 km + '+carNum(i,'PhevElecCons').toFixed(1)+' kWh\/100 km; '+carNum(i,'PhevElecShare').toFixed(0)+'% electric';\n    }\n    return carNum(i,'BevCons').toFixed(1)+' kWh\/100 km';\n  }\n\n  function inputChargingLabel(i){\n    const type=carType(i);\n    if(type==='BEV'){\n      return 'Home '+carNum(i,'BevHome').toFixed(0)+'% \/ AC '+carNum(i,'BevPublic').toFixed(0)+'% \/ Fast '+carNum(i,'BevFast').toFixed(0)+'%';\n    }\n    if(type==='PHEV'){\n      return 'Home '+carNum(i,'PhevHome').toFixed(0)+'% \/ AC '+carNum(i,'PhevPublic').toFixed(0)+'%';\n    }\n    return '\u2014';\n  }\n\n  function inputTaxDetailsLabel(i){\n    if(country==='LU'){\n      if(carType(i)==='BEV') return 'BEV minimum road tax';\n      return 'CO\u2082 '+carNum(i,'LuCO2').toFixed(0)+' g\/km \u00b7 '+(carEl(i,'LuFuel').value==='diesel'?'Diesel':'Other');\n    }\n    if(country==='NL'){\n      return 'MRB '+money(carNum(i,'NlQuarter'))+'\/quarter';\n    }\n    const region=el('beRegion').value;\n    if(region==='Flanders'){\n      if(carType(i)==='BEV') return 'Flemish BEV flat rates';\n      return 'CO\u2082 '+carNum(i,'CO2').toFixed(0)+' g\/km \u00b7 '+carNum(i,'CC').toFixed(0)+' cc \u00b7 Euro '+carEl(i,'Euro').value;\n    }\n    if(region==='Brussels'){\n      if(carType(i)==='BEV') return 'Brussels BEV flat rates';\n      return carNum(i,'BrCC').toFixed(0)+' cc \u00b7 '+carNum(i,'BrKW').toFixed(0)+' kW';\n    }\n    if(carType(i)==='BEV') return 'Walloon BEV tax formula';\n    return 'CO\u2082 '+carNum(i,'WaCO2').toFixed(0)+' g\/km \u00b7 '+carNum(i,'WaKW').toFixed(0)+' kW \u00b7 MMA '+carNum(i,'WaMMA').toFixed(0)+' kg';\n  }\n\n  function carInputSummary(i){\n    const status=carStatus(i);\n    const valuation=status==='new'?null:suggestedUsedResale(i,Math.max(1,num('years')),Math.max(1,num('km')));\n    return {\n      name:carEl(i,'Name').value,\n      type:carType(i),\n      status:statusText(status),\n      purchase:carNum(i,'Price'),\n      residual:inputResidualLabel(i),\n      consumption:inputConsumptionLabel(i),\n      charging:inputChargingLabel(i),\n      maintenance:carNum(i,'Maint'),\n      insurance:carNum(i,'Ins'),\n      extraRepairs:status==='new'?0:carNum(i,'Repairs'),\n      taxDetails:inputTaxDetailsLabel(i),\n      used:status==='new'?null:{\n        firstReg:carEl(i,'UsedFirstReg')?.value||'\u2014',\n        currentKm:carNum(i,'CurrentKm'),\n        futureKm:valuation?valuation.futureKm:null,\n        futureAge:valuation?valuation.futureAge:null,\n        suggested:valuation?valuation.suggested:null,\n        auto:!!carEl(i,'AutoResale')?.checked\n      }\n    };\n  }\n\n  function currentComparisonData(){\n    const years=Math.max(1,num('years'));\n    const km=Math.max(1,num('km'));\n    const active=activeCarIndexes();\n    active.forEach(i=>{updateUsedValuation(i);updateTaxUI(i)});\n    const cars=active.map(i=>calcCar(i,years,km));\n    const sorted=[...cars].sort((a,b)=>a.total-b.total);\n    return {\n      years, km, cars,\n      winner:sorted[0],\n      saving:sorted.length>1 ? sorted[1].total-sorted[0].total : 0,\n      savings:sorted.slice(1).map(c=>({name:c.name,amount:c.total-sorted[0].total})),\n      location:pdfLocationLabel(),\n      assumptions:{\n        petrol:num('petrolPrice'),\n        diesel:num('dieselPrice'),\n        home:num('homePrice'),\n        publicAC:num('publicPrice'),\n        fast:num('fastPrice')\n      },\n      inputCars:active.map(i=>carInputSummary(i))\n    };\n  }\n\n  function addPdfText(doc,text,x,y,maxWidth,lineHeight){\n    const lines=doc.splitTextToSize(String(text),maxWidth);\n    doc.text(lines,x,y);\n    return y+(lines.length*(lineHeight||4.2));\n  }\n\n\n  function trackTcoEvent(eventName, params={}){\n    try{\n      if(typeof window.gtag === 'function'){\n        window.gtag('event',eventName,{\n          event_category:'NMN TCO Calculator',\n          ...params\n        });\n        return;\n      }\n      if(Array.isArray(window.dataLayer)){\n        window.dataLayer.push({\n          event:eventName,\n          event_category:'NMN TCO Calculator',\n          ...params\n        });\n      }\n    }catch(err){}\n  }\n\n  function trackCalculatorUse(){\n    trackTcoEvent('tco_calculation',{\n      country:country,\n      region:country==='BE' ? el('beRegion').value : '',\n      active_cars:activeCarIndexes().length\n    });\n\n    try{\n      if(!sessionStorage.getItem('nmn_tco_used')){\n        sessionStorage.setItem('nmn_tco_used','1');\n        trackTcoEvent('tco_calculator_used',{\n          country:country,\n          region:country==='BE' ? el('beRegion').value : '',\n          active_cars:activeCarIndexes().length\n        });\n      }\n    }catch(err){}\n  }\n\n  function generatePdf(){\n    recalculateEverything(false);\n    const status=el('pdfStatus');\n\n    if(!window.jspdf || !window.jspdf.jsPDF){\n      status.textContent='PDF library unavailable. Please try Download PDF again or use your browser\u2019s normal print command.';\n      return;\n    }\n\n    try{\n      status.textContent='Generating PDF...';\n\n      const data=currentComparisonData();\n      const jsPDF=window.jspdf.jsPDF;\n      const doc=new jsPDF({orientation:'landscape',unit:'mm',format:'a4'});\n\n      const pageW=297, pageH=210, margin=12;\n      const black=[19,20,23], red=[214,31,38], grey=[102,112,133], pale=[247,248,250], green=[20,122,82];\n\n      function header(title,subtitle){\n        doc.setFillColor(...black); doc.rect(0,0,pageW,24,'F');\n        doc.setFillColor(...red); doc.rect(0,24,pageW,2.2,'F');\n        doc.setTextColor(255,255,255);\n        doc.setFont('helvetica','bold'); doc.setFontSize(18);\n        doc.text(title,margin,10.5);\n        doc.setFont('helvetica','normal'); doc.setFontSize(8.5);\n        doc.text(subtitle,margin,17);\n\n        const generated=new Date().toLocaleDateString('en-BE',{year:'numeric',month:'long',day:'numeric'});\n        doc.text('Generated '+generated,pageW-margin,10.5,{align:'right'});\n        doc.text(data.location+'  |  Build v5.8',pageW-margin,17,{align:'right'});\n      }\n\n      function footer(pageLabel){\n        doc.setFontSize(6.7); doc.setTextColor(120,128,140);\n        doc.text('\u00a9 2026 B2BNews Agency \u00b7 Newmobility.news \u00b7 All rights reserved',margin,pageH-6);\n        doc.text(pageLabel,pageW-margin,pageH-6,{align:'right'});\n      }\n\n      \/\/ PAGE 1 \u2014 STARTING ASSUMPTIONS\n      header('NMN TCO Comparison','Starting assumptions');\n\n      doc.setTextColor(...black);\n      doc.setFont('helvetica','bold'); doc.setFontSize(10);\n      doc.text('Global assumptions',margin,35);\n\n      doc.setFont('helvetica','normal'); doc.setFontSize(8.5);\n      doc.text(\n        data.years+' years ownership  |  '+data.km.toLocaleString('en-BE')+' km\/year  |  '+(data.years*data.km).toLocaleString('en-BE')+' km total  |  '+data.location,\n        margin,41\n      );\n      doc.text(\n        'Petrol EUR '+data.assumptions.petrol.toFixed(2)+'\/l  |  Diesel EUR '+data.assumptions.diesel.toFixed(2)+'\/l  |  Home EUR '+data.assumptions.home.toFixed(2)+'\/kWh  |  Public AC EUR '+data.assumptions.publicAC.toFixed(2)+'\/kWh  |  Fast EUR '+data.assumptions.fast.toFixed(2)+'\/kWh',\n        margin,46\n      );\n\n      const gap=5;\n      const contentW=pageW-margin*2;\n      const cardW=(contentW-gap*(data.inputCars.length-1))\/data.inputCars.length;\n      const cardY=54;\n      const cardH=110;\n\n      data.inputCars.forEach((c,idx)=>{\n        const x=margin+idx*(cardW+gap);\n        const color=pdfColorForType(c.type);\n\n        doc.setDrawColor(220,224,230);\n        doc.setLineWidth(.3);\n        doc.setFillColor(255,255,255);\n        doc.roundedRect(x,cardY,cardW,cardH,2,2,'FD');\n        doc.setFillColor(...color); doc.rect(x,cardY,cardW,4,'F');\n\n        doc.setTextColor(...grey); doc.setFont('helvetica','bold'); doc.setFontSize(7.5);\n        doc.text(c.type+'  |  '+c.status.toUpperCase(),x+4,cardY+10);\n\n        doc.setTextColor(...black); doc.setFontSize(11);\n        doc.text(doc.splitTextToSize(c.name,cardW-8).slice(0,2),x+4,cardY+17);\n\n        let y=cardY+30;\n        const labelX=x+4;\n        const valueX=x+cardW-4;\n\n        const rows=c.used ? [\n          ['Purchase price',money(c.purchase)],\n          ['Expected resale',c.residual],\n          ['First reg \/ current km',c.used.firstReg+' \u00b7 '+Math.round(c.used.currentKm).toLocaleString('en-BE')+' km'],\n          ['At resale',c.used.futureKm!==null?Math.round(c.used.futureKm).toLocaleString('en-BE')+' km \u00b7 '+c.used.futureAge.toFixed(1)+' yr':'\u2014'],\n          ['NMN suggestion',c.used.suggested!==null?money(c.used.suggested)+(c.used.auto?' \u00b7 auto':' \u00b7 manual'):'\u2014'],\n          ['Consumption',c.consumption],\n          ['Fixed costs \/ year',money(c.maintenance)+' maint \u00b7 '+money(c.insurance)+' ins'+(c.extraRepairs?' \u00b7 '+money(c.extraRepairs)+' repairs':'')],\n          ['Tax input',c.taxDetails]\n        ] : [\n          ['Purchase price',money(c.purchase)],\n          ['Residual \/ resale',c.residual],\n          ['Consumption',c.consumption],\n          ['Charging mix',c.charging],\n          ['Maintenance \/ year',money(c.maintenance)],\n          ['Insurance \/ year',money(c.insurance)],\n          ['Extra repairs \/ year','\u2014'],\n          ['Tax input',c.taxDetails]\n        ];\n\n        rows.forEach(([label,value],ridx)=>{\n          if(ridx%2===1){\n            doc.setFillColor(...pale);\n            doc.rect(x+2,y-4.3,cardW-4,8,'F');\n          }\n          doc.setFont('helvetica','normal'); doc.setFontSize(7.2); doc.setTextColor(...grey);\n          doc.text(label,labelX,y);\n\n          doc.setFont('helvetica','bold'); doc.setTextColor(...black);\n          const valLines=doc.splitTextToSize(String(value),cardW-34);\n          doc.text(valLines.slice(0,2),valueX,y,{align:'right'});\n          y+=10;\n        });\n      });\n\n      doc.setFillColor(248,250,252);\n      doc.setDrawColor(226,232,240);\n      doc.roundedRect(margin,169,contentW,26,2,2,'FD');\n\n      doc.setTextColor(...black);\n      doc.setFont('helvetica','bold');\n      doc.setFontSize(8.2);\n      doc.text('How TCO is calculated',margin+4,175);\n\n      doc.setFont('helvetica','normal');\n      doc.setFontSize(7.1);\n      doc.setTextColor(...grey);\n      addPdfText(\n        doc,\n        'Depreciation = purchase price today - expected resale value. TCO = depreciation + energy\/fuel + maintenance + insurance + taxes + entered extra repairs. Monthly TCO = total TCO \/ months owned.',\n        margin+4,\n        180,\n        128,\n        3.2\n      );\n\n      doc.setTextColor(...black);\n      doc.setFont('helvetica','bold');\n      doc.setFontSize(8.2);\n      doc.text('Important',158,175);\n\n      doc.setFont('helvetica','normal');\n      doc.setFontSize(7.1);\n      doc.setTextColor(...grey);\n      addPdfText(\n        doc,\n        'Indicative editorial calculation, not a quotation or tax assessment. Financing, parking, tyres, subsidies and exceptional one-off costs are excluded unless explicitly entered. Results depend on the assumptions recorded on this page. \u00a9 2026 B2BNews Agency.',\n        158,\n        180,\n        127,\n        3.2\n      );\n\n      footer('Page 1\/2 \u00b7 Starting assumptions & method');\n\n      \/\/ PAGE 2 \u2014 RESULTS\n      doc.addPage();\n      header('NMN TCO Comparison','Results only \u00b7 Method and assumptions are on page 1');\n\n      const cardGap=5;\n      const resultCardW=(contentW-cardGap*(data.cars.length-1))\/data.cars.length;\n      const resultCardY=34, resultCardH=43;\n\n      data.cars.forEach((c,idx)=>{\n        const x=margin+idx*(resultCardW+cardGap);\n        const color=pdfColorForType(c.type);\n        const isBest=c.i===data.winner.i;\n\n        doc.setDrawColor(...(isBest?green:[220,224,230]));\n        doc.setLineWidth(isBest?.8:.3);\n        doc.setFillColor(255,255,255);\n        doc.roundedRect(x,resultCardY,resultCardW,resultCardH,2,2,'FD');\n        doc.setFillColor(...color); doc.rect(x,resultCardY,resultCardW,4,'F');\n\n        doc.setTextColor(...grey); doc.setFont('helvetica','bold'); doc.setFontSize(7.5);\n        doc.text(c.type+'  |  '+statusText(c.status).toUpperCase(),x+4,resultCardY+10);\n        if(isBest){\n          doc.setTextColor(...green);\n          doc.text('BEST CHOICE',x+resultCardW-4,resultCardY+10,{align:'right'});\n        }\n\n        doc.setTextColor(...black); doc.setFontSize(11);\n        doc.text(doc.splitTextToSize(c.name,resultCardW-8).slice(0,2),x+4,resultCardY+17);\n\n        doc.setFontSize(18);\n        doc.text('EUR '+Math.round(c.monthly).toLocaleString('en-BE')+'\/month',x+4,resultCardY+29);\n\n        doc.setFont('helvetica','normal'); doc.setFontSize(8.2); doc.setTextColor(...grey);\n        doc.text('Total EUR '+Math.round(c.total).toLocaleString('en-BE')+'  |  EUR '+c.costKm.toFixed(2)+'\/km',x+4,resultCardY+36);\n        doc.text('Purchase '+money(data.inputCars[idx].purchase)+'  |  '+data.years+' years  |  '+data.km.toLocaleString('en-BE')+' km\/year',x+4,resultCardY+41);\n      });\n\n      const winY=83;\n      const savingsPdf=data.savings.map(s=>'EUR '+Math.round(s.amount).toLocaleString('en-BE')+' vs '+s.name).join('  |  ');\n      doc.setFillColor(240,253,244); doc.setDrawColor(134,239,172);\n      doc.roundedRect(margin,winY,contentW,18,2,2,'FD');\n      doc.setTextColor(...green); doc.setFont('helvetica','bold'); doc.setFontSize(9.5);\n      doc.text(data.winner.name+' has the lowest estimated TCO',margin+4,winY+5.5);\n      doc.setFont('helvetica','normal'); doc.setFontSize(8.3);\n      const savingLines=doc.splitTextToSize('Estimated savings over '+data.years+' years: '+savingsPdf,contentW-8);\n      doc.text(savingLines.slice(0,2),margin+4,winY+10.5);\n\n      const tableY=108;\n      doc.setTextColor(...black); doc.setFont('helvetica','bold'); doc.setFontSize(10);\n      doc.text('Cost breakdown over the selected ownership period',margin,tableY);\n\n      const rows=[\n        ['Depreciation',c=>c.depreciation],\n        ['Energy \/ fuel',c=>c.energy],\n        ['Maintenance',c=>c.maintenance],\n        ['Insurance',c=>c.insurance],\n        ['Taxes',c=>c.tax.total],\n        ['Extra repairs \/ wear',c=>c.repairs],\n        ['Estimated resale value',c=>c.residual]\n      ];\n\n      const labelW=38;\n      const valAreaW=contentW-labelW;\n      const colW=valAreaW\/data.cars.length;\n      let y=tableY+7;\n\n      doc.setFillColor(...pale); doc.rect(margin,y-4,contentW,7,'F');\n      doc.setFontSize(7.5); doc.setFont('helvetica','bold'); doc.setTextColor(...grey);\n      doc.text('COST ITEM',margin+2,y);\n\n      data.cars.forEach((c,idx)=>{\n        doc.text(doc.splitTextToSize(c.name,colW-4)[0],margin+labelW+idx*colW+2,y);\n      });\n\n      y+=6.5;\n\n      rows.forEach((row,ridx)=>{\n        if(ridx%2===1){\n          doc.setFillColor(250,250,251);\n          doc.rect(margin,y-4.5,contentW,6.3,'F');\n        }\n\n        doc.setFont('helvetica','normal'); doc.setFontSize(7.6); doc.setTextColor(...black);\n        doc.text(row[0],margin+2,y);\n\n        data.cars.forEach((c,idx)=>{\n          const val=row[1](c);\n          const txt=(row[0]==='Extra repairs \/ wear' && !val)?'-':'EUR '+Math.round(val).toLocaleString('en-BE');\n          doc.text(txt,margin+labelW+(idx+1)*colW-3,y,{align:'right'});\n        });\n\n        y+=5.8;\n      });\n\n      \/\/ Page 2 deliberately contains only results and the cost table.\n      \/\/ Methodology and disclaimer are on page 1 to prevent any overlap.\n      footer('Page 2\/2 \u00b7 TCO results');\n\n      const names=data.cars.map(c=>pdfSafeName(c.name)).join('-vs-');\n      const stamp=new Date().toISOString().replace(\/[:.]\/g,'-').slice(0,19);\n      doc.save('NMN-TCO-v5_8-'+names+'-'+stamp+'.pdf');\n      trackTcoEvent('tco_pdf_download',{\n        country:country,\n        region:country==='BE' ? el('beRegion').value : '',\n        active_cars:activeCarIndexes().length\n      });\n\n      status.textContent='PDF downloaded.';\n\n    }catch(err){\n      console.error('NMN PDF generation failed',err);\n      status.textContent='PDF generation failed. Please try again.';\n    }\n  }\n\n\n  function updateCountryNote(){\n    if(country==='NL'){\n      el('countryNote').textContent='Netherlands: use the official Belastingdienst calculator for the current quarterly MRB, then enter that amount per car. NMN models the EV discount schedule across the selected ownership period.';\n    }else if(country==='LU'){\n      el('countryNote').textContent='Luxembourg: the calculator adds the standard \u20ac50 registration charge and calculates annual road tax automatically for M1 passenger cars first registered from 2001 using official CO\u2082 and fuel type. Use NEDC CO\u2082 for 2001-2020 and WLTP from 2021. BEVs use the \u20ac30 annual minimum; pre-2001 annual tax is entered manually.';\n    }else if(el('beRegion').value==='Flanders'){\n      el('countryNote').textContent='Flanders: BIV and annual road tax are calculated automatically for BEVs and most modern non-leased passenger cars. Open the tax details inside each car to enter CO\u2082, engine capacity, Euro norm and first registration date.';\n    }else if(el('beRegion').value==='Brussels'){\n      el('countryNote').textContent='Brussels: 2026 BIV and annual road tax are calculated automatically for standard non-leasing passenger cars. For HEV\/PHEV, enter the combustion-engine power and capacity used for taxation.';\n    }else{\n      el('countryNote').textContent='Wallonia: TMC and annual road tax are calculated automatically using the 2026-2027 rates. Enter power, CO\u2082, maximum authorised mass, engine capacity and first registration date. Special family reductions and exemptions are not included.';\n    }\n  }\n\n  function setCountry(c){\n    country=c;\n    qa('.country').forEach(b=>b.classList.toggle('active',b.dataset.country===c));\n    qa('[data-be-only]').forEach(x=>x.classList.toggle('hidden',c!=='BE'));\n    qa('[data-nl-only]').forEach(x=>x.classList.toggle('hidden',c!=='NL'));\n    applyCountryPriceDefaults(c);\n    calculate();\n  }\n\n  [1,2,3].forEach(i=>{\n    updateCard(i,false);\n\n    carEl(i,'Type').addEventListener('change',()=>{\n      updateCard(i,true);\n      updateUsedValuation(i);\n      calculate();\n    });\n\n    carEl(i,'Status').addEventListener('change',()=>{\n      seedUsedInputs(i);\n      updateCard(i,false);\n      updateUsedValuation(i,true);\n      calculate();\n    });\n\n    const usedReg=carEl(i,'UsedFirstReg');\n    const currentKm=carEl(i,'CurrentKm');\n    const autoResale=carEl(i,'AutoResale');\n    const resale=carEl(i,'ResaleEuro');\n\n    if(usedReg) usedReg.addEventListener('change',()=>{\n      syncUsedFirstRegistrationToTaxes(i);\n      updateUsedValuation(i);\n      calculate();\n    });\n\n    if(currentKm) currentKm.addEventListener('change',()=>{\n      updateUsedValuation(i);\n      calculate();\n    });\n\n    if(autoResale) autoResale.addEventListener('change',()=>{\n      if(autoResale.checked) updateUsedValuation(i,true);\n      calculate();\n    });\n\n    if(resale) resale.addEventListener('input',()=>{\n      if(autoResale && document.activeElement===resale) autoResale.checked=false;\n    });\n  });\n\n  qa('.country').forEach(b=>b.addEventListener('click',()=>setCountry(b.dataset.country)));\n  el('beRegion').addEventListener('change',calculate);\n  el('nlProvince').addEventListener('change',calculate);\n  qa('input,select').forEach(x=>{\n    if(!x.matches('[data-id$=\"Type\"],[data-id$=\"Status\"],[data-id$=\"UsedFirstReg\"],[data-id$=\"CurrentKm\"],[data-id$=\"AutoResale\"],[data-id=\"beRegion\"],[data-id=\"nlProvince\"]')) x.addEventListener('change',calculate);\n  });\n  el('addCar3').addEventListener('click',()=>setCar3Active(true));\n  el('removeCar3').addEventListener('click',()=>setCar3Active(false));\n  el('downloadPdf').addEventListener('click',generatePdf);\n  el('calculate').addEventListener('click',()=>{\n    recalculateEverything(true);\n    trackCalculatorUse();\n  });\n  applyCountryPriceDefaults('BE');\n  setCar3Active(false);\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Newmobility.news NMN TCO Calculator Compare any three cars. Choose ICE, HEV, PHEV or BEV independently, and mix new, demo and used cars. The calculator covers Belgium, the Netherlands and Luxembourg, with automatic 2026 vehicle-tax calculations where supported. \ud83d\ude98 Any 3 cars \u26fd ICE \u00b7 \u267b\ufe0f HEV \u00b7 \ud83d\udd0c PHEV \u00b7 \ud83d\udd0b BEV \ud83c\udde7\ud83c\uddea Belgium tax [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-192021","page","type-page","status-publish","hentry"],"acf":[],"featured_image_urls_v2":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","1536x1536":"","2048x2048":"","trp-custom-language-flag":"","related-thumb":"","gform-image-choice-sm":"","gform-image-choice-md":"","gform-image-choice-lg":"","mailchimp":"","unipress-phone":"","unipress-tablet":"","unipress-tablet-portrait":"","unipress-tablet-landscape":"","unipress-smartphone":"","unipress-wide-screen":""},"post_excerpt_stackable_v2":"<p>Newmobility.news NMN TCO Calculator Compare any three cars. Choose ICE, HEV, PHEV or BEV independently, and mix new, demo and used cars. The calculator covers Belgium, the Netherlands and Luxembourg, with automatic 2026 vehicle-tax calculations where supported. \ud83d\ude98 Any 3 cars \u26fd ICE \u00b7 \u267b\ufe0f HEV \u00b7 \ud83d\udd0c PHEV \u00b7 \ud83d\udd0b BEV \ud83c\udde7\ud83c\uddea Belgium tax auto \ud83c\uddf3\ud83c\uddf1 Dutch MRB assisted \ud83c\uddf1\ud83c\uddfa Luxembourg tax auto Tax rules: 19 Aug 2026 \u2713 Benelux number formats \u21bb Full recalculation Build v5.8 What is TCO? Total Cost of Ownership (TCO) is the estimated total cost of owning and using a car over the period&hellip;<\/p>\n","category_list_v2":"","author_info_v2":{"name":"Joris Van Roy","url":"https:\/\/newmobility.news\/nl\/author\/jorisximcom-be\/"},"comments_num_v2":"0 comments","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>NMN TCO Calculator Test - newmobility.news<\/title>\n<meta name=\"robots\" content=\"noindex, follow\" \/>\n<meta property=\"og:locale\" content=\"nl_BE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NMN TCO Calculator Test - newmobility.news\" \/>\n<meta property=\"og:description\" content=\"Newmobility.news NMN TCO Calculator Compare any three cars. Choose ICE, HEV, PHEV or BEV independently, and mix new, demo and used cars. The calculator covers Belgium, the Netherlands and Luxembourg, with automatic 2026 vehicle-tax calculations where supported. \ud83d\ude98 Any 3 cars \u26fd ICE \u00b7 \u267b\ufe0f HEV \u00b7 \ud83d\udd0c PHEV \u00b7 \ud83d\udd0b BEV \ud83c\udde7\ud83c\uddea Belgium tax [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/newmobility.news\/nl\/newmobility-news-tco-test-8x27\/\" \/>\n<meta property=\"og:site_name\" content=\"newmobility.news\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/search\/top\/?q=newmobility.news\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-20T06:30:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/newmobility.news\/wp-content\/uploads\/2017\/12\/Newmobility-app4.png?fit=426%2C426&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"426\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@jorisvry\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/newmobility.news\\\/newmobility-news-tco-test-8x27\\\/\",\"url\":\"https:\\\/\\\/newmobility.news\\\/newmobility-news-tco-test-8x27\\\/\",\"name\":\"NMN TCO Calculator Test - newmobility.news\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/newmobility.news\\\/#website\"},\"datePublished\":\"2026-08-19T11:04:25+00:00\",\"dateModified\":\"2026-08-20T06:30:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/newmobility.news\\\/newmobility-news-tco-test-8x27\\\/#breadcrumb\"},\"inLanguage\":\"nl-BE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/newmobility.news\\\/newmobility-news-tco-test-8x27\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/newmobility.news\\\/newmobility-news-tco-test-8x27\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/newmobility.news\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NMN TCO Calculator Test\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/newmobility.news\\\/#website\",\"url\":\"https:\\\/\\\/newmobility.news\\\/\",\"name\":\"newmobility.news\",\"description\":\"A B2BNews Agency\u00ae news service for mobility business proessional\",\"publisher\":{\"@id\":\"https:\\\/\\\/newmobility.news\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/newmobility.news\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-BE\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/newmobility.news\\\/#organization\",\"name\":\"B2BNews Agency\",\"url\":\"https:\\\/\\\/newmobility.news\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-BE\",\"@id\":\"https:\\\/\\\/newmobility.news\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/newmobility.news\\\/wp-content\\\/uploads\\\/2018\\\/01\\\/b2bnews-agency-logo.png\",\"contentUrl\":\"https:\\\/\\\/newmobility.news\\\/wp-content\\\/uploads\\\/2018\\\/01\\\/b2bnews-agency-logo.png\",\"width\":\"581\",\"height\":\"117\",\"caption\":\"B2BNews Agency\"},\"image\":{\"@id\":\"https:\\\/\\\/newmobility.news\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/search\\\/top\\\/?q=newmobility.news\",\"https:\\\/\\\/x.com\\\/jorisvry\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jorisvanroy\\\/\",\"https:\\\/\\\/nl.pinterest.com\\\/jorisvanroy\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"NMN TCO-calculator-test - newmobility.news","robots":{"index":"noindex","follow":"follow"},"og_locale":"nl_BE","og_type":"article","og_title":"NMN TCO Calculator Test - newmobility.news","og_description":"Newmobility.news NMN TCO Calculator Compare any three cars. Choose ICE, HEV, PHEV or BEV independently, and mix new, demo and used cars. The calculator covers Belgium, the Netherlands and Luxembourg, with automatic 2026 vehicle-tax calculations where supported. \ud83d\ude98 Any 3 cars \u26fd ICE \u00b7 \u267b\ufe0f HEV \u00b7 \ud83d\udd0c PHEV \u00b7 \ud83d\udd0b BEV \ud83c\udde7\ud83c\uddea Belgium tax [&hellip;]","og_url":"https:\/\/newmobility.news\/nl\/newmobility-news-tco-test-8x27\/","og_site_name":"newmobility.news","article_publisher":"https:\/\/www.facebook.com\/search\/top\/?q=newmobility.news","article_modified_time":"2026-08-20T06:30:46+00:00","og_image":[{"width":426,"height":426,"url":"https:\/\/i0.wp.com\/newmobility.news\/wp-content\/uploads\/2017\/12\/Newmobility-app4.png?fit=426%2C426&ssl=1","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@jorisvry","twitter_misc":{"Geschatte leestijd":"6 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/newmobility.news\/newmobility-news-tco-test-8x27\/","url":"https:\/\/newmobility.news\/newmobility-news-tco-test-8x27\/","name":"NMN TCO-calculator-test - newmobility.news","isPartOf":{"@id":"https:\/\/newmobility.news\/#website"},"datePublished":"2026-08-19T11:04:25+00:00","dateModified":"2026-08-20T06:30:46+00:00","breadcrumb":{"@id":"https:\/\/newmobility.news\/newmobility-news-tco-test-8x27\/#breadcrumb"},"inLanguage":"nl-BE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/newmobility.news\/newmobility-news-tco-test-8x27\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/newmobility.news\/newmobility-news-tco-test-8x27\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/newmobility.news\/"},{"@type":"ListItem","position":2,"name":"NMN TCO Calculator Test"}]},{"@type":"WebSite","@id":"https:\/\/newmobility.news\/#website","url":"https:\/\/newmobility.news\/","name":"nieuwemobiliteit.nieuws","description":"Een nieuwsdienst van B2BNews Agency\u00ae voor professionals in de mobiliteitssector","publisher":{"@id":"https:\/\/newmobility.news\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/newmobility.news\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-BE"},{"@type":"Organization","@id":"https:\/\/newmobility.news\/#organization","name":"B2BNieuwsagentschap","url":"https:\/\/newmobility.news\/","logo":{"@type":"ImageObject","inLanguage":"nl-BE","@id":"https:\/\/newmobility.news\/#\/schema\/logo\/image\/","url":"https:\/\/newmobility.news\/wp-content\/uploads\/2018\/01\/b2bnews-agency-logo.png","contentUrl":"https:\/\/newmobility.news\/wp-content\/uploads\/2018\/01\/b2bnews-agency-logo.png","width":"581","height":"117","caption":"B2BNews Agency"},"image":{"@id":"https:\/\/newmobility.news\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/search\/top\/?q=newmobility.news","https:\/\/x.com\/jorisvry","https:\/\/www.linkedin.com\/in\/jorisvanroy\/","https:\/\/nl.pinterest.com\/jorisvanroy\/"]}]}},"jetpack_shortlink":"https:\/\/wp.me\/P9wJdU-NX7","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/newmobility.news\/nl\/wp-json\/wp\/v2\/pages\/192021","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/newmobility.news\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/newmobility.news\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/newmobility.news\/nl\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/newmobility.news\/nl\/wp-json\/wp\/v2\/comments?post=192021"}],"version-history":[{"count":11,"href":"https:\/\/newmobility.news\/nl\/wp-json\/wp\/v2\/pages\/192021\/revisions"}],"predecessor-version":[{"id":192066,"href":"https:\/\/newmobility.news\/nl\/wp-json\/wp\/v2\/pages\/192021\/revisions\/192066"}],"wp:attachment":[{"href":"https:\/\/newmobility.news\/nl\/wp-json\/wp\/v2\/media?parent=192021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}