Module specialization of 00-shared/08. Covers every input modality for the 8 screens.
Motion tokens M = 00-shared/08 §4-5; haptics §3.
| Gesture | Behaviour | Where |
| Tap | Primary action, ripple m-fast (150 ms) | Rows, chips, switches, CTAs everywhere |
| Long-press | Context menu (AppMenu) | Tenant row (S7), member row (S6), flag row (S5, delete) |
| Double-tap | Nothing module-specific (no media) | — |
| Swipe left/right | None — destructive actions are menu+confirm only (delete is typed-confirm) | S7/S8 |
| Pull down | Refresh (bypasses cache) | S1, S4 (tab content), S5, S6, S7 |
| Pinch | None | — |
| Hardware back / gesture | Pop to previous; from S2/S3/S4 with unsaved changes → unsaved-guard dialog; root tab → shell | S2/S3/S4 |
| Edge swipe | Drawer | Shell |
| Tap outside sheet | Dismiss timezone/currency pickers (returns value if selected) | S2 |
| Input | Behaviour |
| Hover | m-fast tint + tooltip ≥500 ms on all icon buttons (Edit, Branding, Info, row menus) |
| Right-click | Context menu = long-press menu (S7/S6/S5 rows) |
| Wheel | Scroll lists; Ctrl+wheel zoom on logo preview (S3) |
| ESC | Closes menu/sheet/dialog/typed-confirm; cancels search (S7 clears q) |
| Tab/Shift+Tab | Logical focus: toolbar → search → filter chips → list → pagination; visible primary ring 2dp (A §6) |
| Enter | Submit focused form (S2/S4/F1); in dialog: confirms |
| Ctrl/Cmd+Enter | Submit settings "Save all" from text areas |
N | New tenant (S7) — 00-shared/05 §7 |
| Ctrl+K | Global search (shell) |
| Arrows | Navigate menus, dropdowns, day chips (S4) |
| Space | Toggle focused switch/chip |
| Event | Haptic |
| Save success (S2/S3/S4/F1) | lightImpact |
| Save/toggle error + rollback | mediumImpact |
| Long-press menu open | selectionClick |
| Pull-to-refresh completion | lightImpact |
| Typed-confirm (delete) submit | heavyImpact |
| Toggle flip success | lightImpact (single, not per toggle burst) |
Off when system haptics disabled; none on web/desktop (M §3).
| Transition | Token | Detail |
| Screen enter/exit | m-base 250 ms | slide-forward; forms slide-reverse on back |
| Skeleton→content | m-slow 400 ms cross-fade | no pop |
| Hero: list row → tenant detail | m-slow | logo avatar flight (S7→S8) |
| Tab switch | m-base | indicator slide |
| Toggle switch | m-fast | standard M3 switch; row dim + spinner swap via AnimatedSwitcher |
| Dirty dot appear | m-fast scale-pop | S4 tabs |
| Section expand (flags by module) | m-base | AnimatedSize, chevron rotate |
| Color preview change | m-fast | AnimatedContainer on swatch/preview panel |
| Dialog/sheet | m-base | scale+fade in, slide-down dismiss |
| Snackbar | m-base | slide-up, queue single (00-shared/03 §A) |
| Infinite-scroll loader | m-instant fade | S7 |
| Stagger | m-entrance 300 ms, 40 ms stagger | S2/S8 form sections (first view only) |
Reduced motion: all of the above collapse to fades ≤ m-instant; no stagger, no shimmer, no hero flight, no parallax (A §8, M §4).
| Interaction | Detail |
| Row press | Ink ripple + 2% surface darken within 100 ms (M §6) |
| Status badge change | scale-pop + icon morph (AnimatedSwitcher) |
| SlugPreview | mono text updates per keystroke (debounce 150 ms) with "use this" appearing |
| Save success | brief check icon in CTA (400 ms) → snackbar |
| Typed-confirm | destructive button disabled until typed text equals org name; heavyImpact on enable |
- Every interactive element responds ≤100 ms; all network actions show pending state.
- Anti-double-submit on every CTA and every flag toggle.
- 429 → countdown text, no auto-retry (07_API_Conventions.md §4).
- No full-screen flashes; ripple only (M §6).