diff --git a/app/globals.css b/app/globals.css index 5157882..8bff66a 100644 --- a/app/globals.css +++ b/app/globals.css @@ -235,3 +235,45 @@ outline: 1px solid rgba(26, 115, 232, 0.4); outline-offset: -1px; } + +/* Mail shell: dynamic viewport height (tablet Safari chrome) + no document scroll */ +html, +body { + height: 100dvh; + max-height: 100dvh; + overflow: hidden; + overscroll-behavior: none; + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; +} + +/* Mail UI: text selection only in fields and message previews */ +.ultimail-app { + height: 100dvh; + max-height: 100dvh; + overflow: hidden; + overscroll-behavior: none; + touch-action: manipulation; + -webkit-user-select: none; + user-select: none; + -webkit-touch-callout: none; +} + +.ultimail-app input, +.ultimail-app textarea, +.ultimail-app select, +.ultimail-app [contenteditable="true"], +.ultimail-app [contenteditable=""], +.ultimail-app .tiptap, +.ultimail-app [data-selectable-text], +.ultimail-app [data-selectable-text] * { + -webkit-user-select: text; + user-select: text; + -webkit-touch-callout: default; +} + +.ultimail-app [data-sidebar] { + -webkit-user-select: none; + user-select: none; + -webkit-touch-callout: none; +} diff --git a/app/layout.tsx b/app/layout.tsx index bb064df..c250026 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from 'next' +import type { Metadata, Viewport } from 'next' import { Geist, Geist_Mono } from 'next/font/google' import { Analytics } from '@vercel/analytics/next' import './globals.css' @@ -12,14 +12,23 @@ export const metadata: Metadata = { generator: 'v0.app', } +/** Fit visible viewport on tablet/mobile; disable pinch/double-tap zoom on the shell. */ +export const viewport: Viewport = { + width: 'device-width', + initialScale: 1, + maximumScale: 1, + userScalable: false, + viewportFit: 'cover', +} + export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode }>) { return ( - -
+ + {children} {process.env.NODE_ENV === 'production' &&