<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Generated App</title>
    <script>
      (function () {
        var post = function (kind, payload) {
          try {
            window.parent.postMessage(
              Object.assign({ source: "builder-preview", kind: kind, at: Date.now() }, payload),
              "*"
            );
          } catch (e) {}
        };
        function safeStr(v) {
          if (v == null) return String(v);
          if (typeof v === "string") return v;
          try { return JSON.stringify(v); } catch (e) { return String(v); }
        }
        window.addEventListener("error", function (e) {
          post("runtime-error", {
            message: (e.error && e.error.message) || e.message || "Unknown error",
            stack: (e.error && e.error.stack) || null,
            filename: e.filename || null,
            lineno: e.lineno || null,
            colno: e.colno || null,
          });
        });
        window.addEventListener("unhandledrejection", function (e) {
          var r = e.reason;
          post("unhandled-rejection", {
            message: (r && r.message) || safeStr(r),
            stack: (r && r.stack) || null,
          });
        });
        var origErr = console.error.bind(console);
        console.error = function () {
          try {
            var args = Array.prototype.slice.call(arguments);
            var msg = args.map(safeStr).join(" ");
            post("console-error", { message: msg });
          } catch (e) {}
          origErr.apply(null, arguments);
        };
        post("ready", {});
      })();
    </script>
    <script type="module" crossorigin src="/assets/index-CrHQ0gzc.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-BSlyS9FO.css">
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>
