<!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="Ohho Cricket by CnpTVOfficial — Watch live cricket streams, get live scores, and exclusive match updates. Join our WhatsApp channel for real-time cricket news, T20 updates, and instant streaming alerts.">
<meta name="keywords" content="cricket news, live cricket stream, live scores, cricket updates, CnpTVOfficial, Ohh Cricket, cricket highlights, live match, IPL live, watch cricket online, T20 streams">
<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="Ohh Cricket — Live Cricket Streams & Scores | CnpTVOfficial">
<meta property="og:description" content="Watch live cricket streams, get live scores & exclusive sports updates. Join our WhatsApp channel for instant alerts.">
<meta property="og:image" content="/gop-gop-moww.png">
<meta property="og:image:alt" content="Ohho Cricket Logo">
<meta property="og:url" content="https://ohhocric.pages.dev/">
<meta property="og:site_name" content="Ohho Cricket">
<meta property="og:locale" content="en_US">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Ohho Cricket — Live Cricket | CnpTVOfficial">
<meta name="twitter:description" content="Live cricket scores, match streams, highlights & instant updates. Join now!">
<meta name="twitter:image" content="/gop-gop-moww.png">
<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="Ohh Cricket">
<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>OHHO CRICKET — Live Cricket &amp; Scores | CnpTVOfficial</title>
<link rel="icon" href="/Ohho-Cricket.png" type="image/png">
<link rel="apple-touch-icon" href="/Ohho-Cricket.png">
<link rel="canonical" href="https://ohhocric.pages.dev/">

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://ohhocric.pages.dev/#website",
      "name": "Ohh Cricket",
      "alternateName": "CnpTVOfficial",
      "url": "https://ohhocric.pages.dev/",
      "description": "Live cricket scores, exclusive streams, and instant match updates",
      "inLanguage": "en",
      "publisher": { "@id": "https://ohhocric.pages.dev/#organization" }
    },
    {
      "@type": "Organization",
      "@id": "https://ohhocric.pages.dev/#organization",
      "name": "CnpTVOfficial",
      "url": "https://ohhocric.pages.dev/",
      "logo": {
        "@type": "ImageObject",
        "url": "/gop-gop-moww.png",
        "width": 200,
        "height": 200
      },
      "sameAs": [
        "https://t.me/OhhoCricket",
        "https://t.me/OhhoCricket"
      ]
    }
  ]
}
</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-v4.pages.dev/">
<link rel="dns-prefetch" href="https://sonujson-v4.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://pl31454107.profitableratecpmnetwork.com/81/35/3d/81353d2f6f821e8f6deb4dda320cfcfc.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="/Ohho-Cricket.png" alt="Ohh Cricket 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">EARN REWARD</span>
    <span class="rev-sub">Tap to Claim &#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 Telegram channel<br>
        <b>OHHO CRICKET &#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/OhhoCricket" 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-v4.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://t.me/OhhoCricket';
var AD3           = 'https://www.profitableratecpmnetwork.com/m1m2u9r1cd?key=f6d1e1d71e05649f61322333b429fed5';

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 | OHH CRICKET';
  var desc  = 'Watch ' + channelName + ' Live Streaming Free On Ohh Cricket. Live Cricket Scores, Match Updates & Instant 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>
<!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "317a257f06c242d581fd1312274f0c9c"}'></script><!-- Cloudflare Pages Analytics --></body>
</html>
