diff --git a/services/frontend/src/app/globals.css b/services/frontend/src/app/globals.css
index 50bc960..f4f7bc6 100644
--- a/services/frontend/src/app/globals.css
+++ b/services/frontend/src/app/globals.css
@@ -262,6 +262,7 @@
@media (prefers-reduced-motion: reduce) {
.scan-line::after,
+ .scan-line,
.animate-eq,
.animate-spin-disc,
.animate-pulse-ring,
@@ -269,5 +270,16 @@
.animate-breathe {
animation: none !important;
}
+ .scan-line {
+ background: none !important;
+ }
+ *,
+ *::before,
+ *::after {
+ animation-duration: 0.001ms !important;
+ animation-iteration-count: 1 !important;
+ transition-duration: 0.001ms !important;
+ scroll-behavior: auto !important;
+ }
html { scroll-behavior: auto; }
}
diff --git a/services/frontend/src/app/layout.tsx b/services/frontend/src/app/layout.tsx
index 9b582d8..b209417 100644
--- a/services/frontend/src/app/layout.tsx
+++ b/services/frontend/src/app/layout.tsx
@@ -1,4 +1,4 @@
-import type { Metadata } from "next";
+import type { Metadata, Viewport } from "next";
import { Bricolage_Grotesque, Inter, JetBrains_Mono } from "next/font/google";
import { ThemeProvider } from "next-themes";
import { Toaster } from "@/components/primitives/toast";
@@ -28,6 +28,13 @@ export const metadata: Metadata = {
"AI-powered Discord moderation, voice monitoring, and media control console",
};
+export const viewport: Viewport = {
+ themeColor: "#0a0a0c",
+ width: "device-width",
+ initialScale: 1,
+ viewportFit: "cover",
+};
+
export default function RootLayout({
children,
}: Readonly<{
diff --git a/services/frontend/src/components/primitives/toast.tsx b/services/frontend/src/components/primitives/toast.tsx
index 4c94698..4971fcf 100644
--- a/services/frontend/src/components/primitives/toast.tsx
+++ b/services/frontend/src/components/primitives/toast.tsx
@@ -57,7 +57,7 @@ export function Toaster({ position = "bottom-right" }: { position?: string }) {
const pos =
position === "bottom-right"
- ? "bottom-4 right-4"
+ ? "bottom-[calc(1rem+env(safe-area-inset-bottom))] right-[calc(1rem+env(safe-area-inset-right))]"
: position === "top-right"
? "top-4 right-4"
: "bottom-4 left-1/2 -translate-x-1/2";
diff --git a/services/frontend/src/components/shell/ambient-app.tsx b/services/frontend/src/components/shell/ambient-app.tsx
index 841bc3b..9baf89b 100644
--- a/services/frontend/src/components/shell/ambient-app.tsx
+++ b/services/frontend/src/components/shell/ambient-app.tsx
@@ -12,7 +12,7 @@ export function AppFrame({ children }: { children: React.ReactNode }) {