diff --git a/public/index.html b/public/index.html
index 51e5d3a..c79b6dc 100644
--- a/public/index.html
+++ b/public/index.html
@@ -582,12 +582,16 @@ async function loadPayoff() {
var mktKey = ul==='SENSEX'?'SENSEX': ul==='NIFTY'?'NIFTY50': ul==='BANKNIFTY'?'BANKNIFTY': null;
var spot = mktKey ? (mktMap[mktKey]||0) : 0;
- // Price range
+ // Price range: ±1.5 SD from spot (uses VIX if available, else 18% ann vol)
+ // This keeps the chart tight and readable — widens only as much as vol suggests
+ var vixForRange=(window._mktCache&&window._mktCache['INDIAVIX'])?window._mktCache['INDIAVIX'].price:0;
+ var sdRange = calcSD(spot||75000, typeof dte==='number'?dte:7, vixForRange);
+ var rangePad = sdRange.sd1 * 1.5;
var strikes = opts.map(function(p){return p._parsed.strike;});
var minS = Math.min.apply(null,strikes), maxS = Math.max.apply(null,strikes);
- var pad = Math.max((maxS-minS)*0.6, minS*0.08);
- var lo = Math.floor((Math.min(minS, spot||minS)-pad)/100)*100;
- var hi = Math.ceil((Math.max(maxS, spot||maxS)+pad)/100)*100;
+ // Ensure all strikes are visible even if outside 1.5SD
+ var lo = Math.floor((Math.min(minS, spot-rangePad))/100)*100;
+ var hi = Math.ceil((Math.max(maxS, spot+rangePad))/100)*100;
var step = Math.max(Math.round((hi-lo)/100/100)*100, 50);
var xs=[], ys=[];