neighborhoodPolygons.ts) and an amber notice that heatmap shading is NYC-only per D-15. Saves the polygon-only-city promise from the data architecture.
- Dashed empty box explains the value ("save your block") so the user understands what saved means before tapping anything.
- Pin toggle defaults to OFF for new users (no opinion until they save a few nabes).
- Browse all NYC stays prominent — it's the discovery path that produces the first save.
- "Add a nabe" surfaces as the explicit alternative to Browse for users who already know the name of the nabe they want.
The dropdown is being replaced (OQ-3). A bottom sheet gives room for the saved-nabes list + Browse CTA + Pin toggle + Add affordance — none of which fit in a 160px-wide dropdown menu. Matches existing project pattern (every drawer uses vaul; see AgentProfile, DEMO_SCRIPT overlay).
An in-modal toggle row beats a sticky chip: (1) lives next to the saved-nabes list where pinning logically applies, (2) reuses standard row + iOS-switch pattern from elsewhere in the app, (3) doesn't compete visually with the Browse-NYC CTA. Founder can override to "sticky chip in header" but Variant A is the default recommended here.
The heatmap is the "wow" moment in Wave 2. The CTA pulls Variant C gradient + a mini-heatmap preview thumbnail so the user understands what they'll see before tapping. Pulls visual weight away from the saved-nabes list — the saved list is utility, the heatmap is discovery.
D-15 is a hard scope lock: liveness shading is NYC-only in Phase 47. Showing a "Browse all Tokyo" CTA that opens a non-heatmap polygon view would be a UX dead-end. Instead an amber notice + the static polygon SVG outline tells the founder/user where the boundary is, and the polygon outline still lets them tap a ward to switch active nabe.
"Active" pill = px-2.5 py-0.5 rounded-full text-xs font-medium per DESIGN_STANDARDS. Live dots are pure indicators (no text), so they're 2×2px circles with the colorway derived from liveness.level (hot=pulsing fuchsia / lively=fuchsia / moderate=violet / quiet=zinc).
Old NeighborhoodSelector dropdown variant's onClick switches from "open inline menu" to "call onOpenModal()". Inline menu is dead. The "Pitch demo / Other cities" divider semantics from the old menu re-appear as the Pin-demo-cities toggle + Other-cities grid in the modal.
- PLAN says "Render at iPhone 14 Pro Max width (430px) plus iPad Pro split-view width." This page renders TWO iPhone-frame devices side by side (390px each) on iPad-width viewports (max-w-6xl). The two-device side-by-side IS the iPad-split-view layout — both modal states visible on one tap, no scrolling between states. Founder reviews both at once.
- PLAN doesn't specify what the polygon-only city view looks like in detail. Mockup proposes: static polygon SVG (proxy for Leaflet outline at code time) + active ward filled + amber "no heatmap outside NYC" notice. Confirm or override.
- PLAN says "Add a nabe" is a separate item. Mockup uses a dashed-border "+ Add a nabe to your saved list" button below "Other cities" — same as how empty drop-zones surface elsewhere in the app. Founder approves the affordance shape or describes a different one.
- Added an extra edge-state section (empty saved-nabes) below the side-by-side so the founder sees the first-time-user path too, with an explicit founder choice point (pre-saved vs empty at demo start).