{
  "$comment": "Layer manifest for the Wildlife Habitat Explorer. Add / replace / remove entries in \"layers\" - no JS changes needed. Paths are relative to this file. See docs/ADDING_LAYERS.md. Real open-data layers first; the synthetic demo habitat model is kept (off by default) as a placeholder until SAIIL Sentinel-2 analytics are published.",
  "schema_version": "2.0",
  "title": "SAIIL Wildlife Habitat Explorer",
  "status": "mixed",
  "region": {
    "name": "Black Forest (DE)",
    "bounds": [
      7.55,
      47.67,
      8.85,
      48.56
    ]
  },
  "defaults": {
    "minScore": 50,
    "basemap": "satellite"
  },
  "species": [
    {
      "id": "roe_deer",
      "label": "Roe deer"
    },
    {
      "id": "wild_boar",
      "label": "Wild boar"
    }
  ],
  "layers": [
    {
      "id": "s2-scene-truecolor",
      "title": "True colour (one day)",
      "type": "s2-scene",
      "product": "truecolor",
      "group": "Sentinel-2 scenes by date (real, 10 m)",
      "visibleByDefault": false,
      "defaultDate": "2026-10-05",
      "description": "The actual Sentinel-2 picture of one day, as in the Copernicus Browser (bands B4-B3-B2, 10 m). Pick the day with \"Date\". 22 Oct shows clouds. Zoom in past level 8.",
      "source": "Copernicus Sentinel-2 L2A via Microsoft Planetary Computer",
      "status": "real",
      "resolution": "10 m, single date",
      "attribution": "Contains modified Copernicus Sentinel data 2026 · rendered by Microsoft Planetary Computer",
      "style": {
        "opacity": 1,
        "covers": true,
        "color": "#4a7b5c",
        "legendLabel": "True colour (RGB)"
      },
      "versions": [
        {
          "date": "2026-10-22",
          "url": "pc://sentinel-2-l2a",
          "label": "cloudy (cloud demo)"
        },
        {
          "date": "2026-10-05",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-27",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-25",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-15",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-10",
          "url": "pc://sentinel-2-l2a",
          "label": "mostly clear"
        },
        {
          "date": "2026-08-13",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-07-24",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-07-04",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-06-27",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-05-23",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        }
      ]
    },
    {
      "id": "s2-scene-ndvi",
      "title": "NDVI greenness (one day, 10 m)",
      "type": "s2-scene",
      "product": "ndvi",
      "group": "Sentinel-2 scenes by date (real, 10 m)",
      "visibleByDefault": false,
      "defaultDate": "2026-10-05",
      "description": "NDVI = (B8 - B4) / (B8 + B4) calculated live from that day's Sentinel-2 image. Green = dense healthy vegetation, yellow = sparse, red = bare ground, town or water. Clouds show as low values.",
      "source": "Copernicus Sentinel-2 L2A via Microsoft Planetary Computer",
      "status": "real",
      "resolution": "10 m, single date",
      "attribution": "Contains modified Copernicus Sentinel data 2026 · rendered by Microsoft Planetary Computer",
      "style": {
        "opacity": 0.85,
        "min": -0.2,
        "max": 0.9,
        "ramp": [
          [
            -0.2,
            "#a50026"
          ],
          [
            0.15,
            "#f46d43"
          ],
          [
            0.35,
            "#fee08b"
          ],
          [
            0.55,
            "#a6d96a"
          ],
          [
            0.9,
            "#006837"
          ]
        ],
        "legendLabel": "NDVI"
      },
      "versions": [
        {
          "date": "2026-10-22",
          "url": "pc://sentinel-2-l2a",
          "label": "cloudy (cloud demo)"
        },
        {
          "date": "2026-10-05",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-27",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-25",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-15",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-10",
          "url": "pc://sentinel-2-l2a",
          "label": "mostly clear"
        },
        {
          "date": "2026-08-13",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-07-24",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-07-04",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-06-27",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-05-23",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        }
      ]
    },
    {
      "id": "s2-scene-scl",
      "title": "Cloud mask / scene classification (one day)",
      "type": "s2-scene",
      "product": "scl",
      "group": "Sentinel-2 scenes by date (real, 10 m)",
      "visibleByDefault": false,
      "defaultDate": "2026-10-22",
      "description": "The SCL layer that comes with each Sentinel-2 image: white/light grey = cloud, brown = cloud shadow, green = vegetation, yellow = not vegetated, blue = water. Same colours as the Copernicus Browser.",
      "source": "Copernicus Sentinel-2 L2A (ESA Sen2Cor) via Microsoft Planetary Computer",
      "status": "real",
      "resolution": "20 m, single date",
      "attribution": "Contains modified Copernicus Sentinel data 2026 · rendered by Microsoft Planetary Computer",
      "style": {
        "opacity": 0.85,
        "covers": true,
        "color": "#c0c0c0",
        "legendLabel": "Scene classes",
        "legendItems": [
          [
            "#ffffff",
            "Cloud (high)"
          ],
          [
            "#c0c0c0",
            "Cloud (medium)"
          ],
          [
            "#64c8ff",
            "Thin cirrus"
          ],
          [
            "#2f2f2f",
            "Dark / shadow"
          ],
          [
            "#643200",
            "Cloud shadow"
          ],
          [
            "#00a000",
            "Vegetation"
          ],
          [
            "#ffe65a",
            "Not vegetated"
          ],
          [
            "#0000ff",
            "Water"
          ],
          [
            "#ff96ff",
            "Snow / ice"
          ]
        ]
      },
      "versions": [
        {
          "date": "2026-10-22",
          "url": "pc://sentinel-2-l2a",
          "label": "cloudy (cloud demo)"
        },
        {
          "date": "2026-10-05",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-27",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-25",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-15",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-09-10",
          "url": "pc://sentinel-2-l2a",
          "label": "mostly clear"
        },
        {
          "date": "2026-08-13",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-07-24",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-07-04",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-06-27",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        },
        {
          "date": "2026-05-23",
          "url": "pc://sentinel-2-l2a",
          "label": "clear"
        }
      ]
    },
    {
      "id": "sentinel2-cloudless",
      "title": "Sentinel-2 true colour (annual cloud-free mosaic)",
      "type": "xyz-tiles",
      "group": "Satellite imagery (real)",
      "role": "primary",
      "visibleByDefault": false,
      "description": "Real Copernicus Sentinel-2 imagery at 10 m, as cloud-free annual mosaics. Covers the base map while on. Pick an older year in \"Dataset date\" to compare.",
      "source": "Copernicus Sentinel-2 · EOX s2maps.eu",
      "status": "real",
      "resolution": "10 m",
      "attribution": "<a href=\"https://s2maps.eu\" target=\"_blank\" rel=\"noopener\">Sentinel-2 cloudless</a> by EOX IT Services GmbH (contains modified Copernicus Sentinel data)",
      "style": {
        "opacity": 1,
        "maxzoom": 15,
        "color": "#3d6b4f",
        "legendLabel": "True colour (RGB)",
        "covers": true
      },
      "versions": [
        {
          "date": "2024-12-31",
          "url": "https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2024_3857/default/g/{z}/{y}/{x}.jpg",
          "description": "Sentinel-2 cloudless 2024 annual mosaic"
        },
        {
          "date": "2023-12-31",
          "url": "https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2023_3857/default/g/{z}/{y}/{x}.jpg",
          "description": "Sentinel-2 cloudless 2023 annual mosaic"
        },
        {
          "date": "2022-12-31",
          "url": "https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2022_3857/default/g/{z}/{y}/{x}.jpg",
          "description": "Sentinel-2 cloudless 2022 annual mosaic"
        },
        {
          "date": "2021-12-31",
          "url": "https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2021_3857/default/g/{z}/{y}/{x}.jpg",
          "description": "Sentinel-2 cloudless 2021 annual mosaic"
        },
        {
          "date": "2020-12-31",
          "url": "https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2020_3857/default/g/{z}/{y}/{x}.jpg",
          "description": "Sentinel-2 cloudless 2020 annual mosaic"
        },
        {
          "date": "2019-12-31",
          "url": "https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2019_3857/default/g/{z}/{y}/{x}.jpg",
          "description": "Sentinel-2 cloudless 2019 annual mosaic"
        },
        {
          "date": "2018-12-31",
          "url": "https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2018_3857/default/g/{z}/{y}/{x}.jpg",
          "description": "Sentinel-2 cloudless 2018 annual mosaic"
        },
        {
          "date": "2016-12-31",
          "url": "https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless_3857/default/g/{z}/{y}/{x}.jpg",
          "description": "Sentinel-2 cloudless 2016 annual mosaic"
        }
      ]
    },
    {
      "id": "viirs-daily",
      "title": "Daily satellite view, ~2 days old (NASA VIIRS)",
      "type": "xyz-tiles",
      "group": "Satellite imagery (real)",
      "visibleByDefault": false,
      "realtime": true,
      "lagDays": 2,
      "url": "https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/VIIRS_SNPP_CorrectedReflectance_TrueColor/default/{date}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpg",
      "description": "Near-real-time daily true-colour image from the Suomi-NPP satellite (375 m, about 2 days old). Shows current cloud and snow cover; black means no image yet.",
      "source": "NASA GIBS / Worldview (VIIRS SNPP)",
      "status": "real",
      "resolution": "375 m (daily)",
      "attribution": "Imagery: NASA EOSDIS GIBS",
      "style": {
        "opacity": 0.85,
        "maxzoom": 9,
        "color": "#7aa6d6",
        "legendLabel": "Daily true colour",
        "covers": true
      }
    },
    {
      "id": "ndvi-modis",
      "title": "Greenness NDVI, coarse 250 m (NASA MODIS 8-day)",
      "type": "xyz-tiles",
      "group": "Habitat indicators: Europe (real)",
      "visibleByDefault": true,
      "realtime": true,
      "lagDays": 0,
      "url": "https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_NDVI_8Day/default/default/GoogleMapsCompatible_Level9/{z}/{y}/{x}.png",
      "description": "Latest MODIS Terra 8-day NDVI composite (250 m): food and cover availability. Interim indicator until 10 m Sentinel-2 NDVI from SAIIL.",
      "source": "NASA GIBS (MODIS Terra MOD13)",
      "status": "real",
      "resolution": "250 m (8-day)",
      "attribution": "NDVI: NASA EOSDIS GIBS",
      "style": {
        "opacity": 0.6,
        "maxzoom": 9,
        "min": 0,
        "max": 1,
        "ramp": [
          [
            0,
            "#c8b28c"
          ],
          [
            0.3,
            "#e2e27a"
          ],
          [
            0.5,
            "#9fcf5b"
          ],
          [
            0.7,
            "#3e9b36"
          ],
          [
            1,
            "#0b4f17"
          ]
        ],
        "legendLabel": "NDVI"
      }
    },
    {
      "id": "copernicus-tcd",
      "title": "Tree cover density (Europe)",
      "type": "xyz-tiles",
      "group": "Habitat indicators: Europe (real)",
      "visibleByDefault": false,
      "date": "2018-12-31",
      "url": "https://image.discomap.eea.europa.eu/arcgis/services/GioLandPublic/HRL_TreeCoverDensity_2018/ImageServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&LAYERS=HRL_TreeCoverDensity_2018&BBOX={bbox-epsg-3857}",
      "description": "Percentage of tree cover per pixel across Europe (Copernicus High Resolution Layer, 2018). Works outside Germany too.",
      "source": "Copernicus Land Monitoring Service (EEA)",
      "status": "real",
      "resolution": "10 m (2018)",
      "attribution": "Tree cover density: Copernicus Land Monitoring Service, EEA",
      "style": {
        "opacity": 0.7,
        "minzoom": 5,
        "maxzoom": 18,
        "min": 0,
        "max": 100,
        "ramp": [
          [
            0,
            "#f7fcb9"
          ],
          [
            50,
            "#78c679"
          ],
          [
            100,
            "#004529"
          ]
        ],
        "legendLabel": "Tree cover %"
      }
    },
    {
      "id": "dlr-croptypes",
      "title": "Crop types (21 classes)",
      "type": "xyz-tiles",
      "group": "Habitat indicators: Germany (real, 10 m)",
      "visibleByDefault": false,
      "bounds": [
        5.8,
        47.2,
        15.1,
        55.1
      ],
      "description": "Which crop grows in each field (maize, wheat, rapeseed, grassland...), mapped from Sentinel-1 and Sentinel-2. Food for wild boar and deer. Germany only; zoom in to see fields.",
      "source": "DLR CropTypes Germany (Sentinel-1 + Sentinel-2)",
      "status": "real",
      "resolution": "10 m, yearly",
      "attribution": "© DLR (German Aerospace Center), CC BY 4.0",
      "style": {
        "opacity": 0.75,
        "minzoom": 6,
        "maxzoom": 18,
        "legendImage": "https://geoservice.dlr.de/eoc/land/wms?service=WMS&version=1.3.0&request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=CROPTYPES_DE_P1Y_V02",
        "legendLabel": "Crop type",
        "color": "#e3b448"
      },
      "versions": [
        {
          "date": "2024-10-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=CROPTYPES_DE_P1Y_V02&TIME=2024-03-01T00:00:00Z",
          "description": "Crop types 2024"
        },
        {
          "date": "2023-10-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=CROPTYPES_DE_P1Y_V02&TIME=2023-03-01T00:00:00Z",
          "description": "Crop types 2023"
        },
        {
          "date": "2022-10-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=CROPTYPES_DE_P1Y_V02&TIME=2022-03-01T00:00:00Z",
          "description": "Crop types 2022"
        },
        {
          "date": "2021-10-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=CROPTYPES_DE_P1Y_V02&TIME=2021-03-01T00:00:00Z",
          "description": "Crop types 2021"
        },
        {
          "date": "2020-10-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=CROPTYPES_DE_P1Y_V02&TIME=2020-03-01T00:00:00Z",
          "description": "Crop types 2020"
        },
        {
          "date": "2019-10-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=CROPTYPES_DE_P1Y_V02&TIME=2019-03-01T00:00:00Z",
          "description": "Crop types 2019"
        },
        {
          "date": "2018-10-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=CROPTYPES_DE_P1Y_V02&TIME=2018-03-01T00:00:00Z",
          "description": "Crop types 2018"
        },
        {
          "date": "2017-10-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=CROPTYPES_DE_P1Y_V02&TIME=2017-03-01T00:00:00Z",
          "description": "Crop types 2017"
        }
      ]
    },
    {
      "id": "dlr-canopy-cover",
      "title": "Forest canopy cover",
      "type": "xyz-tiles",
      "group": "Habitat indicators: Germany (real, 10 m)",
      "visibleByDefault": false,
      "bounds": [
        5.8,
        47.2,
        15.1,
        55.1
      ],
      "description": "How much of the ground is covered by tree crowns (%). Shelter and shade. Modelled from GEDI lidar + Sentinel-1/2. Germany only.",
      "source": "DLR Forest Structure Germany",
      "status": "real",
      "resolution": "10 m, yearly",
      "attribution": "© DLR (German Aerospace Center), CC BY 4.0",
      "style": {
        "opacity": 0.75,
        "minzoom": 6,
        "maxzoom": 18,
        "legendImage": "https://geoservice.dlr.de/eoc/land/wms?service=WMS&version=1.3.0&request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=FOREST_STRUCTURE_DE_COVER_P1Y",
        "legendLabel": "Canopy cover",
        "color": "#2e7d32"
      },
      "versions": [
        {
          "date": "2023-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_COVER_P1Y&TIME=2023-01-01T00:00:00Z"
        },
        {
          "date": "2022-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_COVER_P1Y&TIME=2022-01-01T00:00:00Z"
        },
        {
          "date": "2021-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_COVER_P1Y&TIME=2021-01-01T00:00:00Z"
        },
        {
          "date": "2020-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_COVER_P1Y&TIME=2020-01-01T00:00:00Z"
        },
        {
          "date": "2019-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_COVER_P1Y&TIME=2019-01-01T00:00:00Z"
        },
        {
          "date": "2018-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_COVER_P1Y&TIME=2018-01-01T00:00:00Z"
        },
        {
          "date": "2017-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_COVER_P1Y&TIME=2017-01-01T00:00:00Z"
        }
      ]
    },
    {
      "id": "dlr-canopy-height",
      "title": "Forest canopy height",
      "type": "xyz-tiles",
      "group": "Habitat indicators: Germany (real, 10 m)",
      "visibleByDefault": false,
      "bounds": [
        5.8,
        47.2,
        15.1,
        55.1
      ],
      "description": "Tree height (m): tall = mature forest, low = young or regrowing forest. Germany only.",
      "source": "DLR Forest Structure Germany",
      "status": "real",
      "resolution": "10 m, yearly",
      "attribution": "© DLR (German Aerospace Center), CC BY 4.0",
      "style": {
        "opacity": 0.75,
        "minzoom": 6,
        "maxzoom": 18,
        "legendImage": "https://geoservice.dlr.de/eoc/land/wms?service=WMS&version=1.3.0&request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=FOREST_STRUCTURE_DE_RH95_P1Y",
        "legendLabel": "Canopy height",
        "color": "#6d4c41"
      },
      "versions": [
        {
          "date": "2023-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_RH95_P1Y&TIME=2023-01-01T00:00:00Z"
        },
        {
          "date": "2022-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_RH95_P1Y&TIME=2022-01-01T00:00:00Z"
        },
        {
          "date": "2021-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_RH95_P1Y&TIME=2021-01-01T00:00:00Z"
        },
        {
          "date": "2020-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_RH95_P1Y&TIME=2020-01-01T00:00:00Z"
        },
        {
          "date": "2019-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_RH95_P1Y&TIME=2019-01-01T00:00:00Z"
        },
        {
          "date": "2018-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_RH95_P1Y&TIME=2018-01-01T00:00:00Z"
        },
        {
          "date": "2017-12-31",
          "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=FOREST_STRUCTURE_DE_RH95_P1Y&TIME=2017-01-01T00:00:00Z"
        }
      ]
    },
    {
      "id": "dlr-canopy-loss",
      "title": "Forest clearings & canopy loss (2018-2021)",
      "type": "xyz-tiles",
      "group": "Habitat indicators: Germany (real, 10 m)",
      "visibleByDefault": false,
      "bounds": [
        5.8,
        47.2,
        15.1,
        55.1
      ],
      "date": "2021-04-30",
      "url": "https://geoservice.dlr.de/eoc/land/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&CRS=EPSG:3857&WIDTH=256&HEIGHT=256&STYLES=&BBOX={bbox-epsg-3857}&LAYERS=TREE_CANOPY_COVER_LOSS_P1M",
      "description": "Where trees were lost (storms, drought, bark beetle, harvest) from Jan 2018 to Apr 2021. Clearings grow fresh food deer like (Nature Ecol. Evol. 2026). Germany only.",
      "source": "DLR Tree Canopy Cover Loss Germany",
      "status": "real",
      "resolution": "10 m, monthly 2018-2021",
      "attribution": "© DLR (German Aerospace Center), CC BY 4.0",
      "style": {
        "opacity": 0.85,
        "minzoom": 6,
        "maxzoom": 18,
        "legendImage": "https://geoservice.dlr.de/eoc/land/wms?service=WMS&version=1.3.0&request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=TREE_CANOPY_COVER_LOSS_P1M",
        "legendLabel": "Canopy loss",
        "color": "#e64a19"
      }
    },
    {
      "id": "protected-areas",
      "title": "Protected areas (WDPA)",
      "type": "xyz-tiles",
      "group": "Rules & access (real)",
      "visibleByDefault": false,
      "date": "2026-10-01",
      "url": "https://data-gis.unep-wcmc.org/server/rest/services/ProtectedSites/The_World_Database_of_Protected_Areas/MapServer/export?bbox={bbox-epsg-3857}&bboxSR=3857&imageSR=3857&size=256,256&format=png32&transparent=true&f=image",
      "description": "Nature reserves, national parks and Natura 2000 sites — hunting may be restricted. Check local regulations.",
      "source": "UNEP-WCMC & IUCN, Protected Planet (WDPA)",
      "status": "real",
      "resolution": "Vector, rendered as tiles",
      "attribution": "Protected areas: UNEP-WCMC &amp; IUCN, Protected Planet",
      "style": {
        "opacity": 0.6,
        "maxzoom": 18,
        "color": "#7e57c2",
        "legendLabel": "Protected area"
      }
    },
    {
      "id": "habitat-polygons-roe-deer",
      "title": "Habitat score patches · synthetic",
      "type": "geojson",
      "group": "Demo habitat model (synthetic)",
      "species": "roe_deer",
      "visibleByDefault": false,
      "description": "Small habitat patches (about 200-400 m) scored 0-100 from weighted indicators. Click one to see why it scored as it did. SYNTHETIC demo until SAIIL Sentinel-2 analytics.",
      "source": "SAIIL synthetic demo fixture (no EO input)",
      "status": "synthetic",
      "resolution": "Demonstration only",
      "style": {
        "scoreField": "score",
        "min": 0,
        "max": 100,
        "ramp": [
          [
            0,
            "#f7f4b5"
          ],
          [
            25,
            "#f2c46b"
          ],
          [
            50,
            "#a7d38c"
          ],
          [
            75,
            "#3fa37a"
          ],
          [
            100,
            "#0f5a46"
          ]
        ],
        "opacity": 0.6,
        "outlineColor": "#f2fff6",
        "outlineWidth": 1.3,
        "filterByScore": true,
        "explain": [
          {
            "field": "s_mosaic",
            "label": "Forest-field edge (mosaic)",
            "weight": 0.25
          },
          {
            "field": "s_clearing",
            "label": "Recent clearing with regrowth",
            "weight": 0.2
          },
          {
            "field": "s_greenness",
            "label": "Greenness vs normal",
            "weight": 0.15
          },
          {
            "field": "s_cover",
            "label": "Canopy cover (shelter, shade)",
            "weight": 0.15
          },
          {
            "field": "s_quiet",
            "label": "Quietness (far from roads, paths)",
            "weight": 0.1
          },
          {
            "field": "s_moisture",
            "label": "Vegetation moisture",
            "weight": 0.1
          },
          {
            "field": "s_water",
            "label": "Water nearby",
            "weight": 0.05
          }
        ],
        "pinsBelowZoom": 11.5
      },
      "versions": [
        {
          "date": "2026-10-11",
          "url": "layers/habitat_score_polygons_roe_deer_2026-10.geojson"
        },
        {
          "date": "2026-09-27",
          "url": "layers/habitat_score_polygons_roe_deer_2026-09.geojson"
        },
        {
          "date": "2026-08-30",
          "url": "layers/habitat_score_polygons_roe_deer_2026-08.geojson"
        }
      ]
    },
    {
      "id": "habitat-heatmap-roe-deer",
      "title": "Habitat heatmap · synthetic",
      "type": "raster-image",
      "group": "Demo habitat model (synthetic)",
      "species": "roe_deer",
      "visibleByDefault": false,
      "bounds": [
        7.55,
        47.67,
        8.85,
        48.56
      ],
      "description": "Smoothed habitat score surface (blue = low, white = high). Georeferenced PNG. SYNTHETIC.",
      "source": "SAIIL synthetic demo fixture (no EO input)",
      "status": "synthetic",
      "resolution": "Demonstration only",
      "style": {
        "opacity": 0.75,
        "min": 0,
        "max": 100,
        "ramp": [
          [
            0,
            "#08306b"
          ],
          [
            40,
            "#2171b5"
          ],
          [
            65,
            "#6baed6"
          ],
          [
            85,
            "#c6dbef"
          ],
          [
            100,
            "#ffffff"
          ]
        ],
        "legendLabel": "Habitat score"
      },
      "versions": [
        {
          "date": "2026-10-11",
          "url": "layers/habitat_heatmap_roe_deer_2026-10.png"
        },
        {
          "date": "2026-09-27",
          "url": "layers/habitat_heatmap_roe_deer_2026-09.png"
        },
        {
          "date": "2026-08-30",
          "url": "layers/habitat_heatmap_roe_deer_2026-08.png"
        }
      ]
    },
    {
      "id": "habitat-polygons-wild-boar",
      "title": "Habitat score patches · synthetic",
      "type": "geojson",
      "group": "Demo habitat model (synthetic)",
      "species": "wild_boar",
      "visibleByDefault": false,
      "description": "Small habitat patches (about 200-400 m) scored 0-100 from weighted indicators. Click one to see why it scored as it did. SYNTHETIC demo until SAIIL Sentinel-2 analytics.",
      "source": "SAIIL synthetic demo fixture (no EO input)",
      "status": "synthetic",
      "resolution": "Demonstration only",
      "style": {
        "scoreField": "score",
        "min": 0,
        "max": 100,
        "ramp": [
          [
            0,
            "#f7f4b5"
          ],
          [
            25,
            "#f2c46b"
          ],
          [
            50,
            "#a7d38c"
          ],
          [
            75,
            "#3fa37a"
          ],
          [
            100,
            "#0f5a46"
          ]
        ],
        "opacity": 0.6,
        "outlineColor": "#f2fff6",
        "outlineWidth": 1.3,
        "filterByScore": true,
        "explain": [
          {
            "field": "s_crop",
            "label": "Crop-forest interface (maize not harvested)",
            "weight": 0.3
          },
          {
            "field": "s_cover",
            "label": "Canopy cover (resting cover)",
            "weight": 0.2
          },
          {
            "field": "s_wet",
            "label": "Wet ground and water (wallowing)",
            "weight": 0.15
          },
          {
            "field": "s_quiet",
            "label": "Quietness (far from roads, paths)",
            "weight": 0.15
          },
          {
            "field": "s_broadleaf",
            "label": "Broadleaf forest (acorns, beech nuts)",
            "weight": 0.1
          },
          {
            "field": "s_greenness",
            "label": "Greenness vs normal",
            "weight": 0.1
          }
        ],
        "pinsBelowZoom": 11.5
      },
      "versions": [
        {
          "date": "2026-10-11",
          "url": "layers/habitat_score_polygons_wild_boar_2026-10.geojson"
        },
        {
          "date": "2026-09-27",
          "url": "layers/habitat_score_polygons_wild_boar_2026-09.geojson"
        },
        {
          "date": "2026-08-30",
          "url": "layers/habitat_score_polygons_wild_boar_2026-08.geojson"
        }
      ]
    },
    {
      "id": "habitat-heatmap-wild-boar",
      "title": "Habitat heatmap · synthetic",
      "type": "raster-image",
      "group": "Demo habitat model (synthetic)",
      "species": "wild_boar",
      "visibleByDefault": false,
      "bounds": [
        7.55,
        47.67,
        8.85,
        48.56
      ],
      "description": "Smoothed habitat score surface (blue = low, white = high). Georeferenced PNG. SYNTHETIC.",
      "source": "SAIIL synthetic demo fixture (no EO input)",
      "status": "synthetic",
      "resolution": "Demonstration only",
      "style": {
        "opacity": 0.75,
        "min": 0,
        "max": 100,
        "ramp": [
          [
            0,
            "#08306b"
          ],
          [
            40,
            "#2171b5"
          ],
          [
            65,
            "#6baed6"
          ],
          [
            85,
            "#c6dbef"
          ],
          [
            100,
            "#ffffff"
          ]
        ],
        "legendLabel": "Habitat score"
      },
      "versions": [
        {
          "date": "2026-10-11",
          "url": "layers/habitat_heatmap_wild_boar_2026-10.png"
        },
        {
          "date": "2026-09-27",
          "url": "layers/habitat_heatmap_wild_boar_2026-09.png"
        },
        {
          "date": "2026-08-30",
          "url": "layers/habitat_heatmap_wild_boar_2026-08.png"
        }
      ]
    }
  ]
}
