/* 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 (
);
};
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 });