diff --git a/public/assets/protomaps.json b/public/assets/protomaps.json
new file mode 100644
index 0000000000..bdc30a9dc8
--- /dev/null
+++ b/public/assets/protomaps.json
@@ -0,0 +1,423 @@
+{
+ "attribution": "© OpenStreetMap",
+ "bounds": [
+ -180,
+ -85.0511287,
+ 180,
+ 85.0511287
+ ],
+ "center": [
+ 0,
+ 0,
+ 0
+ ],
+ "description": "Basemap layers derived from OpenStreetMap and Natural Earth, self-hosted",
+ "maxzoom": 15,
+ "minzoom": 0,
+ "name": "Protomaps Basemap",
+ "scheme": "xyz",
+ "tilejson": "3.0.0",
+ "tiles": [
+ "https://api.protomaps.com/tiles/v4/{z}/{x}/{y}.mvt?key=e6cd5633d51d8e24"
+ ],
+ "vector_layers": [
+ {
+ "fields": {
+ "brk_a3": "String",
+ "disputed": "Boolean",
+ "kind": "String",
+ "kind_detail": "Number",
+ "sort_rank": "Number"
+ },
+ "id": "boundaries",
+ "maxzoom": 15,
+ "minzoom": 0
+ },
+ {
+ "fields": {
+ "addr_housenumber": "String",
+ "height": "Number",
+ "kind": "String",
+ "kind_detail": "String",
+ "layer": "Number",
+ "min_height": "Number",
+ "sort_rank": "Number"
+ },
+ "id": "buildings",
+ "maxzoom": 15,
+ "minzoom": 11
+ },
+ {
+ "fields": {
+ "kind": "String",
+ "min_zoom": "Number",
+ "name": "String",
+ "name2": "String",
+ "name3": "String",
+ "name:ar": "String",
+ "name:bg": "String",
+ "name:cs": "String",
+ "name:da": "String",
+ "name:de": "String",
+ "name:el": "String",
+ "name:en": "String",
+ "name:es": "String",
+ "name:et": "String",
+ "name:fa": "String",
+ "name:fi": "String",
+ "name:fr": "String",
+ "name:ga": "String",
+ "name:he": "String",
+ "name:hi": "String",
+ "name:hr": "String",
+ "name:hu": "String",
+ "name:id": "String",
+ "name:it": "String",
+ "name:ja": "String",
+ "name:ko": "String",
+ "name:lt": "String",
+ "name:lv": "String",
+ "name:mr": "String",
+ "name:mt": "String",
+ "name:ne": "String",
+ "name:nl": "String",
+ "name:no": "String",
+ "name:pl": "String",
+ "name:pt": "String",
+ "name:ro": "String",
+ "name:ru": "String",
+ "name:sk": "String",
+ "name:sl": "String",
+ "name:sv": "String",
+ "name:tr": "String",
+ "name:uk": "String",
+ "name:ur": "String",
+ "name:vi": "String",
+ "name:zh-Hans": "String",
+ "name:zh-Hant": "String",
+ "pgf:name2": "String",
+ "pgf:name:hi": "String",
+ "pgf:name:mr": "String",
+ "pgf:name:ne": "String",
+ "script": "String",
+ "script2": "String",
+ "script3": "String"
+ },
+ "id": "earth",
+ "maxzoom": 15,
+ "minzoom": 0
+ },
+ {
+ "fields": {
+ "kind": "String"
+ },
+ "id": "landcover",
+ "maxzoom": 7,
+ "minzoom": 0
+ },
+ {
+ "fields": {
+ "kind": "String",
+ "sort_rank": "Number"
+ },
+ "id": "landuse",
+ "maxzoom": 15,
+ "minzoom": 2
+ },
+ {
+ "fields": {
+ "capital": "String",
+ "kind": "String",
+ "kind_detail": "String",
+ "min_zoom": "Number",
+ "name": "String",
+ "name2": "String",
+ "name3": "String",
+ "name:ar": "String",
+ "name:bg": "String",
+ "name:cs": "String",
+ "name:da": "String",
+ "name:de": "String",
+ "name:el": "String",
+ "name:en": "String",
+ "name:es": "String",
+ "name:et": "String",
+ "name:fa": "String",
+ "name:fi": "String",
+ "name:fr": "String",
+ "name:ga": "String",
+ "name:he": "String",
+ "name:hi": "String",
+ "name:hr": "String",
+ "name:hu": "String",
+ "name:id": "String",
+ "name:it": "String",
+ "name:ja": "String",
+ "name:ko": "String",
+ "name:lt": "String",
+ "name:lv": "String",
+ "name:mr": "String",
+ "name:mt": "String",
+ "name:ne": "String",
+ "name:nl": "String",
+ "name:no": "String",
+ "name:pl": "String",
+ "name:pt": "String",
+ "name:ro": "String",
+ "name:ru": "String",
+ "name:sk": "String",
+ "name:sl": "String",
+ "name:sv": "String",
+ "name:tr": "String",
+ "name:uk": "String",
+ "name:ur": "String",
+ "name:vi": "String",
+ "name:zh-Hans": "String",
+ "name:zh-Hant": "String",
+ "pgf:name": "String",
+ "pgf:name2": "String",
+ "pgf:name:en": "String",
+ "pgf:name:hi": "String",
+ "pgf:name:mr": "String",
+ "pgf:name:ne": "String",
+ "population": "Number",
+ "population_rank": "Number",
+ "ref": "String",
+ "ref:FR:FANTOIR": "String",
+ "ref:FR:SIREN": "String",
+ "ref:RS:nkd": "String",
+ "ref:USCG": "String",
+ "ref:USPS": "String",
+ "ref:assessors_office": "String",
+ "ref:catasto": "String",
+ "ref:category": "String",
+ "ref:en": "String",
+ "ref:lzh": "String",
+ "ref:nid": "String",
+ "ref:se:pts:postort": "String",
+ "ref:vi": "String",
+ "ref:whc": "String",
+ "ref:xpcc": "String",
+ "ref:zh": "String",
+ "ref:zh-Hans": "String",
+ "ref:zh-Hant": "String",
+ "script": "String",
+ "script2": "String",
+ "script3": "String",
+ "sort_key": "Number",
+ "wikidata": "String"
+ },
+ "id": "places",
+ "maxzoom": 15,
+ "minzoom": 0
+ },
+ {
+ "fields": {
+ "elevation": "String",
+ "iata": "String",
+ "kind": "String",
+ "kind_detail": "String",
+ "min_zoom": "Number",
+ "name": "String",
+ "name2": "String",
+ "name3": "String",
+ "name:ar": "String",
+ "name:bg": "String",
+ "name:cs": "String",
+ "name:da": "String",
+ "name:de": "String",
+ "name:el": "String",
+ "name:en": "String",
+ "name:es": "String",
+ "name:et": "String",
+ "name:fa": "String",
+ "name:fi": "String",
+ "name:fr": "String",
+ "name:ga": "String",
+ "name:he": "String",
+ "name:hi": "String",
+ "name:hr": "String",
+ "name:hu": "String",
+ "name:id": "String",
+ "name:it": "String",
+ "name:ja": "String",
+ "name:ko": "String",
+ "name:lt": "String",
+ "name:lv": "String",
+ "name:mr": "String",
+ "name:mt": "String",
+ "name:ne": "String",
+ "name:nl": "String",
+ "name:no": "String",
+ "name:pl": "String",
+ "name:pt": "String",
+ "name:ro": "String",
+ "name:ru": "String",
+ "name:sk": "String",
+ "name:sl": "String",
+ "name:sv": "String",
+ "name:tr": "String",
+ "name:uk": "String",
+ "name:ur": "String",
+ "name:vi": "String",
+ "name:zh-Hans": "String",
+ "name:zh-Hant": "String",
+ "pgf:name": "String",
+ "pgf:name2": "String",
+ "pgf:name3": "String",
+ "pgf:name:en": "String",
+ "pgf:name:he": "String",
+ "pgf:name:hi": "String",
+ "pgf:name:mr": "String",
+ "pgf:name:ne": "String",
+ "script": "String",
+ "script2": "String",
+ "script3": "String"
+ },
+ "id": "pois",
+ "maxzoom": 15,
+ "minzoom": 5
+ },
+ {
+ "fields": {
+ "is_bridge": "Boolean",
+ "is_link": "Boolean",
+ "is_tunnel": "Boolean",
+ "kind": "String",
+ "kind_detail": "String",
+ "min_zoom": "Number",
+ "name": "String",
+ "name2": "String",
+ "name3": "String",
+ "name:ar": "String",
+ "name:bg": "String",
+ "name:cs": "String",
+ "name:da": "String",
+ "name:de": "String",
+ "name:el": "String",
+ "name:en": "String",
+ "name:es": "String",
+ "name:et": "String",
+ "name:fa": "String",
+ "name:fi": "String",
+ "name:fr": "String",
+ "name:ga": "String",
+ "name:he": "String",
+ "name:hi": "String",
+ "name:hr": "String",
+ "name:hu": "String",
+ "name:id": "String",
+ "name:it": "String",
+ "name:ja": "String",
+ "name:ko": "String",
+ "name:lt": "String",
+ "name:lv": "String",
+ "name:mr": "String",
+ "name:mt": "String",
+ "name:ne": "String",
+ "name:nl": "String",
+ "name:no": "String",
+ "name:pl": "String",
+ "name:pt": "String",
+ "name:ro": "String",
+ "name:ru": "String",
+ "name:sk": "String",
+ "name:sl": "String",
+ "name:sv": "String",
+ "name:tr": "String",
+ "name:uk": "String",
+ "name:ur": "String",
+ "name:vi": "String",
+ "name:zh-Hans": "String",
+ "name:zh-Hant": "String",
+ "network": "String",
+ "oneway": "String",
+ "pgf:name": "String",
+ "pgf:name2": "String",
+ "pgf:name:en": "String",
+ "pgf:name:hi": "String",
+ "pgf:name:mr": "String",
+ "pgf:name:ne": "String",
+ "ref": "String",
+ "route": "String",
+ "script": "String",
+ "script2": "String",
+ "script3": "String",
+ "service": "String",
+ "shield_text_length": "Number",
+ "sort_rank": "Number"
+ },
+ "id": "roads",
+ "maxzoom": 15,
+ "minzoom": 3
+ },
+ {
+ "fields": {
+ "bridge": "String",
+ "kind": "String",
+ "kind_detail": "String",
+ "layer": "Number",
+ "min_zoom": "Number",
+ "name": "String",
+ "name2": "String",
+ "name3": "String",
+ "name:ar": "String",
+ "name:bg": "String",
+ "name:cs": "String",
+ "name:da": "String",
+ "name:de": "String",
+ "name:el": "String",
+ "name:en": "String",
+ "name:es": "String",
+ "name:et": "String",
+ "name:fa": "String",
+ "name:fi": "String",
+ "name:fr": "String",
+ "name:ga": "String",
+ "name:he": "String",
+ "name:hi": "String",
+ "name:hr": "String",
+ "name:hu": "String",
+ "name:id": "String",
+ "name:it": "String",
+ "name:ja": "String",
+ "name:ko": "String",
+ "name:lt": "String",
+ "name:lv": "String",
+ "name:mr": "String",
+ "name:mt": "String",
+ "name:ne": "String",
+ "name:nl": "String",
+ "name:no": "String",
+ "name:pl": "String",
+ "name:pt": "String",
+ "name:ro": "String",
+ "name:ru": "String",
+ "name:sk": "String",
+ "name:sl": "String",
+ "name:sv": "String",
+ "name:tr": "String",
+ "name:uk": "String",
+ "name:ur": "String",
+ "name:vi": "String",
+ "name:zh-Hans": "String",
+ "name:zh-Hant": "String",
+ "pgf:name": "String",
+ "pgf:name2": "String",
+ "pgf:name:en": "String",
+ "pgf:name:hi": "String",
+ "pgf:name:mr": "String",
+ "pgf:name:ne": "String",
+ "script": "String",
+ "script2": "String",
+ "script3": "String",
+ "sort_rank": "Number",
+ "tunnel": "String"
+ },
+ "id": "water",
+ "maxzoom": 15,
+ "minzoom": 0
+ }
+ ],
+ "version": "4.11.0"
+}
diff --git a/public/assets/sunny-hosted.json b/public/assets/sunny-hosted.json
new file mode 100644
index 0000000000..7db18a2557
--- /dev/null
+++ b/public/assets/sunny-hosted.json
@@ -0,0 +1,4085 @@
+{
+ "#": "AUTOMATICALLY GENERATED! Do not edit.",
+ "version": 8,
+ "name": "style@4.0.0-alpha.0 theme@sunny",
+ "glyphs": "https://protomaps.github.io/basemaps-assets/fonts/{fontstack}/{range}.pbf",
+ "sources": {
+ "protomaps": {
+ "attribution": "Protomaps © OpenStreetMap",
+ "type": "vector",
+ "maxzoom": 15,
+ "tiles": [
+ "https://api.protomaps.com/tiles/v4/{z}/{x}/{y}.mvt?key=2af8b969a9e8b692"
+ ]
+ }
+ },
+ "layers": [
+ {
+ "id": "background",
+ "type": "background",
+ "paint": {
+ "background-color": "#f0efdd"
+ }
+ },
+ {
+ "id": "earth",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "earth",
+ "paint": {
+ "fill-color": "#fcf7e5"
+ }
+ },
+ {
+ "id": "landcover_low_zooms",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landcover",
+ "paint": {
+ "fill-color": [
+ "match",
+ [
+ "get",
+ "kind"
+ ],
+ "grassland",
+ "#e5f2c9",
+ "barren",
+ "rgba(255, 243, 215, 1)",
+ "urban_area",
+ "rgba(230, 230, 230, 1)",
+ "farmland",
+ "rgba(216, 239, 210, 1)",
+ "glacier",
+ "rgba(255, 255, 255, 1)",
+ "scrub",
+ "rgba(234, 239, 210, 1)",
+ "#f0efdd"
+ ],
+ "fill-opacity": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 5,
+ 1,
+ 7,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "landuse_farmland",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "farmland"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#EEF0D5"
+ }
+ },
+ {
+ "id": "landuse_residential",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "residential"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#f0ead9"
+ }
+ },
+ {
+ "id": "landuse_park",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "in",
+ "kind",
+ "national_park",
+ "park",
+ "cemetery",
+ "nature_reserve",
+ "golf_course"
+ ],
+ "paint": {
+ "fill-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 2,
+ "#f0efdd",
+ 10,
+ "#dfede5",
+ 18,
+ "#b0e9b0"
+ ]
+ }
+ },
+ {
+ "id": "landuse_urban_green",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "allotments",
+ "village_green",
+ "playground"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#9cd3b4",
+ "fill-opacity": 0.7
+ }
+ },
+ {
+ "id": "landuse_hospital",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "==",
+ "kind",
+ "hospital"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#f9e1dc"
+ }
+ },
+ {
+ "id": "landuse_industrial",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "==",
+ "kind",
+ "industrial"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#efdfe8"
+ }
+ },
+ {
+ "id": "landuse_school",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "school",
+ "university",
+ "college"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#e4dec7"
+ }
+ },
+ {
+ "id": "landuse_beach",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "beach"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#e8e4d0"
+ }
+ },
+ {
+ "id": "landuse_zoo",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "zoo"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#c6dcdc"
+ }
+ },
+ {
+ "id": "landuse_military",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "military",
+ "naval_base",
+ "airfield"
+ ]
+ ],
+ "paint": {
+ "fill-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 5,
+ "#f0efdd",
+ 8,
+ "#ecad9366"
+ ]
+ }
+ },
+ {
+ "id": "natural_wood",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "in",
+ "kind",
+ "wood",
+ "forest"
+ ],
+ "paint": {
+ "fill-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 2,
+ "#f0efdd",
+ 9,
+ "#d0ded0",
+ 13,
+ "#add19e",
+ 18,
+ "#add19e"
+ ]
+ }
+ },
+ {
+ "id": "natural_scrub",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "in",
+ "kind",
+ "scrub",
+ "grassland",
+ "grass"
+ ],
+ "paint": {
+ "fill-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 0,
+ "#cedcd7",
+ 12,
+ "#99d2bb"
+ ]
+ }
+ },
+ {
+ "id": "natural_glacier",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "kind",
+ "glacier"
+ ],
+ "paint": {
+ "fill-color": "#e7e7e7"
+ }
+ },
+ {
+ "id": "natural_sand",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "kind",
+ "sand"
+ ],
+ "paint": {
+ "fill-color": "#e2e0d7"
+ }
+ },
+ {
+ "id": "landuse_park_line",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "national_park",
+ "park",
+ "cemetery",
+ "nature_reserve",
+ "golf_course"
+ ]
+ ],
+ "paint": {
+ "line-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 8,
+ "#fcf7e5",
+ 10,
+ "#afbdb5",
+ 16,
+ "#7cb384"
+ ]
+ }
+ },
+ {
+ "id": "landuse_aerodrome",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "aerodrome"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#dadbdf"
+ }
+ },
+ {
+ "id": "roads_runway",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind_detail",
+ "runway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e9e9ed",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 10,
+ 0,
+ 12,
+ 4,
+ 18,
+ 30
+ ]
+ }
+ },
+ {
+ "id": "roads_taxiway",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 13,
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind_detail",
+ "taxiway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e9e9ed",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 13,
+ 0,
+ 13.5,
+ 1,
+ 15,
+ 6
+ ]
+ }
+ },
+ {
+ "id": "landuse_runway",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "runway",
+ "taxiway"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#e9e9ed"
+ }
+ },
+ {
+ "id": "water",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "water",
+ "filter": [
+ "==",
+ "$type",
+ "Polygon"
+ ],
+ "paint": {
+ "fill-color": "#85c2e9"
+ }
+ },
+ {
+ "id": "water_stream",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "water",
+ "minzoom": 10,
+ "filter": [
+ "in",
+ "kind",
+ "stream"
+ ],
+ "paint": {
+ "line-color": "#85c2e9",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 12,
+ 0,
+ 18,
+ 10
+ ]
+ }
+ },
+ {
+ "id": "water_river",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "water",
+ "minzoom": 9,
+ "filter": [
+ "in",
+ "kind",
+ "river"
+ ],
+ "paint": {
+ "line-color": "#85c2e9",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 9,
+ 0,
+ 9.5,
+ 1,
+ 18,
+ 12
+ ]
+ }
+ },
+ {
+ "id": "water_underground_stream",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "water",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "in",
+ "kind",
+ "stream"
+ ],
+ [
+ "has",
+ "is_tunnel"
+ ]
+ ],
+ "paint": {
+ "line-color": "#85c2e9",
+ "line-width": 0.5
+ }
+ },
+ {
+ "id": "water_underground_river",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "water",
+ "minzoom": 9,
+ "filter": [
+ "all",
+ [
+ "in",
+ "kind",
+ "river"
+ ],
+ [
+ "has",
+ "is_tunnel"
+ ]
+ ],
+ "layout": {
+ "line-cap": "round"
+ },
+ "paint": {
+ "line-color": "#85c2e9",
+ "line-dasharray": [
+ 0.75,
+ 1.75
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 9,
+ 0,
+ 9.5,
+ 1,
+ 18,
+ 6
+ ]
+ }
+ },
+ {
+ "id": "landuse_pedestrian",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "==",
+ "kind",
+ "pedestrian"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#e3e0d4"
+ }
+ },
+ {
+ "id": "landuse_pier",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "landuse",
+ "filter": [
+ "any",
+ [
+ "==",
+ "kind",
+ "pier"
+ ]
+ ],
+ "paint": {
+ "fill-color": "#e0e0e0"
+ }
+ },
+ {
+ "id": "roads_tunnels_other_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 7
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_footway_casing_outer",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "in",
+ "kind_detail",
+ "footway",
+ "cycleway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#888888",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 9
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_footway_casing_inner",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "in",
+ "kind_detail",
+ "footway",
+ "cycleway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#ffffff",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 8
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_minor_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "==",
+ "kind",
+ "minor_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-dasharray": [
+ 3,
+ 2
+ ],
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 11,
+ 0,
+ 12.5,
+ 0.5,
+ 15,
+ 2,
+ 18,
+ 11
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 12,
+ 0,
+ 12.5,
+ 1
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_link_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "==",
+ "link",
+ 1
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-dasharray": [
+ 3,
+ 2
+ ],
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 13,
+ 0,
+ 13.5,
+ 1,
+ 18,
+ 11
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 12,
+ 0,
+ 12.5,
+ 1
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_major_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "==",
+ "kind",
+ "major_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-dasharray": [
+ 3,
+ 2
+ ],
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 7,
+ 0,
+ 7.5,
+ 0.5,
+ 18,
+ 13
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 9,
+ 0,
+ 9.5,
+ 1
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_highway_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "==",
+ "kind",
+ "highway"
+ ],
+ [
+ "!=",
+ "link",
+ 1
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-dasharray": [
+ 6,
+ 0.5
+ ],
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 3,
+ 0,
+ 3.5,
+ 0.5,
+ 18,
+ 15
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 7,
+ 0,
+ 7.5,
+ 1,
+ 20,
+ 15
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_other",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "!=",
+ "kind_detail",
+ "footway"
+ ],
+ [
+ "!=",
+ "kind_detail",
+ "cycleway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#d5d5d5",
+ "line-dasharray": [
+ 4.5,
+ 0.5
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 7
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_footway",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "==",
+ "kind_detail",
+ "footway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#d46710",
+ "line-dasharray": [
+ 4,
+ 1
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 5
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_cycleway",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "==",
+ "kind_detail",
+ "cycleway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#6099c9",
+ "line-dasharray": [
+ 4,
+ 1
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 5
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_minor",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "==",
+ "kind",
+ "minor_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#d5d5d5",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 11,
+ 0,
+ 12.5,
+ 0.5,
+ 15,
+ 2,
+ 18,
+ 11
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_link",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "==",
+ "link",
+ 1
+ ]
+ ],
+ "paint": {
+ "line-color": "#d5d5d5",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 13,
+ 0,
+ 13.5,
+ 1,
+ 18,
+ 11
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_major_outline",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "==",
+ "kind",
+ "major_road"
+ ]
+ ],
+ "paint": {
+ "line-dasharray": [
+ 0.4,
+ 0.1
+ ],
+ "line-color": "#d9a985",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 6,
+ 0,
+ 12,
+ 3.6,
+ 15,
+ 6,
+ 18,
+ 18
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_major",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "==",
+ "kind",
+ "major_road"
+ ]
+ ],
+ "paint": {
+ "line-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 8,
+ "#f9d9b5",
+ 18,
+ "#f9b9a5"
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 6,
+ 0,
+ 12,
+ 1.6,
+ 15,
+ 3,
+ 18,
+ 13
+ ]
+ }
+ },
+ {
+ "id": "roads_tunnels_highway",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_tunnel"
+ ],
+ [
+ "==",
+ "kind",
+ "highway"
+ ],
+ [
+ "!=",
+ "link",
+ 1
+ ]
+ ],
+ "paint": {
+ "line-color": "#d5d5d5",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 3,
+ 0,
+ 6,
+ 1.1,
+ 12,
+ 1.6,
+ 15,
+ 5,
+ 18,
+ 15
+ ]
+ }
+ },
+ {
+ "id": "roads_railway_tunnel",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "==",
+ "kind",
+ "rail"
+ ],
+ [
+ "has",
+ "is_tunnel"
+ ]
+ ],
+ "paint": {
+ "line-dasharray": [
+ 0.3,
+ 0.75
+ ],
+ "line-opacity": 0.5,
+ "line-color": "#333333",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 3,
+ 0,
+ 6,
+ 0.15,
+ 18,
+ 9
+ ]
+ }
+ },
+ {
+ "id": "buildings",
+ "type": "fill",
+ "source": "protomaps",
+ "source-layer": "buildings",
+ "paint": {
+ "fill-color": "#cccccc",
+ "fill-opacity": 0.7,
+ "fill-outline-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 15,
+ "#cccccc",
+ 18,
+ "#aaaaaa"
+ ]
+ }
+ },
+ {
+ "id": "transit_pier",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "==",
+ "kind_detail",
+ "pier"
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 12,
+ 0,
+ 12.5,
+ 0.5,
+ 20,
+ 16
+ ]
+ }
+ },
+ {
+ "id": "roads_minor_service_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "minor_road"
+ ],
+ [
+ "==",
+ "kind_detail",
+ "service"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 13,
+ 0,
+ 18,
+ 8
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 13,
+ 0,
+ 13.5,
+ 0.8
+ ]
+ }
+ },
+ {
+ "id": "roads_minor_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "minor_road"
+ ],
+ [
+ "!=",
+ "kind_detail",
+ "service"
+ ]
+ ],
+ "paint": {
+ "line-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 12,
+ "#dddddd",
+ 14,
+ "#aaaaaa",
+ 18,
+ "#888888"
+ ],
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 11,
+ 0,
+ 12.5,
+ 0.5,
+ 15,
+ 2,
+ 18,
+ 11
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 12,
+ 0,
+ 12.5,
+ 1
+ ]
+ }
+ },
+ {
+ "id": "roads_link_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "link",
+ 1
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 13,
+ 0,
+ 13.5,
+ 1,
+ 18,
+ 11
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 13,
+ 0,
+ 13.5,
+ 1.5
+ ]
+ }
+ },
+ {
+ "id": "roads_major_casing_late",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "major_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 6,
+ 0,
+ 12,
+ 1.6,
+ 15,
+ 3,
+ 18,
+ 13
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 9,
+ 0,
+ 9.5,
+ 1
+ ]
+ }
+ },
+ {
+ "id": "roads_highway_casing_late",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "highway"
+ ],
+ [
+ "!=",
+ "link",
+ 1
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 3,
+ 0,
+ 3.5,
+ 0.5,
+ 18,
+ 15
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 7,
+ 0,
+ 7.5,
+ 1,
+ 20,
+ 15
+ ]
+ }
+ },
+ {
+ "id": "roads_footway",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "==",
+ "kind_detail",
+ "footway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#d46710",
+ "line-dasharray": [
+ 3,
+ 1
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 7
+ ]
+ }
+ },
+ {
+ "id": "roads_cycleway",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "==",
+ "kind_detail",
+ "cycleway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#6099c9",
+ "line-dasharray": [
+ 3,
+ 1
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 7
+ ]
+ }
+ },
+ {
+ "id": "roads_other",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "!=",
+ "kind_detail",
+ "cycleway"
+ ],
+ [
+ "!=",
+ "kind_detail",
+ "footway"
+ ],
+ [
+ "!=",
+ "kind_detail",
+ "pier"
+ ]
+ ],
+ "paint": {
+ "line-color": "#cbbbab",
+ "line-dasharray": [
+ 3,
+ 1
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 7
+ ]
+ }
+ },
+ {
+ "id": "roads_link",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "link",
+ 1
+ ]
+ ],
+ "paint": {
+ "line-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 8,
+ "#f9d9b5",
+ 18,
+ "#f9b9a5"
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 6,
+ 0,
+ 12,
+ 1.6,
+ 15,
+ 3,
+ 18,
+ 13
+ ]
+ }
+ },
+ {
+ "id": "roads_minor_service",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "minor_road"
+ ],
+ [
+ "==",
+ "kind_detail",
+ "service"
+ ]
+ ],
+ "paint": {
+ "line-color": "#ebebeb",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 13,
+ 0,
+ 18,
+ 8
+ ]
+ }
+ },
+ {
+ "id": "roads_minor",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "minor_road"
+ ],
+ [
+ "!=",
+ "kind_detail",
+ "service"
+ ]
+ ],
+ "paint": {
+ "line-color": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 11,
+ "#ebebeb",
+ 16,
+ "#ffffff"
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 11,
+ 0,
+ 12.5,
+ 0.5,
+ 15,
+ 2,
+ 18,
+ 11
+ ]
+ }
+ },
+ {
+ "id": "roads_major_casing_early",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "maxzoom": 12,
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "major_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 7,
+ 0,
+ 7.5,
+ 0.5,
+ 18,
+ 13
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 9,
+ 0,
+ 9.5,
+ 1
+ ]
+ }
+ },
+ {
+ "id": "roads_major_outline",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "major_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#d9a985",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 6,
+ 0,
+ 12,
+ 3.6,
+ 15,
+ 6,
+ 18,
+ 18
+ ]
+ }
+ },
+ {
+ "id": "roads_major",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "major_road"
+ ]
+ ],
+ "paint": {
+ "line-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 8,
+ "#f9d9b5",
+ 18,
+ "#f9b9a5"
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 6,
+ 0,
+ 12,
+ 1.6,
+ 15,
+ 3,
+ 18,
+ 13
+ ]
+ }
+ },
+ {
+ "id": "roads_highway_casing_early",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "maxzoom": 12,
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "highway"
+ ],
+ [
+ "!=",
+ "link",
+ 1
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 3,
+ 0,
+ 3.5,
+ 0.5,
+ 18,
+ 15
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 7,
+ 0,
+ 7.5,
+ 1
+ ]
+ }
+ },
+ {
+ "id": "roads_highway",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "!has",
+ "is_tunnel"
+ ],
+ [
+ "!has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "highway"
+ ],
+ [
+ "!=",
+ "link",
+ 1
+ ]
+ ],
+ "paint": {
+ "line-color": "#f9b9a5",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 3,
+ 0,
+ 6,
+ 1.1,
+ 12,
+ 1.6,
+ 15,
+ 5,
+ 18,
+ 15
+ ]
+ }
+ },
+ {
+ "id": "roads_railway_bridge_centerline",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "==",
+ "kind",
+ "rail"
+ ],
+ [
+ "has",
+ "is_bridge"
+ ]
+ ],
+ "paint": {
+ "line-opacity": 1,
+ "line-color": "#ccc",
+ "line-width": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 11,
+ 0,
+ 11.5,
+ 2,
+ 13,
+ 8,
+ 18,
+ 14
+ ]
+ }
+ },
+ {
+ "id": "roads_railway_centerline",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "==",
+ "kind",
+ "rail"
+ ],
+ [
+ "!has",
+ "is_tunnel"
+ ]
+ ],
+ "paint": {
+ "line-opacity": 1,
+ "line-color": [
+ "match",
+ [
+ "get",
+ "kind_detail"
+ ],
+ "disused",
+ "#666666aa",
+ "tram",
+ "#999",
+ "subway",
+ "#999",
+ "#666"
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 11,
+ 0,
+ 11.5,
+ 1,
+ 13,
+ 3,
+ 18,
+ 6
+ ]
+ }
+ },
+ {
+ "id": "roads_railway",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "==",
+ "kind",
+ "rail"
+ ]
+ ],
+ "paint": {
+ "line-dasharray": [
+ 0.3,
+ 0.75
+ ],
+ "line-opacity": 0.5,
+ "line-color": "#a7b1b3",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 3,
+ 0,
+ 6,
+ 0.15,
+ 18,
+ 9
+ ]
+ }
+ },
+ {
+ "id": "boundaries_country",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "boundaries",
+ "filter": [
+ "<=",
+ "kind_detail",
+ 2
+ ],
+ "paint": {
+ "line-color": "#adadad",
+ "line-width": 1,
+ "line-dasharray": [
+ 3,
+ 2
+ ]
+ }
+ },
+ {
+ "id": "boundaries",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "boundaries",
+ "filter": [
+ ">",
+ "kind_detail",
+ 2
+ ],
+ "paint": {
+ "line-color": "#adadad",
+ "line-width": 0.5,
+ "line-dasharray": [
+ 3,
+ 2
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_other_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 18,
+ 10,
+ 20,
+ 16
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_link_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "has",
+ "is_link"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 13,
+ 0,
+ 13.5,
+ 1,
+ 18,
+ 11
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 12,
+ 0,
+ 12.5,
+ 1.5
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_minor_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "minor_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 11,
+ 0,
+ 12.5,
+ 0.5,
+ 15,
+ 2,
+ 18,
+ 11
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 13,
+ 0,
+ 13.5,
+ 0.8
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_medium_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "medium_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 7,
+ 0,
+ 12,
+ 1.2,
+ 15,
+ 3,
+ 18,
+ 13
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 10,
+ 0,
+ 10.5,
+ 1.5
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_major_casing",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "major_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#e0e0e0",
+ "line-gap-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 7,
+ 0,
+ 7.5,
+ 0.5,
+ 18,
+ 10
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 9,
+ 0,
+ 9.5,
+ 1.5
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_medium_outline",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "medium_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#7c6644",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 7,
+ 0,
+ 12,
+ 3.2,
+ 15,
+ 6,
+ 18,
+ 17
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_major_outline",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "major_road"
+ ]
+ ],
+ "paint": {
+ "line-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 8,
+ "#a98985",
+ 18,
+ "#a97975"
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 6,
+ 0,
+ 12,
+ 3.6,
+ 15,
+ 6,
+ 18,
+ 18
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_highway",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "highway"
+ ],
+ [
+ "!has",
+ "is_link"
+ ]
+ ],
+ "paint": {
+ "line-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 8,
+ "#f9d9b5",
+ 18,
+ "#f9b9a5"
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 6,
+ 0,
+ 12,
+ 1.6,
+ 15,
+ 3,
+ 18,
+ 13
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_minor",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "minor_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#ffffff",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 11,
+ 0,
+ 12.5,
+ 0.5,
+ 15,
+ 2,
+ 18,
+ 11
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_link",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "has",
+ "is_link"
+ ]
+ ],
+ "paint": {
+ "line-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 8,
+ "#f9d9b5",
+ 18,
+ "#f9b9a5"
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 6,
+ 0,
+ 12,
+ 1.6,
+ 15,
+ 3,
+ 18,
+ 13
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_medium",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "medium_road"
+ ]
+ ],
+ "paint": {
+ "line-color": "#fcd6a4",
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 7,
+ 0,
+ 12,
+ 1.2,
+ 15,
+ 3,
+ 18,
+ 13
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_major",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "==",
+ "kind",
+ "major_road"
+ ]
+ ],
+ "paint": {
+ "line-color": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 8,
+ "#f9d9b5",
+ 18,
+ "#f9b9a5"
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 6,
+ 0,
+ 12,
+ 1.6,
+ 15,
+ 3,
+ 18,
+ 13
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_cycleway_other",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "==",
+ "kind_detail",
+ "cycleway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#1069c9",
+ "line-dasharray": [
+ 2,
+ 1
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 7
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_footway_other",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "==",
+ "kind_detail",
+ "footway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#d46710",
+ "line-dasharray": [
+ 2,
+ 1
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 7
+ ]
+ }
+ },
+ {
+ "id": "roads_bridges_other",
+ "type": "line",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "has",
+ "is_bridge"
+ ],
+ [
+ "in",
+ "kind",
+ "other",
+ "path"
+ ],
+ [
+ "!=",
+ "kind_detail",
+ "cycleway"
+ ],
+ [
+ "!=",
+ "kind_detail",
+ "footway"
+ ]
+ ],
+ "paint": {
+ "line-color": "#ebebeb",
+ "line-dasharray": [
+ 2,
+ 1
+ ],
+ "line-width": [
+ "interpolate",
+ [
+ "exponential",
+ 1.6
+ ],
+ [
+ "zoom"
+ ],
+ 14,
+ 0,
+ 20,
+ 7
+ ]
+ }
+ },
+ {
+ "id": "address_label",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "buildings",
+ "minzoom": 17,
+ "filter": [
+ "==",
+ "kind",
+ "address"
+ ],
+ "layout": {
+ "symbol-placement": "point",
+ "text-font": [
+ "Noto Sans Italic"
+ ],
+ "text-field": [
+ "get",
+ "addr_housenumber"
+ ],
+ "text-size": 14
+ },
+ "paint": {
+ "text-color": "#555",
+ "text-halo-color": "#ffffff",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "water_waterway_label",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "water",
+ "minzoom": 13,
+ "filter": [
+ "in",
+ "kind",
+ "river",
+ "stream"
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "text-font": [
+ "Noto Sans Regular"
+ ],
+ "text-field": [
+ "get",
+ "name"
+ ],
+ "text-size": 12,
+ "text-letter-spacing": 0.3
+ },
+ "paint": {
+ "text-color": "#ffffff"
+ }
+ },
+ {
+ "id": "pois_peak",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "pois",
+ "filter": [
+ "any",
+ [
+ "==",
+ "kind",
+ "peak"
+ ]
+ ],
+ "layout": {
+ "text-font": [
+ "Noto Sans Italic"
+ ],
+ "text-field": [
+ "get",
+ "name"
+ ],
+ "text-size": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 10,
+ 8,
+ 16,
+ 12
+ ],
+ "text-letter-spacing": 0.1,
+ "text-max-width": 9
+ },
+ "paint": {
+ "text-color": "#7e9aa0",
+ "text-halo-width": 1.5
+ }
+ },
+ {
+ "id": "roads_labels_minor",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 15,
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "minor_road",
+ "other",
+ "path"
+ ]
+ ],
+ "layout": {
+ "symbol-sort-key": [
+ "get",
+ "min_zoom"
+ ],
+ "symbol-placement": "line",
+ "text-font": [
+ "Noto Sans Regular"
+ ],
+ "text-field": [
+ "get",
+ "name"
+ ],
+ "text-size": 12
+ },
+ "paint": {
+ "text-color": "#91888b",
+ "text-halo-color": "#ffffff",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "water_label_ocean",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "water",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "sea",
+ "ocean",
+ "lake",
+ "water",
+ "bay",
+ "strait",
+ "fjord"
+ ]
+ ],
+ "layout": {
+ "text-font": [
+ "Noto Sans Medium"
+ ],
+ "text-field": [
+ "get",
+ "name"
+ ],
+ "text-size": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 3,
+ 10,
+ 10,
+ 12
+ ],
+ "text-letter-spacing": 0.1,
+ "text-max-width": 9,
+ "text-transform": "uppercase"
+ },
+ "paint": {
+ "text-color": "#ffffff"
+ }
+ },
+ {
+ "id": "water_label_lakes",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "water",
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "lake",
+ "water"
+ ]
+ ],
+ "layout": {
+ "text-font": [
+ "Noto Sans Medium"
+ ],
+ "text-field": [
+ "get",
+ "name"
+ ],
+ "text-size": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 3,
+ 0,
+ 6,
+ 12,
+ 10,
+ 12
+ ],
+ "text-letter-spacing": 0.1,
+ "text-max-width": 9
+ },
+ "paint": {
+ "text-color": "#ffffff"
+ }
+ },
+ {
+ "id": "roads_labels_major",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "roads",
+ "minzoom": 11,
+ "filter": [
+ "any",
+ [
+ "in",
+ "kind",
+ "major_road",
+ "medium_road"
+ ]
+ ],
+ "layout": {
+ "symbol-sort-key": [
+ "get",
+ "min_zoom"
+ ],
+ "symbol-placement": "line",
+ "text-font": [
+ "Noto Sans Regular"
+ ],
+ "text-field": [
+ "get",
+ "name"
+ ],
+ "text-size": 12
+ },
+ "paint": {
+ "text-color": "#938a8d",
+ "text-halo-color": "#ffffff",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "places_subplace",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "places",
+ "filter": [
+ "==",
+ "kind",
+ "neighbourhood"
+ ],
+ "layout": {
+ "symbol-sort-key": [
+ "get",
+ "min_zoom"
+ ],
+ "text-field": [
+ "get",
+ "name"
+ ],
+ "text-font": [
+ "Noto Sans Regular"
+ ],
+ "text-max-width": 7,
+ "text-letter-spacing": 0.1,
+ "text-padding": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 5,
+ 2,
+ 8,
+ 4,
+ 12,
+ 18,
+ 15,
+ 20
+ ],
+ "text-size": [
+ "interpolate",
+ [
+ "exponential",
+ 1.2
+ ],
+ [
+ "zoom"
+ ],
+ 11,
+ 8,
+ 14,
+ 14,
+ 18,
+ 24
+ ],
+ "text-transform": "uppercase"
+ },
+ "paint": {
+ "text-color": "#8f8f8f",
+ "text-halo-color": "#e0e0e0",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "pois",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "pois",
+ "filter": [
+ "any",
+ [
+ "<",
+ [
+ "get",
+ "min_zoom"
+ ],
+ 13
+ ]
+ ],
+ "layout": {
+ "symbol-sort-key": [
+ "get",
+ "min_zoom"
+ ],
+ "text-font": [
+ "Noto Sans Regular"
+ ],
+ "text-field": [
+ "get",
+ "name"
+ ],
+ "text-size": 11,
+ "text-max-width": 9,
+ "icon-padding": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 0,
+ 2,
+ 14,
+ 2,
+ 16,
+ 20,
+ 17,
+ 2,
+ 22,
+ 2
+ ]
+ },
+ "paint": {
+ "text-color": "#8f8f8f",
+ "text-halo-color": "#e0e0e0",
+ "text-halo-width": 1.5
+ }
+ },
+ {
+ "id": "places_locality_circle",
+ "type": "circle",
+ "source": "protomaps",
+ "source-layer": "places",
+ "filter": [
+ "==",
+ "kind",
+ "locality"
+ ],
+ "paint": {
+ "circle-radius": 2,
+ "circle-stroke-width": 1.5,
+ "circle-stroke-color": "#a3a3a3",
+ "circle-color": "#ffffff",
+ "circle-translate": [
+ -6,
+ 0
+ ]
+ },
+ "maxzoom": 8
+ },
+ {
+ "id": "places_locality",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "places",
+ "filter": [
+ "==",
+ "kind",
+ "locality"
+ ],
+ "layout": {
+ "text-field": [
+ "get",
+ "name"
+ ],
+ "text-font": [
+ "case",
+ [
+ "<=",
+ [
+ "get",
+ "min_zoom"
+ ],
+ 5
+ ],
+ [
+ "literal",
+ [
+ "Noto Sans Medium"
+ ]
+ ],
+ [
+ "literal",
+ [
+ "Noto Sans Regular"
+ ]
+ ]
+ ],
+ "text-padding": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 5,
+ 3,
+ 8,
+ 7,
+ 12,
+ 11
+ ],
+ "text-size": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 2,
+ [
+ "case",
+ [
+ "<",
+ [
+ "get",
+ "population_rank"
+ ],
+ 13
+ ],
+ 8,
+ [
+ ">=",
+ [
+ "get",
+ "population_rank"
+ ],
+ 13
+ ],
+ 13,
+ 0
+ ],
+ 4,
+ [
+ "case",
+ [
+ "<",
+ [
+ "get",
+ "population_rank"
+ ],
+ 13
+ ],
+ 10,
+ [
+ ">=",
+ [
+ "get",
+ "population_rank"
+ ],
+ 13
+ ],
+ 15,
+ 0
+ ],
+ 6,
+ [
+ "case",
+ [
+ "<",
+ [
+ "get",
+ "population_rank"
+ ],
+ 12
+ ],
+ 11,
+ [
+ ">=",
+ [
+ "get",
+ "population_rank"
+ ],
+ 12
+ ],
+ 17,
+ 0
+ ],
+ 8,
+ [
+ "case",
+ [
+ "<",
+ [
+ "get",
+ "population_rank"
+ ],
+ 11
+ ],
+ 11,
+ [
+ ">=",
+ [
+ "get",
+ "population_rank"
+ ],
+ 11
+ ],
+ 18,
+ 0
+ ],
+ 10,
+ [
+ "case",
+ [
+ "<",
+ [
+ "get",
+ "population_rank"
+ ],
+ 9
+ ],
+ 12,
+ [
+ ">=",
+ [
+ "get",
+ "population_rank"
+ ],
+ 9
+ ],
+ 20,
+ 0
+ ],
+ 15,
+ [
+ "case",
+ [
+ "<",
+ [
+ "get",
+ "population_rank"
+ ],
+ 8
+ ],
+ 12,
+ [
+ ">=",
+ [
+ "get",
+ "population_rank"
+ ],
+ 8
+ ],
+ 22,
+ 0
+ ]
+ ],
+ "icon-padding": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 0,
+ 2,
+ 8,
+ 4,
+ 10,
+ 8,
+ 12,
+ 6,
+ 22,
+ 2
+ ],
+ "text-anchor": [
+ "step",
+ [
+ "zoom"
+ ],
+ "left",
+ 8,
+ "center"
+ ],
+ "text-radial-offset": 0.2
+ },
+ "paint": {
+ "text-color": "#5c5c5c",
+ "text-halo-color": "#e0e0e0",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "places_region",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "places",
+ "filter": [
+ "==",
+ "kind",
+ "region"
+ ],
+ "layout": {
+ "symbol-sort-key": [
+ "get",
+ "min_zoom"
+ ],
+ "text-field": [
+ "step",
+ [
+ "zoom"
+ ],
+ [
+ "get",
+ "name:short"
+ ],
+ 6,
+ [
+ "get",
+ "name"
+ ]
+ ],
+ "text-font": [
+ "Noto Sans Regular"
+ ],
+ "text-size": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 3,
+ 11,
+ 7,
+ 16
+ ],
+ "text-radial-offset": 0.2,
+ "text-anchor": "center",
+ "text-transform": "uppercase"
+ },
+ "paint": {
+ "text-color": "#b3b3b3",
+ "text-halo-color": "#e0e0e0",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "places_country",
+ "type": "symbol",
+ "source": "protomaps",
+ "source-layer": "places",
+ "filter": [
+ "==",
+ "kind",
+ "country"
+ ],
+ "layout": {
+ "symbol-sort-key": [
+ "get",
+ "min_zoom"
+ ],
+ "text-field": [
+ "get",
+ "name"
+ ],
+ "text-font": [
+ "Noto Sans Medium"
+ ],
+ "text-size": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 2,
+ [
+ "case",
+ [
+ "<",
+ [
+ "get",
+ "population_rank"
+ ],
+ 10
+ ],
+ 8,
+ [
+ ">=",
+ [
+ "get",
+ "population_rank"
+ ],
+ 10
+ ],
+ 12,
+ 0
+ ],
+ 6,
+ [
+ "case",
+ [
+ "<",
+ [
+ "get",
+ "population_rank"
+ ],
+ 8
+ ],
+ 10,
+ [
+ ">=",
+ [
+ "get",
+ "population_rank"
+ ],
+ 8
+ ],
+ 18,
+ 0
+ ],
+ 8,
+ [
+ "case",
+ [
+ "<",
+ [
+ "get",
+ "population_rank"
+ ],
+ 7
+ ],
+ 11,
+ [
+ ">=",
+ [
+ "get",
+ "population_rank"
+ ],
+ 7
+ ],
+ 20,
+ 0
+ ]
+ ],
+ "icon-padding": [
+ "interpolate",
+ [
+ "linear"
+ ],
+ [
+ "zoom"
+ ],
+ 0,
+ 2,
+ 14,
+ 2,
+ 16,
+ 20,
+ 17,
+ 2,
+ 22,
+ 2
+ ],
+ "text-transform": "uppercase"
+ },
+ "paint": {
+ "text-color": "#a3a3a3"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/assets/sunny-unlabeled.json b/public/assets/sunny-unlabeled.json
index 8ac9d1b940..9bb5ea58dc 100644
--- a/public/assets/sunny-unlabeled.json
+++ b/public/assets/sunny-unlabeled.json
@@ -7,9 +7,7 @@
"protomaps": {
"attribution": "Protomaps © OpenStreetMap",
"type": "vector",
- "tiles": [
- "https://api.protomaps.com/tiles/v4/{z}/{x}/{y}.mvt?key=2af8b969a9e8b692"
- ],
+ "url": "pmtiles://https://cache.mapcomplete.org/planet-latest.pmtiles",
"maxzoom": 15
}
},
diff --git a/public/assets/sunny.json b/public/assets/sunny.json
index 5409ebb80f..9f7001be38 100644
--- a/public/assets/sunny.json
+++ b/public/assets/sunny.json
@@ -6,9 +6,7 @@
"protomaps": {
"attribution": "Protomaps © OpenStreetMap",
"type": "vector",
- "tiles": [
- "https://api.protomaps.com/tiles/v4/{z}/{x}/{y}.mvt?key=2af8b969a9e8b692"
- ],
+ "url": "pmtiles://https://cache.mapcomplete.org/planet-latest.pmtiles",
"maxzoom": 15
}
},
diff --git a/scripts/generateSunnyUnlabeled.ts b/scripts/generateSunnyUnlabeled.ts
index 51ca4c1a67..09729d45eb 100644
--- a/scripts/generateSunnyUnlabeled.ts
+++ b/scripts/generateSunnyUnlabeled.ts
@@ -16,8 +16,21 @@ export class GenerateSunnyUnlabeled extends Script {
writeFileSync("public/assets/sunny-unlabeled.json", JSON.stringify(unlabeled, null, " "))
}
+ /**
+ * Generates a variation hosted by api.protomaps
+ */
+ generateHosted() {
+ const tilesource = "https://api.protomaps.com/tiles/v4/{z}/{x}/{y}.mvt?key=2af8b969a9e8b692"
+ const hosted = { "#": "AUTOMATICALLY GENERATED! Do not edit.", ...sunny }
+ delete hosted.sources.protomaps.url
+ hosted.sources.protomaps["tiles"] = [tilesource]
+ writeFileSync("public/assets/sunny-hosted.json", JSON.stringify(hosted, null, " "))
+
+ }
+
async main(args: string[]): Promise {
this.generateUnlabeled()
+ this.generateHosted()
}
}
diff --git a/src/Models/RasterLayers.ts b/src/Models/RasterLayers.ts
index 01547cc117..d9d67fdc26 100644
--- a/src/Models/RasterLayers.ts
+++ b/src/Models/RasterLayers.ts
@@ -70,12 +70,13 @@ export class AvailableRasterLayers {
throw "Detected invalid global layer with invalid id"
}
return joined.map(
- (properties) =>
- {
+ (properties) => {
+ return {
type: "Feature",
properties,
geometry: BBox.global.asGeometry(),
}
+ }
)
}
diff --git a/src/assets/global-raster-layers.json b/src/assets/global-raster-layers.json
index 883b28dd41..130dde5369 100644
--- a/src/assets/global-raster-layers.json
+++ b/src/assets/global-raster-layers.json
@@ -1,14 +1,28 @@
{
"layers": [
{
- "url": "pmtiles://https://api.protomaps.com/tiles/v4.json?key=2af8b969a9e8b692",
- "style": "assets/sunny.json",
+ "style": "assets/sunny-hosted.json",
"connect-src": [
"https://protomaps.github.io"
],
"best": true,
"id": "protomaps.sunny",
- "name": "Protomaps Sunny",
+ "name": "Protomaps Sunny (Hosted by Protomaps)",
+ "type": "vector",
+ "category": "osmbasedmap",
+ "attribution": {
+ "text": "Protomaps",
+ "url": "https://protomaps.com/"
+ }
+ },
+ {
+ "style": "assets/sunny.json",
+ "connect-src": [
+ "https://protomaps.github.io"
+ ],
+ "best": true,
+ "id": "protomaps.sunny-self",
+ "name": "Protomaps Sunny (Hosted by pietervdvn)",
"type": "vector",
"category": "osmbasedmap",
"attribution": {