<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, viewport-fit=cover"
    />
    <title>Phanpy</title>
    <meta
      name="description"
      content="Minimalistic opinionated Mastodon web client"
    />
    <meta name="color-scheme" content="dark light" />
    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
    <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
    <meta name="apple-mobile-web-app-title" content="Phanpy" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="mobile-web-app-capable" content="yes" />
    <link rel="canonical" href="https://phanpy.social" />
    <meta
      name="theme-color"
      content="#fff"
      media="(prefers-color-scheme: light)"
    />
    <meta
      name="theme-color"
      content="#242526"
      media="(prefers-color-scheme: dark)"
    />
    <script>
      var _rollbarConfig = {
        accessToken: 'ec3e07829d324a29abf6c83472a9740d',
        captureUncaught: true,
        captureUnhandledRejections: true,
        payload: {
          environment: 'production',
        },
      };
      // Rollbar Snippet
      !(function (r) {
        function e(n) {
          if (o[n]) return o[n].exports;
          var t = (o[n] = { exports: {}, id: n, loaded: !1 });
          return (
            r[n].call(t.exports, t, t.exports, e), (t.loaded = !0), t.exports
          );
        }
        var o = {};
        return (e.m = r), (e.c = o), (e.p = ''), e(0);
      })([
        function (r, e, o) {
          'use strict';
          var n = o(1),
            t = o(4);
          (_rollbarConfig = _rollbarConfig || {}),
            (_rollbarConfig.rollbarJsUrl =
              _rollbarConfig.rollbarJsUrl ||
              'https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.4.6/rollbar.min.js'),
            (_rollbarConfig.async =
              void 0 === _rollbarConfig.async || _rollbarConfig.async);
          var a = n.setupShim(window, _rollbarConfig),
            l = t(_rollbarConfig);
          (window.rollbar = n.Rollbar),
            a.loadFull(
              window,
              document,
              !_rollbarConfig.async,
              _rollbarConfig,
              l,
            );
        },
        function (r, e, o) {
          'use strict';
          function n(r) {
            return function () {
              try {
                return r.apply(this, arguments);
              } catch (r) {
                try {
                  console.error('[Rollbar]: Internal error', r);
                } catch (r) {}
              }
            };
          }
          function t(r, e) {
            (this.options = r), (this._rollbarOldOnError = null);
            var o = s++;
            (this.shimId = function () {
              return o;
            }),
              'undefined' != typeof window &&
                window._rollbarShims &&
                (window._rollbarShims[o] = { handler: e, messages: [] });
          }
          function a(r, e) {
            if (r) {
              var o = e.globalAlias || 'Rollbar';
              if ('object' == typeof r[o]) return r[o];
              (r._rollbarShims = {}), (r._rollbarWrappedError = null);
              var t = new p(e);
              return n(function () {
                e.captureUncaught &&
                  ((t._rollbarOldOnError = r.onerror),
                  i.captureUncaughtExceptions(r, t, !0),
                  i.wrapGlobals(r, t, !0)),
                  e.captureUnhandledRejections &&
                    i.captureUnhandledRejections(r, t, !0);
                var n = e.autoInstrument;
                return (
                  e.enabled !== !1 &&
                    (void 0 === n ||
                      n === !0 ||
                      ('object' == typeof n && n.network)) &&
                    r.addEventListener &&
                    (r.addEventListener('load', t.captureLoad.bind(t)),
                    r.addEventListener(
                      'DOMContentLoaded',
                      t.captureDomContentLoaded.bind(t),
                    )),
                  (r[o] = t),
                  t
                );
              })();
            }
          }
          function l(r) {
            return n(function () {
              var e = this,
                o = Array.prototype.slice.call(arguments, 0),
                n = { shim: e, method: r, args: o, ts: new Date() };
              window._rollbarShims[this.shimId()].messages.push(n);
            });
          }
          var i = o(2),
            s = 0,
            d = o(3),
            c = function (r, e) {
              return new t(r, e);
            },
            p = d.bind(null, c);
          (t.prototype.loadFull = function (r, e, o, t, a) {
            var l = function () {
                var e;
                if (void 0 === r._rollbarDidLoad) {
                  e = new Error('rollbar.js did not load');
                  for (var o, n, t, l, i = 0; (o = r._rollbarShims[i++]); )
                    for (o = o.messages || []; (n = o.shift()); )
                      for (t = n.args || [], i = 0; i < t.length; ++i)
                        if (((l = t[i]), 'function' == typeof l)) {
                          l(e);
                          break;
                        }
                }
                'function' == typeof a && a(e);
              },
              i = !1,
              s = e.createElement('script'),
              d = e.getElementsByTagName('script')[0],
              c = d.parentNode;
            (s.crossOrigin = ''),
              (s.src = t.rollbarJsUrl),
              o || (s.async = !0),
              (s.onload = s.onreadystatechange =
                n(function () {
                  if (
                    !(
                      i ||
                      (this.readyState &&
                        'loaded' !== this.readyState &&
                        'complete' !== this.readyState)
                    )
                  ) {
                    s.onload = s.onreadystatechange = null;
                    try {
                      c.removeChild(s);
                    } catch (r) {}
                    (i = !0), l();
                  }
                })),
              c.insertBefore(s, d);
          }),
            (t.prototype.wrap = function (r, e, o) {
              try {
                var n;
                if (
                  ((n =
                    'function' == typeof e
                      ? e
                      : function () {
                          return e || {};
                        }),
                  'function' != typeof r)
                )
                  return r;
                if (r._isWrap) return r;
                if (
                  !r._rollbar_wrapped &&
                  ((r._rollbar_wrapped = function () {
                    o && 'function' == typeof o && o.apply(this, arguments);
                    try {
                      return r.apply(this, arguments);
                    } catch (o) {
                      var e = o;
                      throw (
                        (e &&
                          ('string' == typeof e && (e = new String(e)),
                          (e._rollbarContext = n() || {}),
                          (e._rollbarContext._wrappedSource = r.toString()),
                          (window._rollbarWrappedError = e)),
                        e)
                      );
                    }
                  }),
                  (r._rollbar_wrapped._isWrap = !0),
                  r.hasOwnProperty)
                )
                  for (var t in r)
                    r.hasOwnProperty(t) && (r._rollbar_wrapped[t] = r[t]);
                return r._rollbar_wrapped;
              } catch (e) {
                return r;
              }
            });
          for (
            var u =
                'log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad'.split(
                  ',',
                ),
              f = 0;
            f < u.length;
            ++f
          )
            t.prototype[u[f]] = l(u[f]);
          r.exports = { setupShim: a, Rollbar: p };
        },
        function (r, e) {
          'use strict';
          function o(r, e, o) {
            if (r) {
              var t;
              'function' == typeof e._rollbarOldOnError
                ? (t = e._rollbarOldOnError)
                : r.onerror &&
                  !r.onerror.belongsToShim &&
                  ((t = r.onerror), (e._rollbarOldOnError = t));
              var a = function () {
                var o = Array.prototype.slice.call(arguments, 0);
                n(r, e, t, o);
              };
              (a.belongsToShim = o), (r.onerror = a);
            }
          }
          function n(r, e, o, n) {
            r._rollbarWrappedError &&
              (n[4] || (n[4] = r._rollbarWrappedError),
              n[5] || (n[5] = r._rollbarWrappedError._rollbarContext),
              (r._rollbarWrappedError = null)),
              e.handleUncaughtException.apply(e, n),
              o && o.apply(r, n);
          }
          function t(r, e, o) {
            if (r) {
              'function' == typeof r._rollbarURH &&
                r._rollbarURH.belongsToShim &&
                r.removeEventListener('unhandledrejection', r._rollbarURH);
              var n = function (r) {
                var o, n, t;
                try {
                  o = r.reason;
                } catch (r) {
                  o = void 0;
                }
                try {
                  n = r.promise;
                } catch (r) {
                  n = '[unhandledrejection] error getting `promise` from event';
                }
                try {
                  (t = r.detail), !o && t && ((o = t.reason), (n = t.promise));
                } catch (r) {
                  t = '[unhandledrejection] error getting `detail` from event';
                }
                o ||
                  (o =
                    '[unhandledrejection] error getting `reason` from event'),
                  e &&
                    e.handleUnhandledRejection &&
                    e.handleUnhandledRejection(o, n);
              };
              (n.belongsToShim = o),
                (r._rollbarURH = n),
                r.addEventListener('unhandledrejection', n);
            }
          }
          function a(r, e, o) {
            if (r) {
              var n,
                t,
                a =
                  'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(
                    ',',
                  );
              for (n = 0; n < a.length; ++n)
                (t = a[n]), r[t] && r[t].prototype && l(e, r[t].prototype, o);
            }
          }
          function l(r, e, o) {
            if (e.hasOwnProperty && e.hasOwnProperty('addEventListener')) {
              for (
                var n = e.addEventListener;
                n._rollbarOldAdd && n.belongsToShim;

              )
                n = n._rollbarOldAdd;
              var t = function (e, o, t) {
                n.call(this, e, r.wrap(o), t);
              };
              (t._rollbarOldAdd = n),
                (t.belongsToShim = o),
                (e.addEventListener = t);
              for (
                var a = e.removeEventListener;
                a._rollbarOldRemove && a.belongsToShim;

              )
                a = a._rollbarOldRemove;
              var l = function (r, e, o) {
                a.call(this, r, (e && e._rollbar_wrapped) || e, o);
              };
              (l._rollbarOldRemove = a),
                (l.belongsToShim = o),
                (e.removeEventListener = l);
            }
          }
          r.exports = {
            captureUncaughtExceptions: o,
            captureUnhandledRejections: t,
            wrapGlobals: a,
          };
        },
        function (r, e) {
          'use strict';
          function o(r, e) {
            (this.impl = r(e, this)), (this.options = e), n(o.prototype);
          }
          function n(r) {
            for (
              var e = function (r) {
                  return function () {
                    var e = Array.prototype.slice.call(arguments, 0);
                    if (this.impl[r]) return this.impl[r].apply(this.impl, e);
                  };
                },
                o =
                  'log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad'.split(
                    ',',
                  ),
                n = 0;
              n < o.length;
              n++
            )
              r[o[n]] = e(o[n]);
          }
          (o.prototype._swapAndProcessMessages = function (r, e) {
            this.impl = r(this.options);
            for (var o, n, t; (o = e.shift()); )
              (n = o.method),
                (t = o.args),
                this[n] &&
                  'function' == typeof this[n] &&
                  ('captureDomContentLoaded' === n || 'captureLoad' === n
                    ? this[n].apply(this, [t[0], o.ts])
                    : this[n].apply(this, t));
            return this;
          }),
            (r.exports = o);
        },
        function (r, e) {
          'use strict';
          r.exports = function (r) {
            return function (e) {
              if (!e && !window._rollbarInitialized) {
                r = r || {};
                for (
                  var o,
                    n,
                    t = r.globalAlias || 'Rollbar',
                    a = window.rollbar,
                    l = function (r) {
                      return new a(r);
                    },
                    i = 0;
                  (o = window._rollbarShims[i++]);

                )
                  n || (n = o.handler),
                    o.handler._swapAndProcessMessages(l, o.messages);
                (window[t] = n), (window._rollbarInitialized = !0);
              }
            };
          };
        },
      ]);
      // End Rollbar Snippet
    </script>
  </head>
  <body>
    <div id="app"></div>
    <div id="modal-container"></div>
    <script type="module" src="/src/main.jsx"></script>
    <svg
      xmlns="http://www.w3.org/2000/svg"
      style="position: absolute; width: 0; height: 0"
    >
      <filter id="spoiler" x="-20%" y="-20%" width="140%" height="140%">
        <feColorMatrix
          type="matrix"
          values="0.01 0 0 0 0
          0.01 0 0 0 0
          0.01 0 0 0 0
          0 0 0 .5 0"
          in="SourceGraphic"
          result="colormatrix"
        />
        <feTurbulence
          type="turbulence"
          baseFrequency=".5 .5"
          numOctaves="10"
          seed="1"
          result="turbulence"
        />
        <feDisplacementMap
          in="colormatrix"
          in2="turbulence"
          scale="20"
          xChannelSelector="R"
          yChannelSelector="B"
          result="displacementMap"
        />
      </filter>
      <filter id="spoiler-dark" x="-20%" y="-20%" width="140%" height="140%">
        <feColorMatrix
          type="matrix"
          values="1 0 0 .8 0
            1 0 0 .8 0
            1 0 0 .8 0
            0 0 0 .5 0"
          in="SourceGraphic"
          result="colormatrix"
        />
        <feTurbulence
          type="turbulence"
          baseFrequency=".5 .5"
          numOctaves="10"
          seed="1"
          result="turbulence"
        />
        <feDisplacementMap
          in="colormatrix"
          in2="turbulence"
          scale="20"
          xChannelSelector="R"
          yChannelSelector="B"
          result="displacementMap"
        />
      </filter>
    </svg>
  </body>
</html>