<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
    <link rel="icon" href="/favicon.ico" sizes="48x48" />
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
    <link rel="manifest" href="/site.webmanifest" />
    <link rel="mask-icon" href="/mask-icon.svg" color="#0A0A0A" />
    <meta name="theme-color" content="#0A0A0A" />
    <meta name="application-name" content="Quantprove" />
    <meta name="apple-mobile-web-app-title" content="Quantprove" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <!-- Theme pre-boot: apply the persisted qp-theme before first paint so a
         dark-preference reload never flashes light. Mirrors the resolution in
         src/theme/ThemeProvider.tsx (default light). -->
    <script>
      (function () {
        try {
          var p = localStorage.getItem('qp-theme');
          var dark = p === 'dark' || (p === 'system' && window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches);
          document.documentElement.setAttribute('data-theme', dark ? 'dark' : 'light');
        } catch (e) { document.documentElement.setAttribute('data-theme', 'light'); }
      })();
    </script>
    <title>Quantprove</title>
    <!-- Fallback description for routes with no Helmet. data-rh="true" marks it
         as helmet-managed so per-page Helmet descriptions REPLACE it instead of
         emitting a duplicate tag. -->
    <meta name="description" content="Quantprove scores your trade history for statistical edge - Edge Score, Stability Score, and Health Score from one CSV upload." data-rh="true" />

    <!-- Structured Data: WebSite / SoftwareApplication / Organization.
         @id-linked so parsers merge these with page-level nodes; the
         description is the canonical ORG_DESCRIPTION from
         src/lib/contentSchema.ts - keep the two in sync. -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "WebSite",
      "@id": "https://quantprove.com/#website",
      "name": "Quantprove",
      "url": "https://quantprove.com/",
      "publisher": { "@id": "https://quantprove.com/#organization" }
    }
    </script>
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "SoftwareApplication",
      "@id": "https://quantprove.com/#software",
      "name": "Quantprove",
      "description": "Quantprove is a trading strategy validation tool that scores a trade log for statistical edge (Edge Score), out-of-sample stability (Stability Score), and live decay (Health Score).",
      "url": "https://quantprove.com/",
      "applicationCategory": "FinanceApplication",
      "operatingSystem": "Web",
      "publisher": { "@id": "https://quantprove.com/#organization" },
      "offers": [
        {
          "@type": "Offer",
          "name": "Free",
          "price": "0",
          "priceCurrency": "USD"
        },
        {
          "@type": "Offer",
          "name": "Pro",
          "price": "29",
          "priceCurrency": "USD",
          "priceSpecification": {
            "@type": "UnitPriceSpecification",
            "price": "29",
            "priceCurrency": "USD",
            "billingDuration": 1,
            "unitCode": "MON"
          }
        },
        {
          "@type": "Offer",
          "name": "Pro Annual",
          "price": "228",
          "priceCurrency": "USD",
          "priceSpecification": {
            "@type": "UnitPriceSpecification",
            "price": "228",
            "priceCurrency": "USD",
            "billingDuration": 1,
            "unitCode": "ANN"
          }
        }
      ]
    }
    </script>
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Organization",
      "@id": "https://quantprove.com/#organization",
      "name": "Quantprove",
      "url": "https://quantprove.com/",
      "logo": "https://quantprove.com/logo.svg",
      "sameAs": [
        "https://x.com/quantprove",
        "https://www.reddit.com/user/Quantprove/"
      ],
      "founder": {
        "@type": "Person",
        "@id": "https://quantprove.com/#founder",
        "name": "Samuel Pointner",
        "jobTitle": "Founder"
      },
      "description": "Quantprove is a trading strategy validation tool that scores a trade log for statistical edge (Edge Score), out-of-sample stability (Stability Score), and live decay (Health Score)."
    }
    </script>
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <!-- PostHog (analytics) — preconnect lets the first capture call avoid the
         DNS + TLS handshake hit. eu.i.posthog.com is the API host, eu-assets is
         the static-bundle CDN. -->
    <link rel="preconnect" href="https://eu.i.posthog.com" crossorigin />
    <link rel="preconnect" href="https://eu-assets.i.posthog.com" crossorigin />
    <!-- Fonts load async (media=print -> onload swap): the stylesheet no
         longer render-blocks first paint on the fonts.googleapis.com RTT.
         display=swap already tolerates late CSS, so the only change is the
         fallback-font window starting a frame earlier. Instrument Serif was
         dropped: zero usages across src/ (verified 2026-07-17). Do NOT
         self-host these fonts — that regressed mobile LCP twice (see
         perf-overhaul notes). -->
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Sen:wght@400..800&display=swap" rel="stylesheet" media="print" onload="this.media='all'" />
    <noscript><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Sen:wght@400..800&display=swap" rel="stylesheet" /></noscript>
    <script type="module" crossorigin src="/assets/index-C_Pmn8xd.js"></script>
    <link rel="modulepreload" crossorigin href="/assets/vendor-react-D_cSGw2O.js">
    <link rel="modulepreload" crossorigin href="/assets/vendor-supabase-jY4wIOEF.js">
    <link rel="modulepreload" crossorigin href="/assets/vendor-utils-Ce1ZTWB2.js">
    <link rel="stylesheet" crossorigin href="/assets/index-DylniQXZ.css">
  </head>
  <body>
    <div id="root"></div>
    <style>
      @keyframes qp-load{0%{background-position:200% 0}100%{background-position:-200% 0}}
      #qp-loader{position:fixed;top:0;left:0;right:0;height:2px;z-index:9999;
        background:linear-gradient(90deg,transparent,#1B6C46,transparent);
        background-size:200% 100%;animation:qp-load 1.5s ease-in-out infinite}
    </style>
    <div id="qp-loader"></div>
  </body>
</html>
