<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <link rel="icon" type="image/avif" href="/thumbnail.avif" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  <meta name="description"
    content="Read aloud text, PDF, EPUB or web articles with AI voices. Free text to speech reader for accurate narration of complex docs and books. No ads, no paywalled voices." />

  <!-- Analytics Detection & Conditional Loading -->
  <script>
    // Detect test environments (Playwright, Puppeteer, Selenium, etc.)
    const isAutomatedTest = /playwright|headless|puppeteer|selenium/i.test(navigator.userAgent) ||
      window.location.search.includes('playwright-test') ||
      window.location.search.includes('no-analytics');

    if (!isAutomatedTest) {
      // Google tag (gtag.js)
      const gaScript = document.createElement('script');
      gaScript.async = true;
      gaScript.src = 'https://www.googletagmanager.com/gtag/js?id=G-7052KLJGTF';
      document.head.appendChild(gaScript);

      // Reddit Pixel
      !(function (w, d) {
        if (!w.rdt) {
          var p = (w.rdt = function () {
            p.sendEvent
              ? p.sendEvent.apply(p, arguments)
              : p.callQueue.push(arguments);
          });
          p.callQueue = [];
          var t = d.createElement("script");
          ((t.src = "https://www.redditstatic.com/ads/pixel.js"),
            (t.async = !0));
          var s = d.getElementsByTagName("script")[0];
          s.parentNode.insertBefore(t, s);
        }
      })(window, document);
    } else {
      // Mock analytics functions for tests to prevent errors
      window.rdt = function () { };
      console.log('[Analytics] Test environment detected - analytics disabled');
    }

    // Initialize gtag (or mock it for tests)
    window.dataLayer = window.dataLayer || [];
    function gtag() {
      if (!isAutomatedTest) {
        dataLayer.push(arguments);
      }
    }
    window.gtag = gtag;

    // Configure GA if not in test mode
    if (!isAutomatedTest) {
      gtag("js", new Date());
      gtag("config", "G-7052KLJGTF");

      // Initialize Reddit Pixel
      window.rdt("init", "a2_fkx4zry38z5g", {
        optOut: false,
        useDecimalCurrencyValues: true,
      });
      window.rdt("track", "PageVisit");
    }
  </script>

  <!-- Google API scripts for Drive Picker -->
  <script src="https://apis.google.com/js/api.js"></script>
  <script src="https://accounts.google.com/gsi/client" async defer></script>

  <!-- Preconnect to external domains for faster resource loading -->
  <link rel="preconnect" href="https://fonts.googleapis.com" />
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
  <link rel="dns-prefetch" href="https://files.paper2audio.com" />

  <!-- Preload critical assets -->
  <link rel="preload" href="/logo.svg" as="image" type="image/svg+xml" />

  <!-- Optimized font loading - load DM Sans as primary font with font-display swap -->
  <link rel="preload" as="style"
    href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap" />
  <link
    href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap"
    rel="stylesheet" media="print" onload="this.media='all'" />
  <noscript>
    <link
      href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap"
      rel="stylesheet" />
  </noscript>

  <!-- Lazy load additional fonts -->
  <link
    href="https://fonts.googleapis.com/css2?family=Noto+Serif:ital,wght@0,400;0,700;1,400;1,700&family=Lora:ital,wght@0,400;0,700;1,400;1,700&family=Merriweather:ital,wght@0,400;0,700;1,400;1,700&family=PT+Serif:ital,wght@0,400;0,700;1,400;1,700&family=Roboto:ital,wght@0,400;0,700;1,400;1,700&family=Open+Sans:ital,wght@0,400;0,700;1,400;1,700&family=Lato:ital,wght@0,400;0,700;1,400;1,700&family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400;1,700&family=Lexend:wght@400;700&display=swap"
    rel="stylesheet" media="print" onload="this.media='all'" />

  <!--ssr-head-->
  <title>Paper2Audio - Free text to speech for PDFs, EPUBs, and more</title>
  <script type="module" crossorigin src="/assets/index-DM1KQlcy.js"></script>
  <link rel="modulepreload" crossorigin href="/assets/react-vendor--Jw6xj52.js">
  <link rel="modulepreload" crossorigin href="/assets/ui-components-CgkU2Btv.js">
  <link rel="modulepreload" crossorigin href="/assets/icons-BPNqSX07.js">
  <link rel="modulepreload" crossorigin href="/assets/firebase-BlsYBC0J.js">
  <link rel="stylesheet" crossorigin href="/assets/index-D9Q6uI90.css">
</head>

<body>
  <div id="root"><!--ssr-html--></div>
</body>

</html>