{
  "_readme": [
    "Every number rendered on the NYN map comes from this file. Edit here, not in code.",
    "status values: 'verified'   — checked against a named primary source at the as-of date",
    "                'unverified' — a source exists but the figure was not confirmed at build time",
    "                'estimated'  — a planning figure, not a measurement",
    "                'missing'    — we have no data. The site renders the gap; it does not fill it.",
    "Never merge stateless and refugee counts into one number. They are different things."
  ],
  "meta": {
    "lastReviewed": "2026-09-21",
    "reviewedBy": "build-time verification pass, WEBSITE_SPEC_v2.md section 9",
    "specSection": "WEBSITE_SPEC_v2.md section 4"
  },
  "sources": {
    "unhcr-gt-2025": {
      "title": "UNHCR Global Trends: Forced Displacement in 2025",
      "publisher": "UNHCR",
      "published": "2026-06",
      "asOf": "2025-12-31",
      "url": "https://www.unhcr.org/sites/default/files/2026-06/global-trends-report-2025.pdf",
      "note": "Data compiled to 1 May 2026. Retrieved and read at build time, 2026-09-21."
    },
    "nyn-scouting": {
      "title": "NYN site scouting register",
      "publisher": "NYN",
      "published": null,
      "asOf": null,
      "url": null,
      "note": "Not yet started. No sites have been scouted, so this source holds no records."
    }
  },
  "projection": {
    "type": "equirectangular",
    "note": "x = (lon + 180) / 360 * width; y = (90 - lat) / 180 * height. Marker coordinates are approximate country centroids used for placement only. They are not a claim about where people are within a country.",
    "coordinateStatus": "estimated"
  },
  "basemap": {
    "file": "data/basemap.geojson",
    "present": false,
    "status": "missing",
    "note": "No public-domain country outline could be obtained at build time, so the map draws a true graticule and real coordinates with no land. Drop a Natural Earth (public domain) countries GeoJSON at data/basemap.geojson in WGS84 lon/lat and it renders automatically. Coastlines were not drawn from memory: an approximated coastline would be an unsourced claim."
  },
  "layers": [
    {
      "id": "stateless",
      "name": "Stateless",
      "definition": "People not considered a national by any state under the operation of its law. Being stateless is not the same as being a refugee, and not the same as being displaced.",
      "defaultOn": true,
      "total": {
        "value": 4500000,
        "display": "4.5M",
        "status": "verified",
        "sourceId": "unhcr-gt-2025",
        "asOf": "2025-12-31",
        "note": "Reported count. UNHCR states the true number is likely to be much higher, because many stateless populations are unregistered and most countries do not report."
      },
      "undercount": {
        "known": true,
        "value": null,
        "status": "missing",
        "note": "UNHCR acknowledges the reported figure is an undercount but does not publish an upper bound we could verify. The reported-vs-estimated toggle therefore shows the shape of the gap, not a second number. We will not invent one."
      },
      "locations": [
        {
          "name": "Rohingya",
          "where": "Myanmar and Bangladesh",
          "lat": 21.2,
          "lon": 92.3,
          "value": 1800000,
          "display": "~1.8M",
          "status": "verified",
          "sourceId": "unhcr-gt-2025",
          "asOf": "2025-12-31",
          "note": "The largest stateless group in the world: 41% of all reported stateless people at end-2025. Roughly 1.2M are hosted as refugees in Bangladesh, so this group appears in both the stateless and refugee counts. It is one group counted under two different definitions, not two groups."
        },
        {
          "name": "Côte d'Ivoire",
          "where": "Côte d'Ivoire",
          "lat": 7.5,
          "lon": -5.5,
          "value": 931000,
          "display": "~931k",
          "status": "unverified",
          "sourceId": "unhcr-gt-2025",
          "asOf": "2025-12-31",
          "conflict": "Two readings of the same UNHCR report disagree on this pair. WEBSITE_SPEC_v2.md records Côte d'Ivoire at ~931k and Thailand at ~611k; a build-time read of the 2025 report returned the two figures the other way round. Both countries are confirmed to be among the four largest; which is larger is not confirmed. Check the report's annex table before this is presented as fact."
        },
        {
          "name": "Thailand",
          "where": "Thailand",
          "lat": 15.1,
          "lon": 101.0,
          "value": 611000,
          "display": "~611k",
          "status": "unverified",
          "sourceId": "unhcr-gt-2025",
          "asOf": "2025-12-31",
          "conflict": "See the Côte d'Ivoire entry. The two figures may be transposed. Not confirmed at build time."
        },
        {
          "name": "Bangladesh",
          "where": "Bangladesh",
          "lat": 23.7,
          "lon": 90.4,
          "value": 520000,
          "display": "~520k",
          "status": "unverified",
          "sourceId": "unhcr-gt-2025",
          "asOf": "2025-12-31",
          "note": "A build-time read of the 2025 report returned ~519,600, consistent with the spec's ~520k. Listed unverified only because the figure was read from a converted PDF rather than the statistics database."
        },
        {
          "name": "Latvia",
          "where": "Latvia",
          "lat": 56.9,
          "lon": 24.6,
          "value": 168000,
          "display": "~168k",
          "status": "unverified",
          "sourceId": "unhcr-gt-2025",
          "asOf": "2025-12-31",
          "note": "Carried from WEBSITE_SPEC_v2.md. Not re-confirmed against the 2025 report at build time."
        },
        {
          "name": "Syria",
          "where": "Syria",
          "lat": 34.8,
          "lon": 38.9,
          "value": 160000,
          "display": "~160k",
          "status": "unverified",
          "sourceId": "unhcr-gt-2025",
          "asOf": "2025-12-31",
          "note": "Carried from WEBSITE_SPEC_v2.md. Not re-confirmed against the 2025 report at build time."
        },
        {
          "name": "Malaysia",
          "where": "Malaysia",
          "lat": 4.2,
          "lon": 102.0,
          "value": 135000,
          "display": "~135k",
          "status": "unverified",
          "sourceId": "unhcr-gt-2025",
          "asOf": "2025-12-31",
          "note": "Carried from WEBSITE_SPEC_v2.md. Not re-confirmed against the 2025 report at build time."
        },
        {
          "name": "Kuwait",
          "where": "Kuwait",
          "lat": 29.3,
          "lon": 47.6,
          "value": 92000,
          "display": "~92k",
          "status": "unverified",
          "sourceId": "unhcr-gt-2025",
          "asOf": "2025-12-31",
          "note": "Carried from WEBSITE_SPEC_v2.md. Not re-confirmed against the 2025 report at build time."
        },
        {
          "name": "Russia",
          "where": "Russian Federation",
          "lat": 61.5,
          "lon": 105.3,
          "value": 88000,
          "display": "~88k",
          "status": "unverified",
          "sourceId": "unhcr-gt-2025",
          "asOf": "2025-12-31",
          "note": "Carried from WEBSITE_SPEC_v2.md. Not re-confirmed against the 2025 report at build time."
        },
        {
          "name": "Cambodia",
          "where": "Cambodia",
          "lat": 12.5,
          "lon": 104.9,
          "value": 75000,
          "display": "~75k",
          "status": "unverified",
          "sourceId": "unhcr-gt-2025",
          "asOf": "2025-12-31",
          "note": "Carried from WEBSITE_SPEC_v2.md. Not re-confirmed against the 2025 report at build time."
        }
      ]
    },
    {
      "id": "refugees",
      "name": "Refugees",
      "definition": "People forced to flee their country because of persecution, war or violence, and recognized as needing international protection. A refugee usually has a nationality. A stateless person usually does not.",
      "defaultOn": true,
      "total": {
        "value": 41600000,
        "display": "41.6M",
        "status": "verified",
        "sourceId": "unhcr-gt-2025",
        "asOf": "2025-12-31",
        "note": "UNHCR's broad refugee total at end-2025, which includes refugees under UNHCR's mandate, people in refugee-like situations, Palestine refugees under UNRWA's mandate, and others in need of international protection. A narrower definition — refugees and people in refugee-like situations only — gives roughly 35.6M. Both figures appear in coverage of the same report. The components we could read did not reconcile cleanly to either total, so the breakdown is deliberately not shown here."
      },
      "locations": [],
      "locationsStatus": "missing",
      "locationsNote": "No per-country refugee figures are published on this site. The spec authorises a global total only, and we will not distribute a global number across countries to make the map look fuller. Add entries here in the same shape as the stateless layer once each country's figure has a source and an as-of date."
    },
    {
      "id": "idp",
      "name": "Internally displaced",
      "definition": "People forced from their homes by conflict or violence who have not crossed an international border. They remain citizens of their own country.",
      "defaultOn": true,
      "total": {
        "value": 68700000,
        "display": "68.7M",
        "status": "verified",
        "sourceId": "unhcr-gt-2025",
        "asOf": "2025-12-31",
        "note": "Internally displaced by conflict or violence at end-2025. WEBSITE_SPEC_v2.md carried ~73.5M and flagged it for verification; that figure did not verify against the 2025 report and has been replaced. Counts that also include disaster displacement are higher and are compiled by IDMC on a different basis; no IDMC figure is shown here because none was verified at build time."
      },
      "locations": [],
      "locationsStatus": "missing",
      "locationsNote": "Same rule as the refugee layer: a global total with a source, or nothing."
    },
    {
      "id": "sites",
      "name": "Candidate land sites",
      "definition": "Places NYN is looking at. A candidate site is not owned, not offered on, and not promised. This layer is kept separate from the problem layers on purpose.",
      "defaultOn": true,
      "alwaysOn": true,
      "total": {
        "value": 0,
        "display": "0",
        "status": "verified",
        "sourceId": "nyn-scouting",
        "asOf": "2026-09-21",
        "note": "Zero sites. Scouting has not begun. This is a real count, not a placeholder."
      },
      "locations": [],
      "locationsStatus": "empty",
      "locationsNote": "Add sites as objects: { name, where, lat, lon, siteStatus: 'scouting' | 'negotiating' | 'acquired', since, note }. WEBSITE_SPEC_v2.md section 10 item 5 leaves open whether candidate sites are shown publicly before acquisition. That decision is unresolved, so nothing is listed here yet.",
      "demoLocations": [
        {
          "name": "Sample site A",
          "where": "Northern Tunisia",
          "lat": 36.5,
          "lon": 9.3,
          "value": 1,
          "display": "Scouting",
          "siteStatus": "scouting",
          "status": "sample",
          "sourceId": "nyn-scouting",
          "asOf": "2026-09-21",
          "note": "INVENTED FOR LAYOUT. Not a real site, not scouted, not under consideration."
        },
        {
          "name": "Sample site B",
          "where": "Coastal Bangladesh",
          "lat": 22.4,
          "lon": 91.3,
          "value": 1,
          "display": "Scouting",
          "siteStatus": "scouting",
          "status": "sample",
          "sourceId": "nyn-scouting",
          "asOf": "2026-09-21",
          "note": "INVENTED FOR LAYOUT. Not a real site, not scouted, not under consideration."
        },
        {
          "name": "Sample site C",
          "where": "Eastern Paraguay",
          "lat": -25.5,
          "lon": -55.8,
          "value": 1,
          "display": "Negotiating",
          "siteStatus": "negotiating",
          "status": "sample",
          "sourceId": "nyn-scouting",
          "asOf": "2026-09-21",
          "note": "INVENTED FOR LAYOUT. Not a real site, no negotiation is taking place."
        }
      ],
      "demoNote": "Rendered only while finances.json demo.enabled is true. These are not real sites."
    }
  ]
}
