Page MenuHomeGitPull.it

D249.1780157041.diff
No OneTemporary

Authored By
Unknown
Size
302 KB
Referenced Files
None
Subscribers
None

D249.1780157041.diff

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,7 +46,7 @@
android:label="@string/app_name"
android:networkSecurityConfig="@xml/networks_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
- android:theme="@style/AppTheme.NoActionBar">
+ android:theme="@style/AppThemeDayNight.NoActionBar">
<activity
android:name=".ActivityBackup"
android:label="@string/backup_restore"
@@ -56,7 +56,7 @@
<activity
android:name=".ActivityIntro"
android:exported="false"
- android:theme="@style/AppTheme.NoActionBar.Light"
+ android:theme="@style/AppThemeDayNight.NoActionBar"
/>
<activity
android:name=".ActivityExperiments"
@@ -134,7 +134,7 @@
android:name=".ActivitySettings"
android:label="@string/title_activity_settings"
android:parentActivityName=".ActivityPrincipal"
- android:theme="@style/AppTheme.NoActionBar">
+ android:theme="@style/AppThemeDayNight.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="it.reyboz.bustorino.ActivityPrincipal"/>
diff --git a/app/src/main/assets/versatiles_eclipse_modif.json b/app/src/main/assets/versatiles_eclipse_modif.json
new file mode 100644
--- /dev/null
+++ b/app/src/main/assets/versatiles_eclipse_modif.json
@@ -0,0 +1,6266 @@
+{
+ "version": 8,
+ "name": "versatiles-eclipse",
+ "metadata": {
+ "license": "https://creativecommons.org/publicdomain/zero/1.0/",
+ "maputnik:renderer": "mlgljs"
+ },
+ "sources": {
+ "versatiles-shortbread": {
+ "attribution": "© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors",
+ "tiles": ["https://tiles.versatiles.org/tiles/osm/{z}/{x}/{y}"],
+ "type": "vector",
+ "scheme": "xyz",
+ "bounds": [-180, -85.0511287798066, 180, 85.0511287798066],
+ "minzoom": 0,
+ "maxzoom": 14
+ }
+ },
+ "sprite": [
+ {
+ "id": "basics",
+ "url": "https://tiles.versatiles.org/assets/sprites/basics/sprites"
+ }
+ ],
+ "glyphs": "https://tiles.versatiles.org/assets/glyphs/{fontstack}/{range}.pbf",
+ "layers": [
+ {
+ "id": "background",
+ "type": "background",
+ "paint": {"background-color": "hsl(33,48%,5%)"}
+ },
+ {
+ "id": "water-ocean",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "ocean",
+ "paint": {"fill-color": "hsl(205,69%,15%)"}
+ },
+ {
+ "id": "land-glacier",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "water_polygons",
+ "filter": ["all", ["==", "kind", "glacier"]],
+ "paint": {"fill-color": "hsl(0,0%,0%)"}
+ },
+ {
+ "id": "land-commercial",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "commercial", "retail"]],
+ "paint": {
+ "fill-color": "hsla(324,61%,8%,0.251)",
+ "fill-opacity": {"stops": [[10, 0], [11, 1]]}
+ }
+ },
+ {
+ "id": "land-industrial",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "industrial", "quarry", "railway"]],
+ "paint": {
+ "fill-color": "hsla(49,100%,12%,0.333)",
+ "fill-opacity": {"stops": [[10, 0], [11, 1]]}
+ }
+ },
+ {
+ "id": "land-residential",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "garages", "residential"]],
+ "paint": {
+ "fill-color": "hsla(33,18%,10%,0.2)",
+ "fill-opacity": {"stops": [[10, 0], [11, 1]]}
+ }
+ },
+ {
+ "id": "land-agriculture",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": [
+ "all",
+ [
+ "in",
+ "kind",
+ "brownfield",
+ "farmland",
+ "farmyard",
+ "greenfield",
+ "greenhouse_horticulture",
+ "orchard",
+ "plant_nursery",
+ "vineyard"
+ ]
+ ],
+ "paint": {
+ "fill-color": "hsl(43,51%,12%)",
+ "fill-opacity": {"stops": [[10, 0], [11, 1]]}
+ }
+ },
+ {
+ "id": "land-waste",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "landfill"]],
+ "paint": {
+ "fill-color": "hsl(50,29%,20%)",
+ "fill-opacity": {"stops": [[10, 0], [11, 1]]}
+ }
+ },
+ {
+ "id": "land-park",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": [
+ "all",
+ ["in", "kind", "park", "village_green", "recreation_ground"]
+ ],
+ "paint": {
+ "fill-color": "hsl(60,41%,25%)",
+ "fill-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "land-garden",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "allotments", "garden"]],
+ "paint": {
+ "fill-color": "hsl(60,41%,25%)",
+ "fill-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "land-burial",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "cemetery", "grave_yard"]],
+ "paint": {
+ "fill-color": "hsl(54,22%,17%)",
+ "fill-opacity": {"stops": [[13, 0], [14, 1]]}
+ }
+ },
+ {
+ "id": "land-leisure",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": [
+ "all",
+ ["in", "kind", "miniature_golf", "playground", "golf_course"]
+ ],
+ "paint": {"fill-color": "hsl(84,29%,10%)"}
+ },
+ {
+ "id": "land-rock",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "bare_rock", "scree", "shingle"]],
+ "paint": {"fill-color": "hsl(192,9%,11%)"}
+ },
+ {
+ "id": "land-forest",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "forest"]],
+ "paint": {
+ "fill-color": "hsl(100,43%,53%)",
+ "fill-opacity": {"stops": [[7, 0], [8, 0.1]]}
+ }
+ },
+ {
+ "id": "land-grass",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": [
+ "all",
+ ["in", "kind", "grass", "grassland", "meadow", "wet_meadow"]
+ ],
+ "paint": {
+ "fill-color": "hsl(90,41%,15%)",
+ "fill-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "land-vegetation",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "heath", "scrub"]],
+ "paint": {
+ "fill-color": "hsl(60,41%,25%)",
+ "fill-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "land-sand",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "beach", "sand"]],
+ "paint": {"fill-color": "hsl(60,57%,5%)"}
+ },
+ {
+ "id": "land-wetland",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "land",
+ "filter": ["all", ["in", "kind", "bog", "marsh", "string_bog", "swamp"]],
+ "paint": {"fill-color": "hsl(145,28%,14%)"}
+ },
+ {
+ "id": "water-river",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "water_lines",
+ "filter": [
+ "all",
+ ["in", "kind", "river"],
+ ["!=", "tunnel", true],
+ ["!=", "bridge", true]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "hsl(205,69%,15%)",
+ "line-width": {
+ "stops": [[9, 0], [10, 3], [15, 5], [17, 9], [18, 20], [20, 60]]
+ }
+ }
+ },
+ {
+ "id": "water-canal",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "water_lines",
+ "filter": [
+ "all",
+ ["in", "kind", "canal"],
+ ["!=", "tunnel", true],
+ ["!=", "bridge", true]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "hsl(205,69%,15%)",
+ "line-width": {
+ "stops": [[9, 0], [10, 2], [15, 4], [17, 8], [18, 17], [20, 50]]
+ }
+ }
+ },
+ {
+ "id": "water-stream",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "water_lines",
+ "filter": [
+ "all",
+ ["in", "kind", "stream"],
+ ["!=", "tunnel", true],
+ ["!=", "bridge", true]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "hsl(205,69%,15%)",
+ "line-width": {
+ "stops": [[13, 0], [14, 1], [15, 2], [17, 6], [18, 12], [20, 30]]
+ }
+ }
+ },
+ {
+ "id": "water-ditch",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "water_lines",
+ "filter": [
+ "all",
+ ["in", "kind", "ditch"],
+ ["!=", "tunnel", true],
+ ["!=", "bridge", true]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "hsl(205,69%,15%)",
+ "line-width": {"stops": [[14, 0], [15, 1], [17, 4], [18, 8], [20, 20]]}
+ }
+ },
+ {
+ "id": "water-area",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "water_polygons",
+ "filter": ["==", "kind", "water"],
+ "paint": {
+ "fill-color": "hsl(205,69%,15%)",
+ "fill-opacity": {"stops": [[4, 0], [6, 1]]}
+ }
+ },
+ {
+ "id": "water-area-river",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "water_polygons",
+ "filter": ["==", "kind", "river"],
+ "paint": {
+ "fill-color": "hsl(205,69%,15%)",
+ "fill-opacity": {"stops": [[4, 0], [6, 1]]}
+ }
+ },
+ {
+ "id": "water-area-small",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "water_polygons",
+ "filter": ["in", "kind", "reservoir", "basin", "dock"],
+ "paint": {
+ "fill-color": "hsl(205,69%,15%)",
+ "fill-opacity": {"stops": [[4, 0], [6, 1]]}
+ }
+ },
+ {
+ "id": "water-dam-area",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "dam_polygons",
+ "filter": ["==", "kind", "dam"],
+ "paint": {
+ "fill-color": "hsl(33,48%,5%)",
+ "fill-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "water-dam",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "dam_lines",
+ "filter": ["==", "kind", "dam"],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {"line-color": "hsl(205,69%,15%)"}
+ },
+ {
+ "id": "water-pier-area",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "pier_polygons",
+ "filter": ["in", "kind", "pier", "breakwater", "groyne"],
+ "paint": {
+ "fill-color": "hsl(33,48%,5%)",
+ "fill-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "water-pier",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "pier_lines",
+ "filter": ["in", "kind", "pier", "breakwater", "groyne"],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {"line-color": "hsl(33,48%,5%)"}
+ },
+ {
+ "id": "site-dangerarea",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "sites",
+ "filter": ["in", "kind", "danger_area"],
+ "paint": {
+ "fill-color": "hsl(0,100%,50%)",
+ "fill-outline-color": "hsl(0,100%,50%)",
+ "fill-opacity": 0.3,
+ "fill-pattern": "basics:pattern-warning"
+ }
+ },
+ {
+ "id": "site-university",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "sites",
+ "filter": ["in", "kind", "university"],
+ "paint": {"fill-color": "hsl(60,100%,25%)", "fill-opacity": 0.1}
+ },
+ {
+ "id": "site-college",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "sites",
+ "filter": ["in", "kind", "college"],
+ "paint": {"fill-color": "hsl(60,100%,25%)", "fill-opacity": 0.1}
+ },
+ {
+ "id": "site-school",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "sites",
+ "filter": ["in", "kind", "school"],
+ "paint": {"fill-color": "hsl(60,100%,25%)", "fill-opacity": 0.1}
+ },
+ {
+ "id": "site-hospital",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "sites",
+ "filter": ["in", "kind", "hospital"],
+ "paint": {"fill-color": "hsl(0,100%,30%)", "fill-opacity": 0.1}
+ },
+ {
+ "id": "site-prison",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "sites",
+ "filter": ["in", "kind", "prison"],
+ "paint": {
+ "fill-color": "hsl(305,73%,3%)",
+ "fill-pattern": "basics:pattern-striped",
+ "fill-opacity": 0.1
+ }
+ },
+ {
+ "id": "site-parking",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "sites",
+ "filter": ["in", "kind", "parking"],
+ "paint": {"fill-color": "hsl(24,11%,9%)"}
+ },
+ {
+ "id": "site-bicycleparking",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "sites",
+ "filter": ["in", "kind", "bicycle_parking"],
+ "paint": {"fill-color": "hsl(24,11%,9%)"}
+ },
+ {
+ "id": "site-construction",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "sites",
+ "filter": ["in", "kind", "construction"],
+ "paint": {
+ "fill-color": "hsl(0,0%,34%)",
+ "fill-pattern": "basics:pattern-hatched_thin",
+ "fill-opacity": 0.1
+ }
+ },
+ {
+ "id": "airport-area",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_polygons",
+ "filter": ["in", "kind", "runway", "taxiway"],
+ "paint": {"fill-color": "hsl(0,0%,0%)", "fill-opacity": 0.5}
+ },
+ {
+ "id": "airport-taxiway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["==", "kind", "taxiway"],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "hsl(36,5%,20%)",
+ "line-width": {
+ "stops": [[13, 0], [14, 2], [15, 10], [16, 14], [18, 20], [20, 40]]
+ }
+ }
+ },
+ {
+ "id": "airport-runway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["==", "kind", "runway"],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "hsl(36,5%,20%)",
+ "line-width": {
+ "stops": [
+ [11, 0],
+ [12, 6],
+ [13, 9],
+ [14, 16],
+ [15, 24],
+ [16, 40],
+ [17, 100],
+ [18, 160],
+ [20, 300]
+ ]
+ }
+ }
+ },
+ {
+ "id": "airport-taxiway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["==", "kind", "taxiway"],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[13, 0], [14, 1], [15, 8], [16, 12], [18, 18], [20, 36]]
+ },
+ "line-opacity": {"stops": [[13, 0], [14, 1]]}
+ }
+ },
+ {
+ "id": "airport-runway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["==", "kind", "runway"],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [
+ [11, 0],
+ [12, 5],
+ [13, 8],
+ [14, 14],
+ [15, 22],
+ [16, 38],
+ [17, 98],
+ [18, 158],
+ [20, 298]
+ ]
+ },
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "building:outline",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "buildings",
+ "paint": {
+ "fill-color": "hsl(30,11%,14%)",
+ "fill-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "building",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "buildings",
+ "paint": {
+ "fill-color": "hsl(30,38%,8%)",
+ "fill-opacity": {"stops": [[14, 0], [15, 1]]},
+ "fill-translate": [-2, -2]
+ }
+ },
+ {
+ "id": "tunnel-street-pedestrian-zone",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_polygons",
+ "filter": ["all", ["==", "tunnel", true], ["==", "kind", "pedestrian"]],
+ "paint": {
+ "fill-color": "rgb(8,8,8)",
+ "fill-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-way-footway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "tunnel", true], ["in", "kind", "footway"]],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "hsl(288,13%,14%)"
+ }
+ },
+ {
+ "id": "tunnel-way-steps:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "tunnel", true], ["in", "kind", "steps"]],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "hsl(288,13%,14%)"
+ }
+ },
+ {
+ "id": "tunnel-way-path:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "tunnel", true], ["in", "kind", "path"]],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "hsl(288,13%,14%)"
+ }
+ },
+ {
+ "id": "tunnel-way-cycleway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "tunnel", true], ["in", "kind", "cycleway"]],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "hsl(203,11%,13%)"
+ }
+ },
+ {
+ "id": "tunnel-street-track:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "track"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(33,33,33)",
+ "line-width": {
+ "stops": [[14, 2], [16, 4], [18, 18], [19, 48], [20, 96]]
+ },
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-pedestrian:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "pedestrian"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(33,33,33)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-service:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "service"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(37,36,34)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 12], [19, 32], [20, 48]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-livingstreet:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "living_street"],
+ ["==", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(33,33,33)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-residential:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "residential"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(33,33,33)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-unclassified:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "unclassified"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(33,33,33)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-busway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "busway"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(37,36,34)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 12], [19, 32], [20, 48]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-busguideway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "bus_guideway"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(37,36,34)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 12], [19, 32], [20, 48]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-tertiary-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "tertiary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(33,33,33)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-secondary-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "secondary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(129,71,21)",
+ "line-dasharray": [1, 0.3],
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "tunnel-street-primary-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "primary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(129,71,21)",
+ "line-dasharray": [1, 0.3],
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "tunnel-street-trunk-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "trunk"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(129,71,21)",
+ "line-dasharray": [1, 0.3],
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "tunnel-street-motorway-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "motorway"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(129,71,21)",
+ "line-dasharray": [1, 0.3],
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "tunnel-street-tertiary:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "tertiary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(33,33,33)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-secondary:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "secondary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(129,71,21)",
+ "line-dasharray": [1, 0.3],
+ "line-width": {
+ "stops": [[11, 2], [14, 5], [16, 8], [18, 30], [19, 68], [20, 138]]
+ },
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-primary:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "primary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(129,71,21)",
+ "line-dasharray": [1, 0.3],
+ "line-width": {
+ "stops": [
+ [8, 0],
+ [9, 1],
+ [10, 4],
+ [14, 6],
+ [16, 12],
+ [18, 36],
+ [19, 74],
+ [20, 144]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-street-trunk:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "trunk"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(129,71,21)",
+ "line-dasharray": [1, 0.3],
+ "line-width": {
+ "stops": [
+ [6, 0],
+ [7, 2],
+ [10, 4],
+ [14, 6],
+ [16, 12],
+ [18, 36],
+ [19, 74],
+ [20, 144]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-street-motorway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "motorway"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(129,71,21)",
+ "line-dasharray": [1, 0.3],
+ "line-width": {
+ "stops": [
+ [5, 0],
+ [6, 2],
+ [10, 5],
+ [14, 5],
+ [16, 14],
+ [18, 38],
+ [19, 84],
+ [20, 168]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-way-footway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "tunnel", true], ["in", "kind", "footway"]],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "hsl(288,33%,6%)",
+ "line-dasharray": [1, 0.2]
+ }
+ },
+ {
+ "id": "tunnel-way-steps",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "tunnel", true], ["in", "kind", "steps"]],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "hsl(288,33%,6%)",
+ "line-dasharray": [1, 0.2]
+ }
+ },
+ {
+ "id": "tunnel-way-path",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "tunnel", true], ["in", "kind", "path"]],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "hsl(288,33%,6%)",
+ "line-dasharray": [1, 0.2]
+ }
+ },
+ {
+ "id": "tunnel-way-cycleway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "tunnel", true], ["in", "kind", "cycleway"]],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "hsl(203,30%,5%)",
+ "line-dasharray": [1, 0.2]
+ }
+ },
+ {
+ "id": "tunnel-street-track",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "track"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 16], [19, 44], [20, 88]]
+ },
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-pedestrian",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "pedestrian"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-service",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "service"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[14, 1], [16, 2], [18, 10], [19, 28], [20, 40]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-livingstreet",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "living_street"],
+ ["==", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-residential",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "residential"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-unclassified",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "unclassified"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-busway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "busway"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[14, 1], [16, 2], [18, 10], [19, 28], [20, 40]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-busguideway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "bus_guideway"], ["==", "tunnel", true]],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[14, 1], [16, 2], [18, 10], [19, 28], [20, 40]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-track-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "track"],
+ ["==", "bicycle", "designated"],
+ ["==", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {"line-color": "rgb(8,8,8)"}
+ },
+ {
+ "id": "tunnel-street-pedestrian-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "pedestrian"],
+ ["==", "bicycle", "designated"],
+ ["==", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-service-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "service"],
+ ["==", "bicycle", "designated"],
+ ["==", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {"line-color": "rgb(8,8,8)"}
+ },
+ {
+ "id": "tunnel-street-livingstreet-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "living_street"],
+ ["==", "bicycle", "designated"],
+ ["==", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-residential-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "residential"],
+ ["==", "bicycle", "designated"],
+ ["==", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-unclassified-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "unclassified"],
+ ["==", "bicycle", "designated"],
+ ["==", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-tertiary-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "tertiary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-secondary-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "secondary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(77,61,0)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "tunnel-street-primary-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "primary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(77,61,0)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "tunnel-street-trunk-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "trunk"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(77,61,0)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "tunnel-street-motorway-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "motorway"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(107,61,0)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "tunnel-street-tertiary",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "tertiary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-secondary",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "secondary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(77,61,0)",
+ "line-width": {
+ "stops": [[11, 1], [14, 4], [16, 6], [18, 28], [19, 64], [20, 130]]
+ },
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-primary",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "primary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(77,61,0)",
+ "line-width": {
+ "stops": [
+ [8, 0],
+ [9, 2],
+ [10, 3],
+ [14, 5],
+ [16, 10],
+ [18, 34],
+ [19, 70],
+ [20, 140]
+ ]
+ },
+ "line-opacity": {"stops": [[8, 0], [9, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-trunk",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "trunk"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(77,61,0)",
+ "line-width": {
+ "stops": [
+ [6, 0],
+ [7, 1],
+ [10, 3],
+ [14, 5],
+ [16, 10],
+ [18, 34],
+ [19, 70],
+ [20, 140]
+ ]
+ },
+ "line-opacity": {"stops": [[6, 0], [7, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-street-motorway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "tunnel", true],
+ ["in", "kind", "motorway"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(107,61,0)",
+ "line-width": {
+ "stops": [
+ [5, 0],
+ [6, 1],
+ [10, 4],
+ [14, 4],
+ [16, 12],
+ [18, 36],
+ [19, 80],
+ [20, 160]
+ ]
+ },
+ "line-opacity": {"stops": [[5, 0], [6, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-transport-tram:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "tram"],
+ ["!has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "tunnel-transport-narrowgauge:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "narrow_gauge"],
+ ["!has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "tunnel-transport-subway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["in", "kind", "subway"],
+ ["!has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(207,23%,28%)",
+ "line-width": {
+ "stops": [
+ [11, 0],
+ [12, 1],
+ [15, 3],
+ [16, 3],
+ [18, 6],
+ [19, 8],
+ [20, 10]
+ ]
+ },
+ "line-opacity": {"stops": [[11, 0], [12, 0.5]]}
+ }
+ },
+ {
+ "id": "tunnel-transport-lightrail:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 8,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["!has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[8, 1], [13, 1], [15, 1], [20, 14]]},
+ "line-opacity": {"stops": [[11, 0], [12, 0.5]]}
+ }
+ },
+ {
+ "id": "tunnel-transport-lightrail-service:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[14, 0], [15, 1], [16, 1], [20, 14]]}
+ }
+ },
+ {
+ "id": "tunnel-transport-rail:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 8,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["!has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[8, 1], [13, 1], [15, 1], [20, 14]]},
+ "line-opacity": {"stops": [[8, 0], [9, 0.3]]}
+ }
+ },
+ {
+ "id": "tunnel-transport-rail-service:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[14, 0], [15, 1], [16, 1], [20, 14]]}
+ }
+ },
+ {
+ "id": "tunnel-transport-monorail:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["in", "kind", "monorail"], ["==", "tunnel", true]],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "tunnel-transport-funicular:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["in", "kind", "funicular"], ["==", "tunnel", true]],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "tunnel-transport-tram",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["in", "kind", "tram"],
+ ["!has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "tunnel-transport-narrowgauge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["in", "kind", "narrow_gauge"],
+ ["!has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "tunnel-transport-subway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["in", "kind", "subway"],
+ ["!has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "rgb(42,55,67)",
+ "line-width": {
+ "stops": [
+ [11, 0],
+ [12, 1],
+ [15, 2],
+ [16, 2],
+ [18, 5],
+ [19, 6],
+ [20, 8]
+ ]
+ },
+ "line-dasharray": [2, 2],
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-transport-lightrail",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["!has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[14, 0], [15, 1], [20, 10]]},
+ "line-dasharray": [2, 2],
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "tunnel-transport-lightrail-service",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[15, 0], [16, 1], [20, 10]]},
+ "line-dasharray": [2, 2]
+ }
+ },
+ {
+ "id": "tunnel-transport-rail",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["!has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[14, 0], [15, 1], [20, 10]]},
+ "line-dasharray": [2, 2],
+ "line-opacity": {"stops": [[14, 0], [15, 0.3]]}
+ }
+ },
+ {
+ "id": "tunnel-transport-rail-service",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["has", "service"],
+ ["==", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[15, 0], [16, 1], [20, 10]]},
+ "line-dasharray": [2, 2]
+ }
+ },
+ {
+ "id": "tunnel-transport-monorail",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": ["all", ["in", "kind", "monorail"], ["==", "tunnel", true]],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "tunnel-transport-funicular",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": ["all", ["in", "kind", "funicular"], ["==", "tunnel", true]],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "bridge",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "bridges",
+ "paint": {
+ "fill-color": "rgb(22,17,11)",
+ "fill-antialias": true,
+ "fill-opacity": 0.8
+ }
+ },
+ {
+ "id": "street-pedestrian-zone",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_polygons",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["==", "kind", "pedestrian"]
+ ],
+ "paint": {
+ "fill-color": "rgba(16,0,20,0.25)",
+ "fill-opacity": {"stops": [[12, 0], [13, 1], [14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "way-footway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "footway"]
+ ],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "rgb(40,26,44)"
+ }
+ },
+ {
+ "id": "way-steps:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "steps"]
+ ],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "rgb(40,26,44)"
+ }
+ },
+ {
+ "id": "way-path:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "path"]
+ ],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "rgb(40,26,44)"
+ }
+ },
+ {
+ "id": "way-cycleway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "cycleway"]
+ ],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "rgb(26,34,40)"
+ }
+ },
+ {
+ "id": "street-track:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "track"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(36,5%,20%)",
+ "line-width": {
+ "stops": [[14, 2], [16, 4], [18, 18], [19, 48], [20, 96]]
+ },
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "street-pedestrian:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "pedestrian"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(36,5%,20%)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-service:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(37,36,34)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 12], [19, 32], [20, 48]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "street-livingstreet:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "living_street"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(36,5%,20%)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-residential:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "residential"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(36,5%,20%)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-unclassified:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "unclassified"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(36,5%,20%)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-busway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "busway"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(37,36,34)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 12], [19, 32], [20, 48]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "street-busguideway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "bus_guideway"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(37,36,34)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 12], [19, 32], [20, 48]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "street-tertiary-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "tertiary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(36,5%,20%)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-secondary-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "secondary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "street-primary-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "primary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "street-trunk-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "trunk"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "street-motorway-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "motorway"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "street-tertiary:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "tertiary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(36,5%,20%)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-secondary:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "secondary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {
+ "stops": [[11, 2], [14, 5], [16, 8], [18, 30], [19, 68], [20, 138]]
+ },
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "street-primary:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "primary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {
+ "stops": [
+ [8, 0],
+ [9, 1],
+ [10, 4],
+ [14, 6],
+ [16, 12],
+ [18, 36],
+ [19, 74],
+ [20, 144]
+ ]
+ }
+ }
+ },
+ {
+ "id": "street-trunk:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "trunk"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {
+ "stops": [
+ [6, 0],
+ [7, 2],
+ [10, 4],
+ [14, 6],
+ [16, 12],
+ [18, 36],
+ [19, 74],
+ [20, 144]
+ ]
+ }
+ }
+ },
+ {
+ "id": "street-motorway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "motorway"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {
+ "stops": [
+ [5, 0],
+ [6, 2],
+ [10, 5],
+ [14, 5],
+ [16, 14],
+ [18, 38],
+ [19, 84],
+ [20, 168]
+ ]
+ }
+ }
+ },
+ {
+ "id": "way-footway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "footway"]
+ ],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "rgb(16,0,20)"
+ }
+ },
+ {
+ "id": "way-steps",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "steps"]
+ ],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "rgb(16,0,20)"
+ }
+ },
+ {
+ "id": "way-path",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "path"]
+ ],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "rgb(16,0,20)"
+ }
+ },
+ {
+ "id": "way-cycleway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "cycleway"]
+ ],
+ "layout": {"line-cap": "round"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "hsl(203,100%,3%)"
+ }
+ },
+ {
+ "id": "street-track",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "track"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 16], [19, 44], [20, 88]]
+ },
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "street-pedestrian",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "pedestrian"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(288,100%,4%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 0], [14, 1]]}
+ }
+ },
+ {
+ "id": "street-service",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[14, 1], [16, 2], [18, 10], [19, 28], [20, 40]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "street-livingstreet",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "living_street"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-residential",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "residential"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-unclassified",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "unclassified"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-busway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "busway"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[14, 1], [16, 2], [18, 10], [19, 28], [20, 40]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "street-busguideway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "bus_guideway"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[14, 1], [16, 2], [18, 10], [19, 28], [20, 40]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "street-track-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "track"],
+ ["==", "bicycle", "designated"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {"line-color": "hsl(0,0%,0%)"}
+ },
+ {
+ "id": "street-pedestrian-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "pedestrian"],
+ ["==", "bicycle", "designated"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-service-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "service"],
+ ["==", "bicycle", "designated"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {"line-color": "hsl(0,0%,0%)"}
+ },
+ {
+ "id": "street-livingstreet-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "living_street"],
+ ["==", "bicycle", "designated"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-residential-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "residential"],
+ ["==", "bicycle", "designated"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-unclassified-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "unclassified"],
+ ["==", "bicycle", "designated"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-tertiary-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "tertiary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-secondary-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "secondary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "street-primary-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "primary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "street-trunk-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "trunk"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "street-motorway-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "motorway"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(34,100%,23%)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "street-tertiary",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "tertiary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "street-secondary",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "secondary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {
+ "stops": [[11, 1], [14, 4], [16, 6], [18, 28], [19, 64], [20, 130]]
+ },
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "street-primary",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "primary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {
+ "stops": [
+ [8, 0],
+ [9, 2],
+ [10, 3],
+ [14, 5],
+ [16, 10],
+ [18, 34],
+ [19, 70],
+ [20, 140]
+ ]
+ },
+ "line-opacity": {"stops": [[8, 0], [9, 1]]}
+ }
+ },
+ {
+ "id": "street-trunk",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "trunk"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {
+ "stops": [
+ [6, 0],
+ [7, 1],
+ [10, 3],
+ [14, 5],
+ [16, 10],
+ [18, 34],
+ [19, 70],
+ [20, 140]
+ ]
+ },
+ "line-opacity": {"stops": [[6, 0], [7, 1]]}
+ }
+ },
+ {
+ "id": "street-motorway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true],
+ ["in", "kind", "motorway"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(34,100%,23%)",
+ "line-width": {
+ "stops": [
+ [5, 0],
+ [6, 1],
+ [10, 4],
+ [14, 4],
+ [16, 12],
+ [18, 36],
+ [19, 80],
+ [20, 160]
+ ]
+ },
+ "line-opacity": {"stops": [[5, 0], [6, 1]]}
+ }
+ },
+ {
+ "id": "transport-tram:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "tram"],
+ ["!has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "transport-narrowgauge:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "narrow_gauge"],
+ ["!has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "transport-subway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["in", "kind", "subway"],
+ ["!has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(207,23%,28%)",
+ "line-width": {
+ "stops": [
+ [11, 0],
+ [12, 1],
+ [15, 3],
+ [16, 3],
+ [18, 6],
+ [19, 8],
+ [20, 10]
+ ]
+ },
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "transport-lightrail:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 8,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["!has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[8, 1], [13, 1], [15, 1], [20, 14]]},
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "transport-lightrail-service:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[14, 0], [15, 1], [16, 1], [20, 14]]}
+ }
+ },
+ {
+ "id": "transport-rail:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 8,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["!has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[8, 1], [13, 1], [15, 1], [20, 14]]},
+ "line-opacity": {"stops": [[8, 0], [9, 1]]}
+ }
+ },
+ {
+ "id": "transport-rail-service:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[14, 0], [15, 1], [16, 1], [20, 14]]}
+ }
+ },
+ {
+ "id": "transport-monorail:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "monorail"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "transport-funicular:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "funicular"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "transport-tram",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["in", "kind", "tram"],
+ ["!has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "transport-narrowgauge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["in", "kind", "narrow_gauge"],
+ ["!has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "transport-subway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["in", "kind", "subway"],
+ ["!has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "rgb(42,55,67)",
+ "line-width": {
+ "stops": [
+ [11, 0],
+ [12, 1],
+ [15, 2],
+ [16, 2],
+ [18, 5],
+ [19, 6],
+ [20, 8]
+ ]
+ },
+ "line-dasharray": [2, 2],
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "transport-lightrail",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["!has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[14, 0], [15, 1], [20, 10]]},
+ "line-dasharray": [2, 2],
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "transport-lightrail-service",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[15, 0], [16, 1], [20, 10]]},
+ "line-dasharray": [2, 2]
+ }
+ },
+ {
+ "id": "transport-rail",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["!has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[14, 0], [15, 1], [20, 10]]},
+ "line-dasharray": [2, 2],
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "transport-rail-service",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["has", "service"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[15, 0], [16, 1], [20, 10]]},
+ "line-dasharray": [2, 2]
+ }
+ },
+ {
+ "id": "transport-monorail",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["in", "kind", "monorail"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "transport-funicular",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["in", "kind", "funicular"],
+ ["!=", "bridge", true],
+ ["!=", "tunnel", true]
+ ],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "transport-ferry",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "ferries",
+ "minzoom": 10,
+ "paint": {
+ "line-color": "rgb(36,64,84)",
+ "line-width": {"stops": [[10, 1], [13, 2], [14, 3], [16, 4], [17, 6]]},
+ "line-opacity": {"stops": [[10, 0], [11, 1]]},
+ "line-dasharray": [1, 1]
+ }
+ },
+ {
+ "id": "bridge-way-footway:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "footway"]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [[15, 0], [16, 7], [18, 10], [19, 17], [20, 31]]
+ }
+ }
+ },
+ {
+ "id": "bridge-way-steps:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "steps"]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [[15, 0], [16, 7], [18, 10], [19, 17], [20, 31]]
+ }
+ }
+ },
+ {
+ "id": "bridge-way-path:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "path"]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [[15, 0], [16, 7], [18, 10], [19, 17], [20, 31]]
+ }
+ }
+ },
+ {
+ "id": "bridge-way-cycleway:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "cycleway"]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [[15, 0], [16, 7], [18, 10], [19, 17], [20, 31]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-track:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "track"], ["==", "bridge", true]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": {"stops": [[14, 0], [15, 1]]},
+ "line-width": {
+ "stops": [[14, 3], [16, 6], [18, 25], [19, 67], [20, 134]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-pedestrian:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "pedestrian"], ["==", "bridge", true]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": {"stops": [[12, 0], [13, 1]]},
+ "line-width": {
+ "stops": [[12, 3], [14, 4], [16, 8], [18, 36], [19, 90], [20, 179]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-service:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "service"], ["==", "bridge", true]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": {"stops": [[14, 0], [15, 1]]},
+ "line-width": {
+ "stops": [[14, 3], [16, 6], [18, 25], [19, 67], [20, 134]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-livingstreet:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "living_street"],
+ ["==", "bridge", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": {"stops": [[12, 0], [13, 1]]},
+ "line-width": {
+ "stops": [[12, 3], [14, 4], [16, 8], [18, 36], [19, 90], [20, 179]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-residential:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "residential"], ["==", "bridge", true]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": {"stops": [[12, 0], [13, 1]]},
+ "line-width": {
+ "stops": [[12, 3], [14, 4], [16, 8], [18, 36], [19, 90], [20, 179]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-unclassified:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "unclassified"], ["==", "bridge", true]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": {"stops": [[12, 0], [13, 1]]},
+ "line-width": {
+ "stops": [[12, 3], [14, 4], [16, 8], [18, 36], [19, 90], [20, 179]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-busway:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "busway"], ["==", "bridge", true]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {"line-color": "rgb(22,17,11)", "line-opacity": 0.5}
+ },
+ {
+ "id": "bridge-street-busguideway:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "bus_guideway"], ["==", "bridge", true]],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {"line-color": "rgb(22,17,11)", "line-opacity": 0.5}
+ },
+ {
+ "id": "bridge-street-tertiary-link:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "tertiary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": {"stops": [[12, 0], [13, 1]]},
+ "line-width": {
+ "stops": [[12, 3], [14, 4], [16, 8], [18, 36], [19, 90], [20, 179]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-secondary-link:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "secondary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [[12, 3], [14, 4], [16, 10], [18, 20], [20, 56]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-primary-link:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "primary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [[12, 3], [14, 4], [16, 10], [18, 20], [20, 56]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-trunk-link:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "trunk"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [[12, 3], [14, 4], [16, 10], [18, 20], [20, 56]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-motorway-link:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "motorway"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [[12, 3], [14, 4], [16, 10], [18, 20], [20, 56]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-tertiary:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "tertiary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": {"stops": [[12, 0], [13, 1]]},
+ "line-width": {
+ "stops": [[12, 3], [14, 4], [16, 8], [18, 36], [19, 90], [20, 179]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-secondary:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "secondary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": {"stops": [[11, 0], [12, 1]]},
+ "line-width": {
+ "stops": [[11, 3], [14, 7], [16, 11], [18, 42], [19, 95], [20, 193]]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-primary:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "primary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [
+ [8, 0],
+ [9, 1],
+ [10, 6],
+ [14, 8],
+ [16, 17],
+ [18, 50],
+ [19, 104],
+ [20, 202]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-trunk:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "trunk"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [
+ [7, 0],
+ [8, 3],
+ [10, 6],
+ [14, 8],
+ [16, 17],
+ [18, 50],
+ [19, 104],
+ [20, 202]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-motorway:bridge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "motorway"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-cap": "butt", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(22,17,11)",
+ "line-opacity": 0.5,
+ "line-width": {
+ "stops": [
+ [5, 0],
+ [6, 3],
+ [10, 7],
+ [14, 7],
+ [16, 20],
+ [18, 53],
+ [19, 118],
+ [20, 235]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-pedestrian-zone",
+ "type": "fill",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_polygons",
+ "filter": ["all", ["==", "bridge", true], ["==", "kind", "pedestrian"]],
+ "paint": {
+ "fill-color": "hsl(0,0%,0%)",
+ "fill-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-way-footway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "footway"]],
+ "layout": {"line-cap": "butt"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "rgb(40,26,44)"
+ }
+ },
+ {
+ "id": "bridge-way-steps:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "steps"]],
+ "layout": {"line-cap": "butt"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "rgb(40,26,44)"
+ }
+ },
+ {
+ "id": "bridge-way-path:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "path"]],
+ "layout": {"line-cap": "butt"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "rgb(40,26,44)"
+ }
+ },
+ {
+ "id": "bridge-way-cycleway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "cycleway"]],
+ "layout": {"line-cap": "butt"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 5], [18, 7], [19, 12], [20, 22]]
+ },
+ "line-color": "rgb(26,34,40)"
+ }
+ },
+ {
+ "id": "bridge-street-track:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "track"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(38,38,38)",
+ "line-width": {
+ "stops": [[14, 2], [16, 4], [18, 18], [19, 48], [20, 96]]
+ },
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-pedestrian:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "pedestrian"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(38,38,38)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-service:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "service"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(37,36,34)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 12], [19, 32], [20, 48]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-livingstreet:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "living_street"],
+ ["==", "bridge", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(38,38,38)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-residential:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "residential"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(38,38,38)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-unclassified:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "unclassified"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(38,38,38)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-busway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "busway"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(37,36,34)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 12], [19, 32], [20, 48]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-busguideway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "bus_guideway"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(37,36,34)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 12], [19, 32], [20, 48]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-tertiary-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "tertiary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(38,38,38)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-secondary-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "secondary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "bridge-street-primary-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "primary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "bridge-street-trunk-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "trunk"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "bridge-street-motorway-link:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "motorway"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {"stops": [[12, 2], [14, 3], [16, 7], [18, 14], [20, 40]]}
+ }
+ },
+ {
+ "id": "bridge-street-tertiary:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "tertiary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(38,38,38)",
+ "line-width": {
+ "stops": [[12, 2], [14, 3], [16, 6], [18, 26], [19, 64], [20, 128]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-secondary:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "secondary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {
+ "stops": [[11, 2], [14, 5], [16, 8], [18, 30], [19, 68], [20, 138]]
+ },
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-primary:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "primary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {
+ "stops": [
+ [8, 0],
+ [9, 1],
+ [10, 4],
+ [14, 6],
+ [16, 12],
+ [18, 36],
+ [19, 74],
+ [20, 144]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-trunk:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "trunk"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {
+ "stops": [
+ [6, 0],
+ [7, 2],
+ [10, 4],
+ [14, 6],
+ [16, 12],
+ [18, 36],
+ [19, 74],
+ [20, 144]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-motorway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "motorway"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(28,72%,31%)",
+ "line-width": {
+ "stops": [
+ [5, 0],
+ [6, 2],
+ [10, 5],
+ [14, 5],
+ [16, 14],
+ [18, 38],
+ [19, 84],
+ [20, 168]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-way-footway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "footway"]],
+ "layout": {"line-cap": "butt"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "rgb(16,0,20)"
+ }
+ },
+ {
+ "id": "bridge-way-steps",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "steps"]],
+ "layout": {"line-cap": "butt"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "rgb(16,0,20)"
+ }
+ },
+ {
+ "id": "bridge-way-path",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "path"]],
+ "layout": {"line-cap": "butt"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "rgb(16,0,20)"
+ }
+ },
+ {
+ "id": "bridge-way-cycleway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["==", "bridge", true], ["in", "kind", "cycleway"]],
+ "layout": {"line-cap": "butt"},
+ "paint": {
+ "line-width": {
+ "stops": [[15, 0], [16, 4], [18, 6], [19, 10], [20, 20]]
+ },
+ "line-color": "hsl(203,100%,3%)"
+ }
+ },
+ {
+ "id": "bridge-street-track",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "track"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[14, 1], [16, 3], [18, 16], [19, 44], [20, 88]]
+ },
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-pedestrian",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "pedestrian"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-service",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "service"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[14, 1], [16, 2], [18, 10], [19, 28], [20, 40]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-livingstreet",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "living_street"],
+ ["==", "bridge", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-residential",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "residential"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-unclassified",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "unclassified"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-busway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "busway"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[14, 1], [16, 2], [18, 10], [19, 28], [20, 40]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-busguideway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": ["all", ["==", "kind", "bus_guideway"], ["==", "bridge", true]],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "rgb(8,8,8)",
+ "line-width": {
+ "stops": [[14, 1], [16, 2], [18, 10], [19, 28], [20, 40]]
+ },
+ "line-opacity": {"stops": [[15, 0], [16, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-track-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "track"],
+ ["==", "bicycle", "designated"],
+ ["==", "bridge", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {"line-color": "hsl(0,0%,0%)"}
+ },
+ {
+ "id": "bridge-street-pedestrian-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "pedestrian"],
+ ["==", "bicycle", "designated"],
+ ["==", "bridge", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-service-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "service"],
+ ["==", "bicycle", "designated"],
+ ["==", "bridge", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {"line-color": "hsl(0,0%,0%)"}
+ },
+ {
+ "id": "bridge-street-livingstreet-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "living_street"],
+ ["==", "bicycle", "designated"],
+ ["==", "bridge", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-residential-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "residential"],
+ ["==", "bicycle", "designated"],
+ ["==", "bridge", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-unclassified-bicycle",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "kind", "unclassified"],
+ ["==", "bicycle", "designated"],
+ ["==", "bridge", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "round"},
+ "paint": {
+ "line-color": "hsl(203,100%,3%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-tertiary-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "tertiary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-secondary-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "secondary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "bridge-street-primary-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "primary"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "bridge-street-trunk-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "trunk"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "bridge-street-motorway-link",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "motorway"],
+ ["==", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(34,100%,23%)",
+ "line-width": {"stops": [[12, 1], [14, 2], [16, 5], [18, 12], [20, 38]]}
+ }
+ },
+ {
+ "id": "bridge-street-tertiary",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "tertiary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(0,0%,0%)",
+ "line-width": {
+ "stops": [[12, 1], [14, 2], [16, 5], [18, 24], [19, 60], [20, 120]]
+ },
+ "line-opacity": {"stops": [[12, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-secondary",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "secondary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {
+ "stops": [[11, 1], [14, 4], [16, 6], [18, 28], [19, 64], [20, 130]]
+ },
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-primary",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "primary"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {
+ "stops": [
+ [8, 0],
+ [9, 2],
+ [10, 3],
+ [14, 5],
+ [16, 10],
+ [18, 34],
+ [19, 70],
+ [20, 140]
+ ]
+ },
+ "line-opacity": {"stops": [[8, 0], [9, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-trunk",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "trunk"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(48,100%,17%)",
+ "line-width": {
+ "stops": [
+ [6, 0],
+ [7, 1],
+ [10, 3],
+ [14, 5],
+ [16, 10],
+ [18, 34],
+ [19, 70],
+ [20, 140]
+ ]
+ },
+ "line-opacity": {"stops": [[6, 0], [7, 1]]}
+ }
+ },
+ {
+ "id": "bridge-street-motorway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["==", "bridge", true],
+ ["in", "kind", "motorway"],
+ ["!=", "link", true]
+ ],
+ "layout": {"line-join": "round", "line-cap": "butt"},
+ "paint": {
+ "line-color": "hsl(34,100%,23%)",
+ "line-width": {
+ "stops": [
+ [5, 0],
+ [6, 1],
+ [10, 4],
+ [14, 4],
+ [16, 12],
+ [18, 36],
+ [19, 80],
+ [20, 160]
+ ]
+ },
+ "line-opacity": {"stops": [[5, 0], [6, 1]]}
+ }
+ },
+ {
+ "id": "bridge-transport-tram:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "tram"],
+ ["!has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "bridge-transport-narrowgauge:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "narrow_gauge"],
+ ["!has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "bridge-transport-subway:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["in", "kind", "subway"],
+ ["!has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "hsl(207,23%,28%)",
+ "line-width": {
+ "stops": [
+ [11, 0],
+ [12, 1],
+ [15, 3],
+ [16, 3],
+ [18, 6],
+ [19, 8],
+ [20, 10]
+ ]
+ },
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "bridge-transport-lightrail:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 8,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["!has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[8, 1], [13, 1], [15, 1], [20, 14]]},
+ "line-opacity": {"stops": [[11, 0], [12, 1]]}
+ }
+ },
+ {
+ "id": "bridge-transport-lightrail-service:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[14, 0], [15, 1], [16, 1], [20, 14]]}
+ }
+ },
+ {
+ "id": "bridge-transport-rail:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 8,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["!has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[8, 1], [13, 1], [15, 1], [20, 14]]},
+ "line-opacity": {"stops": [[8, 0], [9, 1]]}
+ }
+ },
+ {
+ "id": "bridge-transport-rail-service:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[14, 0], [15, 1], [16, 1], [20, 14]]}
+ }
+ },
+ {
+ "id": "bridge-transport-monorail:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["in", "kind", "monorail"], ["==", "bridge", true]],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "bridge-transport-funicular:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": ["all", ["in", "kind", "funicular"], ["==", "bridge", true]],
+ "paint": {
+ "line-color": "hsl(208,14%,27%)",
+ "line-width": {"stops": [[15, 0], [16, 5], [18, 7], [20, 20]]},
+ "line-dasharray": [0.1, 0.5]
+ }
+ },
+ {
+ "id": "bridge-transport-tram",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["in", "kind", "tram"],
+ ["!has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "bridge-transport-narrowgauge",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["in", "kind", "narrow_gauge"],
+ ["!has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "bridge-transport-subway",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "filter": [
+ "all",
+ ["in", "kind", "subway"],
+ ["!has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "rgb(42,55,67)",
+ "line-width": {
+ "stops": [
+ [11, 0],
+ [12, 1],
+ [15, 2],
+ [16, 2],
+ [18, 5],
+ [19, 6],
+ [20, 8]
+ ]
+ },
+ "line-dasharray": [2, 2],
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "bridge-transport-lightrail",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["!has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[14, 0], [15, 1], [20, 10]]},
+ "line-dasharray": [2, 2],
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "bridge-transport-lightrail-service",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "light_rail"],
+ ["has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[15, 0], [16, 1], [20, 10]]},
+ "line-dasharray": [2, 2]
+ }
+ },
+ {
+ "id": "bridge-transport-rail",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["!has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[14, 0], [15, 1], [20, 10]]},
+ "line-dasharray": [2, 2],
+ "line-opacity": {"stops": [[14, 0], [15, 1]]}
+ }
+ },
+ {
+ "id": "bridge-transport-rail-service",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["in", "kind", "rail"],
+ ["has", "service"],
+ ["==", "bridge", true]
+ ],
+ "paint": {
+ "line-color": "rgb(44,52,59)",
+ "line-width": {"stops": [[15, 0], [16, 1], [20, 10]]},
+ "line-dasharray": [2, 2]
+ }
+ },
+ {
+ "id": "bridge-transport-monorail",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": ["all", ["in", "kind", "monorail"], ["==", "bridge", true]],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "bridge-transport-funicular",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 13,
+ "filter": ["all", ["in", "kind", "funicular"], ["==", "bridge", true]],
+ "paint": {
+ "line-width": {"stops": [[13, 0], [16, 1], [17, 2], [18, 3], [20, 5]]},
+ "line-color": "hsl(208,14%,27%)"
+ }
+ },
+ {
+ "id": "poi-amenity",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "pois",
+ "minzoom": 16,
+ "filter": ["to-boolean", ["get", "amenity"]],
+ "layout": {
+ "icon-size": {"stops": [[16, 0.5], [19, 0.5], [20, 1]]},
+ "symbol-placement": "point",
+ "icon-optional": true,
+ "text-font": ["noto_sans_regular"],
+ "icon-image": [
+ "match",
+ ["get", "amenity"],
+ "arts_centre",
+ "basics:icon-art_gallery",
+ "atm",
+ "basics:icon-atm",
+ "bank",
+ "basics:icon-bank",
+ "bar",
+ "basics:icon-bar",
+ "bench",
+ "basics:icon-bench",
+ "bicycle_rental",
+ "basics:icon-bicycle_share",
+ "biergarten",
+ "basics:icon-beergarden",
+ "cafe",
+ "basics:icon-cafe",
+ "car_rental",
+ "basics:icon-car_rental",
+ "car_sharing",
+ "basics:icon-car_rental",
+ "car_wash",
+ "basics:icon-car_wash",
+ "cinema",
+ "basics:icon-cinema",
+ "college",
+ "basics:icon-college",
+ "community_centre",
+ "basics:icon-community",
+ "dentist",
+ "basics:icon-dentist",
+ "doctors",
+ "basics:icon-doctor",
+ "dog_park",
+ "basics:icon-dog_park",
+ "drinking_water",
+ "basics:icon-drinking_water",
+ "embassy",
+ "basics:icon-embassy",
+ "fast_food",
+ "basics:icon-fast_food",
+ "fire_station",
+ "basics:icon-fire_station",
+ "fountain",
+ "basics:icon-fountain",
+ "grave_yard",
+ "basics:icon-cemetery",
+ "hospital",
+ "basics:icon-hospital",
+ "hunting_stand",
+ "basics:icon-huntingstand",
+ "library",
+ "basics:icon-library",
+ "marketplace",
+ "basics:icon-marketplace",
+ "nightclub",
+ "basics:icon-nightclub",
+ "nursing_home",
+ "basics:icon-nursinghome",
+ "pharmacy",
+ "basics:icon-pharmacy",
+ "place_of_worship",
+ "basics:icon-place_of_worship",
+ "playground",
+ "basics:icon-playground",
+ "police",
+ "basics:icon-police",
+ "post_box",
+ "basics:icon-postbox",
+ "post_office",
+ "basics:icon-post",
+ "prison",
+ "basics:icon-prison",
+ "pub",
+ "basics:icon-beer",
+ "recycling",
+ "basics:icon-recycling",
+ "restaurant",
+ "basics:icon-restaurant",
+ "school",
+ "basics:icon-school",
+ "shelter",
+ "basics:icon-shelter",
+ "telephone",
+ "basics:icon-telephone",
+ "theatre",
+ "basics:icon-theatre",
+ "toilets",
+ "basics:icon-toilet",
+ "townhall",
+ "basics:icon-town_hall",
+ "vending_machine",
+ "basics:icon-vendingmachine",
+ "veterinary",
+ "basics:icon-veterinary",
+ "waste_basket",
+ "basics:icon-waste_basket",
+ ""
+ ]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "icon-color": "hsl(0,0%,67%)",
+ "text-color": "hsl(0,0%,67%)"
+ }
+ },
+ {
+ "id": "poi-leisure",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "pois",
+ "minzoom": 16,
+ "filter": ["to-boolean", ["get", "leisure"]],
+ "layout": {
+ "icon-size": {"stops": [[16, 0.5], [19, 0.5], [20, 1]]},
+ "symbol-placement": "point",
+ "icon-optional": true,
+ "text-font": ["noto_sans_regular"],
+ "icon-image": [
+ "match",
+ ["get", "leisure"],
+ "golf_course",
+ "basics:icon-golf",
+ "ice_rink",
+ "basics:icon-icerink",
+ "pitch",
+ "basics:icon-pitch",
+ "stadium",
+ "basics:icon-stadium",
+ "swimming_pool",
+ "basics:icon-swimming",
+ "water_park",
+ "basics:icon-waterpark",
+ "basics:icon-sports"
+ ]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "icon-color": "hsl(0,0%,67%)",
+ "text-color": "hsl(0,0%,67%)"
+ }
+ },
+ {
+ "id": "poi-tourism",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "pois",
+ "minzoom": 16,
+ "filter": ["to-boolean", ["get", "tourism"]],
+ "layout": {
+ "icon-size": {"stops": [[16, 0.5], [19, 0.5], [20, 1]]},
+ "symbol-placement": "point",
+ "icon-optional": true,
+ "text-font": ["noto_sans_regular"],
+ "icon-image": [
+ "match",
+ ["get", "tourism"],
+ "chalet",
+ "basics:icon-chalet",
+ "information",
+ "basics:transport-information",
+ "picnic_site",
+ "basics:icon-picnic_site",
+ "viewpoint",
+ "basics:icon-viewpoint",
+ "zoo",
+ "basics:icon-zoo",
+ ""
+ ]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "icon-color": "hsl(0,0%,67%)",
+ "text-color": "hsl(0,0%,67%)"
+ }
+ },
+ {
+ "id": "poi-shop",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "pois",
+ "minzoom": 16,
+ "filter": ["to-boolean", ["get", "shop"]],
+ "layout": {
+ "icon-size": {"stops": [[16, 0.5], [19, 0.5], [20, 1]]},
+ "symbol-placement": "point",
+ "icon-optional": true,
+ "text-font": ["noto_sans_regular"],
+ "icon-image": [
+ "match",
+ ["get", "shop"],
+ "alcohol",
+ "basics:icon-alcohol_shop",
+ "bakery",
+ "basics:icon-bakery",
+ "beauty",
+ "basics:icon-beauty",
+ "beverages",
+ "basics:icon-beverages",
+ "books",
+ "basics:icon-books",
+ "butcher",
+ "basics:icon-butcher",
+ "chemist",
+ "basics:icon-chemist",
+ "clothes",
+ "basics:icon-clothes",
+ "doityourself",
+ "basics:icon-doityourself",
+ "dry_cleaning",
+ "basics:icon-drycleaning",
+ "florist",
+ "basics:icon-florist",
+ "furniture",
+ "basics:icon-furniture",
+ "garden_centre",
+ "basics:icon-garden_centre",
+ "general",
+ "basics:icon-shop",
+ "gift",
+ "basics:icon-gift",
+ "greengrocer",
+ "basics:icon-greengrocer",
+ "hairdresser",
+ "basics:icon-hairdresser",
+ "hardware",
+ "basics:icon-hardware",
+ "jewelry",
+ "basics:icon-jewelry_store",
+ "kiosk",
+ "basics:icon-kiosk",
+ "laundry",
+ "basics:icon-laundry",
+ "newsagent",
+ "basics:icon-newsagent",
+ "optican",
+ "basics:icon-optician",
+ "outdoor",
+ "basics:icon-outdoor",
+ "shoes",
+ "basics:icon-shoes",
+ "sports",
+ "basics:icon-sports",
+ "stationery",
+ "basics:icon-stationery",
+ "toys",
+ "basics:icon-toys",
+ "travel_agency",
+ "basics:icon-travel_agent",
+ "video",
+ "basics:icon-video",
+ "basics:icon-shop"
+ ]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "icon-color": "hsl(0,0%,67%)",
+ "text-color": "hsl(0,0%,67%)"
+ }
+ },
+ {
+ "id": "poi-man_made",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "pois",
+ "minzoom": 16,
+ "filter": ["to-boolean", ["get", "man_made"]],
+ "layout": {
+ "icon-size": {"stops": [[16, 0.5], [19, 0.5], [20, 1]]},
+ "symbol-placement": "point",
+ "icon-optional": true,
+ "text-font": ["noto_sans_regular"],
+ "icon-image": [
+ "match",
+ ["get", "man_made"],
+ "lighthouse",
+ "basics:icon-lighthouse",
+ "surveillance",
+ "basics:icon-surveillance",
+ "tower",
+ "basics:icon-observation_tower",
+ "watermill",
+ "basics:icon-watermill",
+ "windmill",
+ "basics:icon-windmill",
+ ""
+ ]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "icon-color": "hsl(0,0%,67%)",
+ "text-color": "hsl(0,0%,67%)"
+ }
+ },
+ {
+ "id": "poi-historic",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "pois",
+ "minzoom": 16,
+ "filter": ["to-boolean", ["get", "historic"]],
+ "layout": {
+ "icon-size": {"stops": [[16, 0.5], [19, 0.5], [20, 1]]},
+ "symbol-placement": "point",
+ "icon-optional": true,
+ "text-font": ["noto_sans_regular"],
+ "icon-image": [
+ "match",
+ ["get", "historic"],
+ "artwork",
+ "basics:icon-artwork",
+ "castle",
+ "basics:icon-castle",
+ "monument",
+ "basics:icon-monument",
+ "wayside_shrine",
+ "basics:icon-shrine",
+ "basics:icon-historic"
+ ]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "icon-color": "hsl(0,0%,67%)",
+ "text-color": "hsl(0,0%,67%)"
+ }
+ },
+ {
+ "id": "poi-emergency",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "pois",
+ "minzoom": 16,
+ "filter": ["to-boolean", ["get", "emergency"]],
+ "layout": {
+ "icon-size": {"stops": [[16, 0.5], [19, 0.5], [20, 1]]},
+ "symbol-placement": "point",
+ "icon-optional": true,
+ "text-font": ["noto_sans_regular"],
+ "icon-image": [
+ "match",
+ ["get", "emergency"],
+ "defibrillator",
+ "basics:icon-defibrillator",
+ "fire_hydrant",
+ "basics:icon-hydrant",
+ "phone",
+ "basics:icon-emergency_phone",
+ ""
+ ]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "icon-color": "hsl(0,0%,67%)",
+ "text-color": "hsl(0,0%,67%)"
+ }
+ },
+ {
+ "id": "poi-highway",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "pois",
+ "minzoom": 16,
+ "filter": ["to-boolean", ["get", "highway"]],
+ "layout": {
+ "icon-size": {"stops": [[16, 0.5], [19, 0.5], [20, 1]]},
+ "symbol-placement": "point",
+ "icon-optional": true,
+ "text-font": ["noto_sans_regular"]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "icon-color": "hsl(0,0%,67%)",
+ "text-color": "hsl(0,0%,67%)"
+ }
+ },
+ {
+ "id": "poi-office",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "pois",
+ "minzoom": 16,
+ "filter": ["to-boolean", ["get", "office"]],
+ "layout": {
+ "icon-size": {"stops": [[16, 0.5], [19, 0.5], [20, 1]]},
+ "symbol-placement": "point",
+ "icon-optional": true,
+ "text-font": ["noto_sans_regular"]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "icon-color": "hsl(0,0%,67%)",
+ "text-color": "hsl(0,0%,67%)"
+ }
+ },
+ {
+ "id": "boundary-country:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "boundaries",
+ "filter": [
+ "all",
+ ["==", "admin_level", 2],
+ ["!=", "maritime", true],
+ ["!=", "disputed", true],
+ ["!=", "coastline", true]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(16,11,6)",
+ "line-blur": 1,
+ "line-width": {"stops": [[2, 0], [3, 2], [10, 8]]},
+ "line-opacity": 0.75
+ }
+ },
+ {
+ "id": "boundary-country-disputed:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "boundaries",
+ "filter": [
+ "all",
+ ["==", "admin_level", 2],
+ ["==", "disputed", true],
+ ["!=", "maritime", true],
+ ["!=", "coastline", true]
+ ],
+ "paint": {
+ "line-width": {"stops": [[2, 0], [3, 2], [10, 8]]},
+ "line-opacity": 0.75,
+ "line-color": "rgb(16,11,6)"
+ }
+ },
+ {
+ "id": "boundary-state:outline",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "boundaries",
+ "filter": [
+ "all",
+ ["==", "admin_level", 4],
+ ["!=", "maritime", true],
+ ["!=", "disputed", true],
+ ["!=", "coastline", true]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "rgb(15,11,5)",
+ "line-blur": 1,
+ "line-width": {"stops": [[7, 0], [8, 2], [10, 4]]},
+ "line-opacity": 0.75
+ }
+ },
+ {
+ "id": "boundary-country",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "boundaries",
+ "filter": [
+ "all",
+ ["==", "admin_level", 2],
+ ["!=", "maritime", true],
+ ["!=", "disputed", true],
+ ["!=", "coastline", true]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "hsl(240,24%,28%)",
+ "line-width": {"stops": [[2, 0], [3, 1], [10, 4]]}
+ }
+ },
+ {
+ "id": "boundary-country-disputed",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "boundaries",
+ "filter": [
+ "all",
+ ["==", "admin_level", 2],
+ ["==", "disputed", true],
+ ["!=", "maritime", true],
+ ["!=", "coastline", true]
+ ],
+ "layout": {"line-cap": "square"},
+ "paint": {
+ "line-width": {"stops": [[2, 0], [3, 1], [10, 4]]},
+ "line-color": "hsl(246,17%,23%)",
+ "line-dasharray": [2, 1]
+ }
+ },
+ {
+ "id": "boundary-state",
+ "type": "line",
+ "source": "versatiles-shortbread",
+ "source-layer": "boundaries",
+ "filter": [
+ "all",
+ ["==", "admin_level", 4],
+ ["!=", "maritime", true],
+ ["!=", "disputed", true],
+ ["!=", "coastline", true]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "hsl(240,24%,28%)",
+ "line-width": {"stops": [[7, 0], [8, 1], [10, 2]]}
+ }
+ },
+ {
+ "id": "label-address-housenumber",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "addresses",
+ "minzoom": 17,
+ "filter": ["has", "housenumber"],
+ "layout": {
+ "text-field": "{housenumber}",
+ "text-font": ["noto_sans_regular"],
+ "symbol-placement": "point",
+ "text-anchor": "center",
+ "text-size": {"stops": [[17, 8], [19, 10]]}
+ },
+ "paint": {
+ "icon-color": "rgb(95,88,81)",
+ "text-color": "rgb(95,88,81)",
+ "text-halo-color": "rgb(23,17,10)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-motorway-shield",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_labels",
+ "minzoom": 14,
+ "filter": ["==", "kind", "motorway"],
+ "layout": {
+ "text-field": "{ref}",
+ "text-font": ["noto_sans_bold"],
+ "symbol-placement": "line",
+ "text-anchor": "center",
+ "text-size": {"stops": [[14, 10], [18, 12], [20, 16]]}
+ },
+ "paint": {
+ "icon-color": "hsl(0,0%,0%)",
+ "text-color": "hsl(0,0%,0%)",
+ "text-halo-color": "hsl(34,100%,23%)",
+ "text-halo-width": 0.1,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-street-pedestrian",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_labels",
+ "minzoom": 12,
+ "filter": ["==", "kind", "pedestrian"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "symbol-placement": "line",
+ "text-anchor": "center",
+ "text-size": {"stops": [[12, 10], [15, 13]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-street-livingstreet",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_labels",
+ "minzoom": 12,
+ "filter": ["==", "kind", "living_street"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "symbol-placement": "line",
+ "text-anchor": "center",
+ "text-size": {"stops": [[12, 10], [15, 13]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-street-residential",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_labels",
+ "minzoom": 12,
+ "filter": ["==", "kind", "residential"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "symbol-placement": "line",
+ "text-anchor": "center",
+ "text-size": {"stops": [[12, 10], [15, 13]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-street-unclassified",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_labels",
+ "minzoom": 12,
+ "filter": ["==", "kind", "unclassified"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "symbol-placement": "line",
+ "text-anchor": "center",
+ "text-size": {"stops": [[12, 10], [15, 13]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-street-tertiary",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_labels",
+ "minzoom": 12,
+ "filter": ["==", "kind", "tertiary"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "symbol-placement": "line",
+ "text-anchor": "center",
+ "text-size": {"stops": [[12, 10], [15, 13]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-street-secondary",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_labels",
+ "minzoom": 12,
+ "filter": ["==", "kind", "secondary"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "symbol-placement": "line",
+ "text-anchor": "center",
+ "text-size": {"stops": [[12, 10], [15, 13]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-street-primary",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_labels",
+ "minzoom": 12,
+ "filter": ["==", "kind", "primary"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "symbol-placement": "line",
+ "text-anchor": "center",
+ "text-size": {"stops": [[12, 10], [15, 13]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-street-trunk",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_labels",
+ "minzoom": 12,
+ "filter": ["==", "kind", "trunk"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "symbol-placement": "line",
+ "text-anchor": "center",
+ "text-size": {"stops": [[12, 10], [15, 13]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-street-track",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "street_labels",
+ "minzoom": 12,
+ "filter": ["==", "kind", "track"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "symbol-placement": "line",
+ "text-anchor": "center",
+ "text-size": {"stops": [[12, 10], [15, 13]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-place-neighbourhood",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "place_labels",
+ "minzoom": 14,
+ "filter": ["==", "kind", "neighbourhood"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "symbol-sort-key": ["-", ["to-number", ["get", "population"], 0]],
+ "text-font": ["noto_sans_regular"],
+ "text-size": {"stops": [[14, 12]]},
+ "text-transform": "uppercase"
+ },
+ "paint": {
+ "icon-color": "rgb(182,209,215)",
+ "text-color": "rgb(182,209,215)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-place-quarter",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "place_labels",
+ "minzoom": 13,
+ "filter": ["==", "kind", "quarter"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "symbol-sort-key": ["-", ["to-number", ["get", "population"], 0]],
+ "text-font": ["noto_sans_regular"],
+ "text-size": {"stops": [[13, 13]]},
+ "text-transform": "uppercase"
+ },
+ "paint": {
+ "icon-color": "rgb(182,204,215)",
+ "text-color": "rgb(182,204,215)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-place-suburb",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "place_labels",
+ "minzoom": 11,
+ "filter": ["==", "kind", "suburb"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "symbol-sort-key": ["-", ["to-number", ["get", "population"], 0]],
+ "text-font": ["noto_sans_regular"],
+ "text-size": {"stops": [[11, 11], [13, 14]]},
+ "text-transform": "uppercase"
+ },
+ "paint": {
+ "icon-color": "rgb(182,198,215)",
+ "text-color": "rgb(182,198,215)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-place-hamlet",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "place_labels",
+ "minzoom": 13,
+ "filter": ["==", "kind", "hamlet"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "symbol-sort-key": ["-", ["to-number", ["get", "population"], 0]],
+ "text-font": ["noto_sans_regular"],
+ "text-size": {"stops": [[10, 11], [12, 14]]}
+ },
+ "paint": {
+ "icon-color": "rgb(182,190,215)",
+ "text-color": "rgb(182,190,215)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-place-village",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "place_labels",
+ "minzoom": 11,
+ "filter": ["==", "kind", "village"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "symbol-sort-key": ["-", ["to-number", ["get", "population"], 0]],
+ "text-font": ["noto_sans_regular"],
+ "text-size": {"stops": [[9, 11], [12, 14]]}
+ },
+ "paint": {
+ "icon-color": "rgb(182,190,215)",
+ "text-color": "rgb(182,190,215)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-place-town",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "place_labels",
+ "minzoom": 9,
+ "filter": ["==", "kind", "town"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "symbol-sort-key": ["-", ["to-number", ["get", "population"], 0]],
+ "text-font": ["noto_sans_regular"],
+ "text-size": {"stops": [[8, 11], [12, 14]]}
+ },
+ "paint": {
+ "icon-color": "rgb(182,190,215)",
+ "text-color": "rgb(182,190,215)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-boundary-state",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "boundary_labels",
+ "minzoom": 5,
+ "filter": ["in", "admin_level", 4, "4"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "text-transform": "uppercase",
+ "text-anchor": "top",
+ "text-offset": [0, 0.2],
+ "text-padding": 0,
+ "text-optional": true,
+ "text-size": {"stops": [[5, 8], [8, 12]]}
+ },
+ "paint": {
+ "icon-color": "rgb(178,178,194)",
+ "text-color": "rgb(178,178,194)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-place-city",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "place_labels",
+ "minzoom": 7,
+ "filter": ["==", "kind", "city"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "symbol-sort-key": ["-", ["to-number", ["get", "population"], 0]],
+ "text-font": ["noto_sans_regular"],
+ "text-size": {"stops": [[7, 11], [10, 14]]}
+ },
+ "paint": {
+ "icon-color": "rgb(182,190,215)",
+ "text-color": "rgb(182,190,215)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-place-statecapital",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "place_labels",
+ "minzoom": 6,
+ "filter": ["==", "kind", "state_capital"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "symbol-sort-key": ["-", ["to-number", ["get", "population"], 0]],
+ "text-font": ["noto_sans_regular"],
+ "text-size": {"stops": [[6, 11], [10, 15]]}
+ },
+ "paint": {
+ "icon-color": "rgb(182,190,215)",
+ "text-color": "rgb(182,190,215)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-place-capital",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "place_labels",
+ "minzoom": 5,
+ "filter": ["==", "kind", "capital"],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "symbol-sort-key": ["-", ["to-number", ["get", "population"], 0]],
+ "text-font": ["noto_sans_regular"],
+ "text-size": {"stops": [[5, 12], [10, 16]]}
+ },
+ "paint": {
+ "icon-color": "rgb(182,190,215)",
+ "text-color": "rgb(182,190,215)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-boundary-country-small",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "boundary_labels",
+ "minzoom": 4,
+ "filter": [
+ "all",
+ ["in", "admin_level", 2, "2"],
+ ["<=", "way_area", 10000000]
+ ],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "text-transform": "uppercase",
+ "text-anchor": "top",
+ "text-offset": [0, 0.2],
+ "text-padding": 0,
+ "text-optional": true,
+ "text-size": {"stops": [[4, 8], [5, 11]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-boundary-country-medium",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "boundary_labels",
+ "minzoom": 3,
+ "filter": [
+ "all",
+ ["in", "admin_level", 2, "2"],
+ ["<", "way_area", 90000000],
+ [">", "way_area", 10000000]
+ ],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "text-transform": "uppercase",
+ "text-anchor": "top",
+ "text-offset": [0, 0.2],
+ "text-padding": 0,
+ "text-optional": true,
+ "text-size": {"stops": [[3, 8], [5, 12]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "label-boundary-country-large",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "boundary_labels",
+ "minzoom": 2,
+ "filter": [
+ "all",
+ ["in", "admin_level", 2, "2"],
+ [">=", "way_area", 90000000]
+ ],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "text-font": ["noto_sans_regular"],
+ "text-transform": "uppercase",
+ "text-anchor": "top",
+ "text-offset": [0, 0.2],
+ "text-padding": 0,
+ "text-optional": true,
+ "text-size": {"stops": [[2, 8], [5, 13]]}
+ },
+ "paint": {
+ "icon-color": "hsl(240,14%,77%)",
+ "text-color": "hsl(240,14%,77%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "marking-oneway",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ ["==", "oneway", true],
+ [
+ "in",
+ "kind",
+ "trunk",
+ "primary",
+ "secondary",
+ "tertiary",
+ "unclassified",
+ "residential",
+ "living_street"
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "symbol-spacing": 175,
+ "icon-rotate": 90,
+ "icon-rotation-alignment": "map",
+ "icon-padding": 5,
+ "symbol-avoid-edges": true,
+ "icon-image": "basics:marking-arrow",
+ "text-font": ["noto_sans_regular"]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4], [20, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4], [20, 0.4]]}
+ }
+ },
+ {
+ "id": "marking-oneway-reverse",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "streets",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ ["==", "oneway_reverse", true],
+ [
+ "in",
+ "kind",
+ "trunk",
+ "primary",
+ "secondary",
+ "tertiary",
+ "unclassified",
+ "residential",
+ "living_street"
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "symbol-spacing": 75,
+ "icon-rotate": -90,
+ "icon-rotation-alignment": "map",
+ "icon-padding": 5,
+ "symbol-avoid-edges": true,
+ "icon-image": "basics:marking-arrow",
+ "text-font": ["noto_sans_regular"]
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[16, 0], [17, 0.4], [20, 0.4]]},
+ "text-opacity": {"stops": [[16, 0], [17, 0.4], [20, 0.4]]}
+ }
+ },
+ {
+ "id": "symbol-transit-station",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "public_transport",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["in", "kind", "station", "halt"],
+ ["!in", "station", "light_rail", "subway"]
+ ],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "icon-size": {"stops": [[13, 0.5], [15, 1]]},
+ "symbol-placement": "point",
+ "icon-keep-upright": true,
+ "text-font": ["noto_sans_regular"],
+ "text-size": 10,
+ "icon-anchor": "bottom",
+ "text-anchor": "top",
+ "icon-image": "basics:icon-rail"
+ },
+ "paint": {
+ "icon-opacity": 0.7,
+ "icon-color": "hsl(270,4%,60%)",
+ "text-color": "hsl(270,4%,60%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "symbol-transit-airfield",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "public_transport",
+ "minzoom": 13,
+ "filter": ["all", ["==", "kind", "aerodrome"], ["!has", "iata"]],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "icon-size": {"stops": [[13, 0.5], [15, 1]]},
+ "symbol-placement": "point",
+ "icon-keep-upright": true,
+ "text-font": ["noto_sans_regular"],
+ "text-size": 10,
+ "icon-anchor": "bottom",
+ "text-anchor": "top",
+ "icon-image": "basics:icon-airfield"
+ },
+ "paint": {
+ "icon-opacity": 0.7,
+ "icon-color": "hsl(270,4%,60%)",
+ "text-color": "hsl(270,4%,60%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "symbol-transit-airport",
+ "type": "symbol",
+ "source": "versatiles-shortbread",
+ "source-layer": "public_transport",
+ "minzoom": 12,
+ "filter": ["all", ["==", "kind", "aerodrome"], ["has", "iata"]],
+ "layout": {
+ "text-field": [
+ "coalesce",
+ ["get", "name"],
+ ["get", "name_en"],
+ ["get", "name_de"]
+ ],
+ "icon-size": {"stops": [[12, 0.5], [14, 1]]},
+ "symbol-placement": "point",
+ "icon-keep-upright": true,
+ "text-font": ["noto_sans_regular"],
+ "text-size": 10,
+ "icon-anchor": "bottom",
+ "text-anchor": "top",
+ "icon-image": "basics:icon-airport"
+ },
+ "paint": {
+ "icon-opacity": 0.7,
+ "icon-color": "hsl(270,4%,60%)",
+ "text-color": "hsl(270,4%,60%)",
+ "text-halo-color": "hsla(0,0%,0%,0.8)",
+ "text-halo-width": 2,
+ "text-halo-blur": 1
+ }
+ }
+ ],
+ "id": "80klscq"
+}
\ No newline at end of file
diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt b/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt
--- a/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt
+++ b/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt
@@ -32,8 +32,6 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_intro)
- //check default settings and apply them
- checkApplyDefaultSettingsValues()
viewPager = findViewById(R.id.viewPager)
btnBackward = findViewById(R.id.btnPrevious)
btnForward = findViewById(R.id.btnNext)
diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java b/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java
--- a/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java
+++ b/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java
@@ -33,6 +33,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBarDrawerToggle;
+import androidx.appcompat.app.AppCompatDelegate;
import androidx.appcompat.widget.Toolbar;
import androidx.core.graphics.Insets;
import androidx.core.view.*;
@@ -49,6 +50,7 @@
import java.util.Arrays;
import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.function.Consumer;
@@ -72,6 +74,7 @@
private final static String TAG_FAVORITES="favorites_frag";
private Snackbar snackbar;
+
private ServiceAlertsViewModel serviceAlertsViewModel;
//private FragmentKind showingFragmentKind;
@@ -116,6 +119,8 @@
}
};
+
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -123,10 +128,6 @@
setContentView(R.layout.activity_principal);
serviceAlertsViewModel = new ViewModelProvider(this).get(ServiceAlertsViewModel.class);
//Use LiveModel to sync fragment state
- /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- getWindow().setNavigationBarContrastEnforced(false);
- }
- */
//onBackPressed solution required from Android 16
backPressedCallback.setEnabled(true);
@@ -282,8 +283,8 @@
}
//boolean onCreateComplete = true;
- //last but not least, set the good default values
- checkApplyDefaultSettingsValues();
+ //default values are set in the BustoApp
+ //checkApplyDefaultSettingsValues();
// handle the device "insets"
/*
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.rootRelativeLayout), (v, windowInsets) -> {
diff --git a/app/src/main/java/it/reyboz/bustorino/BustoApp.java b/app/src/main/java/it/reyboz/bustorino/BustoApp.java
--- a/app/src/main/java/it/reyboz/bustorino/BustoApp.java
+++ b/app/src/main/java/it/reyboz/bustorino/BustoApp.java
@@ -19,7 +19,13 @@
import android.content.Context;
+import android.content.SharedPreferences;
+import androidx.appcompat.app.AppCompatDelegate;
import androidx.multidex.MultiDexApplication;
+import androidx.preference.PreferenceManager;
+import it.reyboz.bustorino.backend.utils;
+import it.reyboz.bustorino.data.PreferencesHolder;
+import it.reyboz.bustorino.fragments.SettingsFragment;
import org.acra.ACRA;
import org.acra.BuildConfig;
import org.acra.ReportField;
@@ -29,8 +35,7 @@
import org.acra.data.StringFormat;
import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
import static org.acra.ReportField.*;
@@ -41,6 +46,7 @@
IS_SILENT, STACK_TRACE, INITIAL_CONFIGURATION, CRASH_CONFIGURATION, DISPLAY, USER_COMMENT,
USER_APP_START_DATE, USER_CRASH_DATE, LOGCAT, SHARED_PREFERENCES);
+
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
@@ -72,4 +78,62 @@
}
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ checkApplyDefaultSettingsValues();
+
+ var dayorNight = PreferencesHolder.getAppThemeDayNight(this);
+ AppCompatDelegate.setDefaultNightMode(dayorNight);
+
+ }
+
+ /**
+ * Adjust setting to match the default ones
+ */
+ protected void checkApplyDefaultSettingsValues(){
+ SharedPreferences mainSharedPref = PreferenceManager.getDefaultSharedPreferences(this);
+ SharedPreferences.Editor editor = mainSharedPref.edit();
+ boolean edit = false;
+
+ //Day or night theme
+ var str = mainSharedPref.getString(PreferencesHolder.PREF_THEME_DAY_NIGHT, "");
+ if(str.isEmpty()){
+ editor.putString(PreferencesHolder.PREF_THEME_DAY_NIGHT, "system");
+ edit = true;
+ }
+
+ //Main fragment to show
+ String screen = mainSharedPref.getString(SettingsFragment.PREF_KEY_STARTUP_SCREEN, "");
+ if (screen.isEmpty()){
+ editor.putString(SettingsFragment.PREF_KEY_STARTUP_SCREEN, "arrivals");
+ edit=true;
+ }
+ //Fetchers
+ final Set<String> setSelected = mainSharedPref.getStringSet(SettingsFragment.KEY_ARRIVALS_FETCHERS_USE, new HashSet<>());
+ if (setSelected.isEmpty()){
+ String[] defaultVals = getResources().getStringArray(R.array.arrivals_sources_values_default);
+ editor.putStringSet(SettingsFragment.KEY_ARRIVALS_FETCHERS_USE, utils.convertArrayToSet(defaultVals));
+ edit=true;
+ }
+ //Live bus positions
+ final String keySourcePositions=getString(R.string.pref_positions_source);
+ final String positionsSource = mainSharedPref.getString(keySourcePositions, "");
+ if(positionsSource.isEmpty()){
+ String[] defaultVals = getResources().getStringArray(R.array.positions_source_values);
+ editor.putString(keySourcePositions, defaultVals[0]);
+ edit=true;
+ }
+ //Map style
+ final String mapStylePref = mainSharedPref.getString(SettingsFragment.LIBREMAP_STYLE_PREF_KEY, "");
+ if(mapStylePref.isEmpty()){
+ final String[] defaultVals = getResources().getStringArray(R.array.map_style_pref_values);
+ editor.putString(SettingsFragment.LIBREMAP_STYLE_PREF_KEY, defaultVals[0]);
+ edit=true;
+ }
+ if (edit){
+ editor.apply();
+ }
+
+ }
}
diff --git a/app/src/main/java/it/reyboz/bustorino/adapters/ArrivalsStopAdapter.java b/app/src/main/java/it/reyboz/bustorino/adapters/ArrivalsStopAdapter.java
--- a/app/src/main/java/it/reyboz/bustorino/adapters/ArrivalsStopAdapter.java
+++ b/app/src/main/java/it/reyboz/bustorino/adapters/ArrivalsStopAdapter.java
@@ -19,7 +19,6 @@
import android.content.Context;
import android.content.SharedPreferences;
-import android.location.Location;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.util.Pair;
@@ -39,7 +38,7 @@
import java.util.*;
public class ArrivalsStopAdapter extends RecyclerView.Adapter<ArrivalsStopAdapter.ViewHolder> implements SharedPreferences.OnSharedPreferenceChangeListener {
- private final static int layoutRes = R.layout.arrivals_nearby_card;
+ private final static int layoutRes = R.layout.item_arrivals_nearby_card;
//private List<Stop> stops;
private @NonNull GPSPoint userPosition;
private FragmentListenerMain listener;
@@ -51,7 +50,7 @@
private NameCapitalize capit;
- public ArrivalsStopAdapter(@Nullable List< RouteWithStop > routesPairList, FragmentListenerMain fragmentListener, Context con, @NonNull GPSPoint pos) {
+ public ArrivalsStopAdapter(@Nullable List< RouteWithStop > routesPairList,@NonNull FragmentListenerMain fragmentListener, @NonNull Context con, @NonNull GPSPoint pos) {
listener = fragmentListener;
userPosition = pos;
this.routesPairList = routesPairList;
diff --git a/app/src/main/java/it/reyboz/bustorino/adapters/PalinaAdapter.java b/app/src/main/java/it/reyboz/bustorino/adapters/PalinaAdapter.java
--- a/app/src/main/java/it/reyboz/bustorino/adapters/PalinaAdapter.java
+++ b/app/src/main/java/it/reyboz/bustorino/adapters/PalinaAdapter.java
@@ -19,6 +19,8 @@
import android.content.Context;
import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.core.content.res.ResourcesCompat;
@@ -63,9 +65,9 @@
private static final int busBg = R.drawable.route_background_bus;
private static final int extraurbanoBg = R.drawable.route_background_bus_long_distance;
- private static final int busIcon = R.drawable.bus;
- private static final int trainIcon = R.drawable.subway;
- private static final int tramIcon = R.drawable.tram;
+ private static final int busIcon = R.drawable.ic_bus;
+ private static final int trainIcon = R.drawable.ic_subway_filled;
+ private static final int tramIcon = R.drawable.ic_tram_filled_24;
private final String KEY_CAPITALIZE;
private Capitalize capit;
@@ -123,7 +125,8 @@
}
vh.rowRouteDestination.setText(dest);
}
-
+ Drawable drawable = null;
+ final var resources = con.getResources();
switch (route.type) {
//UNKNOWN = BUS for the moment
case UNKNOWN:
@@ -131,28 +134,36 @@
default:
// convertView could contain another background, reset it
//vh.rowStopIcon.setBackgroundResource(busBg);
-
- vh.rowRouteDestination.setCompoundDrawablesWithIntrinsicBounds(busIcon, 0, 0, 0);
+ //drawable = ResourcesCompat.getDrawable(con.getResources(), busIcon, con.getTheme());
+ //vh.rowRouteDestination.setCompoundDrawablesWithIntrinsicBounds(busIcon, 0, 0, 0);
+ vh.busIcon.setImageDrawable(ResourcesCompat.getDrawable(resources, busIcon, con.getTheme()));
break;
case LONG_DISTANCE_BUS:
//vh.rowStopIcon.setBackgroundResource(extraurbanoBg);
vh.routeCard.setCardBackgroundColor(ResourcesCompat.getColor(res, R.color.extraurban_bus_bg, null));
- vh.rowRouteDestination.setCompoundDrawablesWithIntrinsicBounds(busIcon, 0, 0, 0);
+ vh.busIcon.setImageDrawable(ResourcesCompat.getDrawable(resources, extraurbanoBg, con.getTheme()));
break;
case METRO:
//vh.rowStopIcon.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
//vh.rowStopIcon.setBackgroundResource(metroBg);
vh.routeIDTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
vh.routeCard.setCardBackgroundColor(ResourcesCompat.getColor(res, R.color.metro_bg, null));
- vh.rowRouteDestination.setCompoundDrawablesWithIntrinsicBounds(trainIcon, 0, 0, 0);
+ // vh.rowRouteDestination.setCompoundDrawablesWithIntrinsicBounds(trainIcon, 0, 0, 0);
+ vh.busIcon.setImageDrawable(ResourcesCompat.getDrawable(resources, trainIcon, con.getTheme()));
break;
case RAILWAY:
//vh.rowStopIcon.setBackgroundResource(busBg);
- vh.rowRouteDestination.setCompoundDrawablesWithIntrinsicBounds(trainIcon, 0, 0, 0);
+ //vh.rowRouteDestination.setCompoundDrawablesWithIntrinsicBounds(trainIcon, 0, 0, 0);
+ vh.busIcon.setImageDrawable(ResourcesCompat.getDrawable(resources, trainIcon, con.getTheme()));
break;
case TRAM: // never used but whatever.
//vh.rowStopIcon.setBackgroundResource(busBg);
- vh.rowRouteDestination.setCompoundDrawablesWithIntrinsicBounds(tramIcon, 0, 0, 0);
+ drawable = ResourcesCompat.getDrawable(resources, trainIcon, con.getTheme());
+ assert drawable != null;
+ drawable.setTint(resources.getColor(R.color.black_icon_text, con.getTheme()) );
+ //vh.rowRouteDestination.setCompoundDrawablesWithIntrinsicBounds(tramIcon, 0, 0, 0);
+ vh.busIcon.setImageDrawable(ResourcesCompat.getDrawable(resources, tramIcon, con.getTheme()));
+
break;
}
@@ -181,19 +192,15 @@
final CardView routeCard;
final TextView rowRouteDestination;
final TextView rowRouteTimetable;
+ final ImageView busIcon;
public PalinaViewHolder(@NonNull @NotNull View view) {
super(view);
- /*
- convertView.findViewById(R.id.routeID);
- vh.rowRouteDestination = (TextView) convertView.findViewById(R.id.routeDestination);
- vh.rowRouteTimetable = (TextView) convertView.findViewById(R.id.routesThatStopHere);
- */
- //rowStopIcon = view.findViewById(R.id.routeID);
routeIDTextView = view.findViewById(R.id.routeNameTextView);
routeCard = view.findViewById(R.id.routeCard);
rowRouteDestination = view.findViewById(R.id.routeDestination);
rowRouteTimetable = view.findViewById(R.id.routesThatStopHere);
+ busIcon = view.findViewById(R.id.arrivalsBusIcon);
}
}
private static Capitalize getCapitalize(SharedPreferences shPr, String key){
diff --git a/app/src/main/java/it/reyboz/bustorino/adapters/SquareStopAdapter.java b/app/src/main/java/it/reyboz/bustorino/adapters/SquareStopAdapter.java
--- a/app/src/main/java/it/reyboz/bustorino/adapters/SquareStopAdapter.java
+++ b/app/src/main/java/it/reyboz/bustorino/adapters/SquareStopAdapter.java
@@ -17,7 +17,6 @@
*/
package it.reyboz.bustorino.adapters;
-import android.location.Location;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
@@ -28,7 +27,6 @@
import android.widget.TextView;
import it.reyboz.bustorino.R;
import it.reyboz.bustorino.backend.GPSPoint;
-import it.reyboz.bustorino.backend.RouteWithStop;
import it.reyboz.bustorino.backend.Stop;
import it.reyboz.bustorino.util.StopSorterByDistance;
import it.reyboz.bustorino.fragments.FragmentListenerMain;
@@ -37,7 +35,7 @@
import java.util.List;
public class SquareStopAdapter extends RecyclerView.Adapter<SquareStopAdapter.SquareViewHolder> {
- private final static int layoutRes = R.layout.stop_card;
+ private final static int layoutRes = R.layout.item_stop_nearby_card;
//private List<Stop> stops;
private @Nullable GPSPoint userPosition;
private FragmentListenerMain listener;
diff --git a/app/src/main/java/it/reyboz/bustorino/adapters/StopAdapter.java b/app/src/main/java/it/reyboz/bustorino/adapters/StopAdapter.java
--- a/app/src/main/java/it/reyboz/bustorino/adapters/StopAdapter.java
+++ b/app/src/main/java/it/reyboz/bustorino/adapters/StopAdapter.java
@@ -18,6 +18,7 @@
package it.reyboz.bustorino.adapters;
import android.content.Context;
+import android.widget.ImageView;
import androidx.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
@@ -36,18 +37,25 @@
public class StopAdapter extends ArrayAdapter<Stop> {
private LayoutInflater li;
private static final int row_layout = R.layout.entry_bus_stop;
- private static final int busIcon = R.drawable.bus;
- private static final int trainIcon = R.drawable.subway;
- private static final int tramIcon = R.drawable.tram;
+ private static final int busIcon = R.drawable.ic_bus;
+ private static final int trainIcon = R.drawable.ic_subway_filled;
+ private static final int tramIcon = R.drawable.ic_tram_filled_24;
private static final int cityIcon = R.drawable.city;
private static class ViewHolder {
- TextView busStopIDTextView;
- TextView busStopNameTextView;
+ final TextView busStopIDTextView;
+ final TextView busStopNameTextView;
//TextView busLineVehicleIcon;
- TextView busStopLinesTextView;
- TextView busStopLocaLityTextView;
+ final TextView busStopLinesTextView;
+ final TextView busStopLocaLityTextView;
+
+ ViewHolder(View view) {
+ busStopIDTextView = view.findViewById(R.id.busStopID);
+ busStopNameTextView = view.findViewById(R.id.busStopName);
+ busStopLinesTextView = view.findViewById(R.id.routesThatStopHere);
+ busStopLocaLityTextView = view.findViewById(R.id.busStopLocality);
+ }
}
public StopAdapter(Context context, List<Stop> stops) {
@@ -62,11 +70,7 @@
if(convertView == null) {
convertView = li.inflate(row_layout, null);
- vh = new ViewHolder();
- vh.busStopIDTextView = (TextView) convertView.findViewById(R.id.busStopID);
- vh.busStopNameTextView = (TextView) convertView.findViewById(R.id.busStopName);
- vh.busStopLinesTextView = (TextView) convertView.findViewById(R.id.routesThatStopHere);
- vh.busStopLocaLityTextView = (TextView) convertView.findViewById(R.id.busStopLocality);
+ vh = new ViewHolder(convertView);
convertView.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
@@ -85,8 +89,10 @@
vh.busStopLinesTextView.setVisibility(View.VISIBLE); // might be GONE due to View Holder Pattern
}
+ /*
+ // DEPRECATED CODE: ALWAYS USE BUS STOP ICON
if(stop.type == null) {
- vh.busStopLinesTextView.setCompoundDrawablesWithIntrinsicBounds(busIcon, 0, 0, 0);
+ //vh.busStopLinesTextView.setCompoundDrawablesWithIntrinsicBounds(busIcon, 0, 0, 0);
} else {
switch(stop.type) {
case BUS:
@@ -106,6 +112,8 @@
}
}
+ */
+
if (stop.location == null) {
vh.busStopLocaLityTextView.setVisibility(View.GONE);
} else {
diff --git a/app/src/main/java/it/reyboz/bustorino/adapters/StopRecyclerAdapter.java b/app/src/main/java/it/reyboz/bustorino/adapters/StopRecyclerAdapter.java
--- a/app/src/main/java/it/reyboz/bustorino/adapters/StopRecyclerAdapter.java
+++ b/app/src/main/java/it/reyboz/bustorino/adapters/StopRecyclerAdapter.java
@@ -37,9 +37,9 @@
private List<Stop> stops;
private static final int ITEM_LAYOUT_FAVORITES = R.layout.entry_bus_stop;
private static final int ITEM_LAYOUT_LINES = R.layout.stop_line_element;
- private static final int busIcon = R.drawable.bus;
- private static final int trainIcon = R.drawable.subway;
- private static final int tramIcon = R.drawable.tram;
+ private static final int busIcon = R.drawable.ic_bus;
+ private static final int trainIcon = R.drawable.ic_subway_filled;
+ private static final int tramIcon = R.drawable.ic_tram_filled_24;
private static final int cityIcon = R.drawable.city;
private NameCapitalize capitalizeLocation = NameCapitalize.DO_NOTHING;
@@ -174,6 +174,8 @@
vh.busStopLinesTextView.setText(whatStopsHere);
vh.busStopLinesTextView.setVisibility(View.VISIBLE); // might be GONE due to View Holder Pattern
}
+ /*
+ //This is deprecated, always showing a bus
if(stop.type == null) {
vh.busStopLinesTextView.setCompoundDrawablesWithIntrinsicBounds(busIcon, 0, 0, 0);
@@ -196,6 +198,8 @@
}
}
+ */
+
if (stop.location == null || stop.location.toLowerCase(Locale.ROOT).equals("null")) {
vh.busStopLocaLityTextView.setVisibility(View.GONE);
} else {
diff --git a/app/src/main/java/it/reyboz/bustorino/backend/KotlinUtils.kt b/app/src/main/java/it/reyboz/bustorino/backend/KotlinUtils.kt
new file mode 100644
--- /dev/null
+++ b/app/src/main/java/it/reyboz/bustorino/backend/KotlinUtils.kt
@@ -0,0 +1,13 @@
+package it.reyboz.bustorino.backend
+
+import android.content.Context
+import android.content.res.Configuration
+
+object KotlinUtils {
+
+ @JvmStatic
+ fun isDarkTheme(context: Context): Boolean {
+ val uiMode = context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
+ return uiMode == Configuration.UI_MODE_NIGHT_YES
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/it/reyboz/bustorino/backend/VehicleUtils.kt b/app/src/main/java/it/reyboz/bustorino/backend/VehicleUtils.kt
--- a/app/src/main/java/it/reyboz/bustorino/backend/VehicleUtils.kt
+++ b/app/src/main/java/it/reyboz/bustorino/backend/VehicleUtils.kt
@@ -17,39 +17,41 @@
}
object VehicleUtils {
- private val items = listOf(
- VehicleClassInfo(2800, "Arancio", "Tram", 2801, 2857),
- VehicleClassInfo(2800, "Arancio", "Tram", 2858, 2902),
- VehicleClassInfo(5000, "5000", "Tram", 5000, 5053),
- VehicleClassInfo(6000, "6000", "Tram", 6000, 6005),
- VehicleClassInfo(6000, "6000", "Tram", 6006, 6054),
- VehicleClassInfo(8000, "Hitachi", "Tram", 8000, 8099),
- VehicleClassInfo(800, "Citelis 18m", "Bus 18m", 790, 797),
- VehicleClassInfo(800, "Citelis 18m", "Bus 18m", 800, 869),
- VehicleClassInfo(800, "Citelis 18m", "Bus 18m", 870, 874),
- VehicleClassInfo(800, "Citelis 18m", "Bus 18m", 1310, 1313),
- VehicleClassInfo(1350, "Conecto 18m", "Bus 18m", 1350, 1396),
- VehicleClassInfo(9300, "UrbanWay 18m", "Bus 18m", 9300, 9318),
- VehicleClassInfo(9300, "UrbanWay 18m", "Bus 18m", 9320, 9356),
- VehicleClassInfo(30, "BYD K9", "E-Bus", 30, 49),
+ val items = listOf(
+ VehicleClassInfo(30, "BYD K9UB", "E-Bus", 30, 49),
VehicleClassInfo(50, "BYD K7", "E-Bus", 50, 57),
- VehicleClassInfo(60, "MiniBusE", "E-Bus", 60, 81),
- VehicleClassInfo(110, "Neocity", "Bus", 110, 115),
- VehicleClassInfo(2300, "Cityclass", "Bus", 2300, 2349),
- VehicleClassInfo(3400, "Conecto", "Bus", 2400, 2447),
- VehicleClassInfo(2300, "Cityclass", "Bus", 2700, 2787),
- VehicleClassInfo(3000, "Citelis", "Bus", 3000, 3099),
- VehicleClassInfo(3000, "Citelis", "Bus", 3300, 3380),
- VehicleClassInfo(3400, "Conecto", "Bus", 3400, 3440),
- VehicleClassInfo(9000, "BYD K9", "E-Bus", 9000, 9059),
- VehicleClassInfo(9000, "BYD K9", "E-Bus", 9060, 9119),
- VehicleClassInfo(9000, "BYD K9", "E-Bus", 9120, 9121),
- VehicleClassInfo(9200, "Citymood", "Bus", 9200, 9251),
- VehicleClassInfo(9200, "Citymood", "Bus", 9252, 9261),
+ VehicleClassInfo(60, "Indcar BlueBus", "E-Bus", 60, 88),
+ VehicleClassInfo(110, "BMC Neocity", "Bus", 110, 115),
+ VehicleClassInfo(800, "Irisbus Citelis 18m", "Bus 18m", 790, 797),
+ VehicleClassInfo(800, "Irisbus Citelis 18m", "Bus 18m", 800, 869),
+ VehicleClassInfo(800, "Irisbus Citelis 18m ", "Bus 18m", 870, 874),
+ VehicleClassInfo(800, "Irisbus Citelis CNG 18m", "Bus 18m", 1310, 1313),
+ VehicleClassInfo(1350, "Mercedes Conecto 18m", "Bus 18m", 1350, 1396),
+ VehicleClassInfo(2300, "Irisbus CityClass", "Bus", 2300, 2349),
+ VehicleClassInfo(3400, "Mercedes Conecto", "Bus", 2400, 2447),
+ VehicleClassInfo(2300, "Irisbus CityClass", "Bus", 2700, 2787),
+ VehicleClassInfo(2800, "2800 (prima serie)", "Tram", 2801, 2857),
+ VehicleClassInfo(2800, "2800 (seconda serie)", "Tram", 2858, 2902),
+ VehicleClassInfo(3000, "Irisbus Citelis", "Bus", 3000, 3099),
+ VehicleClassInfo(3000, "Irisbus Citelis", "Bus", 3300, 3380),
+ VehicleClassInfo(3400, "Mercedes Conecto", "Bus", 3400, 3440),
+ VehicleClassInfo(5000, "P.R. (5000)", "Tram", 5000, 5053),
+ VehicleClassInfo(6000, "CityWay (6000) monodir.", "Tram", 6000, 6005),
+ VehicleClassInfo(6000, "CityWay (6000) bidir.", "Tram", 6006, 6054),
+ VehicleClassInfo(8000, "Hitachi (8000)", "Tram", 8000, 8099),
+ VehicleClassInfo(9000, "BYD K9UB", "E-Bus", 9000, 9059),
+ VehicleClassInfo(9000, "BYD K9UB", "E-Bus", 9060, 9119),
+ VehicleClassInfo(9000, "BYD K9UB", "E-Bus", 9120, 9121),
+ VehicleClassInfo(9200, "Menarini Citymood", "Bus", 9200, 9251),
+ VehicleClassInfo(9200, "Menarini Citymood", "Bus", 9252, 9261),
+ VehicleClassInfo(9300, "Iveco Urbanway 18m", "Bus 18m", 9300, 9318),
+ VehicleClassInfo(9300, "Iveco Urbanway 18m", "Bus 18m", 9320, 9356),
VehicleClassInfo(9400, "Iveco E-Way", "E-Bus", 9400, 9599),
- VehicleClassInfo(9600, "Iveco E-Way 18m", "E-Bus", 9600, 9699)
+ VehicleClassInfo(9600, "Iveco E-Way 18m", "E-Bus", 9600, 9699),
+ VehicleClassInfo(9700, "Iveco E-Way 18m BRT", "E-Bus", 9700, 9799)
)
+
fun getTypeForLabel(label: String): VehicleClassInfo? {
try {
val matricola = Integer.parseInt(label)
diff --git a/app/src/main/java/it/reyboz/bustorino/data/GtfsMaintenanceWorker.kt b/app/src/main/java/it/reyboz/bustorino/data/GtfsMaintenanceWorker.kt
--- a/app/src/main/java/it/reyboz/bustorino/data/GtfsMaintenanceWorker.kt
+++ b/app/src/main/java/it/reyboz/bustorino/data/GtfsMaintenanceWorker.kt
@@ -32,7 +32,7 @@
val notification = NotificationCompat.Builder(context, Notifications.DB_UPDATE_CHANNELS_ID)
//.setContentIntent(PendingIntent.getActivity(context, 0, Intent(context, MainActivity::class.java), Constants.PENDING_INTENT_FLAG_IMMUTABLE))
- .setSmallIcon(R.drawable.bus)
+ .setSmallIcon(R.drawable.ic_bus)
.setOngoing(true)
.setAutoCancel(true)
.setOnlyAlertOnce(true)
diff --git a/app/src/main/java/it/reyboz/bustorino/data/PreferencesHolder.java b/app/src/main/java/it/reyboz/bustorino/data/PreferencesHolder.java
--- a/app/src/main/java/it/reyboz/bustorino/data/PreferencesHolder.java
+++ b/app/src/main/java/it/reyboz/bustorino/data/PreferencesHolder.java
@@ -20,11 +20,13 @@
import android.content.Context;
import android.content.SharedPreferences;
import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatDelegate;
import it.reyboz.bustorino.R;
import static android.content.Context.MODE_PRIVATE;
import androidx.preference.PreferenceManager;
+import it.reyboz.bustorino.backend.KotlinUtils;
import it.reyboz.bustorino.fragments.SettingsFragment;
import it.reyboz.bustorino.map.MapLibreUtils;
@@ -42,6 +44,9 @@
public static final String DB_LAST_UPDATE_KEY = "NextGenDB.LastDBUpdate";
public static final String PREF_FAVORITE_LINES = "pref_favorite_lines";
+ // match the one in preferences.xml
+ public static final String PREF_THEME_DAY_NIGHT = "app_theme_day_night";
+
public static final Set<String> KEYS_MERGE_SET = Set.of(PREF_FAVORITE_LINES);
public static final Set<String> IGNORE_KEYS_LOAD_MAIN = Set.of(PREF_GTFS_DB_VERSION, PREF_INTRO_ACTIVITY_RUN, DB_GTT_VERSION_KEY, DB_LAST_UPDATE_KEY);
@@ -98,11 +103,31 @@
public static String getMapLibreStyleFile(Context con){
final SharedPreferences pref = getAppPreferences(con);
final String mapStyle_val = pref.getString(SettingsFragment.LIBREMAP_STYLE_PREF_KEY, "");
- return switch (mapStyle_val) {
+ final boolean isNightMode = KotlinUtils.isDarkTheme(con);
+ String styleFile;
+ switch (mapStyle_val) {
//MUST MATCH IN keys.xml -> map_style_pref_values
- case "versatiles_c" -> MapLibreUtils.STYLE_VERSATILES_COLORFUL_JSON;
- case "osm_legacy" -> MapLibreUtils.STYLE_OSM_RASTER;
- default -> MapLibreUtils.getDefaultStyleJson();
+ case "osm_legacy":
+ styleFile = MapLibreUtils.STYLE_OSM_RASTER;
+ break;
+ case "versatiles_c":
+ default:
+ styleFile = (isNightMode) ? MapLibreUtils.STYLE_VERSATILES_ECLIPSE_JSON : MapLibreUtils.STYLE_VERSATILES_COLORFUL_JSON;
+ }
+ return styleFile;
+ }
+
+ public static Integer getAppThemeDayNight(Context context){
+ final SharedPreferences pref = getAppPreferences(context);
+ final var value = pref.getString(PREF_THEME_DAY_NIGHT, "");
+ return getAppThemeDayNight(value);
+ }
+ public static Integer getAppThemeDayNight(String prefValue){
+ return switch (prefValue){
+ case "day" -> AppCompatDelegate.MODE_NIGHT_NO;
+ case "night" -> AppCompatDelegate.MODE_NIGHT_YES;
+ case "system" -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
+ default -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
};
}
}
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/GeneralMapLibreFragment.kt b/app/src/main/java/it/reyboz/bustorino/fragments/GeneralMapLibreFragment.kt
--- a/app/src/main/java/it/reyboz/bustorino/fragments/GeneralMapLibreFragment.kt
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/GeneralMapLibreFragment.kt
@@ -29,6 +29,7 @@
import android.location.LocationManager
import android.os.Bundle
import android.util.Log
+import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -170,6 +171,7 @@
protected lateinit var stopNumberTextView: TextView
protected lateinit var linesPassingTextView: TextView
protected lateinit var extraBottomTextView: TextView
+ protected lateinit var linesBottomTextView: TextView
protected lateinit var arrivalsCard: CardView
protected lateinit var directionsCard: CardView
protected lateinit var bottomrightImage: ImageView
@@ -271,6 +273,8 @@
arrivalsCard = view.findViewById(R.id.arrivalsCardButton)
directionsCard = view.findViewById(R.id.directionsCardButton)
vehicleIcon = view.findViewById(R.id.vehicleIcon)
+ linesBottomTextView = view.findViewById(R.id.linesBottomTextView)
+ linesBottomTextView.text = getString(R.string.lines_fill, "")
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet)
bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN
@@ -682,9 +686,11 @@
ResourcesCompat.getDrawable(resources, R.drawable.ic_magnifying_glass, activity?.theme)
)
// if you change this, remember to change the color of the vehicleIcon
- val colorBlue = ResourcesCompat.getColor(resources, R.color.blue_500, activity?.theme)
+ val colorBlue = ResourcesCompat.getColor(resources, R.color.bus_marker_color_selected, activity?.theme)
ViewCompat.setBackgroundTintList(directionsCard, ColorStateList.valueOf(colorBlue))
linesPassingTextView.text = getString(R.string.vehicle_fill, data.posUpdate.vehicle)
+ linesPassingTextView.gravity = Gravity.CENTER_VERTICAL
+ linesBottomTextView.visibility = View.GONE
arrivalsCard.visibility = View.GONE
extraBottomTextView.text = getString(R.string.updated_fill, utils.unixTimestampToLocalTime(data.posUpdate.timestamp))
@@ -695,21 +701,21 @@
vehicleIcon.visibility = View.GONE
} else{
val ico = when(vehInfo.type){
- VehicleUtils.VehicleType.BUS -> R.drawable.ic_bus_small
- VehicleUtils.VehicleType.ELECTRIC_BUS -> R.drawable.ic_bus_electric_small
- VehicleUtils.VehicleType.TRAM -> R.drawable.ic_tram_24
+ VehicleUtils.VehicleType.BUS -> R.drawable.ic_bus
+ VehicleUtils.VehicleType.ELECTRIC_BUS -> R.drawable.ic_bus_electric_filled
+ VehicleUtils.VehicleType.TRAM -> R.drawable.ic_tram_material
}
vehicleIcon.setImageDrawable(ResourcesCompat.getDrawable(resources, ico, activity?.theme))
vehicleIcon.visibility = View.VISIBLE
vehicleIcon.setOnClickListener {
- val print = "${vehInfo.type.getName()} ${vehInfo.name}"
+ val print = "${vehInfo.type.getName()}: ${vehInfo.name}"
makeToast(print)
}
}
}
- vehShowing = null
+ vehShowing = veh
bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
updatePositionsIcons(true)
Log.d(DEBUG_TAG, "Shown vehicle $veh in bottom sheet")
@@ -726,7 +732,11 @@
val isStarted = (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED))
if(forced){
// if we're running a forced update, cancel the pending one
- jobUpdate?.cancel()
+ jobUpdate?.apply{
+ cancel()
+ //Log.d(DEBUG_TAG, "Cancelled update")
+ }
+
}
else if (currentTime - lastUpdateTime < 100) {
// Schedule delayed update
@@ -734,8 +744,10 @@
jobUpdate?.cancel()
jobUpdate = viewLifecycleOwner.lifecycleScope.launch {
delay(100.milliseconds)
+ //Log.d(DEBUG_TAG, "Running update from delayed")
updatePositionsIcons(false)
}
+ //Log.d(DEBUG_TAG, "Cancelled previous job, delaying update")
}
return
}
@@ -763,6 +775,8 @@
// Separate selected vehicle from others
if (vehShowing?.isNotEmpty() == true && vehShowing == dat.posUpdate.vehicle) {
selectedBusFeatures.add(newFeature)
+ //Log.d(DEBUG_TAG, "Update position for bus $vehShowing")
+ //TODO: Recenter the map on the vehicle
} else {
busFeatures.add(newFeature)
}
@@ -849,9 +863,11 @@
stopTitleTextView.visibility = View.VISIBLE
val string_show = if (stop.numRoutesStopping==0) ""
- else requireContext().getString(R.string.lines_fill, stop.routesThatStopHereToString())
+ else stop.routesThatStopHereToString() //requireContext().getString(R.string.lines_fill, stop.routesThatStopHereToString())
linesPassingTextView.text = string_show
linesPassingTextView.visibility = View.VISIBLE
+ linesPassingTextView.gravity = Gravity.TOP
+ linesBottomTextView.visibility =View.VISIBLE
//SET ON CLICK LISTENER
arrivalsCard.setOnClickListener{
@@ -865,7 +881,7 @@
ViewUtils.openStopInOutsideApp(stop, context)
}
context?.let {
- val colorIcon = ViewUtils.getColorFromTheme(it, android.R.attr.colorAccent)//ResourcesCompat.getColor(resources,R.attr.colorAccent,activity?.theme)
+ val colorIcon = ViewUtils.getColorFromTheme(it, R.attr.colorAccent)//ResourcesCompat.getColor(resources,R.attr.colorAccent,activity?.theme)
ViewCompat.setBackgroundTintList(directionsCard, ColorStateList.valueOf(colorIcon))
}
@@ -924,12 +940,17 @@
protected fun initStopsLayer(style: Style, stopsFeatures: FeatureCollection?){
//determine default layer
- var layerAbove = ""
- if (lastMapStyle == MapLibreUtils.STYLE_OSM_RASTER){
- layerAbove = "osm-raster"
- } else if (lastMapStyle == MapLibreUtils.STYLE_VECTOR){
- layerAbove = "symbol-transit-airfield"
+
+ val layerAbove = if (lastMapStyle == MapLibreUtils.STYLE_OSM_RASTER){
+ "osm-raster"
+ } else// if (lastMapStyle == MapLibreUtils.STYLE_VERSATILES_ECLIPSE_JSON){
+ "symbol-transit-airfield"
+ /*} else {
+ //
+ "poi_park"
}
+
+ */
initStopsLayer(style, stopsFeatures, layerAbove)
}
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/LivePositionsDialogFragment.kt b/app/src/main/java/it/reyboz/bustorino/fragments/LivePositionsDialogFragment.kt
--- a/app/src/main/java/it/reyboz/bustorino/fragments/LivePositionsDialogFragment.kt
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/LivePositionsDialogFragment.kt
@@ -70,7 +70,7 @@
builder.setView(view)
val res = builder.create()
- res.window?.setBackgroundDrawableResource(R.color.grey_100)
+ res.window?.setBackgroundDrawableResource(R.color.card_background)
return res
}
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/NearbyStopsFragment.kt b/app/src/main/java/it/reyboz/bustorino/fragments/NearbyStopsFragment.kt
--- a/app/src/main/java/it/reyboz/bustorino/fragments/NearbyStopsFragment.kt
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/NearbyStopsFragment.kt
@@ -17,7 +17,6 @@
*/
package it.reyboz.bustorino.fragments
-import android.annotation.SuppressLint
import android.content.Context
import android.location.Location
import android.os.Bundle
@@ -33,6 +32,7 @@
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.RecyclerView
import androidx.work.WorkInfo
+import com.google.android.material.button.MaterialButton
import it.reyboz.bustorino.BuildConfig
import it.reyboz.bustorino.R
import it.reyboz.bustorino.adapters.ArrivalsStopAdapter
@@ -42,12 +42,11 @@
import it.reyboz.bustorino.middleware.AutoFitGridLayoutManager
import it.reyboz.bustorino.middleware.FusedNativeLocationProvider
import it.reyboz.bustorino.middleware.FusedNativeLocationProvider.LocationUpdateListener
-import it.reyboz.bustorino.util.Permissions.Companion.anyLocationPermissionsGranted
+import it.reyboz.bustorino.util.Permissions
import it.reyboz.bustorino.util.Permissions.Companion.bothLocationPermissionsGranted
import it.reyboz.bustorino.util.StopSorterByDistance
import it.reyboz.bustorino.viewmodels.NearbyStopsViewModel
import java.util.*
-import kotlin.math.min
class NearbyStopsFragment : ScreenBaseFragment() {
override fun getBaseViewForSnackBar(): View? {
@@ -70,7 +69,7 @@
}
private enum class LocationShowingStatus {
- SEARCHING, FIRST_FIX, DISABLED, NO_PERMISSION
+ SEARCHING, POSITION_FOUND, DISABLED, NO_PERMISSION
}
private var mListener: FragmentListenerMain? = null
@@ -88,6 +87,7 @@
//protected SharedPreferences globalSharedPref;
//private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener;
private var messageTextView: TextView? = null
+ private lateinit var enableLocationButton : MaterialButton
private var titleTextView: TextView? = null
private var loadingTextView: TextView? = null
private var scrollListener: CommonScrollListener? = null
@@ -120,6 +120,11 @@
}
}
}
+
+ private val locationPermissionLauncher = getPositionRequestLauncher(){ granted ->
+ startLocationUpdatesByType()
+ setShowingStatus(LocationShowingStatus.SEARCHING)
+ }
// Two different settings for the location provider
private val locationOptionsArrivals = FusedNativeLocationProvider.Options(5 * 1000L, 25f)
private val locationOptionsStops = FusedNativeLocationProvider.Options(1000L, 5f)
@@ -176,18 +181,19 @@
savedInstanceState: Bundle?
): View {
// Inflate the layout for this fragment
- if (getContext() == null) throw RuntimeException()
+ val context = requireContext()
val root = inflater.inflate(R.layout.fragment_nearby_stops, container, false)
gridRecyclerView = root.findViewById<RecyclerView>(R.id.stopGridRecyclerView)
gridLayoutManager = AutoFitGridLayoutManager(
- requireContext().getApplicationContext(),
- utils.convertDipToPixels(getContext(), COLUMN_WIDTH_DP.toFloat()).toInt()
+ context.getApplicationContext(),
+ utils.convertDipToPixels(context, COLUMN_WIDTH_DP.toFloat()).toInt()
)
gridRecyclerView.setLayoutManager(gridLayoutManager)
gridRecyclerView.setHasFixedSize(false)
circlingProgressBar = root.findViewById<ProgressBar>(R.id.circularProgressBar)
flatProgressBar = root.findViewById(R.id.horizontalProgressBar)
messageTextView = root.findViewById<TextView>(R.id.messageTextView)
+ enableLocationButton = root.findViewById(R.id.grantLocationButton)
titleTextView = root.findViewById<TextView>(R.id.titleTextView)
loadingTextView = root.findViewById<TextView>(R.id.positionLoadingTextView)
switchButton = root.findViewById<AppCompatButton>(R.id.switchButton)
@@ -209,32 +215,35 @@
viewModel.setDBUpdateRunning(true)
} else {
//start the request
- if (bothLocationPermissionsGranted(requireContext())) {
- if (!locationProvider!!.isRunning()) {
- startLocationUpdatesByType()
- }
- } else {
- setShowingStatus(LocationShowingStatus.NO_PERMISSION)
- }
-
+ checkPermissionLocationStart()
viewModel.setDBUpdateRunning(false)
//actually restart request
}
}
-
- if (anyLocationPermissionsGranted(appContext)) {
- setShowingStatus(LocationShowingStatus.SEARCHING)
- } else {
- setShowingStatus(LocationShowingStatus.NO_PERMISSION)
- }
//add location listener
locationProvider!!.addListener(locationUpdateListener)
+ enableLocationButton.setOnClickListener {
+ locationPermissionLauncher.launch(Permissions.LOCATION_PERMISSIONS)
+ }
+
return root
}
+ private fun checkPermissionLocationStart(){
+ Log.d(DEBUG_TAG, "Check permission and start location updates")
+ if (bothLocationPermissionsGranted(requireContext())) {
+ if (!locationProvider!!.isRunning()) {
+ startLocationUpdatesByType()
+ setShowingStatus(LocationShowingStatus.SEARCHING)
+ }
+ } else {
+ setShowingStatus(LocationShowingStatus.NO_PERMISSION)
+ }
+ }
+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
gridRecyclerView.setVisibility(View.INVISIBLE)
@@ -256,6 +265,7 @@
}
if (!stops.isEmpty()) {
currentNearbyStops = stops
+ setShowingStatus(LocationShowingStatus.POSITION_FOUND)
showStopsInViews(currentNearbyStops, lastPosition)
}
}
@@ -280,18 +290,29 @@
Log.e(DEBUG_TAG, "Trying to show arrivals in Recycler but we're not attached")
return@observe
}
+ val context = requireContext()
if (firstLocForArrivals) {
- arrivalsStopAdapter = ArrivalsStopAdapter(stoprouteList, mListener, context, lastPosition!!)
- gridRecyclerView.setAdapter(arrivalsStopAdapter)
- firstLocForArrivals = false
+ mListener?.let{
+ lastPosition?.let{ pos ->
+ arrivalsStopAdapter = ArrivalsStopAdapter(stoprouteList, it, context, pos)
+ gridRecyclerView.setAdapter(arrivalsStopAdapter)
+ firstLocForArrivals = false
+ }
+ }
} else {
- arrivalsStopAdapter!!.setRoutesPairListAndPosition(stoprouteList, lastPosition)
+ lastPosition?.let{ pos ->
+ arrivalsStopAdapter?.setRoutesPairListAndPosition(stoprouteList, pos)
+ }
}
//arrivalsStopAdapter.notifyDataSetChanged();
+ setShowingStatus(LocationShowingStatus.POSITION_FOUND)
showRecyclerHidingLoadMessage()
//if (mListener != null) mListener!!.readyGUIfor(FragmentKind.NEARBY_ARRIVALS)
}
+
+ //added
+ checkPermissionLocationStart()
}
@@ -343,28 +364,32 @@
private fun setShowingStatus(newStatus: LocationShowingStatus) {
var newStatus = newStatus
- if (BuildConfig.DEBUG) Log.d(DEBUG_TAG, "Asked to set showing status : $newStatus")
if (newStatus == showingStatus) {
return
}
+ if (BuildConfig.DEBUG) Log.d(DEBUG_TAG, "Changing showing status from $showingStatus to $newStatus")
+
if (!isLocationEnabled && newStatus != LocationShowingStatus.NO_PERMISSION) {
Log.d(DEBUG_TAG, "asked to show status: $newStatus but the position is disabled")
newStatus = LocationShowingStatus.DISABLED
}
when (newStatus) {
- LocationShowingStatus.FIRST_FIX -> {
+ LocationShowingStatus.POSITION_FOUND -> {
circlingProgressBar!!.setVisibility(View.GONE)
loadingTextView!!.setVisibility(View.GONE)
gridRecyclerView.setVisibility(View.VISIBLE)
messageTextView!!.setVisibility(View.GONE)
+ enableLocationButton.setVisibility(View.GONE)
+
}
LocationShowingStatus.NO_PERMISSION -> {
- circlingProgressBar!!.setVisibility(View.GONE)
- loadingTextView!!.setVisibility(View.GONE)
- messageTextView!!.setText(R.string.enable_position_message_nearby)
- messageTextView!!.setVisibility(View.VISIBLE)
+ circlingProgressBar?.setVisibility(View.GONE)
+ loadingTextView?.setVisibility(View.GONE)
+ messageTextView?.setText(R.string.enable_position_message_nearby)
+ messageTextView?.setVisibility(View.VISIBLE)
+ enableLocationButton.setVisibility(View.VISIBLE)
}
LocationShowingStatus.DISABLED -> {
@@ -374,6 +399,7 @@
//}
messageTextView!!.setText(R.string.enable_location_message)
messageTextView!!.setVisibility(View.VISIBLE)
+ enableLocationButton.setVisibility(View.GONE)
}
LocationShowingStatus.SEARCHING -> {
@@ -381,6 +407,7 @@
loadingTextView!!.setVisibility(View.VISIBLE)
gridRecyclerView.setVisibility(View.GONE)
messageTextView!!.setVisibility(View.GONE)
+ enableLocationButton.setVisibility(View.GONE)
}
}
showingStatus = newStatus
@@ -456,9 +483,7 @@
"Max distance for stops: $stopsMaxDistance, Min number of stops: $stopsMinNumber"
)
- if (!locationProvider!!.isRunning()) {
- startLocationUpdatesByType()
- }
+ //checkPermissionLocationStart()
}
@@ -470,6 +495,12 @@
//if (arrivalsManager != null) arrivalsManager!!.cancelAllRequests()
}
+ override fun onStart() {
+ super.onStart()
+ if(BuildConfig.DEBUG) Log.d(DEBUG_TAG, "onStart called")
+ //checkPermissionLocationStart()
+ }
+
/**
* Display the stops, or run new set of requests for arrivals
*/
@@ -542,7 +573,9 @@
switchButton!!.text = getString(R.string.show_arrivals)
titleTextView!!.text = getString(R.string.nearby_stops_message)
- dataAdapter?.let{ gridRecyclerView.adapter = it}
+ dataAdapter?.let{ gridRecyclerView.adapter = it
+
+ }
mListener?.readyGUIfor(FragmentKind.NEARBY_STOPS)
@@ -552,7 +585,7 @@
val arrivalsSorted = viewModel.arrivalsDecoupled.value
arrivalsSorted?.let{
lastPosition?.let{pos ->
- arrivalsStopAdapter = ArrivalsStopAdapter(it,mListener,requireContext(), pos )
+ arrivalsStopAdapter = ArrivalsStopAdapter(it,mListener!!,requireContext(), pos )
}
}
arrivalsStopAdapter?.let{
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/ScreenBaseFragment.java b/app/src/main/java/it/reyboz/bustorino/fragments/ScreenBaseFragment.java
--- a/app/src/main/java/it/reyboz/bustorino/fragments/ScreenBaseFragment.java
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/ScreenBaseFragment.java
@@ -44,6 +44,7 @@
import it.reyboz.bustorino.BuildConfig;
import java.util.Map;
+import java.util.function.Consumer;
import static android.content.Context.MODE_PRIVATE;
@@ -122,7 +123,7 @@
editor.putBoolean(optionName, value);
editor.apply();
}
- public ActivityResultLauncher<String[]> getPositionRequestLauncher(LocationRequestListener listener){
+ public ActivityResultLauncher<String[]> getPositionRequestLauncher(Consumer<Boolean> listener){
return registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<>() {
@Override
public void onActivityResult(Map<String, Boolean> result) {
@@ -138,7 +139,7 @@
coarseGranted +", fineGranted "+fineGranted);
}
- listener.onPermissionResult(coarseGranted || fineGranted);
+ listener.accept(coarseGranted && fineGranted);
}
});
}
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/SettingsFragment.java b/app/src/main/java/it/reyboz/bustorino/fragments/SettingsFragment.java
--- a/app/src/main/java/it/reyboz/bustorino/fragments/SettingsFragment.java
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/SettingsFragment.java
@@ -29,6 +29,7 @@
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatDelegate;
import androidx.lifecycle.Observer;
import androidx.preference.*;
import androidx.work.OneTimeWorkRequest;
@@ -38,6 +39,7 @@
import it.reyboz.bustorino.R;
import it.reyboz.bustorino.data.DBUpdateWorker;
import it.reyboz.bustorino.data.GtfsMaintenanceWorker;
+import it.reyboz.bustorino.data.PreferencesHolder;
import org.jetbrains.annotations.NotNull;
import java.lang.ref.WeakReference;
@@ -70,8 +72,10 @@
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
//getPreferenceManager().setSharedPreferencesName(getString(R.string.mainSharedPreferences));
convertStringPrefToIntIfNeeded(getString(R.string.pref_key_num_recents), getContext());
-
- getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+ var sharedPrefs = getPreferenceManager().getSharedPreferences();
+ if(sharedPrefs!=null) {
+ sharedPrefs.registerOnSharedPreferenceChangeListener(this);
+ }
setPreferencesFromResource(R.xml.preferences,rootKey);
/*EditTextPreference editPref = findPreference(getString(R.string.pref_key_num_recents));
editPref.setOnBindEditTextListener(editText -> {
@@ -160,6 +164,17 @@
ListPreference listPref = (ListPreference) pref;
pref.setSummary(listPref.getEntry());
}
+
+ if(key.equals(PreferencesHolder.PREF_THEME_DAY_NIGHT)){
+ String value = sharedPreferences.getString(key, "");
+ Log.d(TAG, "New value is: "+ value);
+ if(!value.isEmpty()){
+ var state = PreferencesHolder.getAppThemeDayNight(value);
+ AppCompatDelegate.setDefaultNightMode(state);
+
+ }
+
+ }
/*
THIS CODE STAYS COMMENTED FOR FUTURE REFERENCES
if (key.equals(getString(R.string.pref_key_num_recents))){
diff --git a/app/src/main/java/it/reyboz/bustorino/map/MapLibreUtils.kt b/app/src/main/java/it/reyboz/bustorino/map/MapLibreUtils.kt
--- a/app/src/main/java/it/reyboz/bustorino/map/MapLibreUtils.kt
+++ b/app/src/main/java/it/reyboz/bustorino/map/MapLibreUtils.kt
@@ -18,13 +18,21 @@
companion object{
//const val STYLE_BRIGHT_DEFAULT_JSON = "map_style_good_noshops.json"
const val STYLE_VERSATILES_COLORFUL_JSON = "versatiles_colorful_light.json"
+ const val STYLE_VERSATILES_ECLIPSE_JSON = "versatiles_eclipse_modif.json" //"versatiles_eclipse.json"
const val STYLE_OSM_RASTER="openstreetmap_raster.json"
- const val STYLE_VECTOR = STYLE_VERSATILES_COLORFUL_JSON
private const val DEBUG_TAG ="BusTO-MapLibreUtils"
@JvmStatic
- fun getDefaultStyleJson() = STYLE_VECTOR
+ fun isStyleVector(styleFile: String): Boolean {
+ return when(styleFile){
+ //be careful to include all the style cases
+ STYLE_OSM_RASTER -> false
+ STYLE_VERSATILES_COLORFUL_JSON -> true
+ STYLE_VERSATILES_ECLIPSE_JSON -> true
+ else -> true
+ }
+ }
@JvmStatic
fun shortestRotation(from: Float, to: Float): Float {
diff --git a/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java b/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java
--- a/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java
+++ b/app/src/main/java/it/reyboz/bustorino/middleware/GeneralActivity.java
@@ -231,44 +231,4 @@
return WindowInsetsCompat.CONSUMED;
};
- /**
- * Adjust setting to match the default ones
- */
- protected void checkApplyDefaultSettingsValues(){
- SharedPreferences mainSharedPref = PreferenceManager.getDefaultSharedPreferences(this);
- SharedPreferences.Editor editor = mainSharedPref.edit();
- //Main fragment to show
- String screen = mainSharedPref.getString(SettingsFragment.PREF_KEY_STARTUP_SCREEN, "");
- boolean edit = false;
- if (screen.isEmpty()){
- editor.putString(SettingsFragment.PREF_KEY_STARTUP_SCREEN, "arrivals");
- edit=true;
- }
- //Fetchers
- final Set<String> setSelected = mainSharedPref.getStringSet(SettingsFragment.KEY_ARRIVALS_FETCHERS_USE, new HashSet<>());
- if (setSelected.isEmpty()){
- String[] defaultVals = getResources().getStringArray(R.array.arrivals_sources_values_default);
- editor.putStringSet(SettingsFragment.KEY_ARRIVALS_FETCHERS_USE, utils.convertArrayToSet(defaultVals));
- edit=true;
- }
- //Live bus positions
- final String keySourcePositions=getString(R.string.pref_positions_source);
- final String positionsSource = mainSharedPref.getString(keySourcePositions, "");
- if(positionsSource.isEmpty()){
- String[] defaultVals = getResources().getStringArray(R.array.positions_source_values);
- editor.putString(keySourcePositions, defaultVals[0]);
- edit=true;
- }
- //Map style
- final String mapStylePref = mainSharedPref.getString(SettingsFragment.LIBREMAP_STYLE_PREF_KEY, "");
- if(mapStylePref.isEmpty()){
- final String[] defaultVals = getResources().getStringArray(R.array.map_style_pref_values);
- editor.putString(SettingsFragment.LIBREMAP_STYLE_PREF_KEY, defaultVals[0]);
- edit=true;
- }
- if (edit){
- editor.commit();
- }
-
- }
}
diff --git a/app/src/main/res/drawable-hdpi/ic_center_map.png b/app/src/main/res/drawable-hdpi/ic_center_map.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-hdpi/ic_follow_me_on.png b/app/src/main/res/drawable-hdpi/ic_follow_me_on.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-mdpi/ic_center_map.png b/app/src/main/res/drawable-mdpi/ic_center_map.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-mdpi/ic_follow_me_on.png b/app/src/main/res/drawable-mdpi/ic_follow_me_on.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-xhdpi/ic_center_map.png b/app/src/main/res/drawable-xhdpi/ic_center_map.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-xhdpi/ic_follow_me_on.png b/app/src/main/res/drawable-xhdpi/ic_follow_me_on.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-xxhdpi/ic_center_map.png b/app/src/main/res/drawable-xxhdpi/ic_center_map.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-xxhdpi/ic_follow_me_on.png b/app/src/main/res/drawable-xxhdpi/ic_follow_me_on.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-xxxhdpi/bus.png b/app/src/main/res/drawable-xxxhdpi/bus.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_center_map.png b/app/src/main/res/drawable-xxxhdpi/ic_center_map.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_follow_me_on.png b/app/src/main/res/drawable-xxxhdpi/ic_follow_me_on.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-xxxhdpi/subway.png b/app/src/main/res/drawable-xxxhdpi/subway.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable-xxxhdpi/tram.png b/app/src/main/res/drawable-xxxhdpi/tram.png
deleted file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/app/src/main/res/drawable/bottom_sheet_background.xml b/app/src/main/res/drawable/bottom_sheet_background.xml
--- a/app/src/main/res/drawable/bottom_sheet_background.xml
+++ b/app/src/main/res/drawable/bottom_sheet_background.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <solid android:color="@android:color/white" />
+ <solid android:color="?android:colorBackground" />
<corners
android:topLeftRadius="14sp"
android:topRightRadius="14sp" />
</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bus_stop_new.xml b/app/src/main/res/drawable/bus_stop_new.xml
--- a/app/src/main/res/drawable/bus_stop_new.xml
+++ b/app/src/main/res/drawable/bus_stop_new.xml
@@ -12,10 +12,10 @@
<path
android:pathData="m3.5412,1.164c-0.732,0 -1.2681,0.085 -1.6077,0.2548 -0.3395,0.1698 -0.509,0.4376 -0.509,0.8036v2.5135c0,0.1279 0.0238,0.2459 0.0723,0.354 0.0485,0.108 0.1129,0.2064 0.1922,0.2946v0.5421c0,0.075 0.0253,0.1379 0.076,0.1886 0.0507,0.0507 0.1137,0.076 0.1886,0.076h0.2646c0.075,0 0.1374,-0.0253 0.1881,-0.076 0.0507,-0.0507 0.0765,-0.1136 0.0765,-0.1886L2.4829,5.662L3.7474,5.662L3.642,5.5565C3.5147,5.4293 3.4139,5.2859 3.3391,5.1328L2.4829,5.1328c-0.1455,0 -0.2705,-0.0519 -0.3741,-0.1555 -0.1036,-0.1036 -0.155,-0.2281 -0.155,-0.3736v-0.7937h1.3565c0.0768,-0.1767 0.1873,-0.3423 0.3318,-0.4868 0.0145,-0.0145 0.0295,-0.0285 0.0444,-0.0424h-0.1452,-1.5875v-0.7937h3.175v0.4175c0.1863,0.0447 0.366,0.124 0.5292,0.2372v-0.9193c0,-0.3792 -0.1636,-0.6502 -0.4899,-0.8134C4.8417,1.2458 4.2997,1.164 3.5412,1.164ZM3.5541,1.6932c0.4851,0 0.837,0.0253 1.0552,0.076 0.2183,0.0507 0.3602,0.1137 0.4263,0.1886L2.0726,1.9578c0.0794,-0.0662 0.2282,-0.1268 0.4465,-0.1819 0.2183,-0.0551 0.5632,-0.0827 1.0351,-0.0827zM2.6152,4.0745c-0.1102,0 -0.2039,0.0386 -0.2811,0.1158 -0.0772,0.0772 -0.1158,0.1709 -0.1158,0.2811 0,0.1102 0.0386,0.2039 0.1158,0.2811 0.0772,0.0772 0.1709,0.1158 0.2811,0.1158 0.1102,0 0.2039,-0.0386 0.2811,-0.1158 0.0772,-0.0772 0.1158,-0.1709 0.1158,-0.2811 0,-0.1102 -0.0386,-0.204 -0.1158,-0.2811 -0.0772,-0.0772 -0.1709,-0.1158 -0.2811,-0.1158z"
android:strokeWidth="0.00661458"
- android:fillColor="?colorOnPrimary"/>
+ android:fillColor="@color/white"/>
<path
android:pathData="m4.7541,3.2766c-0.3147,0 -0.6292,0.1199 -0.8693,0.3599 -0.4802,0.4802 -0.4802,1.2587 0,1.7389l0.8693,0.8693 0.8696,-0.8693c0.4801,-0.4802 0.4801,-1.2587 0,-1.7389 -0.2401,-0.2401 -0.5549,-0.3599 -0.8696,-0.3599zM4.7541,3.9596c0.3018,0 0.5464,0.2447 0.5464,0.5464 0,0.3018 -0.2447,0.5464 -0.5464,0.5464 -0.3018,0 -0.5464,-0.2447 -0.5464,-0.5464 0,-0.3018 0.2447,-0.5464 0.5464,-0.5464z"
android:strokeWidth="0.136612"
- android:fillColor="?colorOnPrimary"
+ android:fillColor="@color/white"
android:strokeColor="#00000000"/>
</vector>
diff --git a/app/src/main/res/drawable/bus_stop_new_highlight.xml b/app/src/main/res/drawable/bus_stop_new_highlight.xml
--- a/app/src/main/res/drawable/bus_stop_new_highlight.xml
+++ b/app/src/main/res/drawable/bus_stop_new_highlight.xml
@@ -9,13 +9,14 @@
android:strokeWidth="0.0936408"
android:fillColor="?colorAccent"
android:strokeColor="#00000000"/>
+ <!-- previously, fillColor was set to ?colorOnPrimary -->
<path
android:pathData="m3.5412,1.164c-0.732,0 -1.2681,0.085 -1.6077,0.2548 -0.3395,0.1698 -0.509,0.4376 -0.509,0.8036v2.5135c0,0.1279 0.0238,0.2459 0.0723,0.354 0.0485,0.108 0.1129,0.2064 0.1922,0.2946v0.5421c0,0.075 0.0253,0.1379 0.076,0.1886 0.0507,0.0507 0.1137,0.076 0.1886,0.076h0.2646c0.075,0 0.1374,-0.0253 0.1881,-0.076 0.0507,-0.0507 0.0765,-0.1136 0.0765,-0.1886L2.4829,5.662L3.7474,5.662L3.642,5.5565C3.5147,5.4293 3.4139,5.2859 3.3391,5.1328L2.4829,5.1328c-0.1455,0 -0.2705,-0.0519 -0.3741,-0.1555 -0.1036,-0.1036 -0.155,-0.2281 -0.155,-0.3736v-0.7937h1.3565c0.0768,-0.1767 0.1873,-0.3423 0.3318,-0.4868 0.0145,-0.0145 0.0295,-0.0285 0.0444,-0.0424h-0.1452,-1.5875v-0.7937h3.175v0.4175c0.1863,0.0447 0.366,0.124 0.5292,0.2372v-0.9193c0,-0.3792 -0.1636,-0.6502 -0.4899,-0.8134C4.8417,1.2458 4.2997,1.164 3.5412,1.164ZM3.5541,1.6932c0.4851,0 0.837,0.0253 1.0552,0.076 0.2183,0.0507 0.3602,0.1137 0.4263,0.1886L2.0726,1.9578c0.0794,-0.0662 0.2282,-0.1268 0.4465,-0.1819 0.2183,-0.0551 0.5632,-0.0827 1.0351,-0.0827zM2.6152,4.0745c-0.1102,0 -0.2039,0.0386 -0.2811,0.1158 -0.0772,0.0772 -0.1158,0.1709 -0.1158,0.2811 0,0.1102 0.0386,0.2039 0.1158,0.2811 0.0772,0.0772 0.1709,0.1158 0.2811,0.1158 0.1102,0 0.2039,-0.0386 0.2811,-0.1158 0.0772,-0.0772 0.1158,-0.1709 0.1158,-0.2811 0,-0.1102 -0.0386,-0.204 -0.1158,-0.2811 -0.0772,-0.0772 -0.1709,-0.1158 -0.2811,-0.1158z"
android:strokeWidth="0.00661458"
- android:fillColor="?colorOnPrimary"/>
+ android:fillColor="@color/white"/>
<path
android:pathData="m4.7541,3.2766c-0.3147,0 -0.6292,0.1199 -0.8693,0.3599 -0.4802,0.4802 -0.4802,1.2587 0,1.7389l0.8693,0.8693 0.8696,-0.8693c0.4801,-0.4802 0.4801,-1.2587 0,-1.7389 -0.2401,-0.2401 -0.5549,-0.3599 -0.8696,-0.3599zM4.7541,3.9596c0.3018,0 0.5464,0.2447 0.5464,0.5464 0,0.3018 -0.2447,0.5464 -0.5464,0.5464 -0.3018,0 -0.5464,-0.2447 -0.5464,-0.5464 0,-0.3018 0.2447,-0.5464 0.5464,-0.5464z"
android:strokeWidth="0.136612"
- android:fillColor="?colorOnPrimary"
+ android:fillColor="@color/white"
android:strokeColor="#00000000"/>
</vector>
diff --git a/app/src/main/res/drawable/ic_bus.xml b/app/src/main/res/drawable/ic_bus.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/drawable/ic_bus.xml
@@ -0,0 +1,11 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:height="30dp"
+ android:tint="@color/black_icon_text"
+ android:viewportHeight="24"
+ android:viewportWidth="24"
+ android:width="30dp">
+
+ <path android:fillColor="#111"
+ android:pathData="M4,16c0,0.88 0.39,1.67 1,2.22L5,20c0,0.55 0.45,1 1,1h1c0.55,0 1,-0.45 1,-1v-1h8v1c0,0.55 0.45,1 1,1h1c0.55,0 1,-0.45 1,-1v-1.78c0.61,-0.55 1,-1.34 1,-2.22L20,6c0,-3.5 -3.58,-4 -8,-4s-8,0.5 -8,4v10zM7.5,17c-0.83,0 -1.5,-0.67 -1.5,-1.5S6.67,14 7.5,14s1.5,0.67 1.5,1.5S8.33,17 7.5,17zM16.5,17c-0.83,0 -1.5,-0.67 -1.5,-1.5s0.67,-1.5 1.5,-1.5 1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5zM18,11L6,11L6,6h12v5z"/>
+
+</vector>
diff --git a/app/src/main/res/drawable/ic_bus_electric_filled.xml b/app/src/main/res/drawable/ic_bus_electric_filled.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/drawable/ic_bus_electric_filled.xml
@@ -0,0 +1,13 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="30dp"
+ android:height="24dp"
+ android:viewportWidth="1200"
+ android:viewportHeight="960">
+ <path
+ android:pathData="m1000.4,226.7v186.7h93.3l-140,280v-186.7h-93.3z"
+ android:strokeWidth="46.6668"
+ android:fillColor="@color/white"/>
+ <path
+ android:pathData="m160,640c0,35.2 15.6,66.8 40,88.8L200,780C200,813.2 226.8,840 260,840 293.2,840 320,813.2 320,780L320,760l320,0l0,20c0,32.8 26.8,60 60,60 32.8,0 60,-26.8 60,-60L760,728.8C784.4,706.8 800,675.2 800,640L800,240C800,100 656.8,80 480,80 303.2,80 160,100 160,240ZM300,680C266.8,680 240,653.2 240,620 240,586.8 266.8,560 300,560 333.2,560 360,586.8 360,620 360,653.2 333.2,680 300,680m360,0C626.8,680 600,653.2 600,620 600,586.8 626.8,560 660,560 693.2,560 720,586.8 720,620 720,653.2 693.2,680 660,680M720,440L240,440L240,240l480,0z"
+ android:fillColor="@color/white"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_bus_electric_small.xml b/app/src/main/res/drawable/ic_bus_electric_small.xml
deleted file mode 100644
--- a/app/src/main/res/drawable/ic_bus_electric_small.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="30dp"
- android:height="24dp"
- android:viewportWidth="1200"
- android:viewportHeight="960">
- <path
- android:pathData="m240,840q-17,0 -28.5,-11.5Q200,817 200,800v-82q-18,-20 -29,-44.5 -11,-24.5 -11,-53.5v-380q0,-83 77,-121.5 77,-38.5 243,-38.5 172,0 246,37 74,37 74,123v380q0,29 -11,53.5 -11,24.5 -29,44.5v82q0,17 -11.5,28.5Q737,840 720,840h-40q-17,0 -28.5,-11.5Q640,817 640,800v-40L320,760v40q0,17 -11.5,28.5Q297,840 280,840ZM482,200L706,200 258,200ZM640,480L240,480 720,480ZM240,400L720,400L720,280L240,280ZM382.5,622.5Q400,605 400,580 400,555 382.5,537.5 365,520 340,520q-25,0 -42.5,17.5 -17.5,17.5 -17.5,42.5 0,25 17.5,42.5 17.5,17.5 42.5,17.5 25,0 42.5,-17.5zM662.5,622.5Q680,605 680,580 680,555 662.5,537.5 645,520 620,520q-25,0 -42.5,17.5 -17.5,17.5 -17.5,42.5 0,25 17.5,42.5 17.5,17.5 42.5,17.5 25,0 42.5,-17.5zM258,200L706,200Q691,183 641.5,171.5 592,160 482,160 375,160 325.5,172.5 276,185 258,200ZM320,680h320q33,0 56.5,-23.5Q720,633 720,600L720,480L240,480v120q0,33 23.5,56.5 23.5,23.5 56.5,23.5z"
- android:fillColor="?colorAccent"/>
- <path
- android:pathData="m1000.4,226.7v186.7h93.3l-140,280v-186.7h-93.3z"
- android:strokeWidth="46.6668"
- android:fillColor="?colorAccent"/>
-</vector>
diff --git a/app/src/main/res/drawable/ic_bus_material.xml b/app/src/main/res/drawable/ic_bus_material.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/drawable/ic_bus_material.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:pathData="M6,21q-0.425,0 -0.712,-0.288T5,20v-2.05q-0.45,-0.5 -0.725,-1.112T4,15.5L4,6q0,-2.075 1.925,-3.037T12,2q4.3,0 6.15,0.925T20,6v9.5q0,0.725 -0.275,1.338T19,17.95L19,20q0,0.425 -0.288,0.713T18,21h-1q-0.425,0 -0.712,-0.288T16,20v-1L8,19v1q0,0.425 -0.288,0.713T7,21zM6,10h12L18,7L6,7zM9.563,15.563Q10,15.125 10,14.5t-0.437,-1.062T8.5,13t-1.062,0.438T7,14.5t0.438,1.063T8.5,16t1.063,-0.437m7,0Q17,15.125 17,14.5t-0.437,-1.062T15.5,13t-1.062,0.438T14,14.5t0.438,1.063T15.5,16t1.063,-0.437"
+ android:fillColor="@color/grey_500"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_bus_stilized.xml b/app/src/main/res/drawable/ic_bus_stilized.xml
--- a/app/src/main/res/drawable/ic_bus_stilized.xml
+++ b/app/src/main/res/drawable/ic_bus_stilized.xml
@@ -4,6 +4,6 @@
android:viewportWidth="48"
android:viewportHeight="48">
<path
- android:fillColor="#FFFFFFFF"
+ android:fillColor="?colorPrimary"
android:pathData="M12.45,42.5q-0.75,0 -1.35,-0.475 -0.6,-0.475 -0.6,-1.175v-4.1q-1.45,-0.85 -2.125,-2.375T7.7,31.15L7.7,11.2q0,-3.85 3.9,-5.65 3.9,-1.8 12.45,-1.8 8.45,0 12.35,1.775Q40.3,7.3 40.3,11.2v19.95q0,1.7 -0.675,3.225Q38.95,35.9 37.5,36.75v4.1q0,0.7 -0.6,1.175 -0.6,0.475 -1.35,0.475h-0.65q-0.85,0 -1.425,-0.475 -0.575,-0.475 -0.575,-1.125v-2.5L15.1,38.4v2.5q0,0.65 -0.575,1.125T13.1,42.5ZM24.05,10L37,10 11,10h13.05ZM32.8,24.65L11.1,24.65h25.8,-4.1ZM11.1,21.65h25.8L36.9,13L11.1,13ZM16.35,32.55q1.15,0 1.95,-0.8t0.8,-1.95q0,-1.15 -0.8,-1.95t-1.95,-0.8q-1.15,0 -1.95,0.8t-0.8,1.95q0,1.15 0.8,1.95t1.95,0.8ZM31.65,32.55q1.15,0 1.95,-0.8t0.8,-1.95q0,-1.15 -0.8,-1.95t-1.95,-0.8q-1.15,0 -1.95,0.8t-0.8,1.95q0,1.15 0.8,1.95t1.95,0.8ZM11,10h26q-1.2,-1.3 -4.6,-2.05 -3.4,-0.75 -8.35,-0.75 -5.9,0 -9.05,0.675 -3.15,0.675 -4,2.125ZM15.2,35h17.6q1.75,0 2.925,-1.375Q36.9,32.25 36.9,30.55v-5.9L11.1,24.65v5.9q0,1.7 1.175,3.075Q13.45,35 15.2,35Z"/>
</vector>
diff --git a/app/src/main/res/drawable/ic_subway_filled.xml b/app/src/main/res/drawable/ic_subway_filled.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/drawable/ic_subway_filled.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:pathData="M12,2c-4.42,0 -8,0.5 -8,4v9.5C4,17.43 5.57,19 7.5,19L6,20.5v0.5h12v-0.5L16.5,19c1.93,0 3.5,-1.57 3.5,-3.5L20,6c0,-3.5 -3.58,-4 -8,-4M7.5,17c-0.83,0 -1.5,-0.67 -1.5,-1.5S6.67,14 7.5,14s1.5,0.67 1.5,1.5S8.33,17 7.5,17m3.5,-6L6,11L6,6h5zM16.5,17c-0.83,0 -1.5,-0.67 -1.5,-1.5s0.67,-1.5 1.5,-1.5s1.5,0.67 1.5,1.5s-0.67,1.5 -1.5,1.5m1.5,-6h-5L13,6h5z"
+ android:fillColor="@color/grey_500"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_tram_filled_24.xml b/app/src/main/res/drawable/ic_tram_filled_24.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/drawable/ic_tram_filled_24.xml
@@ -0,0 +1,5 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
+
+ <path android:fillColor="@color/white" android:pathData="M19,16.94V8.5c0,-2.79 -2.61,-3.4 -6.01,-3.49l0.76,-1.51H17V2H7v1.5h4.75l-0.76,1.52C7.86,5.11 5,5.73 5,8.5v8.44c0,1.45 1.19,2.66 2.59,2.97L6,21.5v0.5h2.23l2,-2H14l2,2h2v-0.5L16.5,20h-0.08c1.69,0 2.58,-1.37 2.58,-3.06m-7,1.56c-0.83,0 -1.5,-0.67 -1.5,-1.5s0.67,-1.5 1.5,-1.5s1.5,0.67 1.5,1.5s-0.67,1.5 -1.5,1.5m5,-4.5H7V9h10z"/>
+
+</vector>
diff --git a/app/src/main/res/drawable/ic_tram_material.xml b/app/src/main/res/drawable/ic_tram_material.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/drawable/ic_tram_material.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:pathData="M4,17.5V8q0,-2.425 2.125,-3.175T11,4l0.75,-1.5H7V1h10v1.5h-3.25L13,4q2.975,0.075 4.988,0.813T20,8v9.5q0,1.475 -1.012,2.488T16.5,21l1.5,1.5v0.5h-2l-2,-2h-4l-2,2H6v-0.5L7.5,21q-1.475,0 -2.488,-1.012T4,17.5m9.063,0.063q0.437,-0.438 0.437,-1.063t-0.437,-1.062T12,15t-1.062,0.438T10.5,16.5t0.438,1.063T12,18t1.063,-0.437M6,12h12V9H6z"
+ android:fillColor="#000"/>
+</vector>
diff --git a/app/src/main/res/drawable/magnifying_glass_larger.xml b/app/src/main/res/drawable/magnifying_glass_larger.xml
--- a/app/src/main/res/drawable/magnifying_glass_larger.xml
+++ b/app/src/main/res/drawable/magnifying_glass_larger.xml
@@ -6,5 +6,5 @@
<path
android:pathData="M14.857,13.791 L10.872,9.805A5.409,5.409 0,1 0,9.805 10.871l3.987,3.987zM6.598,10.452A3.853,3.853 0,1 1,10.452 6.597,3.859 3.859,0 0,1 6.598,10.452Z"
android:strokeWidth="1.36203"
- android:fillColor="?attr/colorOnPrimary"/>
+ android:fillColor="@color/white"/>
</vector>
diff --git a/app/src/main/res/drawable/map_bus_position_icon_sel.xml b/app/src/main/res/drawable/map_bus_position_icon_sel.xml
--- a/app/src/main/res/drawable/map_bus_position_icon_sel.xml
+++ b/app/src/main/res/drawable/map_bus_position_icon_sel.xml
@@ -1,7 +1,7 @@
<vector android:height="40dp" android:viewportHeight="35.719"
android:viewportWidth="35.719" android:width="40dp" xmlns:android="http://schemas.android.com/apk/res/android">
- <path android:fillColor="@color/blue_500"
- android:strokeColor="@color/black"
+ <path android:fillColor="@color/bus_marker_color_selected"
+ android:strokeColor="?android:textColorPrimary"
android:pathData="m17.859,0.505c-2.419,2.799 -6.614,7.924 -8.107,10.349 -1.294,2.102 -2.431,4.162 -2.431,6.824 0,5.83 4.714,10.559 10.538,10.583 5.824,-0.024 10.538,-4.753 10.538,-10.583 0,-2.662 -1.138,-4.722 -2.431,-6.824C24.474,8.429 20.279,3.304 17.859,0.505Z"
android:strokeLineJoin="round"
android:strokeWidth="0.8"/>
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
--- a/app/src/main/res/layout/activity_about.xml
+++ b/app/src/main/res/layout/activity_about.xml
@@ -46,7 +46,7 @@
app:layout_constraintBottom_toTopOf="@id/openTutorialButton"
android:autoLink="web"
android:fontFamily="@font/nevermind_compact"
- android:textColor="@color/grey_700"
+ android:textColor="@color/color_text_grey"
/>
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.Icon"
@@ -76,7 +76,7 @@
app:layout_constraintEnd_toEndOf="parent"
android:autoLink="web"
android:fontFamily="@font/nevermind_compact"
- android:textColor="@color/grey_700"
+ android:textColor="@color/color_text_grey"
/>
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.Icon"
@@ -108,7 +108,7 @@
app:layout_constraintEnd_toEndOf="parent"
android:autoLink="web"
android:fontFamily="@font/nevermind_compact"
- android:textColor="@color/grey_700"
+ android:textColor="@color/color_text_grey"
/>
<com.google.android.material.button.MaterialButton
@@ -157,7 +157,7 @@
app:layout_constraintBottom_toBottomOf="parent"
android:autoLink="web"
android:fontFamily="@font/nevermind_compact"
- android:textColor="@color/grey_700"
+ android:textColor="@color/color_text_grey"
/><!--android:layout_weight="0.85"-->
<!--<Button
@@ -211,7 +211,8 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- android:textColor="@color/black" android:layout_marginTop="10dp" android:layout_marginEnd="10dp"
+ android:textColor="?android:textColorPrimary"
+ android:layout_marginTop="10dp" android:layout_marginEnd="10dp"
android:layout_marginBottom="10dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_principal.xml b/app/src/main/res/layout/activity_principal.xml
--- a/app/src/main/res/layout/activity_principal.xml
+++ b/app/src/main/res/layout/activity_principal.xml
@@ -41,15 +41,15 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
- android:background="@color/grey_050"
- android:theme="@style/ThemeOverlay.AppCompat.Light"
+ android:theme="@style/ThemeOverlay.AppCompat.DayNight"
app:headerLayout="@layout/nav_header"
app:itemIconTint="@color/teal_500"
app:itemTextAppearance="?android:attr/textAppearanceMedium"
- app:itemTextColor="@color/black_900"
+ app:itemTextColor="?android:textColorPrimary"
android:fitsSystemWindows="true"
- app:menu="@menu/drawer_main" />
+ app:menu="@menu/drawer_main"
+ />
</androidx.drawerlayout.widget.DrawerLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/default_toobar.xml b/app/src/main/res/layout/default_toobar.xml
--- a/app/src/main/res/layout/default_toobar.xml
+++ b/app/src/main/res/layout/default_toobar.xml
@@ -10,6 +10,6 @@
android:fitsSystemWindows="false"
android:elevation="4dp"
- app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
+ >
</androidx.appcompat.widget.Toolbar>
\ No newline at end of file
diff --git a/app/src/main/res/layout/entry_alert_line_adapter.xml b/app/src/main/res/layout/entry_alert_line_adapter.xml
--- a/app/src/main/res/layout/entry_alert_line_adapter.xml
+++ b/app/src/main/res/layout/entry_alert_line_adapter.xml
@@ -22,7 +22,7 @@
android:textStyle="bold"
android:textSize="17sp"
android:fontFamily="@font/lato_bold"
- android:textColor="@color/black_900"
+ android:textColor="?android:textColorPrimary"
android:text="Alerts for line"
android:layout_alignParentTop="true"
android:layout_marginBottom="5dp"
@@ -35,10 +35,10 @@
android:id="@+id/messageBodyTextView"
android:textSize="16sp"
android:fontFamily="@font/lato_regular"
- android:textColor="@color/black_900"
+ android:textColor="?android:textColorPrimary"
android:text="Alert text"
android:layout_below="@id/messageTitleTextView"
/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/entry_bus_line_passage.xml b/app/src/main/res/layout/entry_bus_line_passage.xml
--- a/app/src/main/res/layout/entry_bus_line_passage.xml
+++ b/app/src/main/res/layout/entry_bus_line_passage.xml
@@ -50,6 +50,17 @@
</TextView>
</RelativeLayout>
</androidx.cardview.widget.CardView>
+ <ImageView
+ android:id="@+id/arrivalsBusIcon"
+ android:layout_width="28dp"
+ android:layout_height="28dp"
+ android:layout_alignParentTop="true"
+ android:layout_toEndOf="@id/routeCard"
+ android:src="@drawable/ic_bus"
+ android:scaleType="fitCenter"
+ app:tint="@color/black_icon_text"
+
+ />
<!--the icon comes from setCompoundDrawables in PalinaAdapter -->
<!--android:drawableLeft="@drawable/bus"
@@ -57,11 +68,12 @@
<TextView
android:id="@+id/routeDestination"
android:textAppearance="?android:attr/textAppearanceLarge"
- android:textColor="@color/grey_600"
+ android:textColor="@color/black_icon_text"
android:layout_height="wrap_content"
android:layout_width="match_parent"
- android:layout_toEndOf="@id/routeCard"
+ android:layout_toEndOf="@id/arrivalsBusIcon"
android:layout_alignTop="@id/routeCard"
+ android:textSize="21sp"
android:maxLines="1"
android:drawablePadding="0dp"
android:singleLine="true">
diff --git a/app/src/main/res/layout/entry_bus_stop.xml b/app/src/main/res/layout/entry_bus_stop.xml
--- a/app/src/main/res/layout/entry_bus_stop.xml
+++ b/app/src/main/res/layout/entry_bus_stop.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingTop="8dip"
- android:paddingBottom="8dip"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:paddingTop="8dip"
+ android:paddingBottom="8dip"
android:background="?android:attr/selectableItemBackground"
>
@@ -39,21 +39,30 @@
android:layout_alignParentStart="true"
android:textColor="@color/grey_600"
android:textAppearance="?android:attr/textAppearanceMedium"/>
+ <ImageView
+ android:id="@+id/arrivalsBusIcon"
+ android:layout_width="26dp"
+ android:layout_height="26dp"
+ android:layout_alignParentStart="true"
+ android:layout_below="@id/busStopLocality"
+ android:layout_marginStart="16sp"
+ android:src="@drawable/ic_bus"
+ android:scaleType="fitCenter"
+ app:tint="@color/black_icon_text"
+
+ />
<TextView
android:id="@+id/routesThatStopHere"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/busStopLocality"
- android:layout_marginLeft="16sp"
- android:layout_marginStart="16sp"
- android:layout_marginRight="16sp"
- android:layout_marginEnd="16sp"
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="16dp"
android:gravity="center_vertical"
- android:layout_toLeftOf="@id/busStopID"
android:layout_toStartOf="@id/busStopID"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
+ android:layout_toEndOf="@id/arrivalsBusIcon"
+ android:layout_marginTop="3dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/grey_600"/>
diff --git a/app/src/main/res/layout/fragment_dialog_alerts_line.xml b/app/src/main/res/layout/fragment_dialog_alerts_line.xml
--- a/app/src/main/res/layout/fragment_dialog_alerts_line.xml
+++ b/app/src/main/res/layout/fragment_dialog_alerts_line.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
@@ -12,7 +13,7 @@
android:textStyle="bold"
android:textSize="18sp"
android:fontFamily="@font/pitagon_medium"
- android:textColor="@color/black_900"
+ android:textColor="?android:textColorPrimary"
android:text="Alerts for line"
android:layout_width="wrap_content"
android:layout_marginBottom="5dp"
diff --git a/app/src/main/res/layout/fragment_dialog_buspositions.xml b/app/src/main/res/layout/fragment_dialog_buspositions.xml
--- a/app/src/main/res/layout/fragment_dialog_buspositions.xml
+++ b/app/src/main/res/layout/fragment_dialog_buspositions.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
- android:orientation="vertical">
+> <!-- background color set in Code -->
<!-- Label fissa (SX) -->
@@ -17,7 +17,7 @@
android:textStyle="bold"
android:textSize="18sp"
android:fontFamily="@font/lato_bold"
- android:textColor="@color/black_900"
+ android:textColor="?android:textColorPrimary"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -39,7 +39,7 @@
android:layout_marginTop="5dp"
android:layout_marginEnd="5dp"
android:layout_marginStart="4dp"
- android:textColor="@color/black"
+ android:textColor="?android:textColorPrimary"
android:fontFamily="@font/lato_regular"
android:textAppearance="@style/TextAppearance.AppCompat.Display3"/>
@@ -59,7 +59,7 @@
app:cardElevation="1dp"
app:strokeWidth="1dp"
android:layout_marginBottom="16dp"
- android:backgroundTint="@color/grey_200"
+ android:backgroundTint="@color/message_background_on_black"
app:strokeColor="@color/grey_050">
<TextView
@@ -69,7 +69,7 @@
android:text="Messaggio di stato..."
android:fontFamily="@font/lato_regular"
android:textSize="16sp"
- android:textColor="@color/black"
+ android:textColor="?android:textColorPrimary"
android:padding="8dp"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"/>
diff --git a/app/src/main/res/layout/fragment_intro.xml b/app/src/main/res/layout/fragment_intro.xml
--- a/app/src/main/res/layout/fragment_intro.xml
+++ b/app/src/main/res/layout/fragment_intro.xml
@@ -34,8 +34,8 @@
android:maxWidth="280dp"
android:textSize="18sp"
android:textAlignment="center"
- android:textColor="@color/grey_900"
- android:fontFamily="@font/pitagon_medium"
+ android:textColor="?android:textColorPrimary"
+ android:fontFamily="@font/pitagon_regular"
app:layout_constraintBottom_toTopOf="@id/closeAllButton" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginBottom="5dp"
diff --git a/app/src/main/res/layout/fragment_lines_detail.xml b/app/src/main/res/layout/fragment_lines_detail.xml
--- a/app/src/main/res/layout/fragment_lines_detail.xml
+++ b/app/src/main/res/layout/fragment_lines_detail.xml
@@ -69,7 +69,7 @@
app:layout_constraintTop_toBottomOf="@id/switchImageButton"
app:layout_constraintEnd_toStartOf="@id/lineInfoWarningButton"
app:layout_constraintStart_toStartOf="parent"
- android:textColor="@color/grey_700"
+ android:textColor="@color/black_icon_text"
android:fontFamily="@font/lato_regular"
android:textSize="18sp"
android:gravity="center"
diff --git a/app/src/main/res/layout/fragment_lines_grid.xml b/app/src/main/res/layout/fragment_lines_grid.xml
--- a/app/src/main/res/layout/fragment_lines_grid.xml
+++ b/app/src/main/res/layout/fragment_lines_grid.xml
@@ -43,6 +43,8 @@
android:layout_margin="4dp"
android:layout_marginStart="16dp"
android:rotation="90"
+ app:tint="?android:textColorPrimary"
+
/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -50,7 +52,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textSize="@dimen/subtitle_size"
android:layout_margin="4dp"
- android:textColor="@color/black_900"
+ android:textColor="?android:textColorPrimary"
android:gravity="center"
android:id="@+id/favoritesTitleView"
app:layout_constraintTop_toBottomOf="@id/updateMessageTextView"
@@ -81,6 +83,8 @@
android:layout_margin="4dp"
android:layout_marginStart="16dp"
android:rotation="0"
+ app:tint="?android:textColorPrimary"
+
/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -88,7 +92,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textSize="@dimen/subtitle_size"
android:layout_margin="4dp"
- android:textColor="@color/black_900"
+ android:textColor="?android:textColorPrimary"
android:gravity="center"
android:id="@+id/urbanLinesTitleView"
app:layout_constraintTop_toBottomOf="@id/favoritesRecyclerView"
@@ -120,13 +124,14 @@
android:layout_margin="4dp"
android:layout_marginStart="16dp"
android:rotation="0"
+ app:tint="?android:textColorPrimary"
/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/turist_lines"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textSize="@dimen/subtitle_size"
- android:textColor="@color/black_900"
+ android:textColor="?android:textColorPrimary"
android:layout_margin="4dp"
android:layout_marginStart="6dp"
android:gravity="center"
@@ -158,6 +163,8 @@
android:layout_margin="4dp"
android:layout_marginStart="16dp"
android:rotation="0"
+ app:tint="?android:textColorPrimary"
+
/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -165,7 +172,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textSize="@dimen/subtitle_size"
android:layout_margin="4dp"
- android:textColor="@color/black_900"
+ android:textColor="?android:textColorPrimary"
android:gravity="center"
android:layout_marginStart="6dp"
android:id="@+id/extraurbanLinesTitleView"
diff --git a/app/src/main/res/layout/fragment_nearby_stops.xml b/app/src/main/res/layout/fragment_nearby_stops.xml
--- a/app/src/main/res/layout/fragment_nearby_stops.xml
+++ b/app/src/main/res/layout/fragment_nearby_stops.xml
@@ -72,29 +72,47 @@
android:indeterminate="true"
android:indeterminateTint="@color/blue_620"
android:layout_below="@+id/titleTextView"
- android:layout_centerHorizontal="true"/>
- <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
+ android:layout_centerHorizontal="true"
+ android:visibility="gone"
+ />
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:id="@+id/positionLoadingTextView"
android:layout_below="@id/circularProgressBar"
android:text="@string/position_searching_message"
android:layout_marginTop="8dp"
android:textSize="15sp"
android:layout_centerHorizontal="true"
+ android:visibility="gone"
/>
<TextView
- android:text="@string/enable_location_message"
+ android:text="@string/enable_position_message_nearby"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/messageTextView"
android:fontFamily="@font/lato_regular"
- android:visibility="gone"
+ android:visibility="visible"
android:textAppearance="@style/Base.ThemeOverlay.AppCompat.Light"
android:layout_below="@+id/titleTextView"
android:layout_centerHorizontal="true"
android:textSize="17sp"
- android:layout_margin="20dp"
+ android:layout_marginTop="20dp"
+ android:layout_marginStart="30dp"
+ android:layout_marginEnd="30dp"
+ android:textColor="?android:textColorSecondary"
/>
+ <com.google.android.material.button.MaterialButton
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/messageTextView"
+ android:layout_centerHorizontal="true"
+ android:text="@string/grant_location_permission"
+ android:visibility="visible"
+ android:id="@+id/grantLocationButton"
+ android:layout_marginTop="15dp"
+ />
+
</RelativeLayout>
diff --git a/app/src/main/res/layout/include_map_bottom_sheet.xml b/app/src/main/res/layout/include_map_bottom_sheet.xml
--- a/app/src/main/res/layout/include_map_bottom_sheet.xml
+++ b/app/src/main/res/layout/include_map_bottom_sheet.xml
@@ -32,6 +32,7 @@
android:fontFamily="@font/lato_regular"
/>
+
<TextView
android:id="@+id/stopTitleTextView"
android:layout_width="0dp"
@@ -45,51 +46,63 @@
android:layout_marginEnd="10dp"
android:fontFamily="@font/lato_bold"
/>
- <TextView
- android:id="@+id/descriptionTextView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:minHeight="22dp"
- android:textSize="15sp"
- android:gravity="center_vertical"
- app:layout_constraintTop_toBottomOf="@id/stopTitleTextView"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@id/vehicleIcon"
- android:layout_marginTop="6dp"
- android:layout_marginStart="10dp"
- android:layout_marginEnd="1dp"
- android:fontFamily="@font/lato_regular"
- app:layout_constraintHorizontal_chainStyle="packed"
- app:layout_constraintHorizontal_bias="0.0"
-
- />
- <ImageView
- android:layout_width="33dp"
- android:layout_height="24dp"
- android:id="@+id/vehicleIcon"
- android:layout_marginTop="6dp"
- android:layout_marginEnd="10dp"
- android:layout_marginStart="0dp"
- android:src="@drawable/ic_bus_electric_small"
- app:tint="@color/blue_700"
- app:layout_constraintTop_toBottomOf="@id/stopTitleTextView"
- app:layout_constraintStart_toEndOf="@id/descriptionTextView"
- app:layout_constraintEnd_toStartOf="@id/arrivalsCardButton"
- />
-
<androidx.constraintlayout.widget.Barrier
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:id="@+id/belowTextBarrier"
+ android:id="@+id/belowBarrier"
app:barrierDirection="bottom"
- app:constraint_referenced_ids="vehicleIcon,descriptionTextView"
+ app:constraint_referenced_ids="stopTitleTextView"
/>
+ <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ app:layout_constraintStart_toStartOf="parent"
+ android:layout_marginStart="10dp"
+ android:layout_marginTop="5dp"
+ app:layout_constraintTop_toBottomOf="@id/stopTitleTextView"
+ android:id="@+id/bottomLinearLayout"
+ app:layout_constraintEnd_toStartOf="@id/arrivalsCardButton"
+ android:layout_marginEnd="10dp"
+
+ >
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/lines"
+ android:layout_marginEnd="1dp"
+ android:id="@+id/linesBottomTextView"
+ android:fontFamily="@font/lato_regular"
+ android:textSize="15sp"
+ />
+ <TextView
+ android:id="@+id/descriptionTextView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:minHeight="24dp"
+ android:textSize="15sp"
+ android:text="32119"
+ android:gravity="top"
+ android:layout_alignParentStart="true"
+ android:layout_alignParentTop="true"
+ android:fontFamily="@font/lato_regular"
+ />
+ <ImageView
+ android:layout_width="33dp"
+ android:layout_height="24dp"
+ android:id="@+id/vehicleIcon"
+ android:layout_marginStart="1dp"
+ android:src="@drawable/ic_bus_electric_filled"
+ app:tint="@color/blue_700"
+
+ />
+ </LinearLayout>
+
+
+
<TextView
android:id="@+id/extraBottomTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="13sp"
- app:layout_constraintTop_toBottomOf="@id/belowTextBarrier"
+ app:layout_constraintTop_toBottomOf="@id/bottomLinearLayout"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/arrivalsCardButton"
android:layout_marginStart="10dp"
@@ -119,7 +132,7 @@
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_gravity="center"
- app:tint="?colorOnPrimary"
+ app:tint="@android:color/white"
app:srcCompat="@drawable/ic_baseline_departure_board_24" />
</androidx.cardview.widget.CardView>
@@ -145,6 +158,7 @@
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_gravity="center"
+ app:tint="@android:color/white"
app:srcCompat="@drawable/navigation_right" />
</androidx.cardview.widget.CardView>
diff --git a/app/src/main/res/layout/arrivals_nearby_card.xml b/app/src/main/res/layout/item_arrivals_nearby_card.xml
rename from app/src/main/res/layout/arrivals_nearby_card.xml
rename to app/src/main/res/layout/item_arrivals_nearby_card.xml
--- a/app/src/main/res/layout/arrivals_nearby_card.xml
+++ b/app/src/main/res/layout/item_arrivals_nearby_card.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<androidx.cardview.widget.CardView
- xmlns:card_view="http://schemas.android.com/apk/res-auto"
+<com.google.android.material.card.MaterialCardView
+ xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/stop_cardView"
android:foreground="?android:attr/selectableItemBackground"
@@ -8,25 +8,36 @@
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- card_view:cardCornerRadius="5dp"
+ app:cardBackgroundColor="@color/card_background"
+ app:cardCornerRadius="6dp"
+ app:strokeColor="@color/card_border"
+ app:strokeWidth="1dp"
android:layout_margin="5dp" android:padding="6dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:paddingLeft="8dp"
+ android:paddingTop="6dp"
+ android:paddingStart="8dp"
+ android:paddingEnd="10dp"
>
- <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:minWidth="40dp"
android:id="@+id/lineNameTextView"
- android:text="10" android:textSize="22sp"
- android:textColor="@color/orange_700"
- android:layout_marginLeft="10dp"
- android:layout_marginStart="10dp"
- android:layout_alignParentLeft="true"
- android:gravity="center_vertical"
- android:textStyle="normal" android:layout_marginRight="10dp" android:layout_marginEnd="10dp"
- android:layout_marginBottom="10dp" android:layout_marginTop="10dp"/>
+ android:text="10"
+ android:textSize="22sp"
+ android:textColor="@color/orange_700_display"
+ android:layout_marginStart="8dp"
+ android:gravity="center"
+ android:textStyle="normal"
+ android:layout_marginTop="10dp"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentStart="true"
+ android:layout_alignBottom="@id/lineDirectionTextView"
+
+ />
<TextView
android:layout_width="wrap_content"
@@ -35,27 +46,29 @@
android:text="MADONNA DEL PILONE, LARGO TABACCHI"
android:textSize="20sp"
android:textAppearance="?android:attr/textAppearanceLarge"
- android:layout_toLeftOf="@id/arrivalsDistanceTextView"
- android:layout_toRightOf="@id/lineNameTextView"
+ android:layout_toStartOf="@id/arrivalsDistanceTextView"
android:layout_toEndOf="@id/lineNameTextView"
android:textStyle="normal"
- android:layout_marginRight="6dp"
android:layout_marginEnd="6dp"
- android:layout_alignBaseline="@id/lineNameTextView"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="5dp"
+ android:layout_alignParentTop="true"
+ android:layout_marginTop="10dp"
android:layout_marginStart="10dp"/>
- <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_alignBaseline="@id/arrivalsTimeTextView"
android:textAppearance="?android:attr/textAppearanceMedium"
- android:id="@+id/arrivalsDescriptionTextView" android:text="@string/bus_arriving_at"
+ android:id="@+id/arrivalsDescriptionTextView"
+ android:text="@string/bus_arriving_at"
android:textSize="@dimen/text_size_nearby_indicate"
- android:layout_marginLeft="8dp" android:layout_marginTop="8dp" android:layout_marginStart="8dp"
- android:layout_marginRight="8dp" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp"/>
+ android:layout_margin="8dp"
+ android:layout_alignParentStart="true"
+ />
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/arrivalsDescriptionTextView"
- android:layout_marginLeft="6dp" android:layout_marginTop="6dp" android:layout_marginStart="6dp"
- android:layout_marginRight="8dp" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp"
+ android:layout_marginStart="6dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginEnd="8dp"
+ android:layout_marginBottom="8dp"
android:id="@+id/arrivalsTimeTextView" android:text="Orario" android:textSize="@dimen/text_size_nearby"
android:layout_below="@id/lineDirectionTextView"
@@ -71,6 +84,7 @@
android:layout_below="@id/arrivalsDescriptionTextView"
android:layout_margin="@dimen/default_textView_margin"
android:layout_alignBaseline="@id/arrivalStopName"
+ android:layout_alignParentStart="true"
/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/arrivalStopDescription"
@@ -78,18 +92,15 @@
android:layout_below="@id/arrivalsTimeTextView"
android:layout_marginBottom="10dp"
android:id="@+id/arrivalStopName" android:text="Prova prova" android:textSize="@dimen/text_size_nearby"
- android:layout_marginLeft="10dp"
- android:layout_marginStart="10dp"
+ android:layout_marginStart="6dp"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginBottom="10dp"
- android:layout_marginEnd="12dp"
- android:layout_marginRight="12dp"
+ android:layout_marginEnd="10dp"
android:id="@+id/arrivalsDistanceTextView" android:text="200 m" android:textSize="15sp"
- android:layout_marginLeft="15dp"
- android:layout_marginStart="15dp"
+ android:layout_marginStart="5dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
@@ -97,4 +108,4 @@
</RelativeLayout>
-</androidx.cardview.widget.CardView>
\ No newline at end of file
+</com.google.android.material.card.MaterialCardView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_card_button.xml b/app/src/main/res/layout/item_card_button.xml
--- a/app/src/main/res/layout/item_card_button.xml
+++ b/app/src/main/res/layout/item_card_button.xml
@@ -43,7 +43,7 @@
android:contentDescription="@null"
app:tint="@color/grey_100"
app:layout_constraintVertical_bias="1.0"
- android:layout_marginTop="12dp"
+ android:layout_marginTop="10dp"
/>
diff --git a/app/src/main/res/layout/stop_card.xml b/app/src/main/res/layout/item_stop_nearby_card.xml
rename from app/src/main/res/layout/stop_card.xml
rename to app/src/main/res/layout/item_stop_nearby_card.xml
--- a/app/src/main/res/layout/stop_card.xml
+++ b/app/src/main/res/layout/item_stop_nearby_card.xml
@@ -26,8 +26,11 @@
android:id="@+id/stop_nameText"
style="@style/TextAppearance.AppCompat.Medium"
android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true" android:paddingLeft="6dp"
- android:textColor="@color/primary_material_dark" android:layout_marginBottom="6dp"
+ android:layout_alignParentStart="true"
+ android:paddingLeft="6dp"
+ android:textSize="20sp"
+ android:textColor="?android:textColorPrimary"
+ android:layout_marginBottom="6dp"
android:layout_marginTop="6dp" android:layout_marginLeft="6dp"
android:layout_marginStart="6dp" android:layout_marginRight="6dp" android:layout_marginEnd="6dp"/>
<TextView
@@ -35,10 +38,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="stopNumber"
- android:textSize="16sp"
+ android:textSize="18sp"
android:layout_below="@id/stop_nameText"
android:textIsSelectable="true" android:layout_marginTop="6dp"
- android:textColor="@color/orange_700"
+ android:textColor="?colorPrimaryDark"
android:layout_marginStart="12dp" android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"/>
<TextView
@@ -49,7 +52,8 @@
android:layout_marginStart="10dp"
android:minWidth="50dp"
android:textSize="16sp"
- android:id="@+id/stop_distanceTextView" android:layout_toEndOf="@+id/stop_numberText"
+ android:id="@+id/stop_distanceTextView"
+ android:layout_toEndOf="@+id/stop_numberText"
android:layout_toRightOf="@id/stop_numberText"
android:layout_alignTop="@+id/stop_numberText"
/>
@@ -101,7 +105,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text=""
+ android:text="1,2,3,4"
android:id="@+id/stop_linesText"
android:layout_toRightOf="@+id/stop_distanceTextView"
android:minWidth="80dp"
@@ -110,8 +114,11 @@
android:layout_alignTop="@+id/stop_nameText"
android:nestedScrollingEnabled="true"
android:gravity="center_horizontal|center"
- android:textColor="@color/blue_700" android:textSize="14sp" android:layout_weight="1"
+ android:textColor="@color/lines_nearby_color"
+ android:fontFamily="@font/nevermind_compact"
+ android:textSize="16sp"
+ android:layout_weight="1"
android:padding="5dp" android:maxWidth="100sp" android:layout_gravity="center_vertical|end"
android:layout_marginRight="5dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -257,4 +257,11 @@
<string name="no_permission_dialog_text_location">Per usare questa funzionalità, l\'app necessita dell\'accesso alla posizione, che ora può essere dato solo dalle impostazioni di sistema.</string>
<string name="no_permission_dialog_open">Apri le impostazioni</string>
<string name="back_again_to_close">Premi ancora \"indietro\" per uscire dall\'app</string>
+
+ <!-- Theme -->
+ <string name="day_night_theme_set_light">Chiaro</string>
+ <string name="day_night_theme_set_dark">Scuro</string>
+ <string name="day_night_theme_keep_system">Segui il sistema</string>
+
+ <string name="pref_theme_day_night_title">Imposta tema scuro o chiaro</string>
</resources>
diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/values-night/colors.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="black_icon_text">#ababab</color>
+ <!-- luminosity from 52 to 40 -->
+ <color name="blue_500">#0b6fc1</color>
+ <color name="black_800">#bfbfbf</color>
+ <!-- darker color, 40% luminosity -->
+ <color name="blue_700">#1a4db2</color>
+ <!-- lighter color, 55% luminosity -->
+ <!--<color name="blue_7F00">#3770e2</color>-->
+
+ <color name="lines_nearby_color">#3770e2</color>
+
+ <color name="red_orange">#c34322</color>
+ <!-- color of the polyline in line screen-->
+ <color name="red_dark">#861313</color>
+ <!-- bus marker in the map -->
+ <color name="bus_marker_color">#3657b0</color>
+ <color name="bus_marker_color_selected">#2270c3</color>F
+ <color name="card_background">@color/grey_900</color>
+ <color name="card_border">@color/grey_900</color>
+
+ <color name="orange_700_display">@color/orange_700_night</color>
+ <color name="message_background_on_black">#666666</color>
+
+ <!-- Proposal: change the grey_100 so it's less intense
+ <color name="grey_100">#d9d9d9</color> --> <!-- Also 42*3 -->
+
+ <color name="color_text_grey">@color/grey_400</color>
+
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <style name="AppThemeDayNight" parent="Theme.MaterialComponents.DayNight">
+ <item name="android:textColorSecondary">@color/text_secondary_night</item>
+ <item name="colorPrimary">@color/orange_500_night</item>
+ <item name="colorPrimaryDark">@color/orange_700_night</item>
+ <item name="colorAccent">@color/teal_500_night</item>
+
+
+ </style>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -13,6 +13,12 @@
<color name="blue_700">#2060dd</color>
<color name="brown_vd">#8A4247</color><!-- #1976D2 -->
<color name="dialog_background">#FFF3E0</color>
+ <color name="orange_background">#fff5e5</color>
+ <!-- night color, from 50 to 44 luminosity -->
+ <color name="orange_500_night">#e08700</color>
+
+ <!-- night color, to 41 luminosity -->
+ <color name="orange_700_night">#d16900</color>
<color name="blue_mid_2">#2378e8</color>
<color name="blue_c_or_700">#0079f5</color>
@@ -25,7 +31,10 @@
<color name="forest_green">#228b22</color>
<color name="green_extra">#0ABA34</color>
- <color name="teal_500">#009688</color>
+ <color name="OLD_teal_500">#009688</color>
+ <color name="teal_500">#00a38d</color>
+ <color name="teal_500_night">#009480</color>
+ <color name="teal_500_proposal">#00a887</color>
<color name="teal_300">#4DB6AC</color>
<color name="teal_200">#80cbc4</color>
<color name="teal_900">#008175</color>
@@ -39,6 +48,8 @@
<color name="grey_800">#353535</color>
<color name="grey_900">#303030</color>
+ <color name="grey_L95">#f2f2f2</color>
+
<!--<color name="white">#FFFFFF</color>
<color name="accent">#009688</color>-->
<color name="metro_red">#DE0908</color>
@@ -59,14 +70,20 @@
<color name="line_drawn_poly">@color/red_dark</color>
<color name="bus_marker_color">@color/blue_extra</color>
+ <color name="bus_marker_color_selected">#3089e8</color>
<color name="light_blue_600">#FF039BE5</color>
<color name="light_blue_900">#FF01579B</color>
<color name="light_blue_A200">#FF40C4FF</color>
<color name="light_blue_A400">#FF00B0FF</color>
<color name="black_overlay">#66000000</color>
+ <color name="black_icon_text">#555</color>
+ <color name="text_secondary_night">#cccccc</color>
-
+ <color name="card_border">@color/grey_500</color>
<color name="colorTransparent">#00000000</color>
+ <color name="orange_700_display">@color/orange_700</color>
+ <color name="message_background_on_black">@color/grey_200</color>
+ <color name="card_background">@color/grey_050</color>
<color name="urban_bus_bg">@color/orange_500</color>
<color name="extraurban_bus_bg">@color/blue_extraurbano</color>
@@ -74,4 +91,6 @@
<color name="map_icon_background_active">@color/orange_icons_10light</color>
<color name="map_icon_background_inactive">@color/grey_400</color>
<color name="alerts_color_button">@color/orange_750_l45</color>
+ <color name="color_text_grey">@color/grey_700</color>
+ <color name="lines_nearby_color">@color/blue_700</color>
</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml
--- a/app/src/main/res/values/keys.xml
+++ b/app/src/main/res/values/keys.xml
@@ -40,4 +40,17 @@
<item>osm_legacy</item>
</array>
+ <!-- Tema scuro / chiaro da Material -->
+ <array name="day_night_keys" translatable="false">
+ <item>day</item>
+ <item>night</item>
+ <item>system</item>
+ </array>
+
+ <array name="day_night_values">
+ <item>@string/day_night_theme_set_light</item>
+ <item>@string/day_night_theme_set_dark</item>
+ <item>@string/day_night_theme_keep_system</item>
+ </array>
+
</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -156,7 +156,7 @@
<!-- used as generic title for "show what is near me" -->
<string name="near_me_title">Near me</string>
<string name="nearby_stops_message">Nearby stops</string>
- <string name="nearby_arrivals_message">Nearby connections</string>
+ <string name="nearby_arrivals_message">Nearby arrivals</string>
<string name="app_version">App version</string>
<string name="num_stops_nearby_not_number">The number of stops to show in the recent stops is invalid</string>
<string name="invalid_number">Invalid value, put a valid number</string>
@@ -299,6 +299,14 @@
<item>@string/nav_map_text</item>
<item>@string/lines</item>
</array>
+
+
+ <string name="day_night_theme_set_light">Light</string>
+ <string name="day_night_theme_set_dark">Dark</string>
+ <string name="day_night_theme_keep_system">Change it with the system</string>
+
+ <!-- title used in the preferences screen -->
+ <string name="pref_theme_day_night_title">Set dark or light theme</string>
<string name="positions_source_pref_title">Source of real time positions for buses and trams</string>
<string name="positions_source_mato_descr">MaTO (updated more frequently, might have errors)</string>
<string name="positions_source_gtfsrt_descr">GTFS RT (less frequently updated, more accurate)</string>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -71,7 +71,23 @@
</style>
<!-- styles that support night mode -->
+ <!-- copied all things inside AppTheme -->
<style name="AppThemeDayNight" parent="Theme.MaterialComponents.DayNight">
+
+ <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+ <item name="colorPrimary">@color/orange_500</item>
+ <item name="colorPrimaryDark">@color/orange_700</item>
+ <item name="colorAccent">@color/teal_500</item>
+ <item name="colorOnPrimary">@color/white</item>
+ <!-- For the preferences Fragment -->
+ <!--<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>-->
+
+ <item name="android:textColor">@color/black_800</item>
+ <!-- keep default for day, change for night-->
+ <!--
+ <item name="android:textColorPrimary">@color/grey_700</item>
+ <item name="android:textColorSecondary">@color/text_secondary</item>
+ -->
</style>
<style name="AppThemeDayNight.NoActionBar" parent="AppThemeDayNight">
diff --git a/app/src/main/res/values/theme.xml b/app/src/main/res/values/theme.xml
--- a/app/src/main/res/values/theme.xml
+++ b/app/src/main/res/values/theme.xml
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
- <style name="FavTheme" parent="AppMaterialTheme.NoActionBar">
+ <style name="FavTheme" parent="AppThemeDayNight.NoActionBar">
<item name="colorPrimary">@color/blue_500</item>
<item name="colorPrimaryDark">@color/blue_700</item>
<item name="colorAccent">@color/teal_500</item>
</style>
- <style name="AboutTheme" parent="AppMaterialTheme.NoActionBar">
+ <style name="AboutTheme" parent="AppThemeDayNight.NoActionBar">
<item name="colorPrimary">@color/teal_500</item>
<item name="colorPrimaryDark">@color/teal_900</item>
<item name="colorAccent">@color/blue_700</item>
<item name="colorOnPrimary">@color/white</item>
</style>
- <style name="MapTheme" parent="AppMaterialTheme.NoActionBar">
+ <style name="MapTheme" parent="AppThemeDayNight.NoActionBar">
<item name="colorPrimary">@color/orange_500</item>
<item name="colorPrimaryDark">@color/orange_700</item>
<item name="colorAccent">@color/teal_500</item>
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -3,6 +3,14 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.preference.PreferenceCategory android:title="@string/general_settings">
+ <androidx.preference.ListPreference
+ android:key="app_theme_day_night"
+ android:entryValues="@array/day_night_keys"
+ android:entries="@array/day_night_values"
+ android:title="@string/pref_theme_day_night_title"
+ android:summary="%s"
+ />
+
<androidx.preference.ListPreference
android:key="startup_screen_to_show"
android:entries="@array/first_screen_shown"

File Metadata

Mime Type
text/plain
Expires
Sat, May 30, 18:04 (19 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1930022
Default Alt Text
D249.1780157041.diff (302 KB)

Event Timeline