-
Pakistan fuel prices, 2026 Official ex-depot prices (PKR/litre) — OGRA & Ministry of Energy notifications Petrol (MS-92) Diesel (HSD) Pre-crisis baseline Source: OGRA / Ministry of Energy (Petroleum Division); Dawn.com · .fpw-root { --fpw-navy: #0a2240; --fpw-red: #b5341a; --fpw-grey: #888888; --fpw-border: #e0e0e0; --fpw-bg: #ffffff; --fpw-text: #1a1a1a; --fpw-muted: #666666; --fpw-insight-bg: #f0f4f8; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.4; color: var(--fpw-text); background: var(--fpw-bg); border: 1px solid var(--fpw-border); border-top: 3px solid var(--fpw-navy); padding: 16px 18px 14px; max-width: 720px; width: 100%; box-sizing: border-box; position: relative; } .fpw-root *, .fpw-root *::before, .fpw-root *::after { box-sizing: inherit; } .fpw-header { margin-bottom: 10px; } .fpw-title { font-family: Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 700; color: var(--fpw-navy); margin: 0 0 3px; } .fpw-sub { font-size: 11.5px; color: var(--fpw-muted); margin: 0; } .fpw-legend { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 10px; } .fpw-li { display: flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--fpw-muted); } .fpw-dot { display: inline-block; width: 26px; height: 3px; border-radius: 2px; flex-shrink: 0; } .fpw-dot--navy { background: var(--fpw-navy); } .fpw-dot--red { background: var(--fpw-red); } .fpw-dot--grey { background: var(--fpw-grey); } .fpw-dot--dash { background: repeating-linear-gradient(to right, var(--fpw-red) 0 5px, transparent 5px 9px); } .fpw-dot--dotted { background: repeating-linear-gradient(to right, var(--fpw-grey) 0 4px, transparent 4px 8px); opacity:.7; } .fpw-wrap { position: relative; width: 100%; } .fpw-canvas { display: block; width: 100%; cursor: crosshair; } .fpw-tooltip { position: absolute; background: #fff; border: 1px solid #ddd; border-radius: 4px; padding: 7px 10px; font-size: 12px; color: var(--fpw-text); pointer-events: none; opacity: 0; transition: opacity 0.15s; box-shadow: 0 2px 8px rgba(0,0,0,0.10); white-space: nowrap; z-index: 10; line-height: 1.6; font-variant-numeric: tabular-nums; } .fpw-tooltip.fpw-tooltip--vis { opacity: 1; } .fpw-insight { margin-top: 10px; background: var(--fpw-insight-bg); border-left: 3px solid var(--fpw-navy); padding: 8px 12px; font-size: 12px; color: var(--fpw-navy); line-height: 1.5; transition: opacity 0.2s; } .fpw-insight--hidden { opacity: 0; pointer-events: none; } .fpw-footer { margin-top: 10px; padding-top: 8px; border-top: 1px solid var(--fpw-border); font-size: 10.5px; color: #999; line-height: 1.5; } @media (max-width: 480px) { .fpw-root { padding: 12px 12px 10px; } .fpw-title { font-size: 14px; } .fpw-legend { gap: 8px; } } (function () { /* ===================================================== DATA — EDIT HERE Shape: { d: 'DD Mon', p: petrol_Rs, h: diesel_Rs } Add daily: true for entries under the new daily mechanism. ===================================================== */ var DATA = [ { d: '28 Feb', p: 266.17, h: 280.86 }, { d: '7 Mar', p: 321.17, h: 335.86 }, { d: '3 Apr', p: 458.41, h: 520.35 }, { d: '5 Apr', p: 378.00, h: 440.35 }, { d: '11 Apr', p: 366.58, h: 385.54 }, { d: '25 Apr', p: 393.35, h: 393.35 }, { d: '1 May', p: 399.86, h: 399.58 }, { d: '9 May', p: 414.78, h: 414.58 }, { d: '16 May', p: 409.78, h: 409.58 }, { d: '23 May', p: 403.78, h: 402.78 }, { d: '30 May', p: 381.78, h: 380.78 }, { d: '6 Jun', p: 377.78, h: 380.78 }, { d: '13 Jun', p: 373.78, h: 378.78 }, { d: '19 Jun', p: 299.78, h: 311.78 }, { d: '26 Jun', p: 299.78, h: 311.56 }, { d: '4 Jul', p: 297.53, h: 309.50 }, { d: '11 Jul', p: 316.15, h: 323.30 }, { d: '18 Jul', p: 316.15, h: 354.35 }, { d: '21 Jul', p: 315.80, h: 367.58, daily: true }, { d: '22 Jul', p: 320.73, h: 367.21, daily: true }, { d: '23 Jul', p: 327.12, h: 375.04, daily: true }, { d: '24 Jul', p: 331.52, h: 378.66, daily: true }, { d: '25 Jul', p: 335.18, h: 383.46, daily: true }, { d: '26 Jul', p: 335.18, h: 383.46, daily: true }, { d: '27 Jul', p: 335.18, h: 383.46, daily: true }, { d: '28 Jul', p: 334.18, h: 386.83, daily: true }, { d: '29 Jul', p: 335.81, h: 388.38, daily: true }, { d: '30 Jul', p: 335.06, h: 390.62, daily: true }, { d: '31 Jul', p: 336.15, h: 393.04, daily: true }, { d: '1 Aug', p: 336.03, h: 392.38, daily: true }, { d: '2 Aug', p: 336.03, h: 392.38, daily: true }, { d: '3 Aug', p: 336.03, h: 392.38, daily: true }, { d: '4 Aug', p: 331.95, h: 389.93, daily: true }, { d: '5 Aug', p: 328.56, h: 385.86, daily: true }, { d: '6 Aug', p: 333.01, h: 383.86, daily: true }, { d: '7 Aug', p: 329.82, h: 382.36, daily: true }, { d: '8 Aug', p: 327.62, h: 380.86, daily: true }, { d: '9 Aug', p: 327.62, h: 380.86, daily: true }, { d: '10 Aug', p: 327.62, h: 380.86, daily: true }, { d: '11 Aug', p: 327.62, h: 380.86, daily: true }, { d: '12 Aug', p: 325.92, h: 382.25, daily: true }, { d: '13 Aug', p: 324.98, h: 382.79, daily: true }, { d: '14 Aug', p: 325.43, h: 383.95, daily: true }, { d: '15 Aug', p: 325.43, h: 383.95, daily: true }, { d: '16 Aug', p: 325.43, h: 383.95, daily: true }, { d: '17 Aug', p: 325.43, h: 383.95, daily: true }, { d: '18 Aug', p: 331.20, h: 390.42, daily: true }, { d: '19 Aug', p: 334.54, h: 395.69, daily: true }, { d: '20 Aug', p: 337.51, h: 363.06, daily: true }, { d: '21 Aug', p: 337.78, h: 364.70, daily: true }, { d: '22 Aug', p: 341.59, h: 368.29, daily: true }, { d: '23 Aug', p: 341.59, h: 368.29, daily: true }, { d: '24 Aug', p: 341.59, h: 368.29, daily: true }, { d: '25 Aug', p: 341.98, h: 370.69, daily: true }, { d: '26 Aug', p: 343.10, h: 371.80, daily: true }, { d: '27 Aug', p: 343.10, h: 371.80, daily: true }, { d: '28 Aug', p: 342.60, h: 371.61, daily: true }, { d: '29 Aug', p: 342.02, h: 371.44, daily: true }, { d: '30 Aug', p: 342.02, h: 371.44, daily: true }, { d: '31 Aug', p: 342.02, h: 371.44, daily: true }, { d: '1 Sep', p: 342.79, h: 370.41, daily: true }, { d: '2 Sep', p: 343.87, h: 370.92, daily: true }, { d: '3 Sep', p: 346.16, h: 372.03, daily: true }, { d: '4 Sep', p: 349, h: 374.31, daily: true }, { d: '5 Sep', p: 345.87, h: 378.05, daily: true }, { d: '6 Sep', p: 345.87, h: 378.05, daily: true }, { d: '7 Sep', p: 345.87, h: 378.05, daily: true }, { d: '8 Sep', p: 358.77, h: 381.77, daily: true }, { d: '9 Sep', p: 364.35, h: 385.95, daily: true }, { d: '10 Sep', p: 367.75, h: 392.67, daily: true }, { d: '11 Sep', p: 370.80, h: 398.04, daily: true }, { d: '12 Sep', p: 375.82, h: 403.32, daily: true }, { d: '13 Sep', p: 375.82, h: 403.32, daily: true }, { d: '14 Sep', p: 375.82, h: 403.32, daily: true }, { d: '15 Sep', p: 380.24, h: 409.42, daily: true }, { d: '16 Sep', p: 384.34, h: 415.83, daily: true }, { d: '17 Sep', p: 391.22, h: 421.45, daily: true }, { d: '18 Sep', p: 390.79, h: 424.92, daily: true }, { d: '19 Sep', p: 389.14, h: 424.04, daily: true }, { d: '20 Sep', p: 389.14, h: 424.04, daily: true }, { d: '21 Sep', p: 389.14, h: 424.04, daily: true }, { d: '22 Sep', p: 393.75, h: 422.08, daily: true }, { d: '23 Sep', p: 392.05, h: 418.96, daily: true }, { d: '24 Sep', p: 390.12, h: 414.75, daily: true }, { d: '25 Sep', p: 389.28, h: 412.12, daily: true }, { d: '26 Sep', p: 391.30, h: 408.53, daily: true }, { d: '27 Sep', p: 391.30, h: 408.53, daily: true }, { d: '28 Sep', p: 391.30, h: 408.53, daily: true }, { d: '29 Sep', p: 389.03, h: 404.97, daily: true }, { d: '30 Sep', p: 387.54, h: 402.24, daily: true }, { d: '1 Oct', p: 387.40, h: 400.35, daily: true }, { d: '2 Oct', p: 390.66, h: 399.34, daily: true }, { d: '3 Oct', p: 392.76, h: 399.64, daily: true }, { d: '6 Oct', p: 393.64, h: 397.76, daily: true }, { d: '7 Oct', p: 394.83, h: 395.85, daily: true }, { d: '8 Oct', p: 396.65, h: 394.94, daily: true }, { d: '9 Oct', p: 398.96, h: 395.72, daily: true }, { d: '10 Oct', p: 398.30, h: 396.24, daily: true }, { d: '13 Oct', p: 395.37, h: 396.85, daily: true }, { d: '14 Oct', p: 392.66, h: 396.82, daily: true }, { d: '15 Oct', p: 393.86, h: 396.65, daily: true }, { d: '16 Oct', p: 390.23, h: 396.96, daily: true }, { d: '17 Oct', p: 386.30, h: 396.96, daily: true }, { d: '20 Oct', p: 381.14, h: 389.27, daily: true }, { d: '21 Oct', p: 382.02, h: 389.80, daily: true }, { d: '22 Oct', p: 379.31, h: 390.11, daily: true }, { d: '23 Oct', p: 377.71, h: 391.75, daily: true }, ]; var PRE_PETROL = 266.17; var PRE_DIESEL = 280.86; var PEAK_IDX = 2; var CRISIS_START = 1; var CRISIS_END = 5; var DAILY_START = 19; var LAST_UPDATED = 'Oct 22, 2026'; var Y_MIN = 240; var Y_MAX = 550; var Y_STEP = 50; var C_NAVY = '#0a2240'; var C_RED = '#b5341a'; /* ---- root & elements ---- */ var scripts = document.querySelectorAll('script'); var thisScript = scripts[scripts.length - 1]; var root = thisScript.previousElementSibling; while (root && !root.classList.contains('fpw-root')) { root = root.previousElementSibling; } if (!root) root = document.querySelector('.fpw-root'); var canvas = root.querySelector('.fpw-canvas'); var tooltip = root.querySelector('.fpw-tooltip'); var insight = root.querySelector('.fpw-insight'); var insightText = root.querySelector('.fpw-insight-text'); var updatedEl = root.querySelector('.fpw-updated'); if (updatedEl) updatedEl.textContent = 'Last updated: ' + LAST_UPDATED; var ctx = canvas.getContext('2d'); var DPR = window.devicePixelRatio || 1; var PAD_L = 56, PAD_R = 18, PAD_T = 38, PAD_B = 54; var W, H, CW, CH; var points = []; function mapX(i) { return PAD_L + (i / (DATA.length - 1)) * CW; } function mapY(v) { return PAD_T + (1 - (v - Y_MIN) / (Y_MAX - Y_MIN)) * CH; } function dash(arr) { ctx.setLineDash(arr); } /* ---- draw ---- */ function draw(pct) { pct = pct === undefined ? 1 : pct; W = canvas.clientWidth || 600; H = Math.round(W * (W < 500 ? 0.82 : W < 640 ? 0.68 : 0.52)); CW = W - PAD_L - PAD_R; CH = H - PAD_T - PAD_B; canvas.width = W * DPR; canvas.height = H * DPR; canvas.style.height = H + 'px'; ctx.setTransform(DPR, 0, 0, DPR, 0, 0); ctx.clearRect(0, 0, W, H); var step = CW / (DATA.length - 1); /* crisis zone */ var zx0 = mapX(CRISIS_START) - step * 0.5; var zx1 = mapX(CRISIS_END) + step * 0.5; ctx.fillStyle = 'rgba(181,52,26,0.055)'; ctx.fillRect(zx0, PAD_T, zx1 - zx0, CH); ctx.strokeStyle = 'rgba(181,52,26,0.22)'; ctx.lineWidth = 1; dash([4, 3]); ctx.strokeRect(zx0, PAD_T, zx1 - zx0, CH); /* daily zone */ var dx0 = mapX(DAILY_START) - step * 0.5; dash([]); ctx.fillStyle = 'rgba(10,34,64,0.04)'; ctx.fillRect(dx0, PAD_T, W - PAD_R - dx0, CH); ctx.strokeStyle = 'rgba(10,34,64,0.18)'; ctx.lineWidth = 1; dash([3, 3]); ctx.beginPath(); ctx.moveTo(dx0, PAD_T); ctx.lineTo(dx0, PAD_T + CH); ctx.stroke(); dash([]); /* Y grid + labels */ ctx.textAlign = 'right'; ctx.textBaseline = 'middle'; var fs = W < 440 ? 9 : 10; ctx.font = fs + 'px Arial,sans-serif'; for (var yv = Y_MIN + Y_STEP; yv 400) { ctx.fillText('Daily pricing', dx0 + 5, PAD_T + 4); } else { ctx.fillText('Daily', dx0 + 4, PAD_T + 4); } /* clip for animation */ var clipX = PAD_L + CW * pct; /* diesel line */ ctx.save(); ctx.beginPath(); ctx.rect(PAD_L, 0, clipX - PAD_L, H); ctx.clip(); ctx.strokeStyle = C_RED; ctx.lineWidth = 2.2; dash([5, 4]); ctx.beginPath(); DATA.forEach(function (d, i) { var x = mapX(i), y = mapY(d.h); i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y); }); ctx.stroke(); dash([]); ctx.restore(); /* petrol line */ ctx.save(); ctx.beginPath(); ctx.rect(PAD_L, 0, clipX - PAD_L, H); ctx.clip(); ctx.strokeStyle = C_NAVY; ctx.lineWidth = 2.2; ctx.beginPath(); DATA.forEach(function (d, i) { var x = mapX(i), y = mapY(d.p); i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y); }); ctx.stroke(); ctx.restore(); /* dots */ points = []; DATA.forEach(function (d, i) { var x = mapX(i); if (x > clipX + 2) return; var yp = mapY(d.p), yh = mapY(d.h); points[i] = { x: x, yp: yp, yh: yh }; dot(x, yp, C_NAVY); dot(x, yh, C_RED); }); /* X labels — evenly spaced (equal pixel gaps) by array index. Starts at a weekly step (every 7th point); if that would still crowd labels at the current width, widens to bi-weekly (14), tri-weekly (21), etc. until labels fit with a comfortable gap. */ ctx.textAlign = 'right'; ctx.textBaseline = 'top'; ctx.fillStyle = '#888'; var xfs = W < 440 ? 8 : (W < 580 ? 9 : 10); ctx.font = xfs + 'px Arial,sans-serif'; var maxLabelW = 0; DATA.forEach(function (d) { maxLabelW = Math.max(maxLabelW, ctx.measureText(d.d).width); }); /* rotated -45deg footprint, plus a small gap between labels */ var neededPx = maxLabelW * 0.7071 + xfs * 0.7071 + 6; var pxPerIndex = CW / (DATA.length - 1); var labelStep = 7; while (pxPerIndex * labelStep < neededPx && labelStep < DATA.length) { labelStep += 7; } DATA.forEach(function (d, i) { var isLast = i === DATA.length - 1; if (i % labelStep !== 0 && !isLast) return; ctx.save(); ctx.translate(mapX(i), PAD_T + CH + 6); ctx.rotate(-Math.PI / 4); ctx.fillText(d.d, 0, 0); ctx.restore(); }); } function dot(x, y, color) { ctx.beginPath(); ctx.arc(x, y, 3.5, 0, Math.PI * 2); ctx.fillStyle = '#fff'; ctx.fill(); ctx.strokeStyle = color; ctx.lineWidth = 2; ctx.stroke(); } /* ---- animate on scroll ---- */ var animated = false; var reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches; function animateDraw() { if (reduced) { draw(1); return; } var t0 = null, dur = 900; function frame(ts) { if (!t0) t0 = ts; var p = Math.min(1, (ts - t0) / dur); draw(1 - Math.pow(1 - p, 3)); if (p < 1) requestAnimationFrame(frame); } requestAnimationFrame(frame); } if ('IntersectionObserver' in window) { var io = new IntersectionObserver(function (entries) { if (entries[0].isIntersecting && !animated) { animated = true; animateDraw(); io.unobserve(canvas); } }, { threshold: 0.3 }); io.observe(canvas); } else { draw(1); } /* ---- tooltip ---- */ function nearest(cx) { var rect = canvas.getBoundingClientRect(); var mx = (cx - rect.left) * (W / rect.width); var best = -1, bd = Infinity; points.forEach(function (pt, i) { if (!pt) return; var d = Math.abs(pt.x - mx); if (d < bd) { bd = d; best = i; } }); return best; } function showTip(cx) { var i = nearest(cx); if (i < 0) return; var d = DATA[i], pt = points[i]; if (!pt) return; var rect = canvas.getBoundingClientRect(); var scaleX = rect.width / W; var scaleY = rect.height / H; var tx = pt.x * scaleX - 8; var ty = Math.min(pt.yp, pt.yh) * scaleY - 6; if (tx + 180 > rect.width) tx -= 160; if (ty < 0) ty = 4; tooltip.style.left = tx + 'px'; tooltip.style.top = ty + 'px'; tooltip.innerHTML = '' + d.d + (d.daily ? ' (daily)' : '') + '' + '● Petrol Rs ' + d.p.toFixed(2) + '' + '● Diesel Rs ' + d.h.toFixed(2); tooltip.classList.add('fpw-tooltip--vis'); var pct = ((d.p - PRE_PETROL) / PRE_PETROL * 100).toFixed(1); var sign = pct >= 0 ? '+' : ''; var msg; if (i === 0) { msg = 'The pre-crisis price — petrol at Rs' + PRE_PETROL + ' and diesel at Rs' + PRE_DIESEL + ' per litre. This is the baseline before the US-Iran war broke out on 28 Feb 2026.'; } else if (i === PEAK_IDX) { msg = 'All-time record — petrol was ' + sign + pct + '% above its pre-crisis level of Rs' + PRE_PETROL + '. Diesel hit Rs' + d.h.toFixed(2) + ' vs Rs' + PRE_DIESEL + ' before the crisis.'; } else if (d.p < PRE_PETROL) { msg = 'Petrol dipped at or below the pre-crisis price of Rs' + PRE_PETROL + ' — one of the few times it reached that level.'; } else { msg = 'Petrol was ' + sign + pct + '% above the pre-crisis level on this date' + (d.daily ? ', under the new OGRA daily pricing mechanism.' : '.'); } insightText.textContent = msg; insight.classList.remove('fpw-insight--hidden'); } function hideTip() { tooltip.classList.remove('fpw-tooltip--vis'); } canvas.addEventListener('mousemove', function (e) { showTip(e.clientX); }); canvas.addEventListener('mouseleave', hideTip); canvas.addEventListener('touchstart', function (e) { e.preventDefault(); showTip(e.touches[0].clientX); }, { passive: false }); canvas.addEventListener('touchend', function () { setTimeout(hideTip, 2200); }); /* ---- resize ---- */ var rtimer; window.addEventListener('resize', function () { clearTimeout(rtimer); rtimer = setTimeout(function () { draw(1); }, 130); }); draw(1); })(); (function () { var me = document.currentScript || document.scripts[document.scripts.length - 1]; var wrapper = me && me.closest('.raw-html-embed-wrapper'); var source = wrapper && wrapper.querySelector('script.raw-html-source'); if (!source || wrapper._rawHtmlMounted) return; wrapper._rawHtmlMounted = true; // position:sticky breaks under any overflow:hidden ancestor. "clip" hides the same overflow // without creating a scroll container. for (var a = wrapper.parentElement; a; a = a.parentElement) { var cs = getComputedStyle(a); if (cs.overflowX === 'hidden') a.style.overflowX = 'clip'; if (cs.overflowY === 'hidden') a.style.overflowY = 'clip'; } // Undo the server-side escaping of closing script tags / comment openers. var html = source.textContent.replace(/
Comment