import "gnexus-ui-kit/dist/css/kit.css";
import "gnexus-ui-kit/dist/assets/fonts/phosphor-icons/src/css/icons.css";
import { createApp } from "vue";
import { GnexusUiVue } from "gnexus-ui-kit/vue";
import App from "./App.vue";
import "./styles.css";
createApp(App).use(GnexusUiVue).mount("#app");
// PWA service worker (public/sw.js). localhost/127.0.0.1 are secure contexts,
// so local runs register too; plain-http LAN origins stay unregistered — same
// condition the biometric gate uses. Updates are silent: sw.js uses
// stale-while-revalidate, so no reload prompt is needed.
if ("serviceWorker" in navigator && window.isSecureContext) {
window.addEventListener("load", () => {
navigator.serviceWorker
.register("/sw.js", { scope: "/" })
.then((registration) => {
// No update tick right after register(): Chrome already update-checks
// on every navigation, and racing install/claim with one more check
// once left an offline reload unintercepted. Background ticks below
// cover assets changed server-side while the app stays open.
const updateTick = () => registration.update().catch(() => {});
document.addEventListener("visibilitychange", () => {
if (!document.hidden) updateTick();
});
window.addEventListener("online", updateTick);
setInterval(updateTick, 15 * 60 * 1000);
})
.catch(() => {
// unreachable SW (old bundle, restrictive proxy) — app still works
});
});
}