# Mobile & touch

The audience joins from a phone (scan QR → vote / ask / react), so the **viewer is a first-class mobile surface**. The challenge: interactive controls live inside the fixed, scaled canvas, where on a portrait phone they'd shrink to ~30%. liebstoeckel solves this without breaking the fixed-canvas guarantee.

## Tap-to-interact breakout

On a touch device with a shrunk stage, a `<Plugin>` doesn't try to make tiny controls tappable. Instead it:
**Glows**
The whole plugin region gets a pulsing brand-accent outline and a "tap to interact" pill (a large, easy target).

**Breaks out**
Tapping opens the same plugin **full-size in a bottom sheet** rendered *outside* the scaled canvas: real tap targets, bound to the same live state.

This is built into the engine's `<Plugin>` component, so **every** plugin (poll, Q&A, reactions, and your own) inherits it. It engages only when the pointer is coarse **and** the stage is scaled down **and** a live server is connected.
**Opting out:** Display-only plugins (no input) should set `client.interactive = false` so they don't show a misleading "tap to interact" affordance. See [Building a plugin](https://docs.liebstoeckel.app/plugins/building-a-plugin/).

## Touch navigation

For whoever drives the deck (a standalone viewer or the presenter; a live audience viewer just follows), the engine binds **horizontal swipe** and **edge tap-zones** to advance/retreat, reusing the same step-then-slide logic as the keyboard. Gestures that start on interactive content (buttons, links, the plugin region) are ignored so they never fight the UI.

## Portrait hint

On a portrait phone the 16:9 slide is letterboxed. A dismissable "rotate for a bigger view" hint nudges the viewer; it's rendered at device scale (outside the canvas) and auto-hides.

## Presenter view on a phone

On a phone the presenter view is a **notes-first confidence monitor** you can run a whole talk from. Open it from the deck's **⋮ menu → "Presenter view"** (the touch counterpart to the desktop <kbd>p</kbd> pop-out; shown only to drivers, never to a live viewer). It's handy after scanning the "drive from your phone" presenter QR.

The layout puts your **notes front and centre** (large and scrollable: the teleprompter), with a slim status bar (position + timer), a compact next-slide + reveal-state peek, and big **Prev / Next** buttons in the thumb zone. Swipe horizontally to change slides; scrolling the notes never advances them (the gestures are resolved by axis). The screen is kept awake via the Wake Lock API while it's open, and **"‹ slides"** returns to the deck.
**Threat model unchanged:** Mobile support is UX/layout only: no change to sync or security. A live viewer still only reads the deck index and writes its own plugin state.