/* Static SVG mock of the MapLibre map for 80 Pioneer St, Red Hook. No network dependency. Encodes all four evidence-tier styles per the brief: empirical solid + 0.4 fill, modeled solid + 0.25, synthetic dashed + 0.25 with stripe, proxy graduated dots no fill. */ const RedHookMapMock = ({ activeLayers, queriedAddress }) => { return ( {/* Diagonal stripe pattern for synthetic-prior fill */} {/* Halo for label readability */} {/* ── Basemap: Carto Positron register ── */} {/* Water (Erie Basin / Buttermilk Channel) */} {/* Park (Coffey Park) */} {/* Parcels (reference layer #E5E5E5) */} {Array.from({ length: 8 }).map((_, r) => Array.from({ length: 14 }).map((_, c) => ( )) )} {/* Streets */} {/* ── Empirical layer: Sandy Inundation Zone ── */} {activeLayers.empirical && ( )} {/* ── Modeled layer: FEMA AE zone (solid line, 0.25 fill) ── */} {activeLayers.modeled && ( )} {/* ── Synthetic-prior: dashed line + stripe pattern ── */} {activeLayers.synthetic && ( )} {/* ── Proxy: 311 flood complaints (graduated dots, no fill) ── */} {activeLayers.proxy && ( {[ [120, 320, 5], [180, 350, 8], [220, 280, 4], [280, 330, 11], [340, 360, 6], [240, 240, 3], [380, 320, 9], [440, 350, 7], [200, 220, 4], [160, 280, 5], [340, 240, 3], [420, 280, 4], [500, 360, 6], [540, 400, 8], [180, 380, 5], ].map(([x, y, r], i) => ( ))} )} {/* ── Asset pins for register specialists ── */} {/* Subway entrance , square */} Smith–9 St {/* NYCHA , open square */} Red Hook Houses {/* School , cross */} PS 15 {/* Hospital , circle */} NYU Cobble Hill {/* ── Queried-address pin (warm orange, dominant at z14+) ── */} 80 Pioneer St {/* ── Map labels (Imhof hierarchy: water italic, neighborhoods regular caps) ── */} Buttermilk Channel Erie Basin RED HOOK CARROLL GARDENS Coffey Park {/* Street labels at z15+ */} Van Brunt St Pioneer St Imlay St {/* ── Scale bar + zoom indicator (corners, like USGS quad) ── */} 0 200 400 ft z 16 · 40.6776°N 74.0096°W ); }; const MapLegend = ({ activeLayers, onToggle }) => { /* v0.4.5: restructured by Stone. Each row carries its source-Stone so the panel visually mirrors the Findings stack. The tier swatch is unchanged. */ const layers = [ { key: "empirical", tier: "empirical", stone: "cornerstone", label: "Sandy Inundation Zone (2012)", source: "NYC OEM" }, { key: "modeled", tier: "modeled", stone: "cornerstone", label: "FEMA Zone AE · preliminary FIRM", source: "FEMA" }, { key: "proxy", tier: "proxy", stone: "touchstone", label: "311 flood complaints, 2019–25", source: "NYC 311" }, { key: "synthetic", tier: "synthetic", stone: "touchstone", label: "Synthetic LULC (2025-09-14)", source: "TerraMind v1.2" }, { key: "prithvi-pluvial", tier: "modeled", stone: "touchstone", label: "Prithvi pluvial prediction", source: "Prithvi-NYC v2" }, ]; const stoneOrder = ["cornerstone", "touchstone"]; const stoneMeta = { cornerstone: { name: "Cornerstone", role: "what NYC's ground remembers" }, touchstone: { name: "Touchstone", role: "what's happening now" }, }; return (
Layers · by Stone
{stoneOrder.map((sk) => (
{stoneMeta[sk].name} · {stoneMeta[sk].role}
{layers.filter((l) => l.stone === sk).map((l) => ( ))}
))}
); }; Object.assign(window, { RedHookMapMock, MapLegend });