---
name: ios-mobile-first
description: Single source of truth for iOS-native mobile web UX. Covers viewport units, safe areas, Dialog-to-Drawer conversion, Tabs-to-vertical-stacking, touch targets, input zoom prevention, and responsive patterns. Use when building any UI component, fixing mobile issues, reviewing responsive code, or when mobile UX is mentioned.
---
# iOS Mobile-First Design
> **Official guide:** `~/.arman/rules/nextjs-best-practices/nextjs-guide.md` — See the official guide for core architecture. The old §13 (Mobile-First) was removed; mobile-first patterns in this file will move to a dedicated *Mobile & Responsive UX* guide.
Single source of truth for mobile UX. Desktop stays unchanged; mobile gets iOS-native treatment.
**Reference implementations:** `components/layout/FeedbackButton.tsx`, `components/admin/McpToolsManager.tsx`, `components/admin/ToolUiComponentEditor.tsx`
---
## Golden Rules
1. **Always `dvh`** — never `vh` or `h-screen`
2. **Always `pb-safe`** — on fixed bottom elements
3. **Always 16px inputs** — prevents iOS zoom (`text-base` + `style={{ fontSize: '16px' }}`)
4. **Always 44pt touch targets** — minimum `h-10 w-10`
5. **Always `--header-height`** — never hardcode
6. **Always Drawer on mobile** — never Dialog
7. **Never tabs on mobile** — stack vertically
8. **Never nested scrolling** — single scroll area per view
9. **Always test iOS Safari** — on real device
---
## Viewport & Layout
### Dynamic Viewport Units
```tsx
// ✅ Adapts to mobile browser chrome
// ❌ Breaks when browser chrome hides/shows
```
### Safe Areas
```tsx
// ✅ Respects iPhone home indicator / notch