# event-detail.screen Single event from `event-scrapers` aggregator. Implements [brief R §R2c](./R-tours-events-hotels.brief.md). Reached from tour-leg-detail.screen.md anchor row, from the touring drawer's Events tab, or from a discovery card. Voice: working with hearth on rich event content. ## Layout (full-screen drawer) ``` ┌─────────────────────────────────────────────────┐ │ ◄ Touring ⋯ │ 56pt ├─────────────────────────────────────────────────┤ │ Anime-Berlin │ event title │ Oct 4–6 · Berlin · convention center │ date / city / venue │ Source: animecons · last scouted 2h ago │ provenance + freshness │ │ │ ─── Audience overlap ─── │ │ High · matches "anime-adjacent kink" │ strategist inference │ Prior leg: Anime-LA (Apr) booked $11.8k │ historical anchor │ │ │ ─── Anchored legs ─── │ │ ▢ Berlin Oct 3–7 · in planning (this leg) │ tap → tour-leg-detail │ ✓ Anime-LA (Apr 2026) · closed · $11.8k │ past leg shortcut │ │ │ ─── Event signal ─── │ │ Tags: anime · convention · trans-friendly │ │ Expected attendance: 18,000 │ │ [ Open source page ↗ ] │ │ │ │ ─── Actions ─── │ │ [ Anchor a new leg to this event ] │ │ [ Add to watchlist ] │ doesn't commit a leg yet │ [ Hide this event ] │ suppresses future suggestions │ │ └─────────────────────────────────────────────────┘ ``` ## Components | Component | Notes | |---|---| | Top bar | Back + overflow (share, copy URL, report-stale). | | Title block | Event name + date + city + venue. | | Provenance | Which `event-scrapers` source + last scout time. | | Audience overlap | strategist's inference + historical anchor data when available. | | Anchored legs | Tour legs currently or historically anchored to this event. | | Event signal | Tags + expected attendance + source-page link. | | Actions | 3 buttons: anchor leg / watchlist / hide. | ## States 1. **Default** — full layout. 2. **Stale** (last scouted >24h) — provenance chip pulses; "Re-scout" button appears. 3. **No anchored legs** — Anchored section empty: "No leg yet. Anchor one to start planning." 4. **Conflict** (event date overlaps with another active leg) — top inline pill: "⚠ Overlaps Berlin Oct 3–7 leg already." Tap → resolve. 5. **Hidden** — sheet shows muted; banner: "You hid this event. Unhide?" 6. **Watchlisted** — small chip "On your watchlist." 7. **Source unreachable** (per brief M §M2) — provenance chip red; "Couldn't reach {source} for refresh." 8. **VoiceOver** — title → provenance → overlap → legs → signal → actions. ## Interactions - **Tap "Open source page ↗"** → in-app browser (or external Safari, per user preference). - **Tap anchored leg row** → tour-leg-detail.screen.md. - **Tap "Anchor a new leg"** → starts ai-copilot conversation with this event as context; produces a draft leg. - **Tap "Add to watchlist"** → recorded in `events_watchlist`; future scouts surface changes. - **Tap "Hide this event"** → suppresses + records `agent_actions` row; reversible via watchlist screen. ## Edge cases - **Event canceled by source** — banner: "Source marked this event canceled on {date}. Your leg may need re-planning." - **Date changed in source** — banner: "Date shifted from Oct 4–6 to Oct 11–13. Update your leg?" - **Event scraped from multiple sources, sources disagree** — Provenance shows primary + "(conflicts with N other sources)"; tap to see disagreement. - **Coop intel on the event's neighborhood** — chip per brief N: "🛡 1 coop report flagged this venue area." ## Related - [Brief R §R2c, §R1a discovery](./R-tours-events-hotels.brief.md) — parent. - [tour-leg-detail.screen.md](./tour-leg-detail.screen.md) — sibling. - [strategist contract](./specialist-strategist.contract.md) — audience overlap inference source. - [Brief J](./_engineering-v2-port-map.md) — v2 `event-scrapers` port. ## Out of scope - The watchlist root view (a list of watchlisted events; defer to its own screen). - Event-discovery feed (proactive surfacing by ai-copilot; brief R §R1a covers conceptually).