Compare commits

..

2 Commits

Author SHA1 Message Date
Andrej Spielmann 6edff1613c feat(pwa): add mobile optimizations (safe areas, touch targets, standalone mode) 2026-03-26 14:57:49 +01:00
Andrej Spielmann 80897a7a6e feat(pwa): add viewport and PWA meta tags 2026-03-26 14:54:09 +01:00
2 changed files with 52 additions and 2 deletions
+27 -1
View File
@@ -145,4 +145,30 @@
::-webkit-scrollbar-thumb:hover {
background: oklch(0.5 0 0 / 35%);
}
}
}
/* Mobile/PWA Optimizations */
html { -webkit-tap-highlight-color: transparent; touch-action: manipulation; }
/* iOS Safe Areas */
body { padding-top: env(safe-area-inset-top); padding-bottom: env(safe-area-inset-bottom); padding-left: env(safe-area-inset-left); padding-right: env(safe-area-inset-right); }
/* Prevent zoom on input focus */
input, select, textarea { font-size: 16px; }
/* Hide scrollbar on mobile */
@media (max-width: 768px) {
::-webkit-scrollbar { display: none; }
body { scrollbar-width: none; }
}
/* Minimum touch target 44x44px */
button, a, input, select, textarea, [role="button"] { min-height: 44px; min-width: 44px; }
/* Disable hover effects on touch devices */
@media (hover: none) { *:hover { transform: none !important; } }
/* PWA standalone mode styles */
@media (display-mode: standalone) {
html { height: 100vh; height: 100dvh; }
body { overflow: hidden; position: fixed; width: 100%; height: 100%; }
}
+25 -1
View File
@@ -1,4 +1,4 @@
import type { Metadata } from "next"
import type { Metadata, Viewport } from "next"
import { Syne, DM_Sans } from "next/font/google"
import "./globals.css"
import { Providers } from "./providers"
@@ -15,9 +15,33 @@ const dmSans = DM_Sans({
weight: ["400", "500", "600", "700"],
})
export const viewport: Viewport = {
width: "device-width",
initialScale: 1,
maximumScale: 1,
userScalable: false,
themeColor: "#1B1A55",
viewportFit: "cover",
}
export const metadata: Metadata = {
title: "WrestleDesk",
description: "Wrestling Club Management System",
manifest: "/manifest.json",
appleWebApp: {
capable: true,
statusBarStyle: "black-translucent",
title: "WrestleDesk",
},
icons: {
icon: [
{ url: "/icon-192.png", sizes: "192x192", type: "image/png" },
{ url: "/icon-512.png", sizes: "512x512", type: "image/png" },
],
apple: [
{ url: "/icon-192.png", sizes: "192x192", type: "image/png" },
],
},
}
export default function RootLayout({