<!doctype html>
<html lang="es">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/png" href="/branding/IsotipoNilo.png" />
    <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
    <title>Nilo Planners | Software para Wedding Planners y Organizadores de Eventos</title>
    <meta name="description" content="Nilo Planners es la plataforma todo-en-uno para wedding planners y organizadores de eventos. Gestiona presupuestos, invitados, cronogramas, proveedores y más desde un solo lugar." />
    <meta name="keywords" content="wedding planner software, organizador de eventos, gestión de bodas, planificador de bodas, software eventos, nilo planners" />
    <meta name="robots" content="index, follow" />
    <link rel="canonical" href="https://niloplanners.com/" />

    <!-- Open Graph / Facebook -->
    <meta property="og:type" content="website" />
    <meta property="og:url" content="https://niloplanners.com/" />
    <meta property="og:title" content="Nilo Planners | Software para Wedding Planners y Organizadores de Eventos" />
    <meta property="og:description" content="La plataforma todo-en-uno para wedding planners y organizadores de eventos. Gestiona presupuestos, invitados, cronogramas, proveedores y más." />
    <meta property="og:image" content="https://niloplanners.com/branding/IsotipoNilo.png" />
    <meta property="og:locale" content="es_MX" />
    <meta property="og:site_name" content="Nilo Planners" />

    <!-- Twitter -->
    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:url" content="https://niloplanners.com/" />
    <meta name="twitter:title" content="Nilo Planners | Software para Wedding Planners" />
    <meta name="twitter:description" content="La plataforma todo-en-uno para wedding planners y organizadores de eventos." />
    <meta name="twitter:image" content="https://niloplanners.com/branding/IsotipoNilo.png" />
    <script>
      // Suppress ALL network errors immediately, before any JS loads
      (function() {
        'use strict';
        if (typeof window === 'undefined') return;
        
        // Override console.error completely for network errors
        const originalError = console.error;
        const originalWarn = console.warn;
        
        console.error = function(...args) {
          const message = String(args[0] || '') + ' ' + args.slice(1).map(String).join(' ');
          if (
            /NetworkError/i.test(message) ||
            /ERR_NETWORK/i.test(message) ||
            /ECONNREFUSED/i.test(message) ||
            /Failed to fetch/i.test(message) ||
            /TypeError.*NetworkError/i.test(message) ||
            /fetch.*resource/i.test(message)
          ) {
            return; // Completely suppress
          }
          originalError.apply(console, args);
        };
        
        console.warn = function(...args) {
          const message = String(args[0] || '') + ' ' + args.slice(1).map(String).join(' ');
          if (/NetworkError|ERR_NETWORK|ECONNREFUSED/i.test(message)) {
            return; // Suppress
          }
          originalWarn.apply(console, args);
        };
        
        // Catch unhandled promise rejections
        window.addEventListener('unhandledrejection', function(event) {
          const error = event.reason || {};
          const msg = (error.message || String(error) || '').toLowerCase();
          const code = (error.code || '').toLowerCase();
          
          if (
            msg.includes('networkerror') ||
            msg.includes('err_network') ||
            msg.includes('econnrefused') ||
            msg.includes('failed to fetch') ||
            msg.includes('fetch') && msg.includes('resource') ||
            code === 'err_network' ||
            code === 'econnrefused'
          ) {
            event.preventDefault();
            event.stopPropagation();
            return false;
          }
        }, true); // Use capture phase
        
        // Catch general errors
        window.addEventListener('error', function(event) {
          const msg = (event.message || '').toLowerCase();
          if (
            msg.includes('networkerror') ||
            msg.includes('failed to fetch') ||
            msg.includes('fetch') && msg.includes('resource')
          ) {
            event.preventDefault();
            event.stopPropagation();
            return false;
          }
        }, true); // Use capture phase
      })();
    </script>
    <script type="module" crossorigin src="/assets/index-BVYBPgI_.js"></script>
    <link rel="modulepreload" crossorigin href="/assets/react-vendor-DUzEuDJD.js">
    <link rel="modulepreload" crossorigin href="/assets/query-vendor-CFjyG2u-.js">
    <link rel="modulepreload" crossorigin href="/assets/ui-vendor-BXJCMsEt.js">
    <link rel="stylesheet" crossorigin href="/assets/index-BurlKj5_.css">
  <link rel="manifest" href="/manifest.webmanifest"></head>
  <body>
    <div id="root"></div>
  </body>
</html>
