<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
<meta name="description" content="Free live cricket and IPL streaming with real-time scores. Join Cricket News Point on WhatsApp for instant updates.">
<meta name="keywords" content="cricket news, IPL live stream, live cricket streaming, IPL live score, international cricket, Cricket News Point, CnpTVOfficial, cricket highlights, live match, watch IPL free, T20 world cup live, live score updates, cricket streaming site, sports live stream free">
<meta name="author" content="Sayan">
<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
<meta name="googlebot" content="index, follow">
<meta property="og:type"        content="website">
<meta property="og:title"       content="Live Cricket Scores, IPL & Streaming — Cricket News Point">
<meta property="og:description" content="Free live cricket and IPL streaming with real-time scores. Join Cricket News Point on WhatsApp for instant updates.">
<meta property="og:image"       content="https://img10.hotstar.com/image/upload/f_auto,q_90,w_720/sources/r1/cms/prod/3184/1790435923184-h">
<meta property="og:image:alt"   content="Cricket News Point Logo">
<meta property="og:url"         content="https://matchdekho.pages.dev/">
<meta property="og:site_name"   content="Cricket News Point">
<meta property="og:locale"      content="en_US">
<meta name="twitter:card"        content="summary_large_image">
<meta name="twitter:title"       content="Live Cricket Scores, IPL & Streaming — Cricket News Point">
<meta name="twitter:description" content="Free live cricket and IPL streaming with real-time scores. Join Cricket News Point on WhatsApp for instant updates.">
<meta name="twitter:image"       content="https://img10.hotstar.com/image/upload/f_auto,q_90,w_720/sources/r1/cms/prod/3184/1790435923184-h">
<meta name="mobile-web-app-capable"               content="yes">
<meta name="apple-mobile-web-app-capable"         content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title"           content="Cricket News Point">
<meta name="theme-color"      content="#000000">
<meta name="color-scheme"     content="dark">
<meta name="format-detection" content="telephone=no">
<meta name="referrer"         content="no-referrer-when-downgrade">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma"        content="no-cache">
<meta http-equiv="Expires"       content="0">

<title>Main Page | India vs West indies - ODI T20i Test All Live Match Broadcast Only On CnpTV & All Devices Support & All Languages & Multi Quality</title>
<link rel="icon"             href="/gop-gop-moww.png" type="image/png">
<link rel="apple-touch-icon" href="/gop-gop-moww.png">
<link rel="canonical"        href="https://matchdekho.pages.dev/">
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://matchdekho.pages.dev/#website",
      "name": "Cricket News Point",
      "alternateName": "CnpTVOfficial",
      "url": "https://matchdekho.pages.dev/",
      "description": "Live IPL, international cricket scores, exclusive streams, and instant match updates",
      "inLanguage": "en",
      "publisher": { "@id": "https://matchdekho.pages.dev/#organization" }
    },
    {
      "@type": "Organization",
      "@id": "https://matchdekho.pages.dev/#organization",
      "name": "CnpTVOfficial",
      "url": "https://matchdekho.pages.dev/",
      "logo": {
        "@type": "ImageObject",
        "url": "/gop-gop-moww.png",
        "width": 200, "height": 200
      },
      "sameAs": [
        "https://t.me/CnpTVOfficial",
        "https://whatsapp.com/channel/0029VaeylYYBPzjVNomWuZ0T"
      ]
    }
  ]
}
</script> 
  
<script async src="https://www.googletagmanager.com/gtag/js?id=G-G5NE717HVD"></script>
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','G-G5NE717HVD',{anonymize_ip:true});</script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://sonujson-v5.pages.dev/">
<link rel="dns-prefetch" href="https://sonujson-v5.pages.dev/">
<link rel="dns-prefetch" href="https://1dot1dot1dot1.cloudflare-dns.com">
<link href="https://fonts.googleapis.com/css2?family=Acme&family=Amaranth:wght@400;700&display=swap" rel="stylesheet">
<link rel="ai-catalog" href="/.well-known/ai-catalog.json">
<link rel="api-catalog" href="/.well-known/api-catalog">
<link rel="service-doc" href="/.well-known/agent-card.json">

<script src="https://pl31451422.profitableratecpmnetwork.com/1a/12/14/1a1214333a11f56be944032d1324ea8e.js"></script>

<style>
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
html{height:100%;height:-webkit-fill-available;-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{width:100%;height:100%;min-height:100vh;min-height:100dvh;min-height:-webkit-fill-available;background:#000;overflow:hidden;-webkit-tap-highlight-color:transparent}
#main-iframe{position:fixed;top:0;left:0;width:100vw;height:100vh;height:100dvh;border:none;display:block;visibility:hidden;z-index:1}
.logo-btn{position:fixed;top:10px;left:10px;z-index:50;display:flex;align-items:center;text-decoration:none;transition:opacity .2s}
.logo-btn:hover{opacity:.8}
.logo-btn img{height:36px;width:auto;border-radius:7px;object-fit:contain;filter:drop-shadow(0 2px 8px rgba(0,0,0,.85))}
.revenue-btn{position:fixed;top:57px;left:10px;z-index:50;display:flex;align-items:center;gap:7px;padding:5px 12px 5px 7px;background:linear-gradient(135deg,#ff8800 0%,#ffd000 100%);border:none;border-radius:10px;cursor:pointer;outline:none;box-shadow:0 3px 14px rgba(255,160,0,.55);transition:transform .15s,box-shadow .15s;animation:revGlow 2.6s ease-in-out infinite;-webkit-tap-highlight-color:transparent}
.revenue-btn:active{transform:scale(.93)}
@keyframes revGlow{0%,100%{box-shadow:0 3px 14px rgba(255,160,0,.55)}50%{box-shadow:0 5px 26px rgba(255,220,0,.9)}}
.rev-icon{width:28px;height:28px;flex-shrink:0}
.rev-texts{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15}
.rev-main{font-family:'Amaranth',sans-serif;font-size:11.5px;font-weight:700;color:#1a0800;letter-spacing:.5px;white-space:nowrap}
.rev-sub{font-family:Arial,sans-serif;font-size:9px;color:rgba(30,10,0,.6);white-space:nowrap}
.rev-arrow{width:13px;height:13px;flex-shrink:0;margin-left:2px;stroke:rgba(30,10,0,.6);fill:none;stroke-width:2.3;stroke-linecap:round;stroke-linejoin:round}
#loading-screen{position:fixed;inset:0;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px}
.loader{position:relative;width:58px;height:58px}
.loader-ring{position:absolute;inset:0;border-radius:50%;border:3px solid transparent;border-top-color:#ffcc00;border-right-color:rgba(255,204,0,.18);animation:lSpin 1s cubic-bezier(.55,.1,.45,.9) infinite}
.loader-ring-inner{position:absolute;inset:11px;border-radius:50%;border:3px solid transparent;border-top-color:#1bcc26;border-right-color:rgba(27,204,38,.16);animation:lSpinRev .8s cubic-bezier(.55,.1,.45,.9) infinite}
.loader-core{position:absolute;inset:22px;border-radius:50%;background:radial-gradient(circle,rgba(255,204,0,.55) 0%,rgba(255,204,0,0) 72%);animation:lPulse 1.6s ease-in-out infinite}
@keyframes lSpin{to{transform:rotate(360deg)}}
@keyframes lSpinRev{to{transform:rotate(-360deg)}}
@keyframes lPulse{0%,100%{opacity:.35;transform:scale(.82)}50%{opacity:1;transform:scale(1)}}
.loading-text{display:flex;flex-direction:column;align-items:center;gap:7px}
.loading-label{font-family:'Amaranth',sans-serif;font-size:15.5px;font-weight:700;letter-spacing:.8px;color:rgba(255,255,255,.88)}
.loading-sub{display:flex;align-items:center;gap:3px;font-family:Arial,sans-serif;font-size:12px;letter-spacing:.3px;color:rgba(255,255,255,.32)}
.loading-sub span{opacity:.25;animation:dotFade 1.3s ease-in-out infinite}
.loading-sub span:nth-child(2){animation-delay:.16s}
.loading-sub span:nth-child(3){animation-delay:.32s}
@keyframes dotFade{0%,100%{opacity:.25}50%{opacity:1}}
.popup-overlay{position:fixed;inset:0;background:rgba(0,0,0,.88);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);display:none;align-items:center;justify-content:center;padding:20px;z-index:2147483647}
.popup-overlay.visible{display:flex}
.popup-wrap{position:relative;width:100%;max-width:358px;padding:2px;background:linear-gradient(145deg,rgba(255,204,0,.8) 0%,rgba(255,224,80,.4) 50%,rgba(255,204,0,.8) 100%);border-radius:18px;box-shadow:0 0 50px rgba(255,204,0,.14),0 30px 70px rgba(0,0,0,.72);animation:popIn .42s cubic-bezier(.175,.885,.32,1.275) both}
@keyframes popIn{from{opacity:0;transform:scale(.87) translateY(24px)}to{opacity:1;transform:scale(1) translateY(0)}}
.popup-box{background:linear-gradient(168deg,#1e1e26 0%,#0e0e13 100%);border-radius:16px;padding:34px 24px 26px;text-align:center}
.popup-title{color:#ffcc00;font-family:'Acme',sans-serif;font-size:30px;letter-spacing:.5px;margin-bottom:12px}
.popup-text{color:#a0a0a8;font-size:14px;line-height:1.65;margin-bottom:24px}
.popup-text b{color:#fff;font-family:'Amaranth',sans-serif;font-size:17px;display:block;margin-top:7px}
.btn-popup{width:100%;padding:14px;border:none;border-radius:13px;font-family:'Amaranth',sans-serif;cursor:pointer;transition:transform .18s,box-shadow .18s;-webkit-user-select:none;user-select:none;-webkit-appearance:none;appearance:none;touch-action:manipulation;display:block}
.btn-popup:active{transform:scale(.95)}
.btn-join-main{font-size:18px;font-weight:700;letter-spacing:.6px;margin-bottom:9px;line-height:1;padding:14px;text-align:center}
.btn-joined-main{background:transparent;color:#484850;font-size:12px;font-weight:400;width:auto;margin:0 auto;padding:7px 14px;text-align:center}
#error-screen{position:fixed;inset:0;z-index:80;background:#0d0d16;display:none;align-items:center;justify-content:center;padding:24px}
#error-screen.show{display:flex}
.error-card{background:rgba(255,255,255,.04);border:1.5px solid rgba(255,255,255,.1);border-radius:20px;padding:52px 32px 42px;max-width:400px;width:100%;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.6);animation:popIn .35s cubic-bezier(.34,1.45,.64,1)}
.error-icon{width:72px;height:72px;border-radius:50%;border:2px solid rgba(255,255,255,.15);background:rgba(255,255,255,.05);display:flex;align-items:center;justify-content:center;margin:0 auto 22px}
.error-icon svg{width:36px;height:36px;stroke:rgba(255,255,255,.55);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.error-title{font-family:'Acme',sans-serif;font-size:clamp(22px,6vw,28px);font-weight:800;color:#efefef;margin-bottom:12px}
.error-badge{display:inline-block;background:rgba(245,165,0,.12);border:1px solid rgba(245,165,0,.28);color:#f5a500;font-size:13.5px;font-weight:700;padding:4px 16px;border-radius:20px;margin-bottom:14px;letter-spacing:.4px}
.error-body{font-size:14px;color:rgba(255,255,255,.38);line-height:1.8;margin-bottom:14px;font-family:Arial,sans-serif}
.error-retry-note{display:flex;align-items:center;justify-content:center;gap:7px;font-size:12.5px;color:rgba(255,255,255,.34);font-family:Arial,sans-serif;letter-spacing:.3px;margin-bottom:30px}
.error-retry-dot{width:6px;height:6px;border-radius:50%;background:#f5a500;animation:ePulse 1.4s ease-in-out infinite}
@keyframes ePulse{0%,100%{opacity:.35;transform:scale(.8)}50%{opacity:1;transform:scale(1.1)}}
.error-contact-btn{display:inline-flex;align-items:center;gap:9px;padding:13px 26px;border-radius:50px;background:linear-gradient(135deg,rgba(37,211,102,.18) 0%,rgba(0,180,80,.1) 100%);border:1.5px solid rgba(37,211,102,.4);color:#2aed74;cursor:pointer;font-family:'Amaranth',sans-serif;font-size:15px;font-weight:700;text-decoration:none;letter-spacing:.3px;transition:background .2s,border-color .2s,transform .15s,box-shadow .2s;box-shadow:0 4px 18px rgba(37,211,102,.15)}
.error-contact-btn:hover{background:linear-gradient(135deg,rgba(37,211,102,.28) 0%,rgba(0,180,80,.2) 100%);border-color:rgba(37,211,102,.6);transform:translateY(-2px);box-shadow:0 8px 28px rgba(37,211,102,.28)}
.error-contact-btn svg{width:18px;height:18px;fill:#2aed74;flex-shrink:0}
.error-contact-btn.retry-now-btn{font-family:inherit;margin-bottom:12px}
.error-contact-btn.retry-now-btn svg{fill:none}
@media(hover:none){.logo-btn:hover{opacity:1}.btn-join-main:hover{box-shadow:none}.revenue-btn:hover{box-shadow:0 3px 14px rgba(255,160,0,.55)}.error-contact-btn:hover{background:linear-gradient(135deg,rgba(37,211,102,.18) 0%,rgba(0,180,80,.1) 100%);transform:none;box-shadow:0 4px 18px rgba(37,211,102,.15)}}
</style>
</head>
<body>

<a href="https://t.me/CnpTVOfficial" class="logo-btn" target="_blank" rel="noopener noreferrer" aria-label="CnpTVOfficial on Telegram">
  <img src="/gop-gop-moww.png" alt="Cricket News Point Logo" loading="eager" width="36" height="36">
</a>

<button class="revenue-btn" id="revenueBtn" type="button" aria-label="Earn reward">
  <svg class="rev-icon" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
    <defs><radialGradient id="rcg" cx="38%" cy="32%" r="62%"><stop offset="0%" stop-color="#ffe566"/><stop offset="55%" stop-color="#ffaa00"/><stop offset="100%" stop-color="#c86c00"/></radialGradient></defs>
    <ellipse cx="14" cy="21.5" rx="8.5" ry="2.2" fill="rgba(0,0,0,.22)"/>
    <circle cx="14" cy="13.5" r="10" fill="#c96800"/>
    <circle cx="14" cy="13.5" r="9.2" fill="url(#rcg)"/>
    <circle cx="14" cy="13.5" r="6.8" fill="none" stroke="rgba(255,235,120,.42)" stroke-width=".9"/>
    <text x="14" y="18" text-anchor="middle" font-size="9.5" font-weight="900" fill="#7a3c00" font-family="Arial,sans-serif">$</text>
    <ellipse cx="11" cy="10.2" rx="3" ry="1.8" fill="rgba(255,255,255,.3)" transform="rotate(-25 11 10.2)"/>
  </svg>
  <div class="rev-texts">
    <span class="rev-main">Support US - Promotion</span>
    <span class="rev-sub">Tap to Received &#9658;</span>
  </div>
  <svg class="rev-arrow" viewBox="0 0 14 14"><path d="M2 7h10M7 2l5 5-5 5"/></svg>
</button>

<div id="loading-screen">
  <div class="loader">
    <div class="loader-ring"></div>
    <div class="loader-ring-inner"></div>
    <div class="loader-core"></div>
  </div>
  <div class="loading-text">
    <div class="loading-label">Connecting to Server</div>
    <div class="loading-sub">Fetching Live Stream<span>.</span><span>.</span><span>.</span></div>
  </div>
</div>

<iframe id="main-iframe" allowfullscreen allow="encrypted-media; fullscreen; autoplay; picture-in-picture" referrerpolicy="no-referrer-when-downgrade" scrolling="no"></iframe>

<div class="popup-overlay" id="popup" role="dialog" aria-modal="true">
  <div class="popup-wrap">
    <div class="popup-box">
      <div class="popup-title">Follow Us !!</div>
      <div class="popup-text">
        Join our WhatsApp channel<br>
        <b>CRICKET NEWS POINT &#8482;</b>
        For Instant Updates &amp; Exclusive Links.
      </div>
      <iframe id="joinFrame" title="Join WhatsApp Channel" scrolling="no" style="width:100%;height:46px;border:0;outline:0;display:block;overflow:hidden;background:transparent;margin-bottom:9px;"></iframe>
      <button class="btn-popup btn-joined-main" id="popupSkipBtn" type="button">No, Thanks</button>
    </div>
  </div>
</div>

<div id="error-screen">
  <div class="error-card">
    <div class="error-icon">
      <svg viewBox="0 0 24 24"><path d="M18.36 6.64a9 9 0 1 1-12.73 0"/><line x1="12" y1="2" x2="12" y2="12"/></svg>
    </div>
    <div class="error-title" id="etitle">Stream Not Found</div>
    <div class="error-badge" id="error-badge">"Unknown"</div>
    <div class="error-body" id="ebody">The Requested Stream Is Not Available Right Now.<br>Please Check The Link Or Try Again Later.</div>
    <div class="error-retry-note" id="eretry-note"><span class="error-retry-dot"></span><span>Retrying Automatically</span></div>
    <button type="button" id="error-retry-btn" class="error-contact-btn retry-now-btn">
      <svg viewBox="0 0 24 24" fill="none" stroke="#2aed74" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 4v6h-6"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></svg>
      Retry Now
    </button>
    <a href="https://t.me/CnpTVOfficial" target="_blank" rel="noopener noreferrer" class="error-contact-btn" id="error-contact-btn">
      <svg viewBox="0 0 24 24"><path d="M9.993 15.674l-.398 5.604c.57 0 .817-.245 1.113-.54l2.67-2.557 5.53 4.047c1.014.558 1.734.264 1.987-.939l3.6-16.86c.3-1.4-.506-1.95-1.496-1.58L1.27 9.64c-1.37.53-1.35 1.29-.233 1.64l5.68 1.77 13.337-8.418c.59-.39 1.13-.175.69.215"/></svg>
      Contact Support
    </a>
  </div>
</div>

<script>
(function(){
'use strict';

var PRIMARY_JSON  = 'https://sonujson-v5.pages.dev/loura.json';
var FALLBACK_JSON = 'https://allrounder3-0.pages.dev/id.json';
var CONTACT_LINK  = 'https://t.me/CnpTVOfficial';
var WA_CHANNEL    = 'https://whatsapp.com/channel/0029VaeylYYBPzjVNomWuZ0T';

var AD3 = 'https://www.profitableratecpmnetwork.com/z7h98ufmff?key=3fca2af399e3f83446376c79dbf78aa9';

var FETCH_TIMEOUT = 8000;
var RETRY_DELAY   = 8000;
var SAFETY_MS     = 15000;

var JOIN_SCHEMES = [
  {bg:'linear-gradient(90deg,#1bcc26,#17b823)',shadow:'rgba(27,204,38,0.38)',color:'#fff'},
  {bg:'linear-gradient(90deg,#11f7e0,#0dcaba)',shadow:'rgba(17,247,224,0.38)',color:'#003d36'},
  {bg:'linear-gradient(90deg,#ffff00,#e6e600)',shadow:'rgba(230,230,0,0.42)',color:'#333300'}
];

var iframe     = document.getElementById('main-iframe');
var loadScreen = document.getElementById('loading-screen');
var errScreen  = document.getElementById('error-screen');
var errTitle   = document.getElementById('etitle');
var errBody    = document.getElementById('ebody');
var errBadge   = document.getElementById('error-badge');
var contactBtn = document.getElementById('error-contact-btn');
var popup      = document.getElementById('popup');
var joinFrame  = document.getElementById('joinFrame');
var skipBtn    = document.getElementById('popupSkipBtn');
var revenueBtn = document.getElementById('revenueBtn');

contactBtn.href = CONTACT_LINK;

var sc = JOIN_SCHEMES[Math.floor(Math.random() * JOIN_SCHEMES.length)];

function openTab(url) {
  if (!url) return;
  var a = document.createElement('a');
  a.href = url; a.target = '_blank'; a.rel = 'noopener noreferrer';
  document.body.appendChild(a);
  a.click();
  setTimeout(function(){ if (a.parentNode) a.parentNode.removeChild(a); }, 150);
}

(function buildJoinFrame(){
  var html =
    '<!DOCTYPE html><html><head><meta charset="UTF-8">' +
    '<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">' +
    '<link rel="preconnect" href="https://fonts.googleapis.com">' +
    '<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>' +
    '<link href="https://fonts.googleapis.com/css2?family=Amaranth:wght@700&display=swap" rel="stylesheet">' +
    '<style>' +
    '*{margin:0;padding:0;box-sizing:border-box}' +
    'html,body{width:100%;background:transparent;overflow:hidden;-webkit-tap-highlight-color:transparent}' +
    'button{width:100%;padding:14px;border:none;border-radius:13px;font-family:"Amaranth",sans-serif;' +
    'font-size:18px;font-weight:700;letter-spacing:.6px;line-height:1;text-align:center;cursor:pointer;' +
    '-webkit-user-select:none;user-select:none;-webkit-appearance:none;appearance:none;touch-action:manipulation;' +
    'display:block;transition:transform .18s;background:' + sc.bg + ';box-shadow:0 5px 20px ' + sc.shadow + ';color:' + sc.color + '}' +
    'button:active{transform:scale(.95)}' +
    '</style></head><body>' +
    '<button type="button" id="jb">JOIN NOW</button>' +
    '<script>(function(){' +
    'document.getElementById("jb").addEventListener("click",function(e){' +
      'e.preventDefault();' +
      'try{parent.postMessage({type:"joinNowClicked"},"*");}catch(e){}' +
    '},false);' +
    'function reportHeight(){try{parent.postMessage({type:"joinFrameHeight",height:document.body.scrollHeight},"*");}catch(e){}}' +
    'window.addEventListener("load",function(){' +
      'reportHeight();' +
      'if(document.fonts&&document.fonts.ready){document.fonts.ready.then(reportHeight);}else{setTimeout(reportHeight,300);}' +
    '});' +
    'window.addEventListener("message",function(e){' +
      'if(e&&e.data&&e.data.type==="measureNow")reportHeight();' +
    '},false);' +
    '})();<\/script>' +
    '</body></html>';
  joinFrame.setAttribute('srcdoc', html);
})();

function isMobileDevice(){
  var ua = navigator.userAgent || navigator.vendor || '';
  if (/android|iphone|ipad|ipod|iemobile|blackberry|opera mini|mobile/i.test(ua)) return true;
  if (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) return true;
  return false;
}

window.addEventListener('message', function(ev){
  if (ev.source !== joinFrame.contentWindow) return;
  var d = ev.data;
  if (!d || typeof d !== 'object') return;
  if (d.type === 'joinNowClicked') {
    if (isMobileDevice()) {
      window.location.href = WA_CHANNEL;
    } else {
      openTab(WA_CHANNEL);
    }
    closePopup();
  } else if (d.type === 'joinFrameHeight' && typeof d.height === 'number' && d.height > 0) {
    joinFrame.style.height = Math.max(40, d.height) + 'px';
  }
}, false);

setTimeout(function(){
  popup.classList.add('visible');
  setTimeout(function(){
    try { joinFrame.contentWindow.postMessage({type:'measureNow'}, '*'); } catch(e){}
  }, 60);
}, 4000);

function closePopup() {
  popup.style.opacity    = '0';
  popup.style.transition = 'opacity .2s';
  setTimeout(function(){
    popup.classList.remove('visible');
    popup.style.opacity    = '';
    popup.style.transition = '';
  }, 220);
}

skipBtn.addEventListener('click', function(){
  closePopup();
});

revenueBtn.addEventListener('click', function(e){
  e.stopPropagation();
  openTab(AD3);
});

var loaderHidden = false;
var safetyTimer  = null;

function hideLoader() {
  if (loaderHidden) return;
  loaderHidden = true;
  clearTimeout(safetyTimer);
  loadScreen.style.transition = 'opacity .35s';
  loadScreen.style.opacity    = '0';
  iframe.style.visibility     = 'visible';
  setTimeout(function(){ loadScreen.style.display = 'none'; }, 370);
}
iframe.addEventListener('load', hideLoader);

var retryTimer = null;

function showError(id, reason) {
  loadScreen.style.display = 'none';
  iframe.style.visibility  = 'hidden';
  clearTimeout(retryTimer);
  if (reason === 'missing') {
    errTitle.textContent = 'No Channel Selected';
    errBody.textContent  = 'No Channel ID Was Given In The Link. Please Use A Valid Channel Link.';
    errBadge.style.display = 'none';
    document.getElementById('eretry-note').style.display = 'none';
  } else if (reason === 'network') {
    errTitle.textContent = 'Connection Problem';
    errBody.textContent  = "Couldn't Reach The Server Right Now. Please Check Your Internet Connection.";
    errBadge.style.display = 'none';
    document.getElementById('eretry-note').style.display = 'flex';
    retryTimer = setTimeout(function(){ fetchAndLoad(id); }, RETRY_DELAY);
  } else {
    errTitle.textContent = 'Stream Not Found';
    errBody.textContent  = 'The Requested Stream Is Not Available Right Now. Please Check The Link Or Try Again Later.';
    errBadge.style.display = '';
    errBadge.textContent = id ? '"' + id + '"' : '"Unknown"';
    document.getElementById('eretry-note').style.display = 'flex';
    retryTimer = setTimeout(function(){ fetchAndLoad(id); }, RETRY_DELAY);
  }
  errScreen.classList.add('show');
}
document.getElementById('error-retry-btn').addEventListener('click', function(){
  var id = getStreamId();
  if (id) fetchAndLoad(id);
});
function hideError() {
  errScreen.classList.remove('show');
  clearTimeout(retryTimer);
}

function onFSChange() {
  var el = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement;
  if (el) {
    if (screen.orientation && screen.orientation.lock) screen.orientation.lock('landscape').catch(function(){});
  } else {
    if (screen.orientation && screen.orientation.unlock) try { screen.orientation.unlock(); } catch(e){}
  }
}
document.addEventListener('fullscreenchange', onFSChange);
document.addEventListener('webkitfullscreenchange', onFSChange);
document.addEventListener('mozfullscreenchange', onFSChange);

function freshUrl(url){ return url + (url.indexOf('?') === -1 ? '?' : '&') + 'nc=' + Date.now(); }

function fetchJSON(url) {
  var ctrl  = new AbortController();
  var timer = setTimeout(function(){ ctrl.abort(); }, FETCH_TIMEOUT);
  return fetch(freshUrl(url), {cache:'no-store', signal:ctrl.signal})
    .then(function(r){ clearTimeout(timer); if (!r.ok) throw 0; return r.json(); })
    .catch(function(e){ clearTimeout(timer); throw e; });
}

function getStreamId() {
  var s = window.location.search, raw = null;
  if (s.length > 1) {
    raw = s.slice(1);
    var eq = raw.indexOf('=');
    if (eq !== -1) raw = raw.slice(eq + 1);
    raw = raw.split('&')[0];
    try { raw = decodeURIComponent(raw); } catch(e){}
  } else {
    var p = window.location.pathname.replace(/\/+$/,'').split('/');
    raw = p[p.length - 1];
  }
  return (raw && raw.trim()) ? raw.trim() : null;
}

var metaDescEl  = document.querySelector('meta[name="description"]');
var ogTitleEl   = document.querySelector('meta[property="og:title"]');
var ogDescEl    = document.querySelector('meta[property="og:description"]');
var twTitleEl   = document.querySelector('meta[name="twitter:title"]');
var twDescEl    = document.querySelector('meta[name="twitter:description"]');
var canonicalEl = document.querySelector('link[rel="canonical"]');

function updatePageMeta(channelName){
  channelName = (channelName || '').trim();
  if (!channelName) return;
  var title = channelName + ' -  Streaming By CnpTV | CRICKET NEWS POINT';
  var desc  = 'Watch ' + channelName + ' Live Streaming Free On Cricket News Point. Live Cricket Scores, IPL Updates & Instant Match Alerts - Join Our WhatsApp Channel Now.';
  document.title = title;
  if (metaDescEl)  metaDescEl.setAttribute('content', desc);
  if (ogTitleEl)   ogTitleEl.setAttribute('content', title);
  if (ogDescEl)    ogDescEl.setAttribute('content', desc);
  if (twTitleEl)   twTitleEl.setAttribute('content', title);
  if (twDescEl)    twDescEl.setAttribute('content', desc);
  if (canonicalEl) canonicalEl.setAttribute('href', window.location.href.split('#')[0]);
}

function applyStream(item) {
  clearTimeout(safetyTimer);
  iframe.src  = item.iframeSrc;
  safetyTimer = setTimeout(hideLoader, SAFETY_MS);
  hideError();
  updatePageMeta(item.name);
  if (item.hit) fetch(item.hit, {cache:'no-store'}).catch(function(){});
}

function fetchAndLoad(id) {
  Promise.allSettled([
    fetchJSON(PRIMARY_JSON),
    FALLBACK_JSON ? fetchJSON(FALLBACK_JSON) : Promise.resolve(null)
  ])
    .then(function(res){
      var pd   = res[0].status === 'fulfilled' ? res[0].value : null;
      var fd   = res[1].status === 'fulfilled' ? res[1].value : null;
      var list = ((pd && pd.iframes) || []).concat((fd && fd.iframes) || []);
      var item = null;
      for (var i = 0; i < list.length; i++) {
        if (String(list[i].id) === String(id) && list[i].iframeSrc) { item = list[i]; break; }
      }
      if (item) {
        applyStream(item);
      } else {
        var reachedServer = !!(pd || fd);
        showError(id, reachedServer ? null : 'network');
      }
    });
}

var sid = getStreamId();
if (sid) { fetchAndLoad(sid); } else { showError(null, 'missing'); }

if (navigator.modelContext && typeof navigator.modelContext.registerTool === 'function') {
  var openTelegramAbort = new AbortController();
  navigator.modelContext.registerTool({
    name: 'open_telegram_channel',
    description: 'Open the official CnpTVOfficial Telegram channel in a new tab',
    inputSchema: { type: 'object', properties: {} },
    execute: function(){
      openTab(CONTACT_LINK);
      return { status: 'opened', url: CONTACT_LINK };
    }
  }, { signal: openTelegramAbort.signal });
}

})();
</script>
</body>
</html>
