<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>KARAOKE - Sistema en Vivo</title>
    <link id="app-favicon" rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Crect width='100' height='100' rx='22' fill='%230B0C10'/%3E%3Ccircle cx='50' cy='50' r='44' fill='none' stroke='%2366FCF1' stroke-width='4'/%3E%3Cpath d='M50 20a14 14 0 0 0-14 14v16a14 14 0 0 0 28 0V34a14 14 0 0 0-14-14zm-22 28a22 22 0 0 0 44 0h-6a16 16 0 0 1-32 0h-6zm19 24v12h6V72h-6z' fill='%2366FCF1'/%3E%3C/svg%3E" />
    <meta name="description" content="Sistema de karaoke en tiempo real con pantalla para TV gigante, interfaz móvil de pedidos por mesa con código QR y panel de control DJ en vivo." />
    <meta property="og:title" content="KARAOKE - Sistema en Vivo" />
    <meta property="og:description" content="Sistema de karaoke en tiempo real con pantalla para TV gigante, interfaz móvil de pedidos por mesa con código QR y panel de control DJ en vivo." />
    <meta property="og:type" content="website" />
    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:title" content="KARAOKE - Sistema en Vivo" />
    <meta name="twitter:description" content="Sistema de karaoke en tiempo real con pantalla para TV gigante, interfaz móvil de pedidos por mesa con código QR y panel de control DJ en vivo." />
    <style>html,body{color:#fff;background-color:#0b0c10;margin:0;padding:0;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;overflow-x:hidden}#root{background-color:#0b0c10;min-height:100vh}img{max-width:100%;height:auto}</style>
    <script>
      // Cleanly handle cross-origin third-party script errors (e.g. YouTube iframe API) and harmless Vite dev WebSocket events
      window.addEventListener('error', function(event) {
        if (!event) return;
        // Suppress generic cross-origin "Script error." and third-party iframe API messages
        if (
          event.message === 'Script error.' ||
          (event.filename && event.filename.includes('youtube.com')) ||
          (event.message && (
            event.message.includes('Script error') ||
            event.message.includes('WebSocket') ||
            event.message.includes('postMessage')
          ))
        ) {
          event.preventDefault();
          return true;
        }
      });

      window.onerror = function(message, source) {
        if (
          message === 'Script error.' ||
          (source && source.includes('youtube.com')) ||
          (typeof message === 'string' && (
            message.includes('Script error') ||
            message.includes('WebSocket') ||
            message.includes('postMessage')
          ))
        ) {
          return true;
        }
        return false;
      };

      window.addEventListener('unhandledrejection', function(event) {
        if (event && event.reason) {
          const reasonStr = String(event.reason.message || event.reason);
          if (
            reasonStr.includes('WebSocket') ||
            reasonStr.includes('postMessage') ||
            reasonStr.includes('youtube') ||
            reasonStr.includes('Script error')
          ) {
            event.preventDefault();
          }
        }
      });
    </script>
    <script type="module" crossorigin src="/assets/index-DS5aTe2R.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-CZaPecTp.css">
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>

