<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <!-- Prevent white flash: apply theme before anything renders -->
    <script src="/theme-init.js"></script>
    <!-- Standard favicons -->
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
    <link rel="icon" type="image/png" sizes="192x192" href="/touch-icon-192-192.png" />
    <link rel="icon" type="image/png" sizes="512x512" href="/icon512_rounded.png" />
    <link rel="shortcut icon" href="/favicon.ico" />
    
    <!-- Apple Touch Icons - Safari prefers 180x180px to avoid square background -->
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
    <link rel="apple-touch-icon" sizes="512x512" href="/apple-touch-icon-512.png" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />
    <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300..700;1,300..700&display=swap" rel="stylesheet">
    <meta name="theme-color" content="#ffffff" />
    <title>SELF - Simple. Private. Yours.</title>
    <meta name="description" content="Privacy technology, completely reimagined. Zero-knowledge encrypted AI, messaging, and wallet. Your data is encrypted on your device before it ever leaves." />
    <meta property="og:title" content="SELF - Simple. Private. Yours." />
    <meta property="og:description" content="Giving you back control of your digital identity" />
    <meta property="og:type" content="website" />
    <meta property="og:url" content="https://self.app" />
    <meta property="og:image" content="https://self.app/og-image.jpg" />
    <meta property="og:image:width" content="1200" />
    <meta property="og:image:height" content="630" />
    <meta property="og:image:alt" content="SELF - Simple. Private. Yours." />
    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:title" content="SELF - Simple. Private. Yours." />
    <meta name="twitter:description" content="Giving you back control of your digital identity" />
    <meta name="twitter:image" content="https://self.app/og-image.jpg" />
    <meta name="base:app_id" content="69b3e5037cfd5794dffffef9" />
    <link rel="manifest" href="/manifest.json" />
    <script type="module" crossorigin src="/assets/index-BQ4_DmaZ.js"></script>
    <link rel="modulepreload" crossorigin href="/assets/docx-Dnf68xjx.js">
    <link rel="modulepreload" crossorigin href="/assets/react-vendor-C4HHw36n.js">
    <link rel="modulepreload" crossorigin href="/assets/pdf-renderer-Dl3k0WJm.js">
    <link rel="modulepreload" crossorigin href="/assets/state-vendor-Dk65rYF0.js">
    <link rel="modulepreload" crossorigin href="/assets/pdf-export-CFoa6eOE.js">
    <link rel="modulepreload" crossorigin href="/assets/lexical-editor-Db8d8DzH.js">
    <link rel="stylesheet" crossorigin href="/assets/index-BhT-XEzg.css">
  <link rel="manifest" href="/manifest.json"></head>
  <body>
    <div id="root"></div>
    <script>
      (function () {
        var key = 'self:chunk-reload';
        function isStale(msg) {
          msg = (msg || '').toLowerCase();
          return (
            msg.indexOf('text/html') >= 0 ||
            msg.indexOf('mime type') >= 0 ||
            msg.indexOf('dynamically imported') >= 0 ||
            msg.indexOf('importing a module') >= 0 ||
            msg.indexOf('module script') >= 0
          );
        }
        function reloadAfterPurge() {
          try {
            var last = sessionStorage.getItem(key);
            if (last && Date.now() - parseInt(last, 10) < 30000) return;
            sessionStorage.setItem(key, String(Date.now()));
          } catch (e) {}
          function go() {
            try {
              var u = new URL(location.href);
              u.searchParams.set('_appcb', String(Date.now()));
              location.replace(u.toString());
            } catch (e) {
              location.reload();
            }
          }
          if ('caches' in window) {
            caches.keys().then(function (ks) {
              return Promise.all(ks.map(function (k) { return caches.delete(k); }));
            }).then(go).catch(go);
          } else {
            go();
          }
        }
        window.addEventListener('error', function (e) {
          if (isStale(e.message || '')) reloadAfterPurge();
        }, true);
        window.addEventListener('unhandledrejection', function (e) {
          var m = e.reason && e.reason.message ? e.reason.message : String(e.reason || '');
          if (isStale(m)) reloadAfterPurge();
        });
      })();
    </script>
  </body>
</html>
