diff --git a/public/styles.css b/public/styles.css
index 9dc69cf..1e22569 100644
--- a/public/styles.css
+++ b/public/styles.css
@@ -2,6 +2,26 @@
overscroll-behavior: none;
}
+/* Keep app chrome non-selectable so iOS long-press doesn't open the
+ edit menu (AutoFill/Copy/Siri). Inputs and opted-in regions stay
+ selectable. */
+body {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+input,
+textarea,
+[contenteditable="true"],
+[contenteditable=""],
+[data-selectable],
+[data-selectable] * {
+ -webkit-touch-callout: default;
+ -webkit-user-select: text;
+ user-select: text;
+}
+
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
diff --git a/src/features/core/components/back-button.tsx b/src/features/core/components/back-button.tsx
index e578332..1513295 100644
--- a/src/features/core/components/back-button.tsx
+++ b/src/features/core/components/back-button.tsx
@@ -14,7 +14,7 @@ const BackButton = ({ top=20, left=20 }: { top?: number, left?: number }) => {
onClick={() => router.history.back()}
pos='absolute'
left={left}
- top={top}
+ top={`calc(${top}px + env(safe-area-inset-top, 0px))`}
>
diff --git a/src/features/core/components/header.tsx b/src/features/core/components/header.tsx
index 6aca616..5a62822 100644
--- a/src/features/core/components/header.tsx
+++ b/src/features/core/components/header.tsx
@@ -59,6 +59,7 @@ const Header = ({ collapsed, title, titleValues, withBackButton }: HeaderConfig)
style={{
alignItems: 'center',
justifyContent: 'center',
+ paddingTop: 'env(safe-area-inset-top, 0px)',
}}
>
{ withBackButton && }
diff --git a/src/features/core/components/layout.tsx b/src/features/core/components/layout.tsx
index d4946ad..ab18cfb 100644
--- a/src/features/core/components/layout.tsx
+++ b/src/features/core/components/layout.tsx
@@ -18,7 +18,12 @@ const Layout: React.FC = ({ children }) => {