<!doctype html>
<html lang="en">
  <head>
    <meta name="robots" content="noindex, nofollow"/>
    <meta charset="utf-8"/>
    <title>GoProof</title>
    <base href="/"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <link rel="icon" id="appIcon" type="image/x-icon" href="assets/themes/oc/images/OcFav.webp"/>

    <!-- Preload critical images for better Lighthouse performance -->
    <link rel="preload" as="image" href="assets/themes/oc/images/GPwhite2.svg"/>
    <link rel="preload" as="image" href="assets/themes/oc/gifs/GPAnimation.gif"/>
    <link rel="preload" as="image" href="assets/themes/oc/images/ZHLogoWhite.webp"/>

    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""/>
    <link rel="preconnect" href="https://storage.googleapis.com"/>

    <!-- Optimize font loading with better fallback metrics -->
    <style>
      /* Prevent layout shift by using similar font metrics for fallbacks */
      body {
        font-family:
          'Roboto',
          -apple-system,
          BlinkMacSystemFont,
          'Segoe UI',
          'Oxygen',
          'Ubuntu',
          'Cantarell',
          sans-serif;
      }

      /* Ensure all text is visible immediately */
      * {
        font-display: swap;
      }

      /* Explicit @font-face declarations for better Lighthouse compliance */
      @font-face {
        font-family: 'Montserrat';
        font-style: normal;
        font-weight: 400;
        font-display: swap;
        src:
          local('Montserrat Regular'),
          local('Montserrat-Regular'),
          url('https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459WlhyyTh89ZNpQ.woff2') format('woff2');
        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
      }

      @font-face {
        font-family: 'Montserrat';
        font-style: normal;
        font-weight: 500;
        font-display: swap;
        src:
          local('Montserrat Medium'),
          local('Montserrat-Medium'),
          url('https://fonts.gstatic.com/s/montserrat/v15/JTURjIg1_i6t8kCHKm45_dJE3gnD_vx3rCs.woff2') format('woff2');
        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
      }

      @font-face {
        font-family: 'Montserrat';
        font-style: normal;
        font-weight: 600;
        font-display: swap;
        src:
          local('Montserrat SemiBold'),
          local('Montserrat-SemiBold'),
          url('https://fonts.gstatic.com/s/montserrat/v15/JTURjIg1_i6t8kCHKm45_bZF3gnD_vx3rCs.woff2') format('woff2');
        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
      }

      @font-face {
        font-family: 'Montserrat';
        font-style: normal;
        font-weight: 700;
        font-display: swap;
        src:
          local('Montserrat Bold'),
          local('Montserrat-Bold'),
          url('https://fonts.gstatic.com/s/montserrat/v15/JTURjIg1_i6t8kCHKm45_dJG3gnD_vx3rCs.woff2') format('woff2');
        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
      }
    </style>

    <!-- Meta Pixel Code -->
    <script>
      !(function (f, b, e, v, n, t, s) {
        if (f.fbq) return;
        n = f.fbq = function () {
          n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);
        };
        if (!f._fbq) f._fbq = n;
        n.push = n;
        n.loaded = !0;
        n.version = '2.0';
        n.queue = [];
        t = b.createElement(e);
        t.async = !0;
        t.src = v;
        s = b.getElementsByTagName(e)[0];
        s.parentNode.insertBefore(t, s);
      })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');
      fbq('init', '1029110952155798');
      fbq('track', 'PageView');
      fbq('track', 'StartTrial', { value: '0.00', currency: 'USD', predicted_ltv: '0.00' });
      fbq('track', 'InitiateCheckout');
      fbq('track', 'Purchase', { value: 0.0, currency: 'USD' });
      fbq('track', 'Lead');
    </script>
    <!-- <noscript>
      <img height="1" width="1" style="display: none" src="https://www.facebook.com/tr?id=1029110952155798&ev=PageView&noscript=1" alt="Facebook Pixel" />
    </noscript> -->
    <!-- End Meta Pixel Code -->

    <!-- Google tag (gtag.js) -->
    <script async="" src="
https://www.googletagmanager.com/gtag/js?id=G-DZ6ME48YQT"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag() {
        dataLayer.push(arguments);
      }
      gtag('js', new Date());
      gtag('config', 'G-DZ6ME48YQT');
    </script>
    <!-- END Google tag (gtag.js) -->

    <script async="" charset="utf-8" type="text/javascript" src="//js-eu1.hsforms.net/forms/embed/v2.js"></script>
  <link rel="stylesheet" href="styles-UCVLMBXV.css"><link rel="stylesheet" href="oc-XMMGB5CY.css"></head>

  <body class="h-full">
    <app-root>
      <div class="flex flex-col justify-center items-center h-screen">
        <img src="assets/themes/oc/gifs/GPAnimation.gif" width="100px" alt="Loading animation" fetchpriority="high"/>
        <img src="assets/themes/oc/images/ZHLogoWhite.webp" class="mt-2" width="100px" alt="GoProof logo"/>
      </div>
    </app-root>
    <!-- Start of oppolis Zendesk Widget script -->
    <script id="ze-snippet" src="https://static.zdassets.com/ekr/snippet.js?key=88ad39bd-cea4-4627-ae30-a0a5f1775737"></script>
    <script>
      (function () {
        zE(function () {
          zE('messenger', 'hide');
        });
      })();
    </script>

    <!-- Start of HubSpot Embed Code -->
    <script type="text/javascript" id="hs-script-loader" async="" defer="" src="//js-eu1.hs-scripts.com/25740742.js"></script>
    <!-- End of HubSpot Embed Code -->

    <!-- Start of Trello Power Up Embed Code -->
    <script src="https://p.trellocdn.com/power-up.min.js"></script>
    <script>
      // CRITICAL: Initialize Trello Power-Up synchronously immediately after script loads
      // This MUST happen before Angular bootstraps to prevent timeout errors
      // Trello waits 30 seconds for initialization - if Angular takes longer, it times out
      // The script tag above is synchronous, so TrelloPowerUp should be available immediately
      (function () {
        if (typeof TrelloPowerUp === 'undefined') {
          console.error('TrelloPowerUp script failed to load!');
          return;
        }

        // Get the current origin to build the card dashboard URL
        var cardDashboardUrl = window.location.origin + '/external-app/trello?card=true';
        var ocIcon = window.location.origin + '/assets/themes/oc/images/oc_logo150x150.svg';

        // Track initialization state to prevent double initialization
        var isInitialized = false;

        // Function to get card buttons - this is called by Trello when rendering buttons
        function getCardButtons(t, options) {
          return [
            {
              icon: ocIcon,
              text: 'GoProof',
              callback: function (t) {
                try {
                  return t.modal({
                    title: 'GoProof',
                    url: cardDashboardUrl,
                    height: 600,
                  });
                } catch (error) {
                  console.error('Error opening Trello modal:', error);
                  return Promise.reject(error);
                }
              },
            },
          ];
        }

        // Initialize immediately - don't wait for icon to load
        // Trello will handle icon loading, and the card-buttons function is called each time buttons are rendered
        try {
          if (!isInitialized) {
            TrelloPowerUp.initialize({
              'card-buttons': getCardButtons,
            });
            isInitialized = true;
          }
        } catch (e) {
          console.error('Error initializing Trello Power-Up:', e);
          // If initialization fails, try once more after a tiny delay
          setTimeout(function () {
            try {
              if (!isInitialized) {
                TrelloPowerUp.initialize({
                  'card-buttons': getCardButtons,
                });
                isInitialized = true;
              }
            } catch (retryError) {
              console.error('Failed to initialize Trello Power-Up on retry:', retryError);
            }
          }, 50);
        }
      })();
    </script>
    <!-- End of Trello Power Up Embed Code -->
  <link rel="modulepreload" href="chunk-AVUGPQO5.js"><link rel="modulepreload" href="chunk-KEN5T32E.js"><link rel="modulepreload" href="chunk-NAPFTI7D.js"><link rel="modulepreload" href="chunk-CW6JPZGK.js"><link rel="modulepreload" href="chunk-6G66X2FK.js"><link rel="modulepreload" href="chunk-NPN55WPX.js"><link rel="modulepreload" href="chunk-KR3OU7AN.js"><link rel="modulepreload" href="chunk-AEPVUJOY.js"><link rel="modulepreload" href="chunk-DBBVPNRZ.js"><link rel="modulepreload" href="chunk-EPMCJORX.js"><script src="polyfills-BKGMU34W.js" type="module"></script><script src="scripts-62CV5PGW.js" defer></script><script src="main-SDBMY3GF.js" type="module"></script></body>
</html>
