const GD=window.MBA_GUIDE_DATA;
const CI={General:2,EWS:3,'OBC-NCL':4,SC:5,ST:6,PwD:7};
const fmtL=v=>v==null?'—':('₹'+v.toFixed(v>=100?0:1)+' L');
function wxScore(m){if(isNaN(m)||m<=0)return 0;if(m<36)return m/36*100;if(m<=48)return 100;return Math.max(60,100-(m-48)*2);}
function composite(name,p,t10,t12,gr,wx){
const w=GD.weights[name]||GD.genericW;
const parts=[[w[0],p],[w[1],t10],[w[2],t12],[w[3],gr],[w[4],isNaN(wx)?NaN:wxScore(wx)]];
let num=0,den=0;parts.forEach(([wt,val])=>{if(wt>0&&!isNaN(val)){num+=wt*val;den+=wt;}});
return den?{score:num/den,official:w[5],w}:null;}
function wLabel(w){const seg=[['CAT',w[0]],['X',w[1]],['XII',w[2]],['Grad',w[3]],['Work-ex',w[4]]].filter(s=>s[1]>0).map(s=>s[0]+' '+s[1]+'%').join(' · ');return seg+(w[5]?'':' · assumed');}
function pctFromScore(s){const L=GD.lookup;if(s<=L[0][0])return L[0][1]*(s/L[0][0]);if(s>=L[L.length-1][0])return 100;
for(let i=0;i<L.length-1;i++){const[a,pa]=L[i],[b,pb]=L[i+1];if(s>=a&&s<=b)return pa+(pb-pa)*(s-a)/(b-a);}return 100;}

const guideStyles={
h2:{fontFamily:'var(--font-display)',fontWeight:800,fontSize:28,color:'var(--text-heading)',margin:'28px 0 8px'},
lede:{fontFamily:'var(--font-body)',fontSize:17,color:'var(--text-body)',lineHeight:1.6,margin:'0 0 14px',maxWidth:820},
panel:{background:'var(--white)',border:'1px solid var(--border-default)',borderRadius:'var(--radius-md)',padding:'18px 20px',margin:'14px 0',boxShadow:'var(--shadow-sm)'},
label:{fontFamily:'var(--font-body)',fontSize:13,fontWeight:700,color:'var(--text-muted)',letterSpacing:'.05em',textTransform:'uppercase'},
input:{background:'var(--white)',color:'var(--text-body)',border:'1px solid var(--border-default)',borderRadius:'var(--radius-sm)',padding:'11px 13px',fontSize:16,fontFamily:'var(--font-body)',width:150},
select:{background:'var(--white)',color:'var(--text-body)',border:'1px solid var(--border-default)',borderRadius:'var(--radius-sm)',padding:'11px 13px',fontSize:16,fontFamily:'var(--font-body)',minWidth:160},
hint:{fontFamily:'var(--font-body)',fontSize:15,color:'var(--text-muted)',marginTop:8,lineHeight:1.5},
callout:{borderLeft:'3px solid var(--brand-accent)',background:'var(--white)',border:'1px solid var(--border-default)',borderLeftWidth:3,borderLeftColor:'var(--brand-accent)',borderRadius:'var(--radius-sm)',padding:'16px 19px',fontFamily:'var(--font-body)',fontSize:16,color:'var(--text-body)',lineHeight:1.6,margin:'12px 0'},
th:{background:'var(--gray-50)',textAlign:'left',padding:'11px 14px',fontFamily:'var(--font-body)',fontSize:13.5,letterSpacing:'.03em',textTransform:'uppercase',color:'var(--text-muted)',whiteSpace:'nowrap'},
td:{padding:'10px 14px',borderTop:'1px solid var(--border-default)',fontFamily:'var(--font-body)',fontSize:16.5,color:'var(--text-body)'},
};
function Field({label,children}){return <div style={{display:'flex',flexDirection:'column',gap:4}}><label style={guideStyles.label}>{label}</label>{children}</div>;}
function GTable({head,rows,rightFrom=1}){
return <div style={{border:'1px solid var(--border-default)',borderRadius:'var(--radius-md)',overflow:'auto',margin:'10px 0',background:'var(--white)'}}>
<table style={{borderCollapse:'collapse',width:'100%'}}>
<thead><tr>{head.map((h,i)=><th key={i} style={{...guideStyles.th,textAlign:i>=rightFrom?'right':'left'}}>{h}</th>)}</tr></thead>
<tbody>{rows.map((r,ri)=><tr key={ri}>{r.map((v,i)=><td key={i} style={{...guideStyles.td,textAlign:i>=rightFrom?'right':'left',fontWeight:i===0?700:400,fontVariantNumeric:'tabular-nums'}}>{v==null?'—':v}</td>)}</tr>)}</tbody>
</table></div>;}

function FitSection(){
const {Badge}=window.ScorebuddyDesignSystem_ee75f2;
const [cat,setCat]=React.useState('General');
const [grp,setGrp]=React.useState('');
const [sortby,setSortby]=React.useState('floor');
const [v,setV]=React.useState({pct:'',t10:'',t12:'',grad:'',wx:''});
const p=parseFloat(v.pct),t10=parseFloat(v.t10),t12=parseFloat(v.t12),gr=parseFloat(v.grad),wx=parseFloat(v.wx);
const hasProfile=!isNaN(p)&&(!isNaN(t10)||!isNaN(t12)||!isNaN(gr)||!isNaN(wx));
let rows=GD.cat.filter(r=>!grp||r[12]===grp);
const compOf=r=>{const c=isNaN(p)?null:composite(r[0],p,t10,t12,gr,wx);return c?c.score:-1;};
rows=rows.slice().sort((a,b)=>{
if(sortby==='name')return a[0].localeCompare(b[0]);
if(sortby==='pay')return (b[10]??-1)-(a[10]??-1);
if(sortby==='comp')return compOf(b)-compOf(a);
return (b[CI[cat]]??-1)-(a[CI[cat]]??-1);});
let clears=0,total=0;
rows.forEach(r=>{const f=r[CI[cat]];if(f!=null){total++;if(!isNaN(p)&&p>=f)clears++;}});
const set=k=>e=>setV(o=>({...o,[k]:e.target.value}));
const inp=(k,ph)=><input type="number" value={v[k]} onChange={set(k)} placeholder={ph} style={guideStyles.input}></input>;
return <div>
<h2 style={guideStyles.h2}>Check <span style={{color:'var(--brand-accent)'}}>your fit</span></h2>
<p style={guideStyles.lede}>Enter your CAT percentile to see which floors you clear — then add your academics and work experience, because most schools weigh those too. Each card shows a <b>profile score out of 100</b>, computed on that school's own shortlisting weights.</p>
<div style={guideStyles.panel}>
<div style={{display:'flex',gap:10,flexWrap:'wrap',alignItems:'end'}}>
<Field label="Category"><select value={cat} onChange={e=>setCat(e.target.value)} style={guideStyles.select}>{Object.keys(CI).map(c=><option key={c}>{c}</option>)}</select></Field>
<Field label="CAT percentile">{inp('pct','e.g. 92.5')}</Field>
<Field label="Class 10 %">{inp('t10','e.g. 88')}</Field>
<Field label="Class 12 %">{inp('t12','e.g. 85')}</Field>
<Field label="Graduation %">{inp('grad','e.g. 72')}</Field>
<Field label="Work ex (months)">{inp('wx','e.g. 24')}</Field>
</div>
<div style={{display:'flex',gap:10,flexWrap:'wrap',alignItems:'end',marginTop:10}}>
<Field label="Show"><select value={grp} onChange={e=>setGrp(e.target.value)} style={guideStyles.select}><option value="">All schools</option>{['Top IIM','Older IIM','Newer IIM','Elite non-IIM','IIT B-school','Private'].map(g=><option key={g}>{g}</option>)}</select></Field>
<Field label="Sort"><select value={sortby} onChange={e=>setSortby(e.target.value)} style={guideStyles.select}><option value="floor">Entry floor</option><option value="comp">Your profile score</option><option value="pay">Average pay</option><option value="name">Name</option></select></Field>
</div>
<div style={guideStyles.hint}>{isNaN(p)?'Enter a percentile to light the cards up — add boards, graduation and work-ex for a fuller picture.':('At '+p+' percentile ('+cat+'), you clear the published floor at '+clears+' of '+total+' CAT schools shown.'+(hasProfile?' Profile scores use each school\u2019s shortlisting weights — sort by profile score to see where your overall record counts most.':''))}</div>
<div style={guideStyles.hint}>Work experience scores highest around 2-3 years, flat to 4, then tapers — that's how most IIMs award it. CGPA? Multiply by 9.5 (or your university's rule) to get a percentage.</div>
</div>
<div style={{display:'grid',gridTemplateColumns:'repeat(auto-fill,minmax(300px,1fr))',gap:12,margin:'14px 0'}}>
{rows.map(r=>{
const floor=r[CI[cat]],est=r[8],note=r[9],avg=r[10],high=r[11];
const c=hasProfile?composite(r[0],p,t10,t12,gr,wx):null;
let badge=null;
if(floor==null)badge=<Badge tone="neutral">ℹ no floor published — see note</Badge>;
else if(!isNaN(p))badge=p>=floor?<Badge tone="success">✓ you clear the floor</Badge>:<Badge tone="danger">✗ {(floor-p).toFixed(1)} short</Badge>;
return <div key={r[0]} style={{background:'var(--white)',border:'1px solid var(--border-default)',borderRadius:'var(--radius-md)',padding:'14px 16px',boxShadow:'var(--shadow-sm)'}}>
<div style={{fontFamily:'var(--font-body)',fontSize:13,color:'var(--text-muted)',fontWeight:600,letterSpacing:'.04em',textTransform:'uppercase',marginBottom:2}}>{r[12]} · {r[1]}</div>
<h3 style={{margin:0,fontFamily:'var(--font-display)',fontWeight:700,fontSize:19,color:'var(--text-heading)'}}>{r[0]}</h3>
<div style={{fontFamily:'var(--font-body)',fontSize:16,color:'var(--text-body)',margin:'7px 0 3px'}}>{floor==null?<span style={{color:'var(--text-muted)'}}>not published</span>:<span><b style={{fontSize:28,color:'var(--brand-accent)'}}>{est?'≈ ':''}{floor}</b><span style={{color:'var(--text-muted)'}}> %ile floor · {cat}</span></span>}</div>
{c&&<div><div style={{display:'flex',alignItems:'center',gap:9,margin:'7px 0 2px'}}>
<div style={{flex:1,height:8,background:'var(--gray-100)',borderRadius:'var(--radius-pill)',overflow:'hidden'}}><div style={{height:'100%',width:c.score.toFixed(1)+'%',background:'var(--brand-primary)',borderRadius:'var(--radius-pill)'}}></div></div>
<div style={{fontFamily:'var(--font-body)',fontSize:18,fontWeight:700,fontVariantNumeric:'tabular-nums',color:'var(--text-heading)'}}>{c.score.toFixed(1)}<span style={{fontSize:11,color:'var(--text-muted)',fontWeight:600}}>/100</span></div></div>
<div style={{fontFamily:'var(--font-body)',fontSize:13,color:'var(--text-muted)',letterSpacing:'.02em',marginBottom:2}}>{wLabel(c.w)}</div></div>}
{(avg!=null||high!=null)&&<div style={{fontFamily:'var(--font-body)',fontSize:15.5,color:'var(--text-body)',marginTop:6}}>avg <b style={{color:'var(--brand-accent)'}}>{fmtL(avg)}</b> · top {fmtL(high)}</div>}
{badge&&<div style={{marginTop:8}}>{badge}</div>}
{note&&<div style={{fontFamily:'var(--font-body)',fontSize:15,color:'var(--text-muted)',marginTop:7,lineHeight:1.6}}>{note}</div>}
</div>;})}
</div>
<h2 style={guideStyles.h2}>Schools that use a <span style={{color:'var(--brand-accent)'}}>different exam</span></h2>
<p style={guideStyles.lede}>These five don't shortlist on CAT — each has its own gate.</p>
<div style={{display:'grid',gridTemplateColumns:'repeat(auto-fill,minmax(300px,1fr))',gap:12,margin:'14px 0'}}>
{GD.other.map(r=><div key={r[0]} style={{background:'var(--white)',border:'1px solid var(--border-default)',borderRadius:'var(--radius-md)',padding:'14px 16px',boxShadow:'var(--shadow-sm)'}}>
<div style={{fontFamily:'var(--font-body)',fontSize:13,color:'var(--text-muted)',fontWeight:600,letterSpacing:'.04em',textTransform:'uppercase',marginBottom:2}}>{r[1]}</div>
<h3 style={{margin:0,fontFamily:'var(--font-display)',fontWeight:700,fontSize:19,color:'var(--text-heading)'}}>{r[0]}</h3>
<div style={{fontFamily:'var(--font-body)',fontSize:15.5,color:'var(--text-body)',marginTop:6}}>avg {fmtL(r[3])} · top {fmtL(r[4])}</div>
<div style={{fontFamily:'var(--font-body)',fontSize:15,color:'var(--text-muted)',marginTop:7,lineHeight:1.6}}>{r[2]}</div>
</div>)}
</div>
<div style={guideStyles.callout}><b>How the profile score works.</b> It's your CAT percentile, Class 10, Class 12, graduation marks and work-experience score blended on each school's own shortlisting weights (marked "assumed" where a school doesn't publish them). It's a comparison tool — <b>higher at school A than school B means your record suits A's formula better</b> — not an admission probability: institutes convert marks through slabs and stream adjustments, and diversity points and the interview (typically 40-48% of the final decision) sit outside it.</div>
</div>;}

function ScoreSection(){
const [score,setScore]=React.useState('');
const s=parseFloat(score);
let out=null;
if(!isNaN(s)){
const pct=pctFromScore(s);
let msg='';
if(pct>=99)msg='Top-IIM interview territory — if your boards hold up.';
else if(pct>=95)msg='Solid older-IIM and strong new-IIM range.';
else if(pct>=90)msg='Most newer IIMs and good private schools open up.';
else if(pct>=80)msg='Several newer IIMs\u2019 reserved-category floors and private schools are in reach.';
else msg='Below most General floors — but reserved-category floors reach much lower.';
out=<div style={{fontFamily:'var(--font-body)',fontSize:19,marginTop:12,color:'var(--text-body)'}}>That's roughly the <span style={{fontFamily:'var(--font-display)',fontSize:46,fontWeight:800,color:'var(--brand-accent)'}}>{pct.toFixed(1)}</span><span style={{fontSize:23,fontWeight:700,color:'var(--brand-accent)'}}> percentile</span><div style={guideStyles.hint}>{msg} Give or take a couple of marks — this mapping is rebuilt from scorecards, not official.</div></div>;}
return <div>
<h2 style={guideStyles.h2}>Convert a CAT score to a <span style={{color:'var(--brand-accent)'}}>percentile</span></h2>
<p style={guideStyles.lede}>CAT is out of 204 (68 questions, +3 / −1). The exam bodies never publish this mapping, so it's rebuilt from thousands of real scorecards — accurate to within a few marks.</p>
<div style={guideStyles.panel}>
<Field label="Your CAT score (out of 204)"><input type="number" value={score} onChange={e=>setScore(e.target.value)} placeholder="e.g. 85" style={guideStyles.input}></input></Field>
{out}
</div>
<h2 style={guideStyles.h2}>Score needed at <span style={{color:'var(--brand-accent)'}}>each percentile</span></h2>
<GTable head={['Percentile','Score needed','Honest range']} rows={GD.catOverall}></GTable>
<div style={guideStyles.callout}>The "honest range" is how much different estimates disagree — narrower near the top, wider below. If you're planning, use the main number; if you're deciding, use the range.</div>
<h2 style={guideStyles.h2}>Section-wise: what each section takes (approx.)</h2>
<p style={guideStyles.lede}>Out of: Verbal 72 · Logic &amp; Data 66 · Quant 66. Notice how few marks Quant needs — it's the hardest-scored section.</p>
<GTable head={['Percentile','Verbal (VARC)','Logic & Data (DILR)','Quant (QA)']} rows={GD.catSect}></GTable>
<h2 style={guideStyles.h2}>Where admissions <span style={{color:'var(--brand-accent)'}}>really closed</span> (older IIMs, previous cycle)</h2>
<p style={guideStyles.lede}>The lowest CAT percentile that actually got admitted — well below the published floors, because boards, interview and diversity carry the rest.</p>
<GTable head={['Institute','General','EWS','OBC-NCL','SC','ST','PwD']} rows={GD.admit}></GTable>
</div>;}

function ExamsSection(){
const stats=[['XAT · for XLRI','~36','/75','gets you to the 99th percentile. +1 / −0.25 marking; GK doesn\u2019t count.'],
['NMAT · for NMIMS','~254','/360','is the 99th percentile. Adaptive test, no negative marking, 3 attempts allowed.'],
['SNAP · for Symbiosis','~50','/60','is the 99th percentile. Just 60 minutes — speed is everything.'],
['MAH-CET · for JBIMS','~115+','/200','for the 99th percentile (varies by slot). No negative marking.']];
return <div>
<h2 style={guideStyles.h2}>The other exams, <span style={{color:'var(--brand-accent)'}}>at a glance</span></h2>
<div style={{display:'grid',gridTemplateColumns:'repeat(auto-fit,minmax(200px,1fr))',gap:12,margin:'16px 0'}}>
{stats.map(s=><div key={s[0]} style={{background:'var(--white)',border:'1px solid var(--border-default)',borderRadius:'var(--radius-md)',padding:'14px 16px',boxShadow:'var(--shadow-sm)'}}>
<div style={guideStyles.label}>{s[0]}</div>
<div style={{fontFamily:'var(--font-display)',fontSize:34,fontWeight:800,color:'var(--brand-accent)'}}>{s[1]}<span style={{fontSize:18}}>{s[2]}</span></div>
<p style={{margin:'5px 0 0',fontFamily:'var(--font-body)',fontSize:15.5,color:'var(--text-body)',lineHeight:1.5}}>{s[3]}</p></div>)}
</div>
<h2 style={guideStyles.h2}>XAT — score vs percentile</h2>
<GTable head={['Percentile','Score (of ~75)']} rows={GD.xat}></GTable>
<h2 style={guideStyles.h2}>XAT — by section</h2>
<GTable head={['Percentile','Quant & DI','Verbal & Logic','Decision Making']} rows={GD.xatSect}></GTable>
<h2 style={guideStyles.h2}>NMAT</h2>
<GTable head={['Percentile','Scaled score (36-360)']} rows={GD.nmat}></GTable>
<h2 style={guideStyles.h2}>SNAP</h2>
<GTable head={['Percentile','Score (of 60)']} rows={GD.snap}></GTable>
<h2 style={guideStyles.h2}>CMAT</h2>
<GTable head={['Percentile','Score (of 400)']} rows={GD.cmat}></GTable>
<h2 style={guideStyles.h2}>MAH MBA-CET</h2>
<GTable head={['Percentile','Score range across slots (of 200)']} rows={GD.cet}></GTable>
<h2 style={guideStyles.h2}>GMAT Focus <span style={{fontSize:12,color:'var(--text-success)',fontWeight:700}}>— the only officially published table</span></h2>
<GTable head={['Total score (205-805)','Percentile']} rows={GD.gmat}></GTable>
</div>;}

function BarRows({rows,max}){
return <div style={{margin:'6px 0'}}>
{rows.map((r,i)=><div key={i} title={r.tipText} style={{display:'grid',gridTemplateColumns:'210px 1fr 84px',gap:10,alignItems:'center',padding:'3px 0'}}>
<div style={{fontFamily:'var(--font-body)',fontSize:15.5,color:'var(--text-body)',whiteSpace:'nowrap',overflow:'hidden',textOverflow:'ellipsis',textAlign:'right'}}>{r.label}</div>
<div style={{height:16,position:'relative'}}><div style={{height:'100%',width:(100*r.v/max).toFixed(1)+'%',background:'var(--brand-primary)',borderRadius:'0 4px 4px 0',minWidth:2}}></div></div>
<div style={{fontFamily:'var(--font-body)',fontSize:15.5,fontWeight:700,fontVariantNumeric:'tabular-nums',color:'var(--brand-accent)'}}>{fmtL(r.v)}</div>
</div>)}
</div>;}
function PaySection(){
const payRows=GD.cat.filter(r=>r[10]!=null).map(r=>({label:r[0],v:r[10],tipText:r[0]+': average '+fmtL(r[10])+' · top offer '+fmtL(r[11])+' (latest published report; years vary by school)'}))
.concat(GD.other.map(r=>({label:r[0],v:r[3],tipText:r[0]+': average '+fmtL(r[3])+' · top offer '+fmtL(r[4])+' (via '+r[1]+')'})))
.sort((a,b)=>b.v-a.v);
const hiRows=GD.cat.filter(r=>r[11]!=null).map(r=>({label:r[0],v:r[11],tipText:r[0]+': single biggest offer '+fmtL(r[11])+' · batch average '+fmtL(r[10])}))
.concat(GD.other.map(r=>({label:r[0],v:r[4],tipText:r[0]+': single biggest offer '+fmtL(r[4])+' · batch average '+fmtL(r[3])})))
.sort((a,b)=>b.v-a.v).slice(0,15);
return <div>
<h2 style={guideStyles.h2}>What graduates <span style={{color:'var(--brand-accent)'}}>earn</span></h2>
<p style={guideStyles.lede}>Average pay per school from the latest report each has published, in ₹ lakh per year. Hover a bar for the median, the top offer and the batch. Report years differ — a few schools are a cycle behind.</p>
<div style={guideStyles.panel}><BarRows rows={payRows} max={Math.max(...payRows.map(r=>r.v))}></BarRows></div>
<h2 style={guideStyles.h2}>The biggest <span style={{color:'var(--brand-accent)'}}>single offers</span></h2>
<div style={guideStyles.panel}><BarRows rows={hiRows} max={Math.max(...hiRows.map(r=>r.v))}></BarRows></div>
<div style={guideStyles.callout}>Averages hide spread. At IIM Lucknow the top 5% averaged ₹59.7 L against a batch average of ₹33.2 L — roughly the same school, wildly different outcomes. And IIM Ahmedabad counts pay differently from everyone else, so don't rank on decimals.</div>
</div>;}

function KnowSection(){
return <div>
<h2 style={guideStyles.h2}>Eight things <span style={{color:'var(--brand-accent)'}}>worth knowing</span></h2>
<div style={{display:'grid',gridTemplateColumns:'repeat(auto-fill,minmax(330px,1fr))',gap:12,marginTop:14}}>
{GD.gtk.map(([h,p])=><div key={h} style={{...guideStyles.panel,margin:0}}>
<h3 style={{margin:'0 0 6px',fontFamily:'var(--font-display)',fontWeight:700,fontSize:18.5,color:'var(--brand-accent)'}}>{h}</h3>
<p style={{margin:0,fontFamily:'var(--font-body)',fontSize:16,color:'var(--text-body)',lineHeight:1.55}}>{p}</p></div>)}
</div>
</div>;}

function MbaGuidePage(){
const {Badge,Tag}=window.ScorebuddyDesignSystem_ee75f2;
const TABS=[['fit','Check your fit'],['score','CAT score → percentile'],['exams','Other exams'],['pay','Salaries'],['know','Worth knowing']];
const [tab,setTab]=React.useState('fit');
return <div>
<section style={{padding:'56px 48px 8px',maxWidth:1180,margin:'0 auto'}}>
<Badge tone="brand">CAT 2025 · 2026-28 CYCLE</Badge>
<h1 style={{fontFamily:'var(--font-display)',fontWeight:800,fontSize:48,color:'var(--text-heading)',margin:'16px 0 12px'}}>MBA <span style={{color:'var(--brand-accent)'}}>Guide 2026</span></h1>
<p style={{fontFamily:'var(--font-body)',fontSize:18.5,color:'var(--text-body)',lineHeight:1.6,maxWidth:800,margin:0}}>Where do you stand? Enter your percentile, see which of 40 top B-schools open their doors — then check what the exams take and what the jobs pay.</p>
</section>
<section style={{padding:'20px 48px 60px',maxWidth:1180,margin:'0 auto'}}>
<div style={{display:'flex',gap:8,flexWrap:'wrap',borderBottom:'1px solid var(--border-default)',paddingBottom:14,position:'sticky',top:73,background:'var(--color-bg-page)',zIndex:5,paddingTop:6}}>
{TABS.map(([id,l])=><Tag key={id} active={tab===id} onClick={()=>{setTab(id);scrollTo(0,0);}}>{l}</Tag>)}
</div>
{tab==='fit'&&<FitSection></FitSection>}
{tab==='score'&&<ScoreSection></ScoreSection>}
{tab==='exams'&&<ExamsSection></ExamsSection>}
{tab==='pay'&&<PaySection></PaySection>}
{tab==='know'&&<KnowSection></KnowSection>}
<p style={{fontFamily:'var(--font-body)',fontSize:14,color:'var(--text-muted)',marginTop:40,paddingTop:18,borderTop:'1px solid var(--border-default)',lineHeight:1.6}}>Reflects the CAT 2025 / 2026-28 admission cycle; compiled August 2026 from institute admission policies, placement reports and published cycle data. Figures marked ≈ are informed estimates. Policies change annually — confirm on the institute's own site before applying. Not admissions advice.</p>
</section>
</div>;}
window.MbaGuidePage=MbaGuidePage;
