lific 2.4.0

Local-first, lightweight issue tracker. Single binary, SQLite-backed, MCP-native.
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <!-- viewport-fit=cover: required for env(safe-area-inset-*) to be
         non-zero on notched iPhones (LIF-279). -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
    <title>Lific</title>
    <link rel="icon" type="image/png" href="/favicon.png" />
    <!-- PWA: installable / add-to-homescreen on Android + iOS. -->
    <link rel="manifest" href="/manifest.webmanifest" />
    <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
    <meta name="apple-mobile-web-app-title" content="Lific" />
    <meta name="theme-color" content="#fafcfb" media="(prefers-color-scheme: light)" />
    <meta name="theme-color" content="#1c221f" media="(prefers-color-scheme: dark)" />
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
      href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=DM+Sans:ital,opsz,wght@0,9..40,300..700;1,9..40,300..700&display=swap"
      rel="stylesheet"
    />
    <!-- Prevent flash of wrong appearance: apply theme/accent/density/
         font-scale/motion before anything renders. Mirrors the logic in
         src/lib/theme.ts — keep the two in sync (LIF-238). -->
    <script>
      (function () {
        var html = document.documentElement;

        var themePref = localStorage.getItem("lific_theme");
        var dark =
          themePref === "dark" ||
          (!themePref && window.matchMedia("(prefers-color-scheme: dark)").matches);
        if (dark) html.classList.add("dark");

        var accent = localStorage.getItem("lific_accent");
        html.setAttribute(
          "data-accent",
          ["teal", "rose", "amber", "green", "violet"].indexOf(accent) !== -1
            ? accent
            : "indigo",
        );

        if (localStorage.getItem("lific_density") === "compact") {
          html.classList.add("density-compact");
        }

        var fontScale = localStorage.getItem("lific_font_scale");
        html.setAttribute(
          "data-font-scale",
          fontScale === "sm" || fontScale === "lg" ? fontScale : "md",
        );

        var motionPref = localStorage.getItem("lific_motion");
        var reducedMotion =
          motionPref === "reduced" ||
          (motionPref !== "full" &&
            window.matchMedia("(prefers-reduced-motion: reduce)").matches);
        html.setAttribute("data-motion", reducedMotion ? "reduced" : "full");
      })();
    </script>
    <script type="module" crossorigin src="/assets/index-zEFIxdQR.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-CgkhTY1F.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>