(function(){ 'use strict'; var OWNER='amitabhkumar051222/drivespeclab-data@main'; var BASE='https://cdn.jsdelivr.net/gh/'+OWNER+'/'; var PARTS=['01','02','03','04','05'].map(function(n){return BASE+'data/db/part-'+n+'.txt'}); var ROOT='dslVehicleDB'; var SLUG={'Mercedes-Benz':'mercedes-benz','Land Rover':'land-rover','Tata Motors':'tata-motors','Volkswagen':'volkswagen'}; function q(s,r){return (r||document).querySelector(s)} function qa(s,r){return Array.prototype.slice.call((r||document).querySelectorAll(s))} function esc(v){return String(v==null?'':v).replace(/[&<>"']/g,function(c){return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]})} function attr(v){return esc(v).replace(/`/g,'`')} function norm(v){return String(v||'').toLowerCase().replace(/[^a-z0-9]/g,'')} function slug(b){return SLUG[b]||String(b||'').toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'')} function money(v){if(v===null||v===undefined||v===''||v===Infinity)return'Not published';if(typeof v==='number')return'$'+v.toLocaleString('en-US');return String(v)} function lowest(s){if(!s||!Array.isArray(s.trims)||!s.trims.length)return null;var vals=s.trims.map(function(t){return Number(t.msrp)}).filter(function(v){return isFinite(v)&&v>0});return vals.length?Math.min.apply(null,vals):null} function currentStatus(s){var x=String(s&&s.status||'').toLowerCase();return !(x.indexOf('discontinued')>-1||x.indexOf('not currently sold')>-1||x.indexOf('no current official product page')>-1)} function brandFromPath(){var m=location.pathname.match(/\/search\/label\/([^/?#]+)/i);if(!m)return'';var x='';try{x=decodeURIComponent(m[1]).replace(/\+/g,' ')}catch(_){x=m[1]}var A={'Land-Rover':'Land Rover','Tata':'Tata Motors','Tata-Motors':'Tata Motors','Mercedes-Benz':'Mercedes-Benz'};return A[x]||x.replace(/-/g,' ')} function unpackModel(x){var z={name:x[0],year:x[1],body:x[2],power:x[3],drive:x[4],seats:x[5],price:x[6],key:x[7]};if(x[8])Object.assign(z,x[8]);return z} function unpack(db){var out={};Object.keys(db.b||{}).forEach(function(name){var b=db.b[name];out[name]={source:b[0],warranty:b[1],note:b[2],status:b[3]||'Current U.S. retail lineup',models:(b[4]||[]).map(unpackModel)}});return out} function getSidecar(brand){return fetch(BASE+'data/v4/'+slug(brand)+'.json',{cache:'no-cache'}).then(function(r){if(!r.ok)return null;return r.json()}).catch(function(){return null})} function sideFor(sc,name){if(!sc||!sc.models)return null;if(sc.models[name])return sc.models[name];var n=norm(name),ks=Object.keys(sc.models);for(var i=0;i
'+esc(alt)+'
'} function addCss(){if(q('#dsl-db-css'))return;var s=document.createElement('style');s.id='dsl-db-css';s.textContent='#'+ROOT+'{max-width:1180px;margin:18px auto 45px;padding:0 14px;font-family:Inter,system-ui,sans-serif;color:#10233f}.dh{background:linear-gradient(135deg,#071d3f,#0b3b75);color:#fff;border-radius:22px;padding:26px;box-shadow:0 14px 36px #071d3f20}.dh h1{font-size:clamp(30px,5vw,45px);margin:0 0 6px}.dh p{margin:0;color:#dbeafe}.dp{display:flex;gap:8px;flex-wrap:wrap;margin-top:13px}.dp span{font-size:11px;font-weight:800;border:1px solid #ffffff30;background:#ffffff12;border-radius:999px;padding:6px 9px}.dt{display:flex;gap:10px;align-items:center;justify-content:space-between;margin:17px 0}.ds{width:min(470px,100%);padding:12px;border:1px solid #d7e1ec;border-radius:12px}.dg{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px}.dc{border:1px solid #e2e8f0;border-radius:18px;overflow:hidden;background:#fff;box-shadow:0 8px 22px #0f23400f;display:flex;flex-direction:column}.dm{height:190px;background:#edf3f8;position:relative}.dm img,.dhero img,.dgal img{width:100%;height:100%;object-fit:cover}.dy{position:absolute;top:10px;left:10px;background:#071d3fe8;color:#fff;padding:5px 8px;border-radius:999px;font-size:10px;font-weight:900}.db{padding:15px;display:flex;flex-direction:column;flex:1}.db h2{margin:0 0 5px;font-size:20px}.dk{font-size:12px;color:#5c6d81;line-height:1.5;min-height:36px}.mini{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:12px 0}.mini div{background:#f7f9fc;padding:8px;border-radius:9px;font-size:11px}.mini b{display:block;font-size:9px;color:#75859a;text-transform:uppercase}.btn,.src{display:flex;justify-content:center;text-decoration:none!important;font-weight:900;border-radius:11px;padding:10px 12px}.btn{background:#0b3b75;color:#fff!important;margin-top:auto}.src{display:inline-flex;background:#f5b800;color:#111!important}.detail{display:none}.detail.on{display:block}.list.off{display:none}.back{border:0;border-radius:11px;padding:10px 13px;margin:15px 0;background:#edf4fb;color:#0b3b75;font-weight:900}.spec{display:grid;grid-template-columns:1.05fr 1fr;border:1px solid #e1e8f0;border-radius:19px;overflow:hidden;background:#fff}.dhero{min-height:330px;background:#edf3f8}.copy{padding:25px}.copy h2{font-size:31px;margin:4px 0}.price{font-size:20px;color:#0b4c8b;font-weight:900}.chips{display:flex;gap:6px;flex-wrap:wrap;margin:12px 0}.chips span{font-size:10px;font-weight:900;background:#eef5fb;border:1px solid #dbe7f2;padding:6px 8px;border-radius:999px}.dgal{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:13px 0}.dgal div{aspect-ratio:16/10;border-radius:12px;overflow:hidden;background:#edf3f8}.sec{background:#fff;border:1px solid #e1e8f0;border-radius:15px;padding:17px;margin:11px 0}.sec h3{margin:0 0 10px}.tbl,.trimtbl{width:100%;border-collapse:collapse}.tbl tr+tr,.trimtbl tr+tr{border-top:1px solid #edf1f5}.tbl th,.tbl td,.trimtbl th,.trimtbl td{text-align:left;padding:9px 5px;font-size:12px;line-height:1.5;vertical-align:top}.tbl th{width:32%;color:#68788c}.trimtbl th{color:#68788c;font-size:10px;text-transform:uppercase}.trimtbl td:nth-child(2){font-weight:900;white-space:nowrap}.verified{display:inline-flex;background:#e7f8ef;color:#087443;border:1px solid #bce9cf;border-radius:999px;padding:5px 8px;font-size:10px;font-weight:900;margin:0 0 10px}.note{padding:9px 10px;background:#f8fafc;border:1px solid #e1e8f0;border-radius:10px;color:#617084;font-size:11px;margin-top:10px}.dlf{display:none;width:100%;height:100%;place-items:center;text-align:center;padding:10px;background:#edf3f8;color:#607086;font-weight:800}.empty{padding:24px;border:1px solid #e1e8f0;border-radius:18px;background:#fff;margin-top:15px}@media(max-width:900px){.dg{grid-template-columns:repeat(2,1fr)}.spec{grid-template-columns:1fr}}@media(max-width:590px){.dg{grid-template-columns:1fr}.dt{align-items:stretch;flex-direction:column}.dm{height:205px}.dgal{grid-template-columns:repeat(2,1fr)}.copy{padding:18px}.tbl th{width:38%}.trimtbl{display:block;overflow-x:auto;white-space:normal}}';document.head.appendChild(s)} function rows(arr){return''+arr.map(function(r){return''}).join('')+'
'+esc(r[0])+''+esc(r[1]||'—')+'
'} function fallback(m,k){var z={engine:'Varies by trim/powertrain; verify official manufacturer specification.',output:'Varies by engine/motor/trim.',torque:'Varies by powertrain/trim.',transmission:'Varies by powertrain/trim.',accel:'Varies by trim.',efficiency:'EPA MPG/MPGe varies by configuration.',range:'EPA range varies by configuration where applicable.',charging:'Charging capability varies by battery/model year.',cargo:'Cargo volume varies by configuration.',towing:'Towing varies by configuration and equipment.',payload:'Payload varies by configuration.',dimensions:'Dimensions vary by trim.',tech:'Infotainment/features vary by trim.',safety:'Safety/ADAS availability varies by trim.'};return m[k]||z[k]||'See official manufacturer specification.'} function sideValue(s,k){if(!s||s[k]===undefined||s[k]===null)return'';var v=s[k];if(typeof v==='object'){return Object.keys(v).map(function(x){return x.replace(/_/g,' ')+': '+v[x]}).join(' • ')}return v} function trimTable(s,verified){var note=s&&s.pricing_note?'
'+esc(s.pricing_note)+'
':'';if(!s||!Array.isArray(s.trims)||!s.trims.length)return note;var body=s.trims.map(function(t){var cfg=[t.powertrain,t.default_drive,t.default_cab].filter(Boolean).join(' • ');return''+esc(t.name)+''+esc(money(t.msrp))+''+esc(cfg||'—')+''}).join('');return'
✓ Official U.S. trim pricing verified '+esc(verified||'')+'

Trims & starting MSRP

'+body+'
Trim / configurationStarting MSRPPowertrain / configuration
'+note+'
'} function card(brand,m,s){var p=lowest(s);var price=p?money(p):(m.price||'Price not announced');var yr=(s&&s.year)||m.year||'';return'
'+pic(imageUrl(brand,m,0),brand+' '+m.name,'ci')+''+esc(yr)+'

'+esc(m.name)+'

'+esc((s&&s.status)||m.key||'')+'
Powertrain'+esc(m.power||'See official specs')+'
Drive'+esc(m.drive||'Varies')+'
Seats'+esc(m.seats||'—')+'
Starting price'+esc(price)+'
View full specifications →
'} function detail(brand,b,m,s,sc){var gallery='';for(var i=0;i<6;i++)gallery+='
'+pic(imageUrl(brand,m,i),brand+' '+m.name+' view '+(i+1),'gi')+'
';var source=(s&&s.source)||m.source||b.source,yr=(s&&s.year)||m.year||'',lp=lowest(s),start=lp?money(lp):(m.price||'Price not announced'),status=(s&&s.status)||b.status;var hp=sideValue(s,'horsepower')||sideValue(s,'mild_hybrid_horsepower')||sideValue(s,'phev_horsepower'),mpg=sideValue(s,'mpg_combined')||sideValue(s,'mild_hybrid_mpg_combined')||sideValue(s,'mpge_combined'),rng=sideValue(s,'range_miles')||sideValue(s,'range_miles_up_to')||sideValue(s,'epa_range_miles')||sideValue(s,'epa_range_miles_up_to')||sideValue(s,'phev_electric_range_miles');var verified=[];if(hp)verified.push(['Official output',hp+(typeof hp==='number'?' hp':'')]);if(mpg)verified.push(['Official efficiency',mpg+(typeof mpg==='number'?'':'')]);if(rng)verified.push(['Official range',rng+(typeof rng==='number'?' miles':'')]);var extra=verified.length?'

Official verified performance / efficiency

'+rows(verified)+'
':'';return'
'+pic(imageUrl(brand,m,0),brand+' '+m.name,'hi')+'
DriveSpecLab • U.S. Vehicle Database V4 • '+esc(yr)+'

'+esc(brand+' '+m.name)+'

'+esc(start)+'

'+esc((s&&s.status)||m.key||'')+'

'+esc(m.body||'Vehicle')+''+esc(m.power||'See official specs')+''+esc(m.drive||'Varies')+''+esc(m.seats||'—')+' seats
'+(source?'Official U.S. source ↗':'')+'
'+gallery+'
'+trimTable(s,sc&&sc.verified_on)+'

Overview

'+rows([['Model year / status',yr+' • '+status],['Body style',m.body],['Starting MSRP',start],['Seating',m.seats],['Powertrain',m.power],['Drivetrain',m.drive],['Key detail',m.key]])+'
'+extra+'

Engine, motor & performance

'+rows([['Engine / motor',fallback(m,'engine')],['Power output',fallback(m,'output')],['Torque',fallback(m,'torque')],['Transmission',fallback(m,'transmission')],['Performance',fallback(m,'accel')]])+'

Efficiency, range & charging

'+rows([['EPA efficiency',fallback(m,'efficiency')],['EPA / driving range',fallback(m,'range')],['Charging',fallback(m,'charging')]])+'

Dimensions, cargo & capability

'+rows([['Dimensions',fallback(m,'dimensions')],['Cargo',fallback(m,'cargo')],['Towing',fallback(m,'towing')],['Payload',fallback(m,'payload')]])+'

Technology & safety

'+rows([['Technology',fallback(m,'tech')],['Safety / ADAS',fallback(m,'safety')]])+'

Warranty

'+rows([['Warranty',m.warranty||b.warranty]])+'
'} function render(D,brand,sc){var b=D[brand];if(!b)return;addCss();qa('.dsl-car-db-page,.dsl-catalog-head,.dsl-catalog-grid,.status-msg-wrap').forEach(function(x){x.style.display='none'});b.models=mergeModels(b,sc);var host=q('.dsl-maincol')||q('main')||q('#content-wrapper')||document.body,old=q('#'+ROOT);if(old)old.remove();var r=document.createElement('section');r.id=ROOT;var h='

'+esc(brand)+'

Current U.S. lineup. Official trim pricing is shown where verified.

'+b.models.length+' model seriesExternal database V4Image-enabled
';if(!b.models.length){r.innerHTML=h+'

No current U.S. retail lineup

'+esc(b.note||'')+'

';host.insertBefore(r,host.firstChild);return}r.innerHTML=h+'
'+b.models.length+' models
'+b.models.map(function(m){return card(brand,m,sideFor(sc,m.name))}).join('')+'
';host.insertBefore(r,host.firstChild);var search=q('.ds',r);if(search)search.oninput=function(){var s=this.value.toLowerCase().trim(),n=0;qa('.dc',r).forEach(function(c){var ok=!s||c.dataset.n.indexOf(s)>-1;c.style.display=ok?'':'none';if(ok)n++});q('.cnt',r).textContent=n};function openModel(name){var m=b.models.find(function(x){return x.name===name});if(!m)return;var d=q('.detail',r);q('.list',r).classList.add('off');d.innerHTML=detail(brand,b,m,sideFor(sc,m.name),sc);d.classList.add('on');history.replaceState(null,'','#usmodel='+encodeURIComponent(name));window.scrollTo({top:r.offsetTop-12,behavior:'smooth'})}r.onclick=function(ev){var x=ev.target.closest('[data-open]');if(x){ev.preventDefault();openModel(x.dataset.open);return}if(ev.target.closest('.back')){q('.detail',r).classList.remove('on');q('.detail',r).innerHTML='';q('.list',r).classList.remove('off');history.replaceState(null,'',location.pathname+location.search)}};if(location.hash.indexOf('#usmodel=')===0){try{openModel(decodeURIComponent(location.hash.slice(9)))}catch(_){}}} function init(){var brand=brandFromPath();if(!brand)return;Promise.all([Promise.all(PARTS.map(function(u){return fetch(u,{cache:'no-cache'}).then(function(r){if(!r.ok)throw Error('DB part '+r.status);return r.text()})})),getSidecar(brand)]).then(function(all){var db=JSON.parse(all[0].join('')),D=unpack(db),sc=all[1];window.DriveSpecLabDB={meta:{version:4,base_version:db.v,base_updated:db.u,verified_on:sc&&sc.verified_on||null},brands:D,sidecar:sc};document.dispatchEvent(new CustomEvent('DriveSpecLabDBReady',{detail:window.DriveSpecLabDB}));render(D,brand,sc)}).catch(function(err){console.error('DriveSpecLab V4 database load failed',err)})} if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else init(); })(); // Load the shared adapter on both the homepage and model pages. (function () { if (document.getElementById('dsl-catalog-consistency')) return; var script = document.createElement('script'); script.id = 'dsl-catalog-consistency'; script.src = 'https://raw.githubusercontent.com/amitabhkumar051222/drivespeclab-data/main/js/catalog-consistency.js'; script.onerror = function () { if (script.dataset.fallback) return; script.dataset.fallback = '1'; script.src = 'https://cdn.jsdelivr.net/gh/amitabhkumar051222/drivespeclab-data@main/js/catalog-consistency.js'; }; document.head.appendChild(script); })();