1---2name: touch-gesture-and-haptics3description: Use when a mobile screen needs touch-target sizing, thumb reach, tap/press/swipe/drag/pinch rules, gesture alternatives, discoverability, conflict resolution, or truthful iOS/Android haptics. Do not use for navigation architecture or motion choreography; pair with platform and motion skills.4---56# Touch, Gesture, and Haptics7Acknowledgement: Shared by Peter Bamuhigire, techguypeter.com, +256 784 464178.89<!-- dual-compat-start -->10## Use When1112- Sizing and spacing **hit/touch targets** for a phone, tablet, or foldable, or auditing why13 controls feel "fiddly" or mis-fire.14- Designing **thumb-zone ergonomics** — placing primary actions where a one-handed thumb actually15 reaches, and demoting destructive actions out of the easy-reach arc.16- Specifying a **gesture vocabulary** for a screen (tap, double-tap, long-press, swipe, drag,17 pinch, edge-swipe) and the **single-pointer fallback** every path/drag gesture legally needs.18- Mapping **haptic feedback** to real events with correct semantics on iOS (impact / notification /19 selection) and Android (view-level `HapticFeedbackConstants` / predictive-back progress).20- Resolving **gesture conflicts** (a swipe row inside a swipe carousel inside a back-swipe edge) and21 making non-obvious gestures **discoverable** rather than hidden.2223## Do Not Use When2425- You need the broad native screen pattern (navigation container, components, state matrix) — start26 at `ios-ui-ux-design` or `android-ui-ux-design`; come here for the touch/gesture/haptic detail.27- The parity decision (which gestures unify vs diverge across iOS/Android) is the question — use28 `cross-platform-design-parity`; return here to specify each side's gesture + haptic.29- The work is animation choreography of the transition itself (timing curves, container transform) —30 use `08-motion-and-interaction`; this skill owns the *input* gesture and its *haptic*, not the31 visual transition physics.32- It is backend/API work with no touch surface.3334## Required Inputs3536| Input | Source | Evidence |37|---|---|---|38| Screen, actions, frequency, consequence, and one-handed task | Product/design | Interactive-element inventory and priority/destructive classification |39| Platform/device/input contexts | Support policy and platform teams | iOS/Android, phones/tablets/foldables, assistive input needs |40| Existing gestures, system reservations, and haptic support | Current build/platform contract | Gesture recognisers, conflicts, APIs, and disabled/reduced settings |4142- The screen(s) and the primary one-handed task; target device classes and the largest reachable43 canvas (big-phone one-handed reach is the worst case).44- Which actions are **primary / frequent**, which are **destructive / rare** (drives thumb-zone45 placement), and which gestures (if any) are **the only way** to do something (drives the46 WCAG 2.5.1 / 2.5.7 fallback audit).47- Platform: iOS, Android, or both (haptic API and system-gesture reservations differ).48- Whether haptics are core to the experience or decorative (they must never be load-bearing).4950## Workflow51521. **Inventory every interactive element and its gesture.** One row per element: what it is, the53 gesture(s) that operate it, and whether that gesture is the *only* path to the action.542. **Size and space the targets.** Floor is **WCAG 2.5.8: 24×24 CSS px**; the touch platform floor is55 higher and is what you actually ship — **iOS 44×44 pt**, **Android 48×48 dp** — with ≥ 8 px/dp56 between adjacent targets. Small visual glyphs get an expanded *hit area* (extend the touch region,57 not the pixels). See `references/gesture-and-haptics.md` §1 and `doctrine/references/wcag-2.2-criteria.md`.583. **Place by thumb zone.** Map the screen to the reach arc (natural / stretch / hard) for a59 one-handed grip. Primary actions land in the natural arc (bottom-center to bottom-side); destructive60 or rare actions go to the hard zone or require deliberate confirmation. See §2.614. **Define the gesture vocabulary and resolve conflicts.** Pick from the standard vocabulary62 (tap, long-press, swipe, drag, pinch, edge-swipe), and check each against the **system-reserved**63 gestures you must not fight (iOS edge-back / Control Center / Dynamic Island; Android predictive64 back / edge-to-edge / quick-settings). Nest gestures only with a clear arbitration rule. See §3, §5.655. **Apply the WCAG gesture-alternative rules (mandatory).** For **2.5.1 Pointer Gestures**, every66 multipoint (pinch/rotate) or path-based (swipe-to-delete, slider drag, draw) gesture has a67 **single-pointer** equivalent (a button, a tap-target, a menu item). For **2.5.7 Dragging Movements**,68 every drag (reorder, slide-to-confirm, drag-to-dismiss) has a **non-drag** alternative (tap targets,69 up/down buttons, a menu). Write the fallback in the same row as the gesture — never leave it implicit.70 See `references/gesture-and-haptics.md` §4 (the rule table).716. **Map haptics to discrete, truthful events.** One haptic per real event, semantically correct:72 iOS `.selection` on value change, `.impact` on engagement, `.notification(.success/.warning/.error)`73 on outcomes (never `.success` on a failure); Android `CONFIRM` / `REJECT` / `LONG_PRESS` /74 `GESTURE_*` and predictive-back progress. The UI must be **fully usable with haptics off**, and75 haptics never substitute for a visible/audible confirmation. See §6.767. **Make non-obvious gestures discoverable.** Any gesture that is not the platform-standard tap needs77 an affordance: a visible handle, a peek/overshoot hint, a first-run coachmark, OR a redundant78 visible control (which doubles as the WCAG fallback). A hidden-only gesture is a defect. See §7.798. **Run the gesture + haptics gate** (`references/gesture-and-haptics.md` §8) before sign-off.8081## Decision Rules8283| Condition | Choice | Wrong-choice failure |84|---|---|---|85| Gesture is path-based, multipoint, or dragging | Provide visible single-pointer/non-drag alternative | Gesture-only action fails accessibility and discoverability |86| Gesture collides with system back/edge reservation | Relocate or change gesture; preserve system behaviour | Arbitration becomes unreliable and users lose navigation |87| Haptic reports an outcome | Map truthful success/warning/error semantics plus visible cue | Lying or load-bearing haptics miscommunicate state |88| Small visual control is required | Expand hit region without inflating glyph | Tiny target causes misses; oversized icon harms hierarchy |8990## Capability Contract9192- Must inspect the interactive build/prototype and test representative touch/accessibility paths; review is read-only unless remediation is requested.93- May edit in-scope gesture/haptic UI. Do not override system-reserved gestures, collect sensor data, or release without device evidence and authority.9495## Degraded Mode9697- If actions, consequences, platform, or gesture ownership are unknown, stop final mapping and request the missing contract.98- Without device/haptic access, provide a gesture map marked tactile behaviour unverified. Recover conflict or inaccessible gestures by enabling the visible alternative, removing the collision, and retesting with haptics disabled.99100## Quality Standards101102- Every action has an adequate target, discoverable operation, system-conflict result, accessible alternative where required, and truthful non-load-bearing feedback.103- Evidence records devices, input methods, target measurements, gesture conflicts, alternatives, haptic-off operation, and failures corrected.104105## Anti-Patterns106107- **Sub-floor or crowded targets** — 32-px icons jammed edge-to-edge, or a real tap target smaller108 than 44 pt / 48 dp because the *glyph* is small (extend the hit area instead).109- **Primary action in the dead zone** — the main CTA top-left where a one-handed thumb cannot reach,110 while a destructive action sits under the resting thumb.111- **Gesture-only actions with no visible alternative** — swipe-to-delete, pinch-to-zoom, or112 drag-to-reorder as the *only* path. This fails WCAG 2.5.1 / 2.5.7 and is the #1 violation here.113- **Fighting system gestures** — putting a custom swipe on the screen edge that collides with iOS114 back-swipe / Android predictive back, or a pull-down that fights Control Center / quick settings.115- **Haptic spam / lying haptics** — buzzing every scroll tick, firing `.success` on an error, or116 using a haptic as the *only* signal that something happened.117- **Hidden gestures** — a long-press menu or swipe action with zero affordance, discoverable only by118 accident, and no fallback control.119- **Pixel-cloning gestures across platforms** — porting iOS swipe-back to Android instead of using120 predictive back, or vice-versa (route that decision through `cross-platform-design-parity`).121122## Outputs123124| Output | Consumer | Evidence and acceptance |125|---|---|---|126| Touch/gesture/haptic map | Mobile design and engineering | Element, target, reach zone, gesture, alternative, conflict, haptic, and affordance are explicit |127| Interaction gate | Accessibility and platform QA | Representative devices verify targets, alternatives, system gestures, and haptic-off usability |128129- A **touch & gesture map** for the screen: a per-element table (element · gesture · target size ·130 thumb zone · single-pointer / non-drag alternative · haptic · discoverability affordance), the131 thumb-zone diagram, the system-gesture conflict notes, and the WCAG 2.5.1 / 2.5.7 / 2.5.8 sign-off.132133## Examples134135- `examples/gesture-haptics-map-transactions-list.md` — a worked touch+gesture+haptics map for one136 real mobile screen (Maduuka transactions list + row actions): every gesture sized, thumb-zoned,137 given its single-pointer / non-drag WCAG alternative, and mapped to an iOS and Android haptic, with138 the discoverability affordances and the gate end to end.139140## References141142- `references/gesture-and-haptics.md` — the canonical rules: target sizing (WCAG 2.5.8 / platform143 floors), thumb-zone ergonomics, the gesture vocabulary, the **WCAG 2.5.1 / 2.5.7 gesture-alternative144 rule table** (the legal core of this skill), the iOS + Android haptic semantics map, gesture145 discoverability, conflict/system-gesture reservation table, and the sign-off gate.146- `doctrine/references/wcag-2.2-criteria.md` — the accessibility floor: **2.5.1** pointer gestures,147 **2.5.7** dragging movements, **2.5.8** target size (24×24 CSS px minimum; aim 44 pt / 48 dp on148 touch), plus reduced-motion and name/role/value rules these targets must clear.149- `doctrine/design-doctrine.md` — the always-load anti-slop charter; §0 (looking authored) is why a150 deliberate, discoverable, native gesture set beats a copied generic one.151- `doctrine/references/ai-slop-banned-fonts.md` for any on-screen label type, and the SF Pro / Roboto152 system-font caveat (allowed as platform UI text only).153- Pair with `ios-ui-ux-design` and `android-ui-ux-design` (same group) for the full native screen, and154 `cross-platform-design-parity` to decide which gestures unify vs diverge before specifying each side.155<!-- dual-compat-end -->