<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" />
    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
    <meta name="theme-color" content="#16a34a" />
    <title>KisanBaba - Live Mandi Bhav, APMC Market Rates & MSP Dashboard</title>
    <meta name="description" content="Get real-time APMC Mandi Bhav, egg rates, MSP procurement prices, and AI-powered agricultural market intelligence across India on KisanBaba." />

    <!-- DNS Prefetches & Preconnects for High-Speed Handshakes -->
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link rel="preconnect" href="https://assets.kisanbaba.in" crossorigin />
    <link rel="dns-prefetch" href="https://fonts.googleapis.com" />
    <link rel="dns-prefetch" href="https://fonts.gstatic.com" />
    <link rel="dns-prefetch" href="https://assets.kisanbaba.in" />
    <link rel="dns-prefetch" href="https://pagead2.googlesyndication.com" />
    <link rel="dns-prefetch" href="https://www.googletagmanager.com" />

    <!-- Zero-Block Font Loading (Preload + Async Stylesheet Swap + Fallback) -->
    <link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Plus+Jakarta+Sans:wght@500;600;700;800&display=swap" />
    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Plus+Jakarta+Sans:wght@500;600;700;800&display=swap" media="print" onload="this.media='all'" />
    <noscript>
      <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Plus+Jakarta+Sans:wght@500;600;700;800&display=swap" />
    </noscript>

    <!-- Favicon & PWA Icons -->
    <link rel="icon" type="image/png" href="https://assets.kisanbaba.in/kiasnbaba%20crop%20image/kisanbaba.in-favion.png" sizes="512x512" />
    <link rel="icon" type="image/x-icon" href="/favicon.ico" />
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
    <link rel="icon" type="image/png" sizes="192x192" href="/favicon-192x192.png" />
    <link rel="icon" type="image/png" sizes="512x512" href="/favicon-512x512.png" />
    <link rel="apple-touch-icon" sizes="180x180" href="/favicon-192x192.png" />
    <link rel="apple-touch-icon" href="https://assets.kisanbaba.in/kiasnbaba%20crop%20image/kisanbaba.in-favion.png" />
    <link rel="manifest" href="/manifest.json" />
    <meta name="msapplication-TileImage" content="https://assets.kisanbaba.in/kiasnbaba%20crop%20image/kisanbaba.in-favion.png" />

    <!-- Open Graph & Social Cards -->
    <meta property="og:title" content="KisanBaba - Live Mandi Bhav, APMC Market Rates & MSP Dashboard" />
    <meta property="og:description" content="Get real-time APMC Mandi Bhav, egg rates, MSP procurement prices, and AI-powered agricultural market intelligence across India on KisanBaba." />
    <meta property="og:image" content="https://kisanbaba.in/logo.png" />
    <meta property="og:image:width" content="1200" />
    <meta property="og:image:height" content="630" />
    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:image" content="https://kisanbaba.in/logo.png" />

    <!-- Global Boot Error Handler & Fallback Sorry Card -->
    <script>
      // Detection of search engine bots, crawlers, and headless inspection agents
      function checkIsBotOrCrawler() {
        if (window.__isCrawler === true) return true;
        try {
          var ua = (navigator.userAgent || '').toLowerCase();
          if (/bot|crawler|spider|crawling|google|bing|yahoo|duckduck|baidu|yandex|sogou|exabot|facebot|facebook|ia_archiver|lighthouse|chrome-lighthouse|pingdom|pagespeed|headlesschrome|slurp|screaming frog/i.test(ua)) {
            return true;
          }
          if (navigator.webdriver) return true;
        } catch (e) {}
        return false;
      }
      if (checkIsBotOrCrawler()) {
        window.__isCrawler = true;
      }

      window.showGlobalSorryCard = function(errorMsg, stackDetails) {
        // Prevent sorry card from replacing page content when crawlers are inspecting or after React mounted
        if (window.__isCrawler || checkIsBotOrCrawler() || window.__kbReactMounted) return;

        const rootEl = document.getElementById('root');
        if (!rootEl) return;

        const safeError = String(errorMsg || 'Unknown initialization error');
        const safeStack = String(stackDetails || 'No stack trace available');

        rootEl.innerHTML = `
          <div style="min-height: 100vh; background-color: #f8fafc; display: flex; align-items: center; justify-content: center; padding: 16px; font-family: system-ui, -apple-system, sans-serif;">
            <div style="max-width: 520px; width: 100%; background: #ffffff; border-radius: 24px; box-shadow: 0 20px 40px -10px rgba(0,0,0,0.08); border: 1px solid #e2e8f0; padding: 28px; text-align: center;">
              <div style="display: inline-flex; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 50%; background: #fef3c7; color: #d97706; border: 1px solid #fde68a; font-size: 32px; margin-bottom: 16px;">
                ⚠️
              </div>
              <h1 style="font-size: 22px; font-weight: 800; color: #0f172a; margin: 0 0 8px 0;">
                Sorry! Page Could Not Load
              </h1>
              <p style="font-size: 14px; color: #64748b; margin: 0 0 20px 0; line-height: 1.5;">
                An unexpected startup error occurred. Diagnostic error details are shown below:
              </p>
              <div style="text-align: left; background: #f1f5f9; border-radius: 14px; border: 1px solid #cbd5e1; padding: 14px; margin-bottom: 20px;">
                <div style="font-size: 11px; font-weight: 800; color: #dc2626; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 6px;">
                  Error Diagnosis Details
                </div>
                <div style="font-size: 12px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; color: #b91c1c; word-break: break-all; white-space: pre-wrap; max-height: 180px; overflow-y: auto;">${safeError}\n\n${safeStack}</div>
              </div>
              <div style="display: flex; flex-direction: column; gap: 10px;">
                <button onclick="window.location.reload()" style="width: 100%; padding: 12px 16px; background: #16a34a; color: white; font-weight: 700; border-radius: 12px; border: none; cursor: pointer; font-size: 14px; box-shadow: 0 4px 12px rgba(22, 163, 74, 0.2);">
                  🔄 Reload Page
                </button>
                <button onclick="sessionStorage.clear(); localStorage.clear(); window.location.href='/'" style="width: 100%; padding: 12px 16px; background: #f1f5f9; color: #334155; font-weight: 600; border-radius: 12px; border: 1px solid #cbd5e1; cursor: pointer; font-size: 14px;">
                  🏠 Clear Cache & Go Home
                </button>
              </div>
            </div>
          </div>
        `;
      };

      // Catch unhandled runtime errors during script initialization
      window.addEventListener('error', function(e) {
        if (window.__isCrawler || checkIsBotOrCrawler() || window.__kbReactMounted) return;
        const msg = e.message || (e.error && e.error.message) || 'Script execution error';
        const stack = (e.error && e.error.stack) || (e.filename ? (e.filename + ':' + e.lineno + ':' + e.colno) : '');
        
        // Skip benign development and dev-server websocket errors to prevent blocking the actual homepage
        const isBenign = 
          msg.includes('WebSocket') || 
          msg.includes('vite/client') || 
          msg.includes('@vite') || 
          stack.includes('WebSocket') || 
          stack.includes('vite/client') || 
          stack.includes('@vite');
          
        if (isBenign) {
          console.warn("Skipping benign dev error in sorry card:", msg);
          return;
        }
        
        window.showGlobalSorryCard(msg, stack);
      });

      // Catch unhandled promise rejections
      window.addEventListener('unhandledrejection', function(e) {
        if (window.__isCrawler || checkIsBotOrCrawler() || window.__kbReactMounted) return;
        const reason = e.reason;
        const msg = (reason && reason.message) || String(reason || 'Unhandled Promise Rejection');
        const stack = (reason && reason.stack) || '';
        
        // Skip benign dev promise rejections
        const isBenign = 
          msg.includes('WebSocket') || 
          msg.includes('vite/client') || 
          msg.includes('@vite') || 
          stack.includes('WebSocket') || 
          stack.includes('vite/client') || 
          stack.includes('@vite');
          
        if (isBenign) {
          console.warn("Skipping benign dev rejection in sorry card:", msg);
          return;
        }
        
        window.showGlobalSorryCard(msg, stack);
      });

      // Fallback watchdog: if after 8 seconds the initial skeleton is still present, trigger the Sorry card
      // CRITICAL: Prevent the 8-second watchdog from replacing page content with error cards when crawlers are inspecting the page.
      if (!checkIsBotOrCrawler()) {
        window.__kbBootWatchdog = setTimeout(function() {
          if (window.__kbReactMounted || window.__isCrawler || checkIsBotOrCrawler()) return;
          const rootEl = document.getElementById('root');
          // If the semantic SSR mesh is already present, never replace it with an error card!
          if (document.getElementById('ssr-crawler-mesh')) return;
          if (rootEl && rootEl.innerText && (rootEl.innerText.includes('2,800+ mandis') || rootEl.innerText.includes('KisanBaba APMC Engine'))) {
            if (!checkIsBotOrCrawler()) {
              window.showGlobalSorryCard(
                'Application Boot Timeout',
                'The React application failed to mount within 8 seconds. This can happen due to network delays, chunk load failures, or a JavaScript error.'
              );
            }
          }
        }, 8000);
      }
    </script>

    <!-- Deferred High-Performance Third-Party Script Initialization (TBT < 50ms) -->
    <script>
      // 1. Initialize dataLayer & gtag stub immediately so events are safely queued without blocking
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      window.gtag = gtag;
      gtag('js', new Date());
      gtag('config', 'G-NEW5R4TLLD');

      // 2. Pre-declare adsbygoogle array so React components can queue ads safely
      window.adsbygoogle = window.adsbygoogle || [];

      // 3. Lazy Google Analytics (GA4) Loader - Runs during idle time or on user interaction
      function loadGA4() {
        if (window.__gaLoaded) return;
        window.__gaLoaded = true;
        const gaScript = document.createElement('script');
        gaScript.src = 'https://www.googletagmanager.com/gtag/js?id=G-NEW5R4TLLD';
        gaScript.async = true;
        document.head.appendChild(gaScript);
      }

      // 4. Lazy Google AdSense Loader - Defers heavy adsbygoogle execution away from initial critical path
      function loadAdSense() {
        const host = window.location.hostname;
        const isProd = host === 'kisanbaba.in' || host === 'www.kisanbaba.in';
        // Avoid executing AdSense script on unverified preview/development domains or nested iframes to prevent CSP framing violations
        if (!isProd) return;

        if (window.__adsenseLoaded) return;
        window.__adsenseLoaded = true;
        const adScript = document.createElement('script');
        adScript.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4232443364875297';
        adScript.async = true;
        adScript.crossOrigin = 'anonymous';
        document.head.appendChild(adScript);
      }

      // Execute scripts when main thread is idle or on first user activity
      function triggerThirdPartyLoad() {
        loadGA4();
        loadAdSense();
      }

      if ('requestIdleCallback' in window) {
        window.requestIdleCallback(() => setTimeout(triggerThirdPartyLoad, 2000), { timeout: 3500 });
      } else {
        window.addEventListener('load', () => setTimeout(triggerThirdPartyLoad, 2000), { once: true });
      }

      // Trigger immediately on earliest user intent (scroll, touch, click, keydown, mousemove)
      const userInteractionEvents = ['scroll', 'touchstart', 'mousemove', 'click', 'keydown'];
      userInteractionEvents.forEach(evt => {
        window.addEventListener(evt, triggerThirdPartyLoad, { once: true, passive: true });
      });
    </script>
    <script type="module" data-cfasync="false" crossorigin src="/assets/index-BkOx91H6.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-yKg0jFRn.css">
  </head>
  <body class="bg-slate-50 text-slate-900 antialiased min-h-screen">
    <div id="root">
      <!-- High-speed zero-JS inline skeleton to instantly achieve sub-0.3s FCP -->
      <div style="min-height: 100vh; background-color: #f8fafc; color: #0f172a;">
        <header style="background: #ffffff; border-bottom: 1px solid #e2e8f0; padding: 12px 16px; display: flex; align-items: center; justify-content: space-between; max-width: 1280px; margin: 0 auto;">
          <div style="display: flex; align-items: center; gap: 10px;">
            <div style="width: 38px; height: 38px; border-radius: 10px; background: #16a34a; display: flex; align-items: center; justify-content: center; color: white; font-weight: bold; font-size: 20px;">🌾</div>
            <div>
              <div style="font-weight: 800; font-size: 18px; color: #15803d; line-height: 1.1;">KisanBaba</div>
              <div style="font-size: 10px; color: #64748b; font-weight: 600;">Live Mandi Bhav & Agri Intelligence</div>
            </div>
          </div>
          <div style="width: 32px; height: 32px; border-radius: 8px; background: #f1f5f9;"></div>
        </header>
        <main style="max-width: 1280px; margin: 16px auto; padding: 0 16px;">
          <div style="height: 140px; background: linear-gradient(135deg, #15803d 0%, #166534 100%); border-radius: 16px; padding: 20px; color: white; display: flex; flex-direction: column; justify-content: center;">
            <div style="font-size: 20px; font-weight: 800; margin-bottom: 6px;">Live APMC Mandi Rates & MSP Intelligence</div>
            <div style="font-size: 12px; opacity: 0.9;">Real-time agricultural commodity prices from 2,800+ mandis across India</div>
          </div>
        </main>
      </div>
    <!-- KISANBABA_ROOT_END --></div>
  <!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "f9f100dc56f34e24a4cfab2302af0da9"}'></script><!-- Cloudflare Pages Analytics --></body>
</html>
