diff --git a/web/src/index.css b/web/src/index.css
index 1bb24a0..3b329f8 100644
--- a/web/src/index.css
+++ b/web/src/index.css
@@ -14,6 +14,10 @@
:root {
color-scheme: dark;
+ --safe-area-top: env(safe-area-inset-top, 0px);
+ --safe-area-right: env(safe-area-inset-right, 0px);
+ --safe-area-bottom: env(safe-area-inset-bottom, 0px);
+ --safe-area-left: env(safe-area-inset-left, 0px);
--background: 235 45% 4%;
--foreground: 258 36% 96%;
--muted: 246 30% 13%;
@@ -40,6 +44,15 @@ html,
body,
#app {
height: 100%;
+ width: 100%;
+}
+
+@supports (height: 100dvh) {
+ html,
+ body,
+ #app {
+ height: 100dvh;
+ }
}
body {
@@ -49,6 +62,8 @@ body {
linear-gradient(90deg, hsl(187 92% 49% / 0.08), transparent 24%, hsl(264 92% 59% / 0.12) 74%, transparent),
linear-gradient(180deg, hsl(250 60% 16% / 0.68), hsl(235 45% 4%) 48%, hsl(235 54% 3%));
font-family: "Inter", "Avenir Next", "Segoe UI", sans-serif;
+ overflow: hidden;
+ overscroll-behavior: none;
}
button,
@@ -78,6 +93,44 @@ textarea {
background-size: 48px 48px;
}
+.app-safe-frame {
+ padding: var(--safe-area-top) var(--safe-area-right) var(--safe-area-bottom) var(--safe-area-left);
+}
+
+.app-safe-pad {
+ padding:
+ max(1rem, var(--safe-area-top))
+ max(1rem, var(--safe-area-right))
+ max(1rem, var(--safe-area-bottom))
+ max(1rem, var(--safe-area-left));
+}
+
+.app-search-safe-pad {
+ padding:
+ max(1.5rem, var(--safe-area-top))
+ max(0.75rem, var(--safe-area-right))
+ max(1.5rem, var(--safe-area-bottom))
+ max(0.75rem, var(--safe-area-left));
+}
+
+@media (min-width: 768px) {
+ .app-safe-frame {
+ padding:
+ max(0.5rem, var(--safe-area-top))
+ max(0.5rem, var(--safe-area-right))
+ max(0.5rem, var(--safe-area-bottom))
+ max(0.5rem, var(--safe-area-left));
+ }
+
+ .app-search-safe-pad {
+ padding:
+ max(1.5rem, var(--safe-area-top))
+ max(1.5rem, var(--safe-area-right))
+ max(1.5rem, var(--safe-area-bottom))
+ max(1.5rem, var(--safe-area-left));
+ }
+}
+
.glass-panel {
background:
linear-gradient(180deg, hsl(243 42% 12% / 0.88), hsl(236 48% 5% / 0.92)),
diff --git a/web/src/main.tsx b/web/src/main.tsx
index 2fe65ee..f32c597 100644
--- a/web/src/main.tsx
+++ b/web/src/main.tsx
@@ -1,5 +1,8 @@
import { render } from "preact";
import { RootRouter } from "@/root-router";
+import { registerServiceWorker } from "@/pwa";
import "./index.css";
+registerServiceWorker();
+
render(
, document.getElementById("app")!);
diff --git a/web/src/pages/search-route-page.tsx b/web/src/pages/search-route-page.tsx
index ac87519..6daa900 100644
--- a/web/src/pages/search-route-page.tsx
+++ b/web/src/pages/search-route-page.tsx
@@ -252,7 +252,7 @@ export default function SearchRoutePage() {
}
return (
-