{"version":8,"name":"Nafirka Niamey Nuit","metadata":{"nafirka:generated-by":"ansible/roles/deploy/templates/tiles/style.json.j2","nafirka:variant":"night","nafirka:token-source":"ui-web/src/tokens/colors.ts :: mapStyle.cartographyNight","openmaptiles:version":"3.x"},"sources":{"openmaptiles":{"type":"vector","url":"https://tiles.test.nafirka.com/data/v3.json"}},"sprite":"https://tiles.test.nafirka.com/styles/nafirka-nuit/sprite","glyphs":"https://tiles.test.nafirka.com/fonts/{fontstack}/{range}.pbf","layers":[{"id":"background","type":"background","paint":{"background-color":"#141a26"}},{"id":"landcover-sand","type":"fill","source":"openmaptiles","source-layer":"landcover","filter":["==","class","sand"],"paint":{"fill-color":"#241f18","fill-opacity":["interpolate",["linear"],["zoom"],8,0.7,14,0.6]}},{"id":"landcover-wood","type":"fill","source":"openmaptiles","source-layer":"landcover","filter":["==","class","wood"],"paint":{"fill-color":"#172519","fill-opacity":["interpolate",["linear"],["zoom"],6,0.4,12,0.55,16,0.6]}},{"id":"landcover-grass","type":"fill","source":"openmaptiles","source-layer":"landcover","filter":["in","class","grass","wetland"],"paint":{"fill-color":"#19291f","fill-opacity":0.6}},{"id":"landcover-farmland","type":"fill","source":"openmaptiles","source-layer":"landcover","filter":["==","class","farmland"],"paint":{"fill-color":"#1e2637","fill-opacity":0.4}},{"id":"park","type":"fill","source":"openmaptiles","source-layer":"park","minzoom":9,"paint":{"fill-color":"#19291f","fill-opacity":0.65}},{"metadata":{"nafirka:note":"From z5, not z8. The tileset carries landuse from z5 and RouteMapPreview's intro deliberately opens on the whole of Niger; starting at 8 meant that overview showed a country of bare sand with no settlement in it."},"id":"landuse-residential","type":"fill","source":"openmaptiles","source-layer":"landuse","minzoom":5,"filter":["in","class","residential","suburb","quarter","neighbourhood","builtup"],"paint":{"fill-color":"#1e2637","fill-opacity":["interpolate",["linear"],["zoom"],5,0.45,8,0.55,13,0.5,16,0.4]}},{"id":"landuse-commercial","type":"fill","source":"openmaptiles","source-layer":"landuse","minzoom":10,"filter":["in","class","commercial","industrial","retail","garages"],"paint":{"fill-color":"#222a3c","fill-opacity":0.45}},{"id":"landuse-civic","type":"fill","source":"openmaptiles","source-layer":"landuse","minzoom":12,"filter":["in","class","school","university","college","hospital","stadium"],"paint":{"fill-color":"#1e2a40","fill-opacity":0.45}},{"metadata":{"nafirka:note":"Diori Hamani International. The tileset has carried `aeroway` since the first build and the style never drew it, so the airport — a landmark the size of a quartier on the south-east of every city view — was a hole in the map."},"id":"aeroway-area","type":"fill","source":"openmaptiles","source-layer":"aeroway","minzoom":10,"filter":["==","$type","Polygon"],"paint":{"fill-color":"#1e2a40","fill-opacity":0.55}},{"id":"aeroway-runway","type":"line","source":"openmaptiles","source-layer":"aeroway","minzoom":11,"filter":["all",["==","$type","LineString"],["==","class","runway"]],"layout":{"line-cap":"butt"},"paint":{"line-color":"#4d5568","line-width":["interpolate",["exponential",1.5],["zoom"],11,1.4,14,6,18,26]}},{"id":"aeroway-taxiway","type":"line","source":"openmaptiles","source-layer":"aeroway","minzoom":12,"filter":["all",["==","$type","LineString"],["==","class","taxiway"]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#4d5568","line-width":["interpolate",["exponential",1.5],["zoom"],12,0.6,14,1.6,18,7]}},{"metadata":{"nafirka:note":"Drawn BEFORE the water fill on purpose. The Niger through Niamey is a polygon; with the centreline over it, a blue seam ran down the middle of the river. Underneath, wide water hides its own centreline and only the narrow streams no polygon covers still draw."},"id":"waterway","type":"line","source":"openmaptiles","source-layer":"waterway","minzoom":8,"filter":["!in","class","ditch","drain"],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#17435f","line-width":["interpolate",["exponential",1.4],["zoom"],8,0.6,14,2.4,18,6]}},{"id":"water","type":"fill","source":"openmaptiles","source-layer":"water","filter":["all",["==","$type","Polygon"],["!=","intermittent",1]],"paint":{"fill-color":"#10314b"}},{"id":"water-intermittent","type":"fill","source":"openmaptiles","source-layer":"water","filter":["all",["==","$type","Polygon"],["==","intermittent",1]],"paint":{"fill-color":"#10314b","fill-opacity":0.45}},{"metadata":{"nafirka:note":"The shore. A filled polygon with no edge reads as a silhouette; one line a step darker along its boundary is most of why other maps' water looks drawn rather than poured."},"id":"water-bank","type":"line","source":"openmaptiles","source-layer":"water","filter":["==","$type","Polygon"],"layout":{"line-join":"round"},"paint":{"line-color":"#17435f","line-opacity":0.75,"line-width":["interpolate",["linear"],["zoom"],8,0.4,14,1.2,18,2.2]}},{"id":"building","type":"fill","source":"openmaptiles","source-layer":"building","minzoom":13,"paint":{"fill-color":"#262f42","fill-outline-color":"#354056","fill-opacity":["interpolate",["linear"],["zoom"],13,0,14.5,0.85,16.5,0.95]}},{"metadata":{"nafirka:note":"Buildings gain height only when the camera tilts — navigation and boarding views pitch the map, and a block that rises as you turn the corner is what makes a street feel like the street you are standing in. Flat views (pitch 0) see nothing but the fill above; the extrusion has no height to show from straight overhead. OSM's `render_height` where it exists, a modest default otherwise."},"id":"building-3d","type":"fill-extrusion","source":"openmaptiles","source-layer":"building","minzoom":15.5,"paint":{"fill-extrusion-color":"#262f42","fill-extrusion-height":["interpolate",["linear"],["zoom"],15.5,0,16.5,["coalesce",["get","render_height"],5]],"fill-extrusion-base":["coalesce",["get","render_min_height"],0],"fill-extrusion-opacity":0.8,"fill-extrusion-vertical-gradient":true}},{"metadata":{"nafirka:note":"Under the ground, so drawn before the buildings and dashed. `brunnel` has always been in the transportation layer and the style ignored it, which meant a tunnel was indistinguishable from the street above it."},"id":"road-tunnel-case","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["==","brunnel","tunnel"],["in","class","motorway","trunk","primary","secondary","tertiary","minor","service"]],"layout":{"line-cap":"butt","line-join":"round"},"paint":{"line-color":"#2a3140","line-opacity":0.6,"line-dasharray":[1.5,1.5],"line-width":["interpolate",["exponential",1.5],["zoom"],12,["match",["get","class"],"motorway",4,"trunk",3.6,"primary",3.6,"secondary",2.8,"tertiary",2.8,2],18,["match",["get","class"],"motorway",28,"trunk",26,"primary",26,"secondary",20,"tertiary",20,10]]}},{"id":"road-tunnel","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["==","brunnel","tunnel"],["in","class","motorway","trunk","primary","secondary","tertiary","minor","service"]],"layout":{"line-cap":"butt","line-join":"round"},"paint":{"line-color":"#1e2637","line-width":["interpolate",["exponential",1.5],["zoom"],12,["match",["get","class"],"motorway",2.6,"trunk",2.4,"primary",2.4,"secondary",1.8,"tertiary",1.8,1.2],18,["match",["get","class"],"motorway",24,"trunk",22,"primary",22,"secondary",17,"tertiary",17,8]]}},{"id":"road-path","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":13,"filter":["in","class","path","track"],"layout":{"line-cap":"butt","line-join":"round"},"paint":{"line-color":"#414a5b","line-width":["interpolate",["exponential",1.5],["zoom"],13,0.5,18,3],"line-dasharray":[2,2]}},{"id":"road-service-case","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["in","class","service","minor"],["!=","brunnel","bridge"],["!=","brunnel","tunnel"]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#2a3140","line-width":["interpolate",["exponential",1.5],["zoom"],12,1.6,13.5,2.4,18,10]}},{"id":"road-major-case","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":9,"filter":["all",["in","class","secondary","tertiary"],["!=","brunnel","bridge"],["!=","brunnel","tunnel"]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#343c4d","line-width":["interpolate",["exponential",1.5],["zoom"],9,1.4,14,6,18,20]}},{"id":"road-primary-case","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":7,"filter":["all",["in","class","primary","trunk"],["!=","brunnel","bridge"],["!=","brunnel","tunnel"]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#8a6a3c","line-width":["interpolate",["exponential",1.5],["zoom"],7,1.6,14,8,18,26]}},{"id":"road-motorway-case","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":5,"filter":["all",["==","class","motorway"],["!=","brunnel","bridge"],["!=","brunnel","tunnel"]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#b56c2e","line-width":["interpolate",["exponential",1.5],["zoom"],5,1.6,14,9,18,28]}},{"id":"road-service","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["in","class","service","minor"],["!=","brunnel","bridge"],["!=","brunnel","tunnel"]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#39414f","line-width":["interpolate",["exponential",1.5],["zoom"],12,0.9,13.5,1.5,18,8]}},{"id":"road-major","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":9,"filter":["all",["in","class","secondary","tertiary"],["!=","brunnel","bridge"],["!=","brunnel","tunnel"]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#4d5568","line-width":["interpolate",["exponential",1.5],["zoom"],9,0.6,14,4,18,17]}},{"id":"road-primary","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":7,"filter":["all",["in","class","primary","trunk"],["!=","brunnel","bridge"],["!=","brunnel","tunnel"]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#6a7284","line-width":["interpolate",["exponential",1.5],["zoom"],7,0.8,14,5.5,18,22]}},{"id":"road-motorway","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":5,"filter":["all",["==","class","motorway"],["!=","brunnel","bridge"],["!=","brunnel","tunnel"]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#9096a4","line-width":["interpolate",["exponential",1.5],["zoom"],5,0.8,14,6.5,18,24]}},{"metadata":{"nafirka:note":"Over the ground, so drawn after the buildings and on a halo in the ground colour — the outline is what makes a bridge read as lifted rather than lying on what it crosses. Niamey's two Niger crossings are the most recognisable structures in the city and were flat road on flat water until this layer existed."},"id":"road-bridge-halo","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["==","brunnel","bridge"],["in","class","motorway","trunk","primary","secondary","tertiary","minor","service"]],"layout":{"line-cap":"butt","line-join":"round"},"paint":{"line-color":"#141a26","line-width":["interpolate",["exponential",1.5],["zoom"],12,["match",["get","class"],"motorway",7,"trunk",6.4,"primary",6.4,"secondary",5,"tertiary",5,3.4],18,["match",["get","class"],"motorway",36,"trunk",34,"primary",34,"secondary",27,"tertiary",27,14]]}},{"id":"road-bridge-case","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["==","brunnel","bridge"],["in","class","motorway","trunk","primary","secondary","tertiary","minor","service"]],"layout":{"line-cap":"butt","line-join":"round"},"paint":{"line-color":["match",["get","class"],"motorway","#b56c2e","trunk","#8a6a3c","primary","#8a6a3c","secondary","#343c4d","tertiary","#343c4d","#2a3140"],"line-width":["interpolate",["exponential",1.5],["zoom"],12,["match",["get","class"],"motorway",5,"trunk",4.5,"primary",4.5,"secondary",3.4,"tertiary",3.4,2.2],18,["match",["get","class"],"motorway",28,"trunk",26,"primary",26,"secondary",20,"tertiary",20,10]]}},{"id":"road-bridge","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["==","brunnel","bridge"],["in","class","motorway","trunk","primary","secondary","tertiary","minor","service"]],"layout":{"line-cap":"butt","line-join":"round"},"paint":{"line-color":["match",["get","class"],"motorway","#9096a4","trunk","#6a7284","primary","#6a7284","secondary","#4d5568","tertiary","#4d5568","#39414f"],"line-width":["interpolate",["exponential",1.5],["zoom"],12,["match",["get","class"],"motorway",3.4,"trunk",3,"primary",3,"secondary",2.2,"tertiary",2.2,1.4],18,["match",["get","class"],"motorway",24,"trunk",22,"primary",22,"secondary",17,"tertiary",17,8]]}},{"id":"boundary","type":"line","source":"openmaptiles","source-layer":"boundary","filter":["<=","admin_level",4],"layout":{"line-join":"round"},"paint":{"line-color":"#4b526a","line-width":["interpolate",["linear"],["zoom"],3,0.5,10,1.6],"line-dasharray":[3,2]}},{"id":"label-water","type":"symbol","source":"openmaptiles","source-layer":"water_name","minzoom":9,"filter":["==","$type","Point"],"layout":{"text-field":["coalesce",["get","name:fr"],["get","name"]],"text-font":["Roboto Italic"],"text-size":["interpolate",["linear"],["zoom"],9,10.5,16,14.5],"text-letter-spacing":0.04,"text-max-width":8},"paint":{"text-color":"#78aacc","text-halo-color":"#0e131c","text-halo-width":1.2,"text-halo-blur":0.6}},{"metadata":{"nafirka:note":"`Fleuve Niger` flowing along the river rather than sitting in a blob beside it. water_name is point geometry for lakes; the river's name belongs on the waterway centreline, which is the one feature that defines this city."},"id":"label-waterway","type":"symbol","source":"openmaptiles","source-layer":"waterway","minzoom":10,"filter":["in","class","river","canal"],"layout":{"symbol-placement":"line","text-field":["coalesce",["get","name:fr"],["get","name"]],"text-font":["Roboto Italic"],"text-size":["interpolate",["linear"],["zoom"],10,10,16,14],"text-letter-spacing":0.08,"text-max-angle":30,"symbol-spacing":420},"paint":{"text-color":"#78aacc","text-halo-color":"#0e131c","text-halo-width":1.2,"text-halo-blur":0.6}},{"metadata":{"nafirka:note":"Two kinds of street name. `Boulevard de la Liberté` is how a person gives a direction; `Rue LI - 20` is a cadastral number nobody says aloud — Niamey's grid names most streets that way, and labelled equally they drown the few names that carry meaning. The numbered pattern (a ` - ` in the name) is set smaller, lighter and later; the named streets keep their size and arrive first."},"id":"label-road","type":"symbol","source":"openmaptiles","source-layer":"transportation_name","minzoom":12,"layout":{"symbol-placement":"line","text-field":["coalesce",["get","name:fr"],["get","name"]],"text-font":["case",[">=",["index-of"," - ",["coalesce",["get","name:fr"],["get","name"]]],0],["literal",["Roboto Condensed Regular"]],["literal",["Roboto Regular"]]],"text-size":["interpolate",["linear"],["zoom"],12,["case",[">=",["index-of"," - ",["coalesce",["get","name:fr"],["get","name"]]],0],0,9],14,["case",[">=",["index-of"," - ",["coalesce",["get","name:fr"],["get","name"]]],0],0,10.5],14.5,["case",[">=",["index-of"," - ",["coalesce",["get","name:fr"],["get","name"]]],0],8,10.9],18,["case",[">=",["index-of"," - ",["coalesce",["get","name:fr"],["get","name"]]],0],10.5,13.5]],"text-max-angle":30,"symbol-spacing":320,"symbol-sort-key":["case",[">=",["index-of"," - ",["coalesce",["get","name:fr"],["get","name"]]],0],2,1]},"paint":{"text-color":"#a39a8a","text-opacity":["case",[">=",["index-of"," - ",["coalesce",["get","name:fr"],["get","name"]]],0],0.72,1],"text-halo-color":"#0e131c","text-halo-width":1.4,"text-halo-blur":0.6}},{"metadata":{"nafirka:note":"z17.5 and above only. Nobody draws these on a general map, but this one is read at the kerb: a driver matching the number on a gate is the last ten metres of every pickup."},"id":"label-housenumber","type":"symbol","source":"openmaptiles","source-layer":"housenumber","minzoom":17.5,"layout":{"text-field":["get","housenumber"],"text-font":["Roboto Regular"],"text-size":["interpolate",["linear"],["zoom"],17.5,8.5,20,10.5],"text-padding":4},"paint":{"text-color":"#a39a8a","text-opacity":0.7,"text-halo-color":"#0e131c","text-halo-width":1,"text-halo-blur":0.5}},{"id":"label-aerodrome","type":"symbol","source":"openmaptiles","source-layer":"aerodrome_label","minzoom":11,"maxzoom":16,"layout":{"text-field":["coalesce",["get","name:fr"],["get","name"]],"text-font":["Roboto Condensed Regular"],"text-size":["interpolate",["linear"],["zoom"],11,10,15,12.5],"text-max-width":8,"text-letter-spacing":0.05,"text-padding":6},"paint":{"text-color":"#c9bfae","text-halo-color":"#0e131c","text-halo-width":1.4,"text-halo-blur":0.6}},{"id":"label-neighbourhood","type":"symbol","source":"openmaptiles","source-layer":"place","minzoom":12,"filter":["in","class","suburb","neighbourhood","quarter","hamlet"],"layout":{"text-field":["coalesce",["get","name:fr"],["get","name"]],"text-font":["Roboto Condensed Bold"],"text-size":["interpolate",["linear"],["zoom"],12,11,16,14],"text-max-width":9,"text-transform":"uppercase","text-letter-spacing":0.14,"text-padding":6},"paint":{"text-color":"#c9bfae","text-halo-color":"#0e131c","text-halo-width":1.4,"text-halo-blur":0.6}},{"metadata":{"nafirka:note":"Country and region names. The `place` layer carries class country/state and this style drew neither, so every view above z9 — the one an operator opens when a vehicle is somewhere out in the country — was an unlabelled outline. Letterspaced caps at country level is the convention every reference basemap uses for the largest polygons, and it is what makes a continental view readable without competing with anything at street level, where these are already gone."},"id":"label-country","type":"symbol","source":"openmaptiles","source-layer":"place","maxzoom":9,"filter":["==","class","country"],"layout":{"text-field":["coalesce",["get","name:fr"],["get","name"]],"text-font":["Roboto Bold"],"text-transform":"uppercase","text-letter-spacing":0.22,"text-size":["interpolate",["linear"],["zoom"],2,9,4,11,7,15],"text-max-width":7,"text-padding":6,"symbol-sort-key":["coalesce",["get","rank"],99]},"paint":{"text-color":"#f2ecdf","text-halo-color":"#0e131c","text-halo-width":1.6,"text-halo-blur":0.7}},{"id":"label-state","type":"symbol","source":"openmaptiles","source-layer":"place","minzoom":4,"maxzoom":10,"filter":["==","class","state"],"layout":{"text-field":["coalesce",["get","name:fr"],["get","name"]],"text-font":["Roboto Medium"],"text-size":["interpolate",["linear"],["zoom"],4,9,9,12],"text-letter-spacing":0.06,"text-max-width":8,"text-padding":4},"paint":{"text-color":"#c9bfae","text-halo-color":"#0e131c","text-halo-width":1.4,"text-halo-blur":0.6}},{"id":"label-place","type":"symbol","source":"openmaptiles","source-layer":"place","maxzoom":14,"filter":["in","class","city","town","village"],"layout":{"text-field":["coalesce",["get","name:fr"],["get","name"]],"text-font":["Roboto Bold"],"text-size":["interpolate",["linear"],["zoom"],4,11,10,17,14,22],"text-max-width":8,"text-letter-spacing":0.02,"text-padding":8},"paint":{"text-color":"#f2ecdf","text-halo-color":"#0e131c","text-halo-width":1.8,"text-halo-blur":0.8}}]}