# tryst-location-lock.screen Tryst monthly location-lock confirmation + change flow. Implements [surface-tryst.brief.md §7](./surface-tryst.brief.md). Reached from chat-home approval card ("Your Berlin lock expires in 3 days") or from tryst-profile-editor.screen.md → location field. Voice: working; plain on cost / conflict warnings. ## Layout (full-screen sheet) ``` ┌─────────────────────────────────────────────────┐ │ Cancel Tryst location lock Save │ 56pt ├─────────────────────────────────────────────────┤ │ │ │ ─── Current ─── │ │ Location: San Francisco │ │ Locked: 2026-05-01 → 2026-06-01 │ │ Expires in 14 days │ │ │ │ ─── Renew or change ─── │ │ ● Renew at SF for next month │ default if quiet │ ○ Move to a new city │ │ [ Berlin ▼ ] (changes are $X re-lock fee) │ │ ○ Tour-only month (no base city) │ advanced │ │ │ │ ─── Upcoming tours (next 30d) ─── │ │ • Berlin (Oct 3–7) — exception, already │ │ declared │ │ │ │ ─── Conflicts ─── │ only if applicable │ ⚠ Your Berlin tour overlaps your declared │ │ SF lock. Change base or shorten tour. │ │ │ └─────────────────────────────────────────────────┘ ``` ## Components | Component | Notes | |---|---| | Current card | Live state from Tryst — city + lock window + days-to-expire. | | Renew radio | Default = renew current city (low friction). Change-city option triggers re-lock fee warning. Tour-only option for nomadic months. | | Upcoming tours | Read-only list of declared tours (per [tour-leg-detail.screen.md](./tour-leg-detail.screen.md)); shows the tour exception. | | Conflicts | Only shown if declared tour overlaps proposed lock. | ## States 1. **Quiet renewal** (>14d until expire) — Renew radio selected; minimal copy. 2. **Expiring soon** (≤14d) — pulses amber; banner: "Lock expires in N days. Quinn, what's your call?" 3. **Expired** — high-stakes: red banner: "Your Tryst lock expired. Your listing has down-ranked. Renew now to recover." 4. **Move proposed** — re-lock fee warning shown; confirmation required. 5. **Tour-only month** — banner explaining: "Tour-only mode reduces base-city visibility. Your tours remain visible. Are you sure?" 6. **Conflict** (tour overlaps proposed base) — warning section visible; Save disabled until resolved. 7. **Saving** — banner: "Locking with Tryst..." 8. **Saved** — sheet dismisses; receipt: "Locked SF through 2026-07-01." 9. **Failed** (Tryst rejection or payment failure on re-lock fee) — banner with retry. 10. **VoiceOver** — current → renew options → tours → conflicts. ## Interactions - **Tap Renew radio** → straightforward continuation; no fee. - **Tap "Move to a new city"** → city picker (autocomplete from Tryst's city list); shows re-lock fee inline. - **Tap "Tour-only month"** → confirmation copy expands. - **Tap Save** → high-stakes confirmation per brief M §M3 if change-city or tour-only. - **Swipe-down with dirty** → "Discard?" ## Edge cases - **Re-lock fee unavailable** (Tryst hasn't sent pricing) — fall back to copy: "Re-lock fee depends on tier; confirm on Tryst." - **City not in Tryst's list** — Quinn types a city Tryst doesn't recognize — chip: "Tryst doesn't have this city. Try a nearby one?" - **Lock declined mid-flight by Tryst** (payment failed, account flag, etc.) — banner with reason + remediation. - **Conflict with declared K4 jurisdiction** (Quinn declared SF banned in K4) — soft warning: "Your jurisdiction rules flag SF. Override?" - **Tour declared partly overlaps proposed lock** — UX prompts: "Trim your tour by 2 days, OR move the lock start by 2 days?" ## *Generalization callout* Location lock is mostly **Tryst-specific** (and possibly Slixa-TLC-similar). Most directories don't have location-lock at all. Per-surface brief flags as absent. The pattern *would* generalize for any directory that requires monthly base-location commitment. ## Related - [surface-tryst.brief.md §7](./surface-tryst.brief.md) — parent. - [tryst-profile-editor.screen.md](./tryst-profile-editor.screen.md) — entry from profile. - [tour-leg-detail.screen.md](./tour-leg-detail.screen.md) — tour conflict source. - [Brief K §K4](./K-safety-blocklist.brief.md) — jurisdiction rules. - [Brief M §M3](./M-error-degraded-modes.brief.md) — high-stakes confirmation. - [Brief Z](./Z-billing-payments.brief.md) — re-lock fee is a financial event. - [Brief I](./I-audit-trust-replay.brief.md) — every lock = audit row. ## Out of scope - Bulk-lock multiple months in advance (defer; one month at a time). - Lock to a region instead of a city (defer; Tryst's model is city-only).