Updated scene file(s), some fixes and scene file path config 17/81217/3
authorVarun <tallytalwar@gmail.com>
Thu, 21 Jul 2016 14:24:44 +0000 (10:24 -0400)
committerSeechan Kim <cbible.kim@samsung.com>
Sun, 24 Jul 2016 22:59:47 +0000 (15:59 -0700)
- Added bubble-wrap scene file for MAPS_VIEW_NORMAL
- Added walkabout-style scene file for MAPS_VIEW_TERRAIN
- updated installed scene file path to /usr/share/maps/mapzen/scenes/*
- some small fixes

Change-Id: I6890caff635081add9199224c3d616166f31bbe9

12 files changed:
config/scene/scene.yaml [deleted file]
packaging/maps-plugin-mapzen.spec
scenes/bubble-wrap/bubble-wrap.yaml [new file with mode: 0644]
scenes/bubble-wrap/images/building-grid.gif [new file with mode: 0644]
scenes/bubble-wrap/images/poi_icons_18@2x.png [new file with mode: 0644]
scenes/walkabout-style/images/building-grid.gif [new file with mode: 0644]
scenes/walkabout-style/images/draw-test8.jpg [new file with mode: 0644]
scenes/walkabout-style/images/draw-test9.jpg [new file with mode: 0644]
scenes/walkabout-style/images/poi_icons_18@2x.png [new file with mode: 0644]
scenes/walkabout-style/images/relief-shading-environment-map.jpg [new file with mode: 0644]
scenes/walkabout-style/walkabout-style.yaml [new file with mode: 0644]
src/mapzen/tangram_view.cpp

diff --git a/config/scene/scene.yaml b/config/scene/scene.yaml
deleted file mode 100644 (file)
index f703888..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-global:
-    default_order: function() { return feature.sort_key || 0; }
-
-scene:
-    background:
-        color: '#8db7d5'
-cameras:
-    iso-camera:
-        # Manhattan
-        position: [-74.00976419448854, 40.70532700869127, 16]
-        type: isometric
-        axis: [0, 1]
-        active: false
-    perspective-camera:
-        # Manhattan
-        position: [-74.00976419448854, 40.70532700869127, 16]
-        type: perspective
-        fov: 45
-        active: true
-
-lights:
-    light1:
-        type: directional
-        origin: world
-        direction: [1, 1, -1]
-        diffuse: [.3, .3, .3, 1.]
-        ambient: [0.7, 0.7, 0.7, 1.]
-
-styles:
-    flatcolor:
-        base: polygons
-        lighting: false
-    heightglow:
-        base: polygons
-        lighting: vertex
-        shaders:
-            blocks:
-                color: "color.rgb += vec3(worldPosition().z / 800.);"
-    heightglowline:
-        base: lines
-        mix: heightglow
-    dashes:
-        base: lines
-        dash: [1, 1]
-        dash_background_color: lightgrey
-
-sources:
-    osm:
-        type: MVT
-        url:  https://vector.mapzen.com/osm/all/{z}/{x}/{y}.mvt
-        max_zoom: 16
-        url_params:
-            api_key: vector-tiles-tyHL4AY
-
-layers:
-    touch:
-        data: { source: touch }
-        line:
-          filter: { type: line }
-          draw:
-            lines:
-              color: function () { return feature.color || 'black'; }
-              order: 50
-              width: 2px
-        poly:
-            filter: { type: poly }
-            draw:
-              polygons:
-                color: magenta
-                order: 40
-        point:
-            filter: { type: point }
-            draw:
-              icons:
-                sprite: sunburst
-                collide: false
-                transition:
-                    [show, hide]:
-                        time: 0s
-
-    earth:
-        data: { source: osm }
-        draw:
-            polygons:
-                order: 0
-                color: '#f0ebeb'
-    landuse:
-        data: { source: osm }
-        filter:
-            name: true
-            any:
-                - { $zoom: { min: 9 }, area: { min: 10000000 } }
-                - { $zoom: { min: 10 }, area: { min: 3300000 } }
-                - { $zoom: { min: 12 }, area: { min: 1000000 } }
-                - { $zoom: { min: 13 }, area: { min: 10000 } }
-                - { $zoom: { min: 15 } }
-        draw:
-            polygons:
-                order: 1
-                color: '#fffffa'
-                interactive: true # currently ignored
-        green:
-            filter: { kind: [park, graveyard, cemetery, forest, recreation_ground] }
-            draw:
-                polygons:
-                    order: 2
-                    color: '#89ab84'
-        blue:
-            filter: { kind: [commercial, industrial] }
-            draw:
-                polygons:
-                    color: '#C0CDCD'
-        orange:
-            filter: { kind: [university] }
-            draw:
-                polygons:
-                    color: '#D9CFC3'
-
-    water:
-        data: { source: osm }
-        filter:
-            any:
-                # show smaller water areas at higher zooms
-                - { $zoom: { min: 0 }, area: { min: 10000000 } }
-                - { $zoom: { min: 10 }, area: { min: 1000000 } }
-                - { $zoom: { min: 12 }, area: { min: 100000 } }
-                - { $zoom: { min: 15 }, area: { min: 1000 } }
-                - { $zoom: { min: 18 } }
-        draw:
-            flatcolor:
-                order: 3
-                color: '#8db7d5'
-
-    roads:
-        data: { source: osm }
-        filter:
-            not: { kind: [rail] }
-        draw:
-            lines:
-                color: white
-                width: 12.
-                order: 'function() { return feature.sort_key + 5 || 0 }'
-        rounded:
-            filter: { $zoom: { min: 18 } }
-            draw:
-                lines:
-                    cap: round
-        routes:
-            filter: { $zoom: { max: 10 } }
-            draw:
-                lines:
-                    color: '#aaa'
-                    width: 2.
-        highway:
-            filter: { kind: highway }
-            draw:
-                lines:
-                    color: '#D16768'
-                    width: [[14, 2px], [15, 12]]
-                    outline:
-                        width: [[14, 0], [15, 2]]
-            link:
-                filter: { is_link: yes }
-                draw:
-                    lines:
-                        color: '#aaa'
-                        width: [[13, 1px], [14, 12]]
-        major_road:
-            filter: { kind: major_road, $zoom: { min: 10 } }
-            draw:
-                lines:
-                    color: '#aaaaa4'
-                    width: [[10, 1px], [13, 2px], [14, 2px], [16, 12]]
-                    outline:
-                        width: [[16, 0], [17, 1]]
-        minor_road:
-            filter: { kind: minor_road }
-            draw:
-                lines:
-                    color: '#bbbbb8'
-                    width: [[13, 1px], [14, 1px], [15, 8]]
-                    outline:
-                        width: [[17, 0], [18, 1]]
-        paths:
-            filter: { kind: path }
-            draw:
-                lines:
-                    color: '#fff'
-                    width: [[15, 1px], [17, 2px]]
-                    outline:
-                        width: 0
-        ferries:
-            filter: { kind: ferry }
-            draw:
-                lines:
-                    style: dashes
-        airports:
-            filter: { aeroway: true }
-            draw:
-                lines:
-                    color: '#f00'
-            taxiways:
-                filter: { aeroway: taxiway }
-                draw:
-                    lines:
-                        width: [[13, 1px], [14, 2.0], [17, 5.0]]
-            runways:
-                filter: { aeroway: runway }
-                draw:
-                    lines:
-                        color: [[13, '#FFE4B5'], [16, white]]
-                        width: [[11, 2.], [12, 3.], [13, 4.], [17, 8.]]
-                        order: 39
-                        cap: square
-                        outline:
-                            color: orange
-                            width: [[11, 0], [12, 1.], [17, 2.]]
-
-    buildings:
-        data: { source: osm }
-        filter: { $zoom: { min: 14 } }
-        draw:
-            polygons:
-                style: heightglow
-                order: global.default_order
-                color: [.65, .65, .63]
-        # turn interactive feature selection on for buildings with names
-        interactive:
-            filter: { name: true }
-            draw:
-                polygons:
-                    interactive: true
-        extruded:
-            filter: { $zoom: { min: 15 } }
-            draw:
-                polygons:
-                    extrude: true
-                lines:
-                    style: heightglowline
-                    width: 1.0
-                    color: [.75, .75, .73]
-                    order: function() { return feature.sort_key + 1 || 0; }
-                    extrude: true
-        high-line:
-            filter: {roof_material: grass}
-            draw:
-                polygons:
-                    style: polygons
-                    color: '#bddec5'
index c67e0837f0c3f57fbf582f2c57644cae290f34a3..c1a021eba6353c864d2049737063c349160d3c2d 100644 (file)
@@ -67,8 +67,8 @@ rm -rf %{buildroot}
 mkdir -p %{buildroot}/usr/share/license
 cp LICENSE %{buildroot}/usr/share/license/%{name}
 
-mkdir -p %{buildroot}/usr/share/config/%{name}
-cp -r config/* %{buildroot}/usr/share/config/%{name}/
+mkdir -p %{buildroot}/usr/share/maps/mapzen/scenes/
+cp -r scenes/* %{buildroot}/usr/share/maps/mapzen/scenes/
 
 %post
 /sbin/ldconfig
@@ -83,7 +83,7 @@ cp -r config/* %{buildroot}/usr/share/config/%{name}/
 %{_prefix}/lib/libtangram.so*
 %{_prefix}/lib/pkgconfig/maps-plugin-mapzen.pc
 /usr/share/license/maps-plugin-mapzen
-%{_prefix}/share/config/%{name}/*
+%{_prefix}/share/maps/mapzen/scenes/*
 
 %package devel
 Summary:    Tizen Mapzen Maps Plug-in Library (Development)
diff --git a/scenes/bubble-wrap/bubble-wrap.yaml b/scenes/bubble-wrap/bubble-wrap.yaml
new file mode 100644 (file)
index 0000000..394e503
--- /dev/null
@@ -0,0 +1,6281 @@
+Author: Geraldine Sarmiento, Nathaniel V. Kelso, Patricio Gonzalez Vivo, Brett Camper, Peter Richardson
+
+labels-global:
+    - &text_visible_continent         true
+    - &text_visible_admin             true
+    - &text_visible_populated_places  true
+    - &icon_visible_populated_places  true
+    - &text_visible_neighbourhoods    true
+    - &text_visible_neighbourhoods_e  true
+    - &text_visible_building          true
+    - &text_visible_address           true
+    - &text_visible_water_labels      true
+    - &label_visible_landuse_green    true
+    - &icon_visible_landuse_green     true
+    - &text_visible_landuse_green     true
+    - &label_visible_poi_landuse      true
+    - &icon_visible_poi_landuse       true
+    - &text_visible_poi_landuse       true
+    - &label_visible_poi_landuse_e    true
+    - &icon_visible_poi_landuse_e     true
+    - &text_visible_poi_landuse_e     true
+    - &label_visible_station          true
+    - &icon_visible_station           true
+    - &text_visible_station           true
+    - &text_visible_highway           true
+    - &text_visible_highway_e         true
+    - &text_visible_trunk_primary     true
+    - &text_visible_trunk_primary_e2  false
+    - &text_visible_trunk_primary_e   true
+    - &text_visible_secondary         true
+    - &text_visible_secondary_e       true
+    - &text_visible_tertiary          true
+    - &text_visible_tertiary_e        true
+    - &text_visible_minor_road        true
+    - &text_visible_minor_road_e      true
+    - &text_visible_service_road      true
+    - &text_visible_path              true
+    - &text_visible_piste             true
+    - &text_visible_steps             true
+    - &text_visible_aerialway         true
+    - &text_visible_shields           true
+    - &text_visible_exits             true
+
+settings:
+    cameras:
+        - &camera_settings            { type: isometric, axis: [0, 1] }
+
+    lights:
+        - &light_settings             { type: directional, direction: [1, 1, -.9], diffuse: 0.5, ambient: 0.85 }
+
+    roads:
+        - &highway1                   [0.988,0.495,0.439]
+        - &highway1_e                 [0.988,0.495,0.439]
+        - &highway_link1              [1.000,0.631,0.590]
+        - &highway_casing1            [0.859,0.859,0.859]
+        - &highway_tunnel1            [0.800,0.800,0.800]
+        - &highway_tunnel_casing1     [0.870,0.870,0.870]
+        - &highway_link_tunnel_casing1 [0.8, 0.8, 0.7]
+        - &ferry1                     '#8bb5e4'
+        - &rail1                      '#999'
+        - &rail1_e                    '#bbb'
+        - &rail2                      '#777'             # less important rail (service, sidings)
+        - &major_road1                [1, 1, 1]
+        - &major_road1b               [1.0,1.0,1.0]
+        - &major_road1c               white    #15%
+        - &major_road2                [1.0,1.0,1.0]
+        - &major_road2a               [1.0,1.0,1.0]
+        - &major_road2b               [1.0,1.0,1.0]
+        - &major_road3                [1.0,1.0,1.0]
+        - &major_road4                white
+        - &major_road5                white
+        - &major_casing1              [0.859,0.859,0.859] # same as highway_casing1
+        - &major_casing2              [0.859,0.859,0.859] # zoomed out
+        - &major_tunnel1              [.870,0.870,0.870]  # light orange (major_route1)
+        - &major_tunnel_casing1       [0.780,0.780,0.780]
+        - &major_route1               [1.000,0.631,0.590]
+        - &major_route2               [1.000,0.752,0.730] # zoomed out
+        - &minor_route                [1.000,0.631,0.590] # same as major_route
+        - &minor_road1                [0.9,0.9,0.9]       # natural earth
+        - &minor_road2                [0.9,0.9,0.9]       # natural earth, same as major_road2
+        - &minor_road3                [0.9,0.9,0.9]
+        - &minor_road4                [0.9,0.9,0.9]       # zoomed out
+        - &minor_road5                [0.9,0.9,0.9]       # zoomed out, again
+        - &minor_casing1              white               # same as highway_casing1
+        - &minor_casing2              white               # zoomed out
+        - &minor_tunnel1              [0.8, 0.8, 0.7]
+        - &minor_tunnel_casing1       white
+        - &service_road1              white
+        - &service_road2              white
+        - &service_road_casing1       [0.770,0.770,0.770]
+        - &service_road_casing2       white
+        - &path1                      [0.91,0.91,0.91]
+        - &path2                      [0.91,0.91,0.91]    # zoomed out
+        - &path_casing1               [0.875,0.875,0.875]
+        - &path_bridge_casing1        [0.870,0.870,0.870]
+        - &path_bridge_casing2        [0.870,0.870,0.870] # zoomed out
+        - &path_steps1                [0.91,0.91,0.91]
+        - &path_steps1_b              '#f0ebeb'
+        - &piste_easy                 [0.367,0.750,0.622]
+        - &piste_intermediate         [0.420,0.678,0.863]
+        - &piste_advanced             [0.450,0.450,0.450]
+        - &piste_expert               [0.450,0.450,0.450]
+
+    boundaries:
+        - &country_boundary           [1.0,1.0,1.0]
+        - &region_boundary            [1.0,1.0,1.0]
+        - &subregion_boundary         '#bbb'
+        - &city_wall                  [0.682,0.682,0.682]
+        - &retaining_wall             [0.827,0.808,0.780]
+        - &snow_fence                 [0.827,0.808,0.780]
+        - &fence                      [0.827,0.808,0.780]
+
+    areas:
+        - &scene1      '#eee'                   # map background, water
+        - &water1      [0.83, 0.83, 0.83]       # water
+        - &water2      [.75,.75,.75]            # playa
+        - &water1_o    '#9dc3de'                # water stroke
+        - &water2_o    '#9dc3de'                # water stroke 2
+        - &earth1      '#666'                   # land color
+        - &earth1_r    '#666'                   # land color road
+        - &earth2      '#e9e4e0'                # urban
+        - &earth2_v    false                    # urban
+        - &earth2_e    '#b3b3b3'                # urban early
+        - &earth2_e2   '#b3b3b3'                # urban early fade in
+        - &earth2_e3   '#bbbbbb'                # urban early fade in 3
+        - &earth2_ev   true                     # urban early visibility
+        - &green1      [0.140,0.843,0.824]      # park
+        - &green1_r    [0.140,0.843,0.824]      # roads in parks
+        - &green1_b    '#94d8d6'                # buildings in parks
+        - &green1_bo   '#7fc3c1'                # buildings in parks, outlines
+        - &green1_w    '#b7d7bf'                # wilderness area
+        - &green1_ws   '#aed0b6'                # wilderness area stroke
+        - &green1b     [0.80,0.80,0.80]         # park
+        - &green2      [0.547,0.760,0.590]      # cemetery
+        - &green2_r    [0.7,0.7,0.7]            # cemetery road
+        - &green3      [0.000,0.779,0.328]      # golf course
+        - &green4      '#526054'                # farm faint
+        - &green4_v    false                    # farm faint
+        - &green5      '#5a695c'                # farm
+        - &green6      '#648560'                # nature reserve
+        - &green7      [0.169,0.651,0.631]      # forest
+        - &green8      [0.123,0.770,0.587]      # conservation
+        - &green9      '#cfe3d4'                # forest (landcover)
+        - &green9_e    '#cfe3d4'                # forest (landcover) early
+        - &green9_v    true                     # forest (landcover) visibility
+        - &green10     '#c7d4c0'                # sports_centre
+        - &green11     '#d8ddd0'                # minor zoo related AOIs
+        - &green11_o   '#aec7b5'                # minor zoo related AOIs outline
+        - &orange1     '#bfb08e'                # stadium
+        - &orange2     '#d8ccb0'                # pitch (play field)
+        - &orange3     '#b9a597'                # racetrack (play field)
+        - &brown1      [0.814,0.692,0.570]      # university
+        - &brown1_r    [0.814,0.692,0.570]      # roads in university
+        - &brown1_b    [.65, .65, .65]          # university buildings
+        - &brown1_bo   [.8, .8, .8]             # university building outlines
+        - &brown2      '#ada497'                # school
+        - &brown3      '#c7b7a2'                # playground
+        - &red1        [0.840,0.503,0.541]      # hospital
+        - &red1_r      [0.840,0.503,0.541]      # roads in hospital
+        - &red1_b      [.65, .65, .65]          # hospital buildings
+        - &red1_bo     [.8, .8, .8]             # hospital building outlines
+        - &grey1       '#717171'                # pedestrian, retail, airport apron, parking, church
+        - &grey1_e     '#cac6c4'                # pedestrian, retail, airport apron, parking, church early zoom 14
+        - &grey1_v     true                     # pedestrian, retail, airport apron, parking, church
+        - &grey2       [0.5, 0.5, 0.5]          # airport runway
+        - &grey3       grey                     # railway
+        - &grey4       '#ffc52a'                # airport taxiway
+        - &grey5       '#ffc52a'                # airport taxiway
+        - &grey6       '#c6c6c6'                # industrial
+        - &grey6_b     [.65, .65, .65]          # industrial buildings
+        - &grey6_bo    [.8, .8, .8]             # industrial building outlines
+        - &grey7       '#ecebe9'                # pedestrian, match minor road / path color
+        - &grey7_v     true                     # pedestrian visibility
+        - &grey8       '#ecebe9'                # winter sports
+        - &grey8_v     true                     # winter sports visibility
+        - &grey9       [.7, .0, .0, 0.5]        #[.7, .7, .7]        # transit platform
+        - &grey9_o     [.5, .5, .5]             # transit platform outline
+        - &grey9_v     true                     # transit platform visibility
+        - &grey10      '#d4cce6'                # generic major landuse (theme park, resort, aquarium, winery)
+        - &grey10_o    '#bcb9c5'                # generic major landuse outline
+        - &grey11      '#d7d7d7'                # generic minor landuse (attraction, artwork)
+        - &grey11_o    '#cccccc'                # generic minor landuse outline
+        - &grey12      '#cfcfcf'                # generic minor amusements (roller coasters, rides, slide, carousel)
+        - &grey12_o    '#c5c5c5'                # generic minor amusements
+        - &purple      '#f0e1e1'                # airport
+        - &purple_v    false                    # airport
+        - &purple_b    '#c2c3c4'                # airport buildings
+        - &purple_bo   '#969798'                # airport buildings outline
+        - &mystry1     '#bfb08e'                # recreation ground
+        - &yellow1     '#e7eda8'                # beach
+        - &building1   [0.784, 0.784, 0.784]    # building
+        - &building2   [.860, .860, .860]       # building stroke
+        - &building_o  5                        # building stroke order
+        - &building_e  true                     # building stroke order
+
+    labels:
+        - &text_fill          black
+        - &text_fill2        '#555'             # WHITE
+        - &text_fill_road_e   '#555'            # WHITE
+        - &text_fill_exits    [0.920,0.398,0.340]         # motorway junctions, highway_casing1
+        - &text_fill_building '#ccc'            # WHITE
+        - &text_fill_address  '#aaa'            # HUH
+        - &text_fill_water   '#4c89b5'          # blue
+        - &text_fill_park    [0.35,0.35,0.35]   # black
+        - &text_fill_beach    [0.35,0.35,0.35]  # black
+        - &text_fill_piste    '#444'             # dark gray
+        - &text_fill_piste_e  '#666'             # dark gray early
+        - &text_fill_shield   white              # road shield fill color
+        - &text_stroke [0.870,0.870,0.870]      # land color
+        - &text_stroke_water [0.9, 0.9, 0.9]    # water stroke color
+        - &text_stroke_park  '#bddec5'          # park stroke color
+        - &text_stroke_building  [0.83, 0.83, 0.83] # building stroke color
+        - &text_stroke_address   [0.85, 0.85, 0.85]    # address stroke color
+        - &text_stroke_road1  [0.9, 0.9, 0.9]   # road stroke color highway
+        - &text_stroke_road2  [0.9, 0.9, 0.9]   # road stroke color major road
+        - &text_stroke_road3  [0.9, 0.9, 0.9]   # road stroke color major road route
+        - &text_stroke_road4  [0.9, 0.9, 0.9]   # road stroke color minor road
+        - &text_stroke_shield  '#D16768'        # road shield stroke color &highway_casing1
+        - &townspot_sprite   townspot-m-rev     # depends on land color and text settings
+        - &text_font_family  'Open Sans'        # branding in asperational Unicode, yo (or Helvetica)
+
+
+
+textures:
+    pois:
+        url: images/poi_icons_18@2x.png
+        filtering: mipmap
+        sprites:
+            # define sprites: [x origin, y origin, width, height]
+            airport: [870, 0, 38, 38]
+            aquarium: [732, 168, 38, 38]
+            art-gallery: [640, 168, 38, 38]
+            athletics-sports: [184, 168, 38, 38]
+            atm: [918, 126, 38, 38]
+            automotive-shop: [0, 168, 38, 38]
+            bakery: [548, 168, 38, 38]
+            bank: [964, 126, 38, 38]
+            bar: [230, 168, 38, 38]
+            baseball-field: [506, 84, 38, 38]
+            basketball-court: [460, 84, 38, 38]
+            beach: [644, 84, 38, 38]
+            beer-garden: [322, 210, 38, 38]
+            bench: [548, 0, 38, 38]
+            bicycle-parking: [644, 126, 38, 38]
+            bike-shop: [872, 126, 38, 38]
+            boat-ferry: [824, 0, 38, 38]
+            boat-ramp: [138, 84, 40, 38]
+            bookstore: [826, 126, 38, 38]
+            bridge: [920, 84, 38, 38]
+            buddhism: [782, 84, 38, 38]
+            building: [414, 168, 34, 34]
+            burger: [184, 210, 38, 38]
+            taqueria: [138, 210, 38, 38]
+            bus-station: [778, 0, 38, 38]
+            butcher: [920, 42, 38, 38]
+            campground: [828, 84, 38, 38]
+            candy-store: [0, 210, 38, 38]
+            capital-l: [560, 210, 16, 16]
+            capital-m: [540, 210, 12, 12]
+            capital-s: [520, 210, 10, 10]
+            capital-xl: [584, 210, 20, 20]
+            capital-xs: [506, 210, 8, 8]
+            car-dealership: [780, 126, 38, 38]
+            castle: [414, 42, 38, 38]
+            cemetery: [736, 84, 38, 38]
+            church: [230, 126, 38, 38]
+            clothing-store: [824, 168, 38, 38]
+            coffee-shop: [502, 168, 38, 38]
+            college-university: [870, 168, 38, 38]
+            convenience-store: [46, 84, 38, 38]
+            courthouse: [364, 0, 38, 38]
+            department-store: [734, 126, 38, 38]
+            drinking-water: [276, 210, 38, 38]
+            dry-cleaning: [0, 84, 38, 38]
+            electronics-store: [598, 126, 38, 38]
+            factory: [368, 168, 38, 38]
+            fire-station: [318, 0, 38, 38]
+            fitness: [874, 42, 38, 38]
+            flower-shop: [184, 126, 38, 38]
+            forest: [46, 210, 38, 38]
+            fountain: [322, 126, 38, 38]
+            garden: [690, 84, 38, 38]
+            gas-station: [960, 168, 38, 38]
+            generic: [460, 210, 38, 38]
+            gift-shop: [138, 126, 38, 38]
+            golf-course: [414, 84, 38, 38]
+            government-building: [138, 168, 38, 38]
+            grocery-store: [552, 126, 38, 38]
+            harbor-marina: [92, 168, 40, 38]
+            hardware-store: [828, 42, 38, 38]
+            historic-site: [92, 126, 38, 38]
+            hospital: [184, 0, 34, 34]
+            hotel: [732, 0, 38, 38]
+            ice-cream-shop: [368, 210, 38, 38]
+            information: [414, 210, 38, 38]
+            jewelry-store: [736, 42, 38, 38]
+            landmark: [272, 0, 38, 38]
+            laundry: [690, 42, 38, 38]
+            library: [0, 0, 38, 38]
+            light-rail: [686, 0, 38, 38]
+            lighthouse: [276, 84, 38, 38]
+            liquor-store: [506, 126, 38, 38]
+            locate-off: [492, 342, 72, 72]
+            locate-on: [412, 342, 72, 72]
+            mall: [644, 42, 38, 38]
+            market: [598, 42, 38, 38]
+            mine: [782, 42, 40, 38]
+            mobile-phone-shop: [506, 42, 38, 38]
+            mosque: [92, 0, 38, 38]
+            mountain: [230, 84, 38, 38]
+            movie-theatre: [778, 168, 38, 38]
+            museum: [46, 126, 38, 38]
+            music-store: [368, 42, 38, 38]
+            newsstand: [322, 42, 38, 38]
+            office: [598, 84, 38, 38]
+            optical-shop: [276, 42, 38, 38]
+            park: [276, 126, 38, 38]
+            parking: [690, 126, 38, 38]
+            performing-arts: [594, 168, 38, 38]
+            pet-store: [230, 42, 38, 38]
+            pharmacy: [966, 42, 38, 38]
+            photography-lab: [184, 42, 38, 38]
+            pier: [640, 0, 38, 38]
+            playground: [460, 42, 38, 38]
+            police: [226, 0, 38, 38]
+            pool: [184, 84, 38, 38]
+            post-office: [322, 168, 38, 38]
+            real-estate: [138, 42, 38, 38]
+            recycling-facility: [92, 42, 38, 38]
+            rental-car: [594, 0, 38, 38]
+            restaurant: [92, 210, 38, 38]
+            ruin: [502, 0, 38, 38]
+            salon-barber: [46, 42, 38, 38]
+            school: [552, 84, 38, 38]
+            shoe-store: [552, 42, 38, 38]
+            ski-area: [368, 126, 38, 38]
+            soccer-field: [368, 84, 38, 38]
+            spiritual-center: [276, 168, 38, 38]
+            sporting-goods-shop: [0, 42, 38, 38]
+            spring: [322, 84, 38, 38]
+            stadium: [460, 126, 38, 38]
+            subway-entrance: [456, 0, 38, 38]
+            synagogue: [46, 0, 38, 38]
+            tailor-shop: [962, 0, 38, 38]
+            tennis: [414, 126, 38, 38]
+            theme-park: [0, 126, 38, 38]
+            toilets: [874, 84, 38, 38]
+            townspot-l: [770, 210, 16, 16]
+            townspot-l-rev: [664, 210, 16, 16]
+            townspot-m: [750, 210, 12, 12]
+            townspot-m-rev: [644, 210, 12, 12]
+            townspot-s: [732, 210, 10, 10]
+            townspot-s-rev: [626, 210, 10, 10]
+            townspot-xl: [794, 210, 20, 20]
+            townspot-xl-rev: [688, 210, 20, 20]
+            townspot-xs: [716, 210, 8, 8]
+            townspot-xs-rev: [612, 210, 6, 6]
+            toy-game-store: [916, 0, 38, 38]
+            traffic-signal: [916, 168, 36, 34]
+            train-station: [410, 0, 38, 38]
+            veterinarian: [138, 0, 38, 38]
+            view-point: [686, 168, 40, 38]
+            vineyard: [46, 168, 40, 38]
+            volcano: [92, 84, 38, 38]
+            wine-bar: [230, 210, 38, 38]
+            winery: [456, 168, 38, 38]
+            zoo: [966, 84, 38, 38]
+            #
+            # UX/UI icons for map interactivity & app chrome
+            #
+            ux-current-location: [158, 342, 88, 88]
+            ux-route-arrow: [822, 210, 128, 128]
+            ux-route-start: [78, 342, 72, 92]
+            ux-route-stop: [0, 342, 72, 92]
+            ux-search-active: [252, 342, 72, 108]
+            ux-search-inactive: [332, 342, 72, 108]
+            # ux-transit-stop is currently reusing capital-xl artwork, please customize
+            ux-transit-stop: [584, 210, 20, 20]
+
+    building-grid:
+        url: images/building-grid.gif
+        filtering: mipmap
+
+sources:
+    osm:
+        # EraserMaps the app only supports MVT format tiles
+        type:  MVT #TopoJSONTiles topojson
+        #url:  http://vector.dev.mapzen.com/osm/all/{z}/{x}/{y}.mvt
+        #enforce_winding: true  #because Tangram v0.4 and tiles v0.5-pre don't play nice
+        #url:  //localhost:8080/osm/all/{z}/{x}/{y}.mvt
+        url:  https://vector.mapzen.com/osm/all/{z}/{x}/{y}.mvt?api_key=vector-tiles-HqUVidw
+        # road labels in Tangram JS are broken when overzooming, set max_zoom: 18 to preview fix
+        max_zoom: 16
+
+#    # Only enable this for local debug, should not be enabled for prod (app inserts these at runtime)
+#    # These are all in San Francisco, California
+#    #
+#    # Current location gem
+#    mz_current_location:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/9e9588228b0a604264a2/raw/b28be49bea0b7feb859eb65b588c28e9fee5ae2c/map.geojson
+#    # Route line
+#    mz_route_line:
+#        type: GeoJSON
+#        # sf to ny
+#        url: https://gist.githubusercontent.com/anonymous/30c6c1a75c168d91d90c/raw/92bfe55e622766d250b1f2f5d17bdc7c26acb956/map.geojson
+#        # local sf trip
+#        # url: https://gist.githubusercontent.com/anonymous/9a610ebda6fe4be7bccc/raw/8d217e43f2412d48d01534ba115f1e42dac72e68/map.geojson
+#    # Transit route line
+#    mz_route_line_transit:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/71ae88cbc6d62c4d141ecd6a61060050/raw/2254bbc18243f5dc609e663a580c9412a7447936/map.geojson
+#    # Pin at start of route
+#    mz_route_start:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/5262969cb7549ea69221/raw/be03f233fa323d9b5cf50ef1d8e89a1faa3750f1/map.geojson
+#    # Pin at end of route
+#    mz_route_destination:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/dbae9635dfe46796490e/raw/df55c318635a7d91b309ed40754d4738a292fd38/map.geojson
+#    # Arrow for current route location
+#    mz_route_location:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/36613092be6e2aa004fd/raw/f753d13069425199e1dea1b449ef67d723f6510e/map.geojson
+#    # Dots for transit stops in route preview
+#    mz_route_transit_stop:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/b9f16bca4a804f50faf71277d52ee4ab/raw/db13e4e765fa1ac8844b8ba02f4a0f66fe772907/map.geojson
+#    # Pins showing search result locations
+#    mz_search_result:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/57dc09eeb120919f76de/raw/43426217da3c2bae0522dc4257aaa61e4df3981e/map.geojson
+#    # Default point styling (SDK)
+#    mz_default_point:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/16324c771edfce45be0721390389b878/raw/7dbaebf17da7da8562e6c6f8768bc8cff83efa88/map.geojson
+#    # Default line styling (SDK)
+#    mz_default_line:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/26f4e8b6b34b2617b5d5533d89decb39/raw/df8e180ab4f7f19448014dccc4a755f7cfa20003/map.geojson
+#    # Default polygon styling (SDK)
+#    mz_default_polygon:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/88235c795bb44b8c45150bdd5561f947/raw/71d4fab97b6513833bf1a589167119e6169ef86d/map.geojson
+
+cameras:
+    isometric:
+        type: isometric
+
+styles:
+    dashedline:
+        base: lines
+        texcoords: true
+        shaders:
+            defines:
+                background: vec3(0.867, 0.867, 0.867)
+            blocks:
+                color: |
+                    // blend line 50/50 between two colors
+                    float t = fract(v_texcoord.y);
+                    float e = 0.1; // edge feather
+                    vec3 v = vec3(
+                        smoothstep(.0, e, t) *
+                        (1. - smoothstep(.5, .5 + e, t))
+                    );
+                    color.rgb = mix(color.rgb, background, v);
+
+    tools-tilecoords:
+        shaders:
+            blocks:
+                global: |
+                    // Varying to be added to both vertex and fragment shaders
+                    varying vec2 v_pos;
+                    #ifdef TANGRAM_FRAGMENT_SHADER
+                    vec2 TileCoords() {
+                        return fract(v_pos);
+                    }
+                    #endif
+                position: |
+                    v_pos = modelPosition().xy;
+
+    tools-aastep:
+        shaders:
+            extensions: OES_standard_derivatives
+            blocks:
+                global: |
+                    float aastep(float threshold, float value) {
+                        #ifdef TANGRAM_FRAGMENT_SHADER
+                            #ifdef TANGRAM_EXTENSION_OES_standard_derivatives
+                                float afwidth = length(vec2(dFdx(value), dFdy(value))) * 0.70710678118654757;
+                                return smoothstep(threshold - afwidth, threshold + afwidth, value);
+                            #else
+                                return step(threshold, value);
+                            #endif
+                        #else
+                            return step(threshold, value);
+                        #endif
+                    }
+
+    tools-grid:
+        mix: tools-tilecoords
+        shaders:
+            blocks:
+                global: |
+                    #ifdef TANGRAM_FRAGMENT_SHADER
+                    bool grid(vec2 st, float res, float press) {
+                        vec2 grid = fract(st * res);
+                        return (grid.x < res * press) || (grid.y < res * press);
+                    }
+                    float TileGrid(float res) {
+                        vec2 st = TileCoords() * 100. * res;
+                        float pct = 0.0;
+                        float press = 0.4 + (1.0 - fract(u_map_position.z)) * 0.1;
+                        if (grid(st, 0.01, press)) { pct += 0.5; }
+                        if (grid(st, 0.1, press)) { pct += 0.1; }
+                        return pct;
+                    }
+                    float TileGrid() {
+                        return mix(TileGrid(1.), TileGrid(2.), fract(u_map_position.z));
+                    }
+                    #endif
+
+    tools-grain:
+        shaders:
+            blocks:
+                global: |
+                    // Grain
+                    //=============================
+                    float random(vec2 p) {
+                        return fract(1e4 * sin(17.0 * p.x + p.y * 0.1) * (0.1 + abs(sin(p.y * 13.0 + p.x))));
+                    }
+                    float noise(vec2 x) {
+                        vec2 i = floor(x);
+                        vec2 f = fract(x);
+                        float a = random(i);
+                        float b = random(i + vec2(1.0, 0.0));
+                        float c = random(i + vec2(0.0, 1.0));
+                        float d = random(i + vec2(1.0, 1.0));
+                        vec2 u = f * f * (3.0 - 2.0 * f);
+                        return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;
+                    }
+                    float fbm(in vec2 p) {
+                        float s = 0.0;
+                        float m = 0.0;
+                        float a = 0.5;
+                        for(int i = 0; i < 2; i++ ) {
+                            s += a * noise(p);
+                            m += a;
+                            a *= 0.5;
+                            p *= 2.0;
+                        }
+                        return s/m;
+                    }
+                    float grain(vec2 pos) {
+                        vec2 st = pos / u_resolution.xy - vec2(.5);
+                        return dot(st, st) + (fbm(pos * 0.6) * 0.1);
+                    }
+
+    grid:
+        base: polygons
+        mix: [tools-grain, tools-grid]
+        shaders:
+            blocks:
+                filter: |
+                    color.rgb = vec3(0.899, 0.95, 1.0);
+                    color.rgb -= grain(gl_FragCoord.xy) * 0.1;
+                    color.rgb = mix(color.rgb, vec3(0.639, 0.886, 0.906), TileGrid());
+
+    water_border:
+        base: lines
+        texcoords: true
+        mix: tools-aastep
+        shaders:
+            blocks:
+                global: |
+                    float pulse(float x, float p, float w) {
+                        x = abs(x - p);
+                        if (x > w) { return 0.0; }
+                        x /= w;
+                        return (1.0 - x * x * (3.0 - 2.0 * x));
+                    }
+                width: |
+                    // Comment/Uncomment to fix the line to the border
+                    width *= 1.0 - v_texcoord.x;
+                color: |
+                    vec2 st = v_texcoord.xy;
+                    float pattern = aastep(.5, pulse(st.x, .75, .15) + pulse(st.x, .4, .10) + pulse(st.x, .1, .1));
+                    color.rgb = mix(color.rgb, vec3(0.675,0.855,0.886), pattern);
+
+    shapes-circle:
+        shaders:
+            blocks:
+                global: |
+                    // get distance field of a Circle
+                    // ================================
+                    float circleDF (vec2 st) {
+                        return dot(st,st);
+                    }
+
+    tiling-brick:
+        shaders:
+            blocks:
+                global: |
+                    // Repeats a coordinate space (st) in diferent brick-like tiles
+                    // ================================
+                    vec2 brick(vec2 st, float zoom){
+                        st *= zoom;
+                        // Here is where the offset is happening
+                        st.x += step(1., mod(st.y, 2.0)) * 0.5;
+                        return fract(st);
+                    }
+
+    pattern-dots:
+        mix: [tools-tilecoords, tiling-brick, shapes-circle, tools-aastep]
+        shaders:
+            blocks:
+                global: |
+                    #ifdef TANGRAM_FRAGMENT_SHADER
+                        float TileDots(float scale, float size) {
+                            vec2 tc = TileCoords() * scale * pow(2., floor(u_map_position.z) - abs(u_tile_origin.z));
+                            vec2 IN = brick(tc, 2.);
+                            float A = circleDF(vec2(0.5) - IN) * 1.8;
+                            float d = 0.0;
+                            if (u_map_position.z < 18.) {
+                                vec2 OUT = fract(tc * 2.);
+                                float B = circleDF(vec2(0.25) - OUT) * 7.;
+                                B = min(B, circleDF(vec2(0.75, 0.25) - OUT) * 7.);
+                                B = min(B, circleDF(vec2(0.50, 0.75) - OUT) * 7.);
+                                B = min(B, circleDF(vec2(0.00, 0.75) - OUT) * 7.);
+                                B = min(B, circleDF(vec2(1.00, 0.75) - OUT) * 7.);
+                                d = mix(A, B, pow(fract(u_map_position.z), 10.));
+                            } else {
+                                d = A;
+                            }
+                            return aastep(size, d);
+                        }
+                    #endif
+
+    dots2:
+        base: polygons
+        mix: pattern-dots
+        shaders:
+            blocks:
+                color: |
+                    color.rgb = mix(color.rgb, vec3(0.850), TileDots(45., 0.1));
+                    // size was set to 35 previously, now 45
+
+    dots-rev:
+        base: polygons
+        mix: pattern-dots
+        shaders:
+            blocks:
+                color: |
+                    color.rgb = mix(vec3(0.850), color.rgb, TileDots(45., .21));
+
+    # HSV/RGB functions
+    hsv:
+        shaders:
+            blocks:
+                global: |
+                    vec3 rgb2hsv(vec3 c)
+                    {
+                        vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
+                        vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
+                        vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
+                        float d = q.x - min(q.w, q.y);
+                        float e = 1.0e-10;
+                        return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
+                    }
+                    vec3 hsv2rgb(vec3 c)
+                    {
+                        vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
+                        vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
+                        return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
+                    }
+
+    scale-buildings:
+        shaders:
+            blocks:
+                position: |
+                    // scale buildings based on zoom
+                    float zoom = u_map_position.z;
+                    float min = .1;       // minimum building scale
+                    float midpoint = 16.; // middle of zoom range
+                    float inspeed = .1;   // number of zooms to scale buildings up
+                    float outspeed = 2.;  // number of zooms to scale buildings back down
+                    float e = 0.;
+
+                    if (zoom >= midpoint) {
+                        e = (zoom - midpoint) / (outspeed * .2);
+                    } else {
+                        e = abs(zoom - midpoint) / inspeed;
+                    }
+                    position.z *= ((1. - min) / (1. + (exp(e)))) + min;
+
+    building-grid:
+        base: polygons
+        lighting: false
+        mix: [hsv, scale-buildings]
+        texcoords: true
+        shaders:
+            uniforms:
+                u_tex_grid: building-grid
+            defines:
+                WALL_TINT: vec3(1., 3., .800)
+            blocks:
+                color: |
+                    if (dot(vec3(0., 0., 1.), worldNormal()) < 1.0 - TANGRAM_EPSILON) {
+                        // If it's a wall
+                        color.rgb = hsv2rgb(rgb2hsv(color.rgb) * WALL_TINT);
+                        color.rgb = mix(color.rgb, vec3(0.),
+                                        texture2D(u_tex_grid, v_texcoord).a);
+                    }
+
+    # building-grid-univ:
+    #     mix: building-grid
+    #     shaders:
+    #         defines:
+    #             ROOF_COLOR: vec3(0.922,0.894,0.862)
+    #             WALL_COLOR: vec3(0.658,0.617,0.576)
+
+    # building-grid-parks:
+    #     mix: building-grid
+    #     shaders:
+    #         defines:
+    #             ROOF_COLOR: vec3(0.847,0.886,0.882)
+    #             WALL_COLOR: vec3(0.627,0.722,0.718)
+
+    # building-grid-hospital:
+    #     mix: building-grid
+    #     shaders:
+    #         defines:
+    #             ROOF_COLOR: vec3(0.941,0.894,0.898)
+    #             WALL_COLOR: vec3(0.692,0.575,0.586)
+
+    # building-grid-retail:
+    #     mix: building-grid
+    #     shaders:
+    #         defines:
+    #             ROOF_COLOR: vec3(0.945,0.898,0.878)
+    #             WALL_COLOR: vec3(0.725,0.694,0.678)
+
+    building-lines:
+        base: lines
+        mix: scale-buildings
+        texcoords: true
+    lines_transparent:
+        base: lines
+        blend: overlay
+    outline_transparent:
+        base: lines
+        blend: overlay
+    polygons_transparent:
+        base: polygons
+        blend: overlay
+    icons:
+        base: points
+        texture: pois
+        blend_order: 1
+    text-blend-order:
+        base: text
+        blend_order: 1
+    ux-route-line-overlay:
+        base: lines
+        blend: overlay
+        blend_order: 0
+    ux-transit-line-overlay:
+        base: lines
+        blend: overlay
+        blend_order: 0
+    ux-location-gem-overlay:
+        base: points
+        texture: pois
+        interactive: true
+        blend: overlay
+        blend_order: 2
+    ux-icons-overlay:
+        base: points
+        texture: pois
+        interactive: true
+        blend: overlay
+        blend_order: 3
+    sdk-point-overlay:
+        base: points
+        texture: pois
+        interactive: true
+        blend: overlay
+        blend_order: 3
+    sdk-line-overlay:
+        base: lines
+        blend: overlay
+        blend_order: 0
+    sdk-polygon-overlay:
+        base: polygons
+        blend: overlay
+        blend_order: 0
+
+scene:
+    background:
+        color: *scene1
+
+layers:
+    # Map overlays for styling the server response (using special source layer names) for route line, current location, and search result pins
+    mz_route_line:
+        data: { source: mz_route_line }
+        draw:
+            ux-route-line-overlay:
+                color: '#06a6d4'
+                order: 500
+                width: [[0,3.5px],[5,5px],[9,7px],[10,6px],[11,6px],[13,8px],[14,9px],[15,10px],[16,11px],[17,12px],[18,10px]]
+    mz_route_line_transit:
+        data: { source: mz_route_line_transit }
+        draw:
+            ux-transit-line-overlay:
+                # each transit route segment could be a different "line" each with it's own color
+                # but some transit lines don't define a color, in those cases default to blue
+                # and since the color is coming from Transit.land they call it "color" instead of "colour"
+                color: function() { return feature.color || '#06a6d4'; }
+                order: 500
+                width: [[0,3.5px],[5,5px],[9,7px],[10,6px],[11,6px],[13,8px],[14,9px],[15,10px],[16,11px],[17,12px],[18,10px]]
+    mz_current_location_gem:
+        data: { source: mz_current_location }
+        draw:
+            ux-location-gem-overlay:
+                interactive: true
+                sprite: ux-current-location
+                size: 36px
+                collide: false
+                transition:
+                    [show, hide]:
+                        time: 0s
+    mz_route_location:
+        data: { source: mz_route_location }
+        draw:
+            ux-location-gem-overlay:
+                interactive: true
+                sprite: ux-route-arrow
+                size: [60px,60px]
+                collide: false
+                transition:
+                    [show, hide]:
+                        time: 0s
+    mz_route_start:
+        data: { source: mz_route_start }
+        draw:
+            ux-icons-overlay:
+                interactive: true
+                priority: 1
+                sprite: ux-route-start
+                size: [36px,46px]
+                collide: false
+                anchor: top
+                transition:
+                    [show, hide]:
+                        time: 0s
+    mz_route_destination:
+        data: { source: mz_route_destination }
+        draw:
+            ux-icons-overlay:
+                interactive: true
+                priority: 1
+                sprite: ux-route-stop
+                size: [36px,46px]
+                collide: false
+                anchor: top
+                transition:
+                    [show, hide]:
+                        time: 0s
+    mz_route_transit_stop:
+        data: { source: mz_route_transit_stop }
+        draw:
+            ux-icons-overlay:
+                interactive: true
+                sprite: ux-transit-stop
+                size: [15px,15px]
+                collide: false
+                transition:
+                     [show, hide]:
+                         time: 0s
+    mz_search_result:
+        data: { source: mz_search_result }
+        draw:
+            ux-icons-overlay:
+                interactive: true
+                sprite: ux-search-active
+                size: [36px,54px]
+                collide: false
+                anchor: top
+                transition:
+                    [show, hide]:
+                        time: 0s
+        inactive:
+            filter: { state: inactive }
+            draw:
+                ux-icons-overlay:
+                    sprite: ux-search-inactive
+    mz_dropped_pin:
+        data: { source: mz_dropped_pin }
+        draw:
+            ux-icons-overlay:
+                interactive: true
+                sprite: ux-search-active
+                size: [36px,54px]
+                collide: false
+                anchor: top
+                transition:
+                    [show, hide]:
+                        time: 0s
+
+    # Used by the SDK to place point, line, and polygon overlays on the map
+    mz_default_point:
+        data: { source: mz_default_point }
+        draw:
+            sdk-point-overlay:
+                interactive: true
+                sprite: ux-search-active
+                size: [36px,54px]
+                collide: false
+                anchor: top
+                transition:
+                    [show, hide]:
+                        time: 0s
+    mz_default_line:
+        data: { source: mz_default_line }
+        draw:
+            sdk-line-overlay:
+                color: '#06a6d4'
+                order: 503
+                width: 3px
+    mz_default_polygon:
+        data: { source: mz_default_polygon }
+        draw:
+            sdk-polygon-overlay:
+                color: [0.02,0.65,0.82,0.5]  #'#06b1e2'
+                order: 501
+            sdk-line-overlay:
+                color: '#06a6d4'
+                order: 502
+                width: 0px
+
+    # Basemap styling
+    earth:
+        data: { source: osm, layer: earth }
+        draw:
+            polygons:
+                order: function() { return feature.sort_key; }
+                color: [0.870,0.870,0.870]
+
+    water:
+        data: { source: osm, layer: water }
+        draw:
+            grid:
+                order: function() { return feature.sort_key; }
+                #color: *water1
+        ocean:
+            filter:
+                kind: ocean
+            draw:
+                grid:
+                    color: *water1
+        inland-water:
+            filter:
+                all:
+                    - kind: [lake, water, riverbank, reservoir, swimming_pool]
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 1 },  area: { min: 40000000000 } }
+                    - { $zoom: { min: 2 },  area: { min: 20000000000 } }
+                    # some weird natural earth scale set transition
+                    - { $zoom: { min: 3 },  area: { min: 80000000000 } }
+                    - { $zoom: { min: 4 },  area: { min: 5000000000 } }
+                    - { $zoom: { min: 5 },  area: { min: 700000000 } }
+                    - { $zoom: { min: 6 },  area: { min: 500000000 } }
+                    - { $zoom: { min: 7 },  area: { min: 160000000 } }
+                    - { $zoom: { min: 8 },  area: { min: 40000000 } }
+                    - { $zoom: { min: 9 },  area: { min: 10000000 } }
+                    - { $zoom: { min: 10 }, area: { min: 8000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 2000000 } }
+                    - { $zoom: { min: 12 }, area: { min: 200000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 2000 } }
+                    - { $zoom: { min: 15 } }
+            draw:
+                grid:
+                    color: *water1
+        other-water-areas:
+            filter: { not: { kind: [ocean, lake, water, reservoir, playa, swimming_pool] }, $zoom: { min: 11 }, area: { min: 100 } }
+            draw:
+                grid:
+                    color: *water1
+        playas:
+            filter: { kind: playa, $zoom: {min: 6} }
+            draw:
+                polygons:
+                    order: function() { return feature.sort_key; }
+                    color: [0.870,0.870,0.870]
+        water-boundary-ocean-early:
+            filter: { boundary: yes, kind: ocean, $zoom: {min: 1, max: 17} }
+            draw:
+                line2:
+                    style: lines
+                    order: function() { return feature.sort_key; }
+                    color: [[9,[0.396,0.833,0.920]],[10,[0.886,0.937,0.988]]]
+                    width: [[9,0.25px],[10,2px],[11,3px],[13,4px],[15,6px]]
+                lines:
+                    order: 240
+                    color: [[1,[0.698,0.800,0.820]],[11,[0.631,0.773,0.800]],[14,[0.543,0.740,0.780]]]
+                    width: [[1,0.25px],[6,0.5px],[7,0.75px],[9,0.75px],[10,1px]]
+        water-boundary-ocean-late:
+            filter: { boundary: yes, kind: ocean, $zoom: {min: 17} }
+            draw:
+                water_border:
+                    order: 240
+                    color: [[0,[0.886,0.937,0.988]]]
+                    width: 20px
+        water_boundaries-not-ocean:
+            filter: { boundary: yes, not: { kind: ocean }, $zoom: { min: 8 } }
+            draw:
+                lines:
+                    order: function() { return feature.sort_key; }
+                    # color: [[8,[0.635,0.737,0.753]],[13,[0.635,0.737,0.753]],[14,[0.569,0.722,0.749]],[15,[0.397,0.743,0.809]]]
+                    color: [[8,[0.749,0.831,0.867]],[12,[0.698,0.788,0.816]],[13,[0.698,0.784,0.812]],[14,[0.627,0.788,0.831]],[17,[0.643,0.824,0.851]]]
+                    width: [[8,0.5px],[10,0.5px],[11,0.5px],[12,0.75px],[13,1px],[14,1px],[15,1px],[16,1px],[17,1px]]
+                    join: round
+                    outline:
+                        color: [0.886,0.937,0.988]
+                        #width: [[9,0px],[10,1.5px],[11,1px],[12,1.5px],[13,1.6px],[14,2px],[15,2px],[16,3px],[18,4px]]
+                        width: [[11,0px],[12,1.2px],[13,1.6px],[14,2px],[15,2px],[16,3px],[18,4px]]
+            early:
+                filter: { $zoom: { min: 14 } }
+                draw:
+                    lines:
+                        order: 241
+            riverbank:
+                # river boundaries like the thames in london, la seine in paris
+                filter: { kind: riverbank }
+                draw:
+                    lines:
+                        color: [[8,[0.667,0.792,0.824]],[11,[0.698,0.808,0.835]],[13,[0.710,0.796,0.824]],[14,[0.522,0.792,0.855]]]
+                        width: [[9,0.5px],[10,0.75px],[11,0.75px],[12,0.8px],[13,1px],[14,1px],[15,1px],[16,1px],[17,1.5px]]
+        river:
+            #river center lines, not boundaries for polygons
+            filter: { kind: [river,canal,stream,dam,ditch,drain], $zoom: { min: 11 }, not: { is_tunnel: true } }
+            draw:
+                lines:
+                    order: function() { return feature.sort_key; }
+                    color: [[11,[0.753,0.820,0.835]],[12,[0.710,0.800,0.824]],[13,[0.886,0.937,0.988]]]
+                    width: [[8,0px],[10,0px],[11,0.75px],[12,1px],[13,1px],[14,2px],[15,3px],[16,4px],[17,5px]]
+                    join: round
+                    outline:
+                        color: [[11,[0.671,0.788,0.812]],[13,[0.710,0.800,0.824]],[14,[0.635,0.812,0.843]]]
+                        width: [[9,0px],[11,0px],[12,0px],[13,0.5px],[14,0.75px],[15,0.75px],[16,0.75px],[17,1px]]
+
+    subway-light-rail:
+        data: { source: osm, layer: transit }
+        filter: { not: { kind: [platform] }, $zoom: { min: 14 } }
+        draw:
+            lines:
+                interactive: true
+                order: function() { return feature.sort_key || 275; }
+        railway:
+            filter: { kind: [railway,train] }
+            draw:
+                lines:
+                    color: [0.588,0.671,0.698]
+                    width: [[14,0.4px],[15,0.75px],[16,1.1px],[18,2px],[19,1m]]
+        subway:
+            filter: { kind: subway }
+            draw:
+                lines:
+                    color: [0.588,0.671,0.698]
+                    width: [[14,0.4px],[15,0.75px],[16,1.3px],[17,1.5px],[18,2m]]
+        light_rail:
+            filter: { kind: [light_rail,tram], $zoom: { min: 15 } }
+            draw:
+                lines:
+                    order: 415
+                    color: [0.588,0.671,0.698]
+                    width: [[14,0px],[15,0.6px],[16,0.75px],[17,1.5px],[19,1m]]
+
+    railway-late:
+        data: { source: osm, layer: roads }
+        filter: { kind: rail, not: { railway: [subway,light_rail,tram] } }
+        draw:
+            lines:
+                interactive: true
+                order: function() { return feature.sort_key; }
+                color: [0.588,0.671,0.698]
+                width: [[12,0px],[13,0.25px],[14,0.4px],[15,0.75px],[16,0.75px],[18,1m]]
+        service:
+            filter: { service: true }
+            draw:
+                lines:
+                    color: [0.588,0.671,0.698]
+                    width: [[14,0px],[15,0.3px],[16,0.5px],[18,0.75px],[19,0.5m]]
+        z-order:
+            #filter: { $zoom: {min: 12} }
+            draw:
+                lines:
+                    # let roads sort themselves past zoom 14
+                    order: function() { return feature.sort_key; }
+                    # but give them all the same outline
+                    outline:
+                        order: 354
+
+            bridges-tunnels:
+                filter: { any: [is_bridge: yes, is_tunnel: yes] }
+                draw:
+                    lines:
+                        outline:
+                            # except bridges and tunnels, their outlines should also self-sort
+                            order: function() { return feature.sort_key || 305; }
+
+    platforms:
+        data: { source: osm, layer: transit }
+        filter: { kind: platform }
+        draw:
+            lines_transparent:
+                color: [0.569,0.690,0.722,0.5]
+                width: 5m
+                visible: *grey9_v
+        polygon_geom:
+            filter: { $geometry: polygon }
+            draw:
+                polygons_transparent:
+                    color: [0.592,0.671,0.694,0.5]
+                    visible: *grey9_v
+                lines_transparent:
+                    visible: false
+                outline_transparent:
+                    color: *grey9_o
+                    width: [[16,0px],[17,0.5px],[19,2px]]
+        z-order:
+            draw:
+                lines_transparent:
+                    order: function() { if($zoom<17) { return feature.sort_key; } else { return 435; } }
+                polygons_transparent:
+                    order: function() { if($zoom<17) { return feature.sort_key; } else { return 435; } }
+                outline_transparent:
+                    order: function() { if($zoom<17) { return feature.sort_key; } else { return 436; } }
+
+    roads:
+        data: { source: osm, layer: roads }
+        filter: { not: { kind: rail } }
+        draw:
+            lines:
+                interactive: true
+                # let roads sort themselves past zoom 14 (using server value)
+                order: function() { return feature.sort_key; }
+                # but give them all the same outline
+                outline:
+                    order: 352
+            text-blend-order:
+                visible: false    # labels are enabled by each layer below
+                font:
+                    family: *text_font_family
+                    weight: 400
+                    fill: *text_fill
+
+        natural_earth_highways:
+            filter: { source: 'naturalearthdata.com' }
+            draw:
+                lines:
+                    # Perf impact (too many vertices)
+                    #cap: round
+                    #join: round
+                    color: *highway1
+                    width: [[5, 1px], [7, 1.4px], [9, 1.5px], [14, 3px], [16, 4px], [17, 10m]]
+            major_road:
+                filter: { type: ['Secondary Highway','Road'] }
+                draw:
+                    lines:
+                        color: [0.980,0.601,0.559]
+                        width: [[5, 0.45px], [6, 0.75px], [7, 1.0px], [8, 1px]]
+            minor_road:
+                filter: { type: 'Unknown' }
+                draw:
+                    lines:
+                        color: [[12, *minor_road1], [17, *minor_road2]]
+                        width: [[12, 1.0px], [14, 1.5px], [15, 3px], [16, 5m]]
+            ferry:
+                filter: { kind: Ferry }
+                draw:
+                    lines:
+                        color: [0.702,0.843,0.933]
+                        width: 1px
+        highway:
+            filter: { kind: highway }
+            draw:
+                lines:
+                    color: [[8, *highway1], [14, *highway1], [15, [1.0,1.0,1.0]], [17, [1.0,1.0,1.0]]]
+                    width: [[8, 1px], [9, 1.25px], [11, 1.2px], [12, 1.3px], [13, 1.5px], [14, 2.25px], [15, 0.15px], [16, 5.5px], [17, 12m]]
+                    outline:
+                        color: [[11, *highway_casing1], [15,[0.988,0.495,0.439]], [17, [0.988,0.495,0.439]]]
+                        width: [[11, 0], [12, 1px], [13, 1.33px], [15, 2px], [16, 2.25px], [17, 3px], [18, 3px]]
+            early:
+                filter: { $zoom: { max: 15 } }
+                draw:
+                    lines:
+                        outline:
+                            order: 353
+            link:
+                filter: { is_link: yes } # on- and off-ramps, etc
+                draw:
+                    lines:
+                        color: [[9, *highway_link1], [14, *highway_link1], [15, [1.0,1.0,1.0]], [17, [1.0,1.0,1.0]]]
+                        width: [[9, 0px], [11, 0.5px], [13, 1px], [14, 1px], [15, 0.15px], [16, 3px], [17, 4m], [18, 5m]]
+                        cap: butt
+                        outline:
+#                            order: 355
+                            color: [[10, *highway_casing1], [16, [0.988,0.495,0.439]], [17, [0.988,0.495,0.439]]]
+                            width: [[14, 0px], [15, 0.85px], [17, 1.125px], [18, 1.5px]]
+                early:
+                    filter: { $zoom: { max: 15 } }
+                    draw:
+                        lines:
+                            order: 352
+                tunnel-link:
+                    filter: {is_tunnel: yes, $zoom: {min: 13} }
+                    draw:
+                        lines:
+                            color: *highway_tunnel1
+                            outline:
+                                color: *highway_tunnel_casing1
+            tunnel:
+                filter: {is_tunnel: yes, $zoom: {min: 13} }
+                draw:
+                    lines:
+                        # color: [[16, [0.843,0.843,0.843]]]
+                        color: [[16, [0.85,0.85,0.85]]]
+                        outline:
+                            color: [[13, [0.890,0.890,0.890]], [14, [0.870,0.870,0.870]], [16, [0.824,0.753,0.741]]]
+            highway_bridge:
+                filter: {is_bridge: yes}
+                draw:
+                    lines:
+                        cap: round
+                        outline:
+                            cap: butt
+            labels-highway-early:
+                filter: { $zoom: [7,8,9] }
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_shields
+                        text_source: ref
+                        font:
+                            fill: [1.0,1.0,1.0]
+                            weight: 600
+                            size: 9px
+                            stroke: { color: [0.976,0.541,0.490], width: 3 }
+            labels-highway-z10:
+                filter:
+                    $zoom: 10
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_shields
+                        text_source: ref
+                        font:
+                            fill: [1.0,1.0,1.0]
+                            weight: 600
+                            size: 10px
+                            stroke: { color: [0.976,0.541,0.490], width: 3 }
+            labels-highway-z11:
+                filter:
+                    $zoom: 11
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_shields
+                        text_source: ref
+                        font:
+                            fill: [1.0,1.0,1.0]
+                            weight: 600
+                            size: 11px
+                            stroke: { color: [0.976,0.541,0.490], width: 3 }
+            labels-highway-z12:
+                filter:
+                    $zoom: 12
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_shields
+                        text_source: ref
+                        font:
+                            fill: [1.0,1.0,1.0]
+                            weight: 600
+                            size: 12px
+                            stroke: { color: [0.976,0.541,0.490], width: 3 }
+            labels-highway-z13:
+                filter:
+                    $zoom: 13
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_highway
+                        #text_source: ref
+                        text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                        font:
+                            fill: [0.0,0.0,0.0]
+                            weight: 600
+                            size: 12px
+                            # stroke: { color: [0.976,0.541,0.490], width: 4 }
+            labels-highway-z14:
+                filter:
+                    $zoom: 14
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_highway
+                        #text_source: ref
+                        text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                        font:
+                            fill: [0.0,0.0,0.0]
+                            weight: 600
+                            size: 13px
+                            # stroke: { color: [0.976,0.541,0.490], width: 4 }
+            labels-highway-z15:
+                filter:
+                    $zoom: 15
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_highway
+                        font:
+                            fill: [0.0,0.0,0.0]
+                            weight: 600
+                            size: 15px
+                            stroke: { color: [1.000,1.000,1.000], width: 2 }
+            labels-highway-z16:
+                filter: { $zoom: { min: 16, max: 18 } }
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_highway
+                        font:
+                            fill: [0.0,0.0,0.0]
+                            size: 16px
+                            stroke: { color: [1.000,1.000,1.000], width: 4 }
+            labels-highway-z18:
+                filter: { $zoom: { min: 18 } }
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_highway
+                        font:
+                            fill: [0.0,0.0,0.0]
+                            size: 17px
+                            stroke: { color: [1.000,1.000,1.000], width: 4 }
+
+        major_road:
+            filter: { kind: major_road }
+            # default style
+            draw:
+                lines:
+                    color: [[8, *major_road4], [13, *major_road2], [17, *major_road1]]
+                    width: [[13, 0px], [14, 2px], [16, 2.5px], [19, 8m]]
+            trunk_primary:
+                filter: { highway: [trunk, primary] }
+                draw:
+                    lines:
+                        color: [1.0,1.0,1.0]
+                        width: [[9, 0.5px], [10, 0.5px], [11, 1.0px], [12, 1.0px], [13, 1.5px], [14, 2.5px], [15, 5px], [16, 10m], [17, 10m]]
+                        outline:
+                            color: [[13, [0.827,0.827,0.827]], [15, [1.000,0.739,0.710]]]
+                            # todo: investigate width optimizations
+                            width: [[14, 0px], [15, 1.75px], [16, 2px], [17, 3px]]
+                early:
+                    filter: { $zoom: { max: 16 } }
+                    draw:
+                        lines:
+                            order: 352
+                            outline:
+                                order: function() { return feature.sort_key + 2; }
+                    primary:
+                        filter: { kind: [primary] }
+                        draw:
+                            lines:
+                                outline:
+                                    order: function() { return feature.sort_key + 1; }
+                routes:
+                    filter: { ref: true }
+                    draw:
+                        lines:
+                            color: [[9,*major_route1], [14,*major_route1], [15,[1.0,1.0,1.0]], [16,[1.0,1.0,1.0]]]
+                            #order: function() { return feature.sort_key + 1; }
+                            # todo confirm widths
+                            width: [[9, 1.0px], [10, 1.0px], [11, 1.2px], [12, 1.25px], [13, 1.5px], [14, 1.6px], [15, 0.15px], [16, 5.25px], [17, 12m]]
+                            outline:
+                                color: [[13, [0.870,0.870,0.870]], [15, [0.976,0.612,0.573]]]
+                                width: [[13, 0], [15, 2px], [16, 2px], [17, 3px]]
+                    early:
+                        filter: { $zoom: { max: 16 } }
+                        draw:
+                            lines:
+                                order: function() { return feature.sort_key + 2; }
+                                outline:
+                                    order: 353
+                    # no national-routes layer because it's not different than the basic style
+                    tunnel:
+                        filter: {is_tunnel: yes, $zoom: {min: 13} }
+                        draw:
+                            lines:
+                                color: *major_tunnel1
+                                outline:
+                                    color: *major_tunnel_casing1
+                                    width: [[13, 0.5px], [15, 2px], [16, 2px], [17, 3px]]
+                    labels-trunk_primary-route-z14:
+                        filter: { $zoom: [14] }
+                        draw:
+                            text-blend-order:
+                                priority: 53
+                                visible: *text_visible_trunk_primary_e2
+                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                font:
+                                    fill: [0.0,0.0,0.0]
+                                    size: 13px
+                                    stroke: { color: [0.95,0.95,0.95], width: 0.1px }
+                    labels-trunk_primary-route-z15:
+                        filter: { $zoom: [15] }
+                        draw:
+                            text-blend-order:
+                                priority: 53
+                                visible: *text_visible_trunk_primary
+                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                font:
+                                    fill: [0.0,0.0,0.0]
+                                    weight: 600
+                                    size: 15px
+                                    stroke: { color: [0.95,0.95,0.95], width: 0.1px }
+                    labels-trunk_primary-route-z16:
+                        filter: { $zoom: { min: 16 } }
+                        draw:
+                            text-blend-order:
+                                priority: 53
+                                visible: *text_visible_trunk_primary
+                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                font:
+                                    fill: [0.0,0.0,0.0]
+                                    weight: 600
+                                    size: 16px
+                                    stroke: { color: [1.000,1.000,1.000], width: 4px }
+                labels-trunk_primary-z11:
+                    filter:
+                        $zoom: [11]
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.4,0.4,0.4]
+                                size: 10px
+                                # stroke: { color: [1.000,0.631,0.590], width: 3 }
+                labels-trunk_primary-z12:
+                    filter:
+                        $zoom: [12]
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.4,0.4,0.4]
+                                size: 11px
+                                # stroke: { color: [1.000,0.631,0.590], width: 3 }
+                labels-trunk_primary-z13:
+                    filter:
+                        $zoom: [13]
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.25,0.25,0.25]
+                                size: 12px
+                                stroke: { color: *text_stroke, width: 2 }
+                labels-trunk_primary-z14:
+                    filter:
+                        $zoom: [14]
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.10,0.10,0.10]
+                                size: 13px
+                                stroke: { color: [1.00,1.00,1.00], width: 2 }
+                labels-trunk_primary-z15:
+                    filter: { $zoom: [15] }
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.0,0.0,0.0]
+                                size: 14px
+                                stroke: { color: [1.00,1.00,1.00], width: 3 }
+                labels-trunk_primary-z16:
+                    filter: { $zoom: [16] }
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            font:
+                                fill: [0.0,0.0,0.0]
+                                size: 15px
+                                stroke: { color: [1.00,1.00,1.00], width: 3 }
+                labels-trunk_primary-z17:
+                    filter: { $zoom: [17] }
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            font:
+                                fill: [0.0,0.0,0.0]
+                                size: 16px
+                                stroke: { color: [1.00,1.00,1.00], width: 3 }
+                labels-trunk_primary-z18:
+                    filter: { $zoom: { min: 18 } }
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            font:
+                                fill: [0.0,0.0,0.0]
+                                size: 17px
+                                stroke: { color: [1.00,1.00,1.00], width: 3 }
+            link:
+                filter: { is_link: yes } # on- and off-ramps, etc
+                draw:
+                    lines:
+                        width: [[9, 0px], [10, 0.5px], [14, 2px], [16, 4m], [17, 5m], [18, 6m]]
+                        outline:
+                            color: [[10, [0.827,0.827,0.827]], [13, [0.827,0.827,0.827]], [15, [1.000,0.739,0.710]]]
+                            width: [[10, 0], [11, 1px], [14, 1px], [16, 1.5px], [17, 2px]]
+            tunnel:
+                filter: {is_tunnel: yes, $zoom: {min: 13} }
+                draw:
+                    lines:
+                        color: *major_tunnel1
+                        outline:
+                            color: *major_tunnel_casing1
+            secondary:
+                filter: { highway: secondary }
+                draw:
+                    lines:
+                        color: [1.0,1.0,1.0]
+                        width: [[11, 0.65px], [12, 0.75px], [13, 1.25px], [14, 2px], [15, 5px], [16, 10m], [17, 10m]]
+                        outline:
+                            color: [[15, [1.000,0.739,0.710]]]
+                            width: [[14, 0], [15, 1.75px], [16, 2px], [17, 3px]]
+                early:
+                    filter: { $zoom: { max: 16 } }
+                    draw:
+                        lines:
+                            order: 352
+                            outline:
+                                order: 353 #function() { return feature.sort_key + 2; }
+                routes:
+                    filter: { ref: true, $zoom: { min: 12} }
+                    draw:
+                        lines:
+                            #order: function() { return feature.sort_key + 2; }
+                            color: [1.0,1.0,1.0]
+                            width: [[11, 0.65px], [12, 0.75px], [13, 1.25px], [14, 2px], [15, 5px], [16, 12m], [17, 12m]]
+                            outline:
+                                color: [0.827,0.827,0.827]
+                                width: [[14, 0px], [15,  1.75px], [16, 2px], [17, 3px]]
+                    early:
+                        filter: { $zoom: { max: 15 } }
+                        draw:
+                            lines:
+                                order: function() { return feature.sort_key + 2; }
+                                outline:
+                                    order: 353
+                    tunnel:
+                        filter: {is_tunnel: yes, $zoom: {min: 13} }
+                        draw:
+                            lines:
+                                color: *major_tunnel1
+                                outline:
+                                    color: *major_tunnel_casing1
+                    labels-secondary-routes:
+                        filter: { $zoom: [13] }
+                        draw:
+                            text-blend-order:
+                                priority: 54
+                                visible: *text_visible_secondary_e
+                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                font:
+                                    # need fill here?
+                                    size: 12px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    labels-secondary-routes-z15:
+                        filter: { $zoom: { min: 15 } }
+                        draw:
+                            text-blend-order:
+                                priority: 54
+                                visible: *text_visible_secondary_e
+                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                font:
+                                    # need fill here?
+                                    weight: 600
+                                    size: 14px
+                                    stroke: { color: *text_stroke, width: 4 }
+                in_park:
+                    filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden] }
+                    draw:
+                        lines:
+                            color: [1.0,1.0,1.0]
+                            outline:
+                                color: [[14, [0.800,0.851,0.847]], [15, [0.678,0.796,0.792]]]
+                                width: [[12, 0px], [13, 0.5px], [14, 1.0px], [15, 1.0px], [16, 1.5px], [18, 3.0px]]
+                    golf_course:
+                        filter: { landuse_kind: golf_course }
+                        draw:
+                            lines:
+                                outline:
+                                    color: [0.757,0.839,0.788]
+                    nature_reserve:
+                        filter: { landuse_kind: nature_reserve }
+                        draw:
+                            lines:
+                                outline:
+                                    color: [0.635,0.819,0.742]
+                    conservation:
+                        filter: { landuse_kind: conservation }
+                        draw:
+                            lines:
+                                outline:
+                                    color: orange
+                    zoo:
+                        filter: { landuse_kind: zoo }
+                        draw:
+                            lines:
+                                outline:
+                                    color: pink
+                labels-secondary-z13:
+                    filter:
+                        $zoom: [13]
+                    draw:
+                        text-blend-order:
+                            priority: 54
+                            visible: *text_visible_secondary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.5,0.5,0.5]
+                                size: 11px
+                                stroke: { color: *text_stroke, width: 2 }
+                labels-secondary-z14:
+                    filter:
+                        $zoom: [14]
+                    draw:
+                        text-blend-order:
+                            priority: 54
+                            visible: *text_visible_secondary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.30,0.30,0.30]
+                                size: 12px
+                                stroke: { color: [1.00,1.00,1.00], width: 2 }
+                labels-secondary-z15:
+                    filter:
+                        $zoom: [15]
+                    draw:
+                        text-blend-order:
+                            priority: 54
+                            visible: *text_visible_secondary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.10,0.10,0.10]
+                                size: 13px
+                                stroke: { color: [1.00,1.00,1.00], width: 2 }
+                labels-secondary-z16:
+                    filter: { $zoom: { min: 16, max: 18 } }
+                    draw:
+                        text-blend-order:
+                            priority: 54
+                            visible: *text_visible_secondary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.0,0.0,0.0]
+                                size: 14.5px
+                                stroke: { color: [1.00,1.00,1.00], width: 3 }
+                labels-secondary-z18:
+                    filter: { $zoom: { min: 18 } }
+                    draw:
+                        text-blend-order:
+                            priority: 54
+                            visible: *text_visible_secondary
+                            #text_source: ref
+                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            font:
+                                # need a fill color here?
+                                fill: [0.15,0.15,0.15]
+                                size: 16px
+                                stroke: { color: [1.00,1.00,1.00], width: 3 }
+            tertiary:
+                filter: { highway: [tertiary, tertiary_link] }
+                draw:
+                    lines:
+                        color: [1.0,1.0,1.0]
+                        width: [[11, 0.5px], [12, 0.5px], [13, 0.65px], [14, 1.0px], [15, 2px], [16, 8m], [19, 10m]]
+                        outline:
+                            color: [0.827,0.827,0.827]
+                            # todo: look at zoom 13 width
+                            width: [[15, 0], [16, 1.0px], [18, 3.5px]]
+                early:
+                    filter: { $zoom: { max: 15 } }
+                    draw:
+                        lines:
+                            order: 352
+                            outline:
+                                order: function() { return feature.sort_key + 3; }
+                routes:
+                    filter: { ref: true, $zoom: { min: 12} }
+                    draw:
+                        lines:
+                            color: [1.0,1.0,1.0]
+                            width: [[11, 0.5px], [12, 0.5px], [13, 0.65px], [14, 1.0px], [15, 2px], [16, 8m], [19, 10m]]
+                            outline:
+                                color: [0.827,0.827,0.827]
+                                width: [[15, 0], [16, 1.0px], [18, 3.5px]]
+                    early:
+                        filter: { $zoom: { max: 15 } }
+                        draw:
+                            lines:
+                                order: function() { return feature.sort_key + 3; }
+                                outline:
+                                    order: 353
+                    tunnel:
+                        filter: {is_tunnel: yes, $zoom: {min: 13} }
+                        draw:
+                            lines:
+                                color: *major_tunnel1
+                                outline:
+                                    color: *major_tunnel_casing1
+                link:
+                    filter: { is_link: yes } # on- and off-ramps, etc
+                    draw:
+                        lines:
+                            color: *major_road1
+                            width: [[10, 0.5px], [14, 2px], [16, 4m], [17, 5m], [18, 6m]]
+                            outline:
+                                color: [[12,*major_casing2]]
+                                width: [[12, 0], [14, 1px], [16, 1.5px], [17, 2px]]
+                in_park:
+                    filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden] }
+                    draw:
+                        lines:
+                            #width: [[11, 0.0px], [12, .5px], [14, 1.5px], [16, 2.0px], [19, 7m]]
+                            color: [[12, [0.9,0.9,0.9]], [13, [0.9,0.9,0.9]], [14, [0.98,0.98,0.98]]]
+                            outline:
+                                color: [[14, [0.800,0.851,0.847]], [15, [0.678,0.796,0.792]]]
+                                width: [[12, 0px], [13, 0.5px], [14, 1.0px], [15, 1.0px], [16, 1.5px], [18, 3.0px]]
+                    golf_course:
+                        filter: { landuse_kind: golf_course }
+                        draw:
+                            lines:
+                                outline:
+                                    color: [0.698,0.835,0.765]
+                    nature_reserve:
+                        filter: { landuse_kind: nature_reserve }
+                        draw:
+                            lines:
+                                outline:
+                                    color: [0.635,0.819,0.742]
+                    conservation:
+                        filter: { landuse_kind: conservation }
+                        draw:
+                            lines:
+                                outline:
+                                    color: orange
+                    zoo:
+                        filter: { landuse_kind: zoo }
+                        draw:
+                            lines:
+                                outline:
+                                    color: pink
+                labels-tertiary-z13:
+                    filter: { $zoom: [13] }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.5,0.5,0.5]
+                                size: 10px
+                                stroke: { color: [1.00,1.00,1.00], width: 1 }
+                labels-tertiary-z14:
+                    filter: { $zoom: [14] }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.5,0.5,0.5]
+                                size: 12px
+                                stroke: { color: [1.00,1.00,1.00], width: 1 }
+                labels-tertiary-z15:
+                    filter: { $zoom: [15] }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.3,0.3,0.3]
+                                size: 12px
+                                stroke: { color: [1.00,1.00,1.00], width: 1 }
+                labels-tertiary-z16:
+                    filter: { $zoom: [16] }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.3,0.3,0.3]
+                                size: 14px
+                                stroke: { color: [1.00,1.00,1.00], width: 2 }
+                labels-tertiary-z17:
+                    filter: { $zoom: { min: 17, max: 18 } }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.15,0.15,0.15]
+                                size: 15px
+                                stroke: { color: [1.00,1.00,1.00], width: 2 }
+                labels-tertiary-z18:
+                    filter: { $zoom: { min: 18 } }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.15,0.15,0.15]
+                                size: 15px
+                                stroke: { color: [1.00,1.00,1.00], width: 2 }
+        minor_road:
+            filter: { kind: minor_road, not: { highway: service, aeroway: [runway, taxiway] } }
+            draw:
+                lines:
+                    color: [[12, [0.9,0.9,0.9]], [13, [0.9,0.9,0.9]], [14, [1.0,1.0,1.0]]]
+                    width: [[12, 0.65px], [13, 0.75px], [14, 0.85px], [15, 2px], [16, 8m], [17, 9m]]
+                    # todo look at when color starts (z11 not z12) and width changes
+                    #width: [[11, 0.5px], [12, 0.75px], [13, 1.0px], [14, 1.2px], [15, 2.5px], [16, 8m]]
+                    outline:
+                        color: [0.843,0.843,0.843]
+                        width: [[15, 0], [16, 2px], [17, 3px]]
+            early:
+                filter: { $zoom: { max: 16 } }
+                draw:
+                    lines:
+                        order: 350
+                        outline:
+                            order: 351
+            # Is this junk code?
+            round:
+                filter: { $zoom: { min: 17 } }
+                draw:
+                    lines:
+                        cap: round
+                        join: round
+
+            in_park:
+                filter: { landuse_kind: [park,protected_area,nature_reserve,conservation,golf_course,garden,wood,farmland,farm] }
+                draw:
+                    lines:
+                        #todo: is the width here right?
+                        #width: [[11, 0.5px], [12, 1.0px], [13, 1.2px], [14, 1.75px], [15, 2.5px], [16, 8m]]
+                        color: [[12, [0.9,0.9,0.9]], [13, [0.96,0.96,0.96]], [14, [1.0,1.0,1.0]]]
+                        outline:
+                            color: [[14, [0.800,0.851,0.847]], [15, [0.678,0.796,0.792]]]
+                            #todo: is the width here right?
+                            width: [[13, 0px], [14, 0.25px], [17, 2.0px], [18, 4.0px]]
+                golf_course:
+                    filter: { landuse_kind: golf_course }
+                    draw:
+                        lines:
+                            outline:
+                                color: [0.757,0.839,0.788]
+                nature_reserve:
+                    filter: { landuse_kind: nature_reserve }
+                    draw:
+                        lines:
+                            outline:
+                                color: [0.635,0.819,0.742]
+                conservation:
+                    filter: { landuse_kind: conservation }
+                    draw:
+                        lines:
+                            outline:
+                                color: orange
+                zoo:
+                    filter: { landuse_kind: zoo }
+                    draw:
+                        lines:
+                            outline:
+                                color: pink
+
+            # in_residential:
+            #     filter: { landuse_kind: residential }
+            #     draw:
+            #         lines:
+            #             outline:
+            #                 color: red
+            in_university:
+                filter: { landuse_kind: university }
+                draw:
+                    lines:
+                        color: [[12, [0.9,0.9,0.9]], [13, [0.96,0.96,0.96]], [14, [1.0,1.0,1.0]]]
+                        outline:
+                            color: [0.806,0.763,0.717]
+                            width: [[13, 0px], [14, 0.5px], [17, 2.0px], [18, 4.0px]]
+            in_hospital:
+                filter: { landuse_kind: hospital }
+                draw:
+                    lines:
+                        color: [[12, [0.9,0.9,0.9]], [13, [0.96,0.96,0.96]], [14, [1.0,1.0,1.0]]]
+                        outline:
+                            color: [0.818,0.702,0.713]
+                            width: [[13, 0px], [14, 0.5px], [17, 2.0px], [18, 4.0px]]
+
+            tunnel:
+                filter: {is_tunnel: yes, $zoom: {min: 13} }
+                draw:
+                    lines:
+                        color: [0.870,0.870,0.870]
+                        outline:
+                            color: [0.790,0.790,0.790]
+            minor_road_bridge:
+                filter: { is_bridge: yes }
+                draw:
+                    lines:
+                        cap: round
+                        outline:
+                            cap: butt
+            labels-minor_road-z15:
+                filter: { $zoom: 15 }
+                draw:
+                    text-blend-order:
+                        priority: 56
+                        visible: *text_visible_minor_road_e
+                        text_source: name
+                        font:
+                            fill: [0.30,0.30,0.30]
+                            size: 12px
+                            stroke: { color: [1.00,1.00,1.00], width: 1 }
+            labels-minor_road-z16:
+                filter: { $zoom: 16 }
+                draw:
+                    text-blend-order:
+                        priority: 56
+                        visible: *text_visible_minor_road_e
+                        text_source: name
+                        font:
+                            fill: [0.35,0.35,0.35]
+                            size: 14px
+                            stroke: { color: [1.00,1.00,1.00], width: 2 }
+            labels-minor_road-z17:
+                filter: { $zoom: { min: 17, max: 18 } }
+                draw:
+                    text-blend-order:
+                        priority: 56
+                        visible: *text_visible_minor_road_e
+                        text_source: name
+                        font:
+                            fill: [0.25,0.25,0.25]
+                            size: 14px
+                            stroke: { color: [1.00,1.00,1.00], width: 2 }
+            labels-minor_road-z18:
+                filter: { $zoom: { min: 18 } }
+                draw:
+                    text-blend-order:
+                        priority: 56
+                        visible: *text_visible_minor_road
+                        text_source: name
+                        font:
+                            # needs a fill color?
+                            fill: [0.15,0.15,0.15]
+                            size: 15px
+                            stroke: { color: [1.00,1.00,1.00], width: 2 }
+        service_road:
+            filter: { kind: minor_road, highway: service }
+            draw:
+                lines:
+                    color: [[12, [0.9,0.9,0.9]], [14, [0.9,0.9,0.9]], [15, [1.0,1.0,1.0]]]
+                    # todo: consider starting at z13 with 0.5px
+                    width: [[12, 0.65px], [13, 0.75px], [14, 0.85px], [15, 1.25px], [16, 2.0px], [18, 6m]]
+                    outline:
+                        color: [0.827,0.827,0.827]
+                        width: [[15, 0px], [16, 0.5px], [17, 1.0px], [18, 1.75px]]
+            in_park:
+                filter: { landuse_kind: [park,forest,nature_reserve,conservation,golf_course,garden] }
+                draw:
+                    lines:
+                        #todo: is the color necc here?
+                        color: [0.976,0.976,0.976]
+                        outline:
+                            color: [[14, [0.800,0.851,0.847]], [15, [0.678,0.796,0.792]]]
+                            width: [[13, 0px], [14, 0.5px], [17, 2.0px], [18, 4.0px]]
+                golf_course:
+                    filter: { landuse_kind: golf_course }
+                    draw:
+                        lines:
+                            outline:
+                                color: [0.698,0.835,0.765]
+                nature_reserve:
+                    filter: { landuse_kind: nature_reserve }
+                    draw:
+                        lines:
+                            outline:
+                                color: [0.635,0.819,0.742]
+                conservation:
+                    filter: { landuse_kind: conservation }
+                    draw:
+                        lines:
+                            outline:
+                                color: orange
+                zoo:
+                    filter: { landuse_kind: zoo }
+                    draw:
+                        lines:
+                            outline:
+                                color: pink
+            in_cemetery_garden:
+                filter: { landuse_kind: [cemetery,garden] }
+                draw:
+                    lines:
+                        outline:
+                            color: [0.737,0.816,0.753]
+                            # todo: consider starting z13 with 0.25px
+                            width: [[13, 0px], [14, 0.5px], [17, 2.0px], [18, 4.0px]]
+            in_university:
+                filter: { landuse_kind: university }
+                draw:
+                    lines:
+                        #todo: is this necc here?
+                        color: [1.0,1.0,1.0]
+                        outline:
+                            color: [0.806,0.763,0.717]
+                            width: [[13, 0px], [14, 0.5px], [17, 2.0px], [18, 4.0px]]
+            in_hospital:
+                filter: { landuse_kind: hospital }
+                draw:
+                    lines:
+                        #todo: is this necc here?
+                        color: [1.0,1.0,1.0]
+                        outline:
+                            color: [0.818,0.702,0.713]
+                            width: [[13, 0px], [14, 0.5px], [17, 2.0px], [18, 4.0px]]
+            labels-service_road:
+                filter: { $zoom: 17 }
+                draw:
+                    text-blend-order:
+                        priority: 57
+                        visible: *text_visible_service_road
+                        text_source: name
+                        font:
+                            # need fill color?
+                            fill: [0.25,0.25,0.25]
+                            size: 13px
+                            stroke: { color: [1.00,1.00,1.00], width: 2 }
+            labels-service_road-z18:
+                filter: { $zoom: { min: 18 } }
+                draw:
+                    text-blend-order:
+                        priority: 57
+                        visible: *text_visible_service_road
+                        text_source: name
+                        font:
+                            # need fill color?
+                            fill: [0.15,0.15,0.15]
+                            size: 14px
+                            stroke: { color: [1.00,1.00,1.00], width: 2 }
+        path:
+            filter:
+                all:
+                    - kind: [path,portage_way]
+                not:
+                    - highway: [steps, track]
+                    - man_made: [pier]
+            draw:
+                lines:
+                    color: [[14, [0.97,0.97,0.97]],[16,[0.96,0.96,0.96]]]
+                    width: [[14, 0.6px], [16, 1px], [17, 2.5m]]
+                    outline:
+                        color: [0.799,0.799,0.799]
+                        width: [[14, 0], [16, 0.5px], [18, 3px]]
+            pedestrian:
+                filter: { highway: pedestrian }
+                draw:
+                    lines:
+                        color: [[13, [0.97,0.97,0.97]], [16,[0.96,0.96,0.96]]]
+                        width: [[13, 1.5], [15, 1.5], [17, 3m]]
+                        outline:
+                            color: [0.799,0.799,0.799]
+                            width: [[17, 0.5], [18, 1]]
+            bridge:
+                filter: { is_bridge: yes }
+                draw:
+                    lines:
+                        color: [[15, [1.0,1.0,1.0]], [18, [1.0,1.0,1.0]]]
+                        width: [[15, 1.5px], [16, 4m], [17, 2m], [18, 2m]]
+                        cap: round
+                        outline:
+                            color: [[15,*path_bridge_casing2],[16,*path_bridge_casing1]]
+                            width: [[15, 0px], [16, 1.0px], [18, 3px]]
+                            cap: butt
+            in_park:
+                # should `forest` and `wood` be included?
+                filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden] }
+                draw:
+                    lines:
+                        color: [[14,white], [16,white], [17, [0.95,0.95,0.95]]]
+                        outline:
+                            color: [[16, [0.725,0.847,0.847]], [17, [0.663,0.847,0.843]]]
+                            width: [[15, 0px], [16, 0.5px], [18, 3px]]
+                golf_course:
+                    filter: { landuse_kind: golf_course }
+                    draw:
+                        lines:
+                            outline:
+                                color: [0.698,0.835,0.765]
+                nature_reserve:
+                    filter: { landuse_kind: nature_reserve }
+                    draw:
+                        lines:
+                            outline:
+                                color: [0.635,0.819,0.742]
+                conservation:
+                    filter: { landuse_kind: conservation }
+                    draw:
+                        lines:
+                            outline:
+                                color: orange
+            in_cemetery_garden:
+                filter: { landuse_kind: [cemetery,garden] }
+                draw:
+                    lines:
+                        outline:
+                            color: [0.737,0.816,0.753]
+                            width: [[15, 0px], [16, 0.5px], [18, 3px]]
+            in_zoo:
+                filter: { landuse_kind: zoo }
+                draw:
+                    lines:
+                        outline:
+                            color: [0.708,0.881,0.831]
+                            width: [[15, 0px], [16, 0.5px], [18, 3px]]
+            in_university:
+                filter: { landuse_kind: university }
+                draw:
+                    lines:
+                        color: [[14, [0.97,0.97,0.97]], [16,[0.96,0.96,0.96]]]
+                        outline:
+                            color: [0.806,0.763,0.717]
+                            # todo: consider starting 14 at 0px so z15 has a little width
+                            width: [[15, 0px], [16, 0.5px], [18, 3px]]
+            in_hospital:
+                filter: { landuse_kind: hospital }
+                draw:
+                    lines:
+                        color: [[14,[0.90,0.90,0.90]],[16,[0.96,0.96,0.96]]]
+                        outline:
+                            color: [0.847,0.788,0.796]
+                            # todo: consider starting 14 at 0px so z15 has a little width
+                            width: [[15, 0px], [16, 0.5px], [18, 3px]]
+            labels-path:
+                filter: { $zoom: { min: 17 } }
+                draw:
+                    text-blend-order:
+                        priority: 58
+                        visible: *text_visible_path
+                        text_source: name
+                        font:
+                            # need a fill color?
+                            fill: [0.25,0.25,0.25]
+                            size: 12px
+                            stroke: { color: [1.00,1.00,1.00], width: 1 }
+        track:
+            filter: { kind: path, highway: track }
+            draw:
+                lines:
+                    color: [[13, *minor_road4], [15, *minor_road3]]
+                    width: [[13, 0.5px], [14, 1.0px], [15, 1.0px], [16, 6m]]
+                    #color: [[13,*minor_road4],[16,*minor_road3]]
+                    #width: [[13, 1.0], [15, 1.5], [17, 3m]]
+                    cap: butt
+                    join: round
+                    outline:
+                        order: 354
+                        color: *minor_casing1
+                        width: [[15, 0px], [16, 0.5px], [17, 1.0px], [18, 2.0px]]
+            bridge:
+                filter: { is_bridge: yes }
+                draw:
+                    lines:
+                        width: [[15, 3.5], [17, 3m]]
+                        cap: round
+                        outline:
+                            color: [[15,*minor_casing2],[16,*minor_casing1]]
+                            width: [[15, 0.5px], [16, 1.0px], [18, 2px]]
+                            cap: butt
+            in_park:
+                filter: { landuse_kind: [park,national_park,nature_reserve,conservation,golf_course,garden] }
+                draw:
+                    lines:
+                        width: [[13, 0.5px], [14, 0.5px], [15, 1.0px], [16, 6m]]
+                        outline:
+                            color: [[16,*green1_r],[17,*major_casing1]]
+                            width: [[15, 0px], [16, 0.25px], [17, 0.5px], [18, 1.0px], [19, 2.0px]]
+        steps:
+            filter:
+                all:
+                    - kind: path
+                    - highway: steps
+            draw:
+                dashedline:
+                    order: function() { return feature.sort_key; }
+                    color: [0.97,0.97,0.97]
+                    width: [[14,0.6px],[16,2px],[17,4px],[18,5px],[19,8px],[20,10px]]
+                    outline:
+                        color: [0.867,0.867,0.867]
+                        width: 2px
+            in_park:
+                filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden] }
+                draw:
+                    dashedline:
+                        color: [1.0,1.0,1.0]
+                        outline:
+                            color: [0.867,0.867,0.867]
+            in_university:
+                filter: { landuse_kind: university }
+                draw:
+                    dashedline:
+                        color: [1.0,1.0,1.0]
+                        outline:
+                            color: [0.867,0.867,0.867]
+            in_hospital:
+                filter: { landuse_kind: hospital }
+                draw:
+                    dashedline:
+                        color: [1.0,1.0,1.0]
+                        outline:
+                            color: [0.867,0.867,0.867]
+            labels-steps:
+                filter: { $zoom: { min: 17 } }
+                draw:
+                    text-blend-order:
+                        priority: 59
+                        visible: *text_visible_steps
+                        text_source: name
+                        font:
+                            # need fill color?
+                            size: 12px
+                            stroke: { color: [1.00,1.00,1.00], width: 1 }
+        winter_sport_pistes:
+            filter: { kind: piste }
+            draw:
+                lines:
+                    order: 388   # We override the server value here because Eraser Map is also a special Ski Map
+                    cap: round
+                    join: round
+                    color: '#909090'
+                    width: [[13,0px],[14,0.5px],[15, 1px], [16, 1.5px], [18, 3m]]
+                text-blend-order:
+                    priority: 18
+                    visible: true
+                    font:
+                        fill: *text_fill_piste
+                        size: 12px
+                        stroke: { color: *grey8, width: 4 }
+            early:
+                filter: { $zoom: { max: 15 } }
+                draw:
+                    text-blend-order:
+                        visible: false
+            early-z15:
+                filter: { $zoom: [15] }
+                draw:
+                    text-blend-order:
+                        font:
+                            fill: *text_fill_piste_e
+                            size: 11px
+            easy:
+                filter: { piste_difficulty: easy }
+                draw:
+                    lines:
+                        color: *piste_easy
+            intermediate:
+                filter: { piste_difficulty: intermediate }
+                draw:
+                    lines:
+                        color: *piste_intermediate
+            advanced:
+                filter: { piste_difficulty: advanced }
+                draw:
+                    lines:
+                        color: *piste_advanced
+                    text-blend-order:
+                        text_source: function() { if( feature.name ){ return '◆ ' + feature.name; } else { return '◆'; } }
+            expert:
+                filter: { piste_difficulty: expert }
+                draw:
+                    lines:
+                        color: *piste_expert
+                    text-blend-order:
+                        text_source: function() { if( feature.name ){ return '◆◆ ' + feature.name; } else { return '◆◆'; } }
+        pier:
+            filter: { kind: path, man_made: pier }
+            draw:
+                lines:
+                    color: [0.993,0.993,0.993]
+                    width: [[13, 0px], [14, 0.5px],[15, 1.5px], [16, 2.5px],[17, 3px],[18, 3m]]
+                    outline:
+                        color: [0.675,0.855,0.886]
+                        width: [[15, 0px],[16,0.65px], [17, 0.75px], [18, 1px], [19, 1.5px]]
+        racetrack:
+            filter: { kind: racetrack }
+            draw:
+                lines:
+                    interactive: true
+                    cap: round
+                    join: round
+                    color: [0.600,0.667,0.627]
+                    width: [[13,0.5px],[14,1px],[15, 1px], [16, 1.5px], [18, 3px], [19, 5px]]
+        airport-lines:
+            filter: { kind: minor_road, aeroway: [runway,taxiway] }
+            draw:
+                lines:
+                    color: [[10,[0.4,0.4,0.4]],[11,[0.50,0.50,0.50]],[12,[0.7,0.7,0.7]],[13,[0.75,0.75,0.75]],[14,[0.95,0.95,0.95]]]
+                    cap: butt
+                    width: [[9,0px],[10,0.75px],[11,1.25px],[12,2px],[13,4px],[14,8px],[15,16px],[16,32px],[17,60m]]
+                    # outline:
+                    #     color: [17,[0.95,0.95,0.95]]
+                    #     width: [17,[60m]]
+            # Features come in at zoom 9, but include mostly minor airports without POIs until z13
+            early:
+                filter: { $zoom: { max: 12 }, not: { landuse_kind: [aerodrome, runway, taxiway] } }
+                draw:
+                    lines:
+                        visible: false
+            not-round:
+                filter: { $zoom: { min: 17 } }
+                draw:
+                    lines:
+                        cap: butt
+            taxiway:
+                filter: { aeroway: taxiway }
+                draw:
+                    lines:
+                        color: [[13,[0.913,0.913,0.913]],[15,[0.923,0.923,0.923]],[16,[0.95,0.95,0.95]]]
+                        width: [[13,1px],[14,2px],[15,3px],[16,7px],[17,20m]]
+                        outline:
+                            color: [0.778,0.778,0.797]
+                early:
+                    filter: { $zoom: { max: 13 } }
+                    draw:
+                        lines:
+                            visible: false
+        ferry:
+            filter: { kind: ferry }
+            draw:
+                lines:
+                    color: [0.702,0.843,0.933]
+                    width: [[12, 0.5px], [14, 1.0px], [15, 1.0px], [16, 1.25px]]
+                    outline:
+                        width: 0
+        aerialway:
+            filter: { kind: aerialway }
+            draw:
+                lines:
+                    interactive: true
+                    color: '#444'
+                    width: [[14, 0.5px], [15, 1.0px], [16, 2m]]
+            gondola_cable_car:
+                filter: { aerialway: [gondola, cable_car] }
+                draw:
+                    lines:
+                        color: [0.498,0.302,0.243]
+                        width: [[12, 0.5px], [13, 0.5px], [14, 0.6px], [15, 1px], [16, 2px]]
+                    lines_transparent:
+                        color: [0.498,0.302,0.243,0.15]
+                        width: [[12, 0px], [13, 5px], [14, 8px], [15, 10px], [16, 12px]]
+            chair_lift:
+                filter: { aerialway: chair_lift }
+                draw:
+                    lines:
+                        color: [0.493,0.541,0.666]
+                        width: [[12, 0.5px], [13, 0.5px], [14, 0.6px], [15, 1px], [16, 1px], [16, 2px], [18, 3m]]
+                    lines_transparent:
+                        color: [0.635,0.698,0.859,0.20]
+                        width: [[12, 0px], [13, 5px], [14, 8px], [15, 10px], [16, 12px], [18, 20px]]
+            aerialway-labels:
+                filter: { $zoom: { min: 14 } }
+                draw:
+                    text-blend-order:
+                        priority: 59
+                        visible: *text_visible_aerialway
+                        text_source: name
+                        font:
+                            fill: *text_fill
+                            size: 12px
+                            stroke: { color: *grey8, width: 4 }
+                minor:
+                    filter: { not: { aerialway: [gondola,cable_car,chair_lift] }, $zoom: { max: 17 } }
+                    draw:
+                        text-blend-order:
+                            visible: false
+                early_gondola:
+                    filter: { $zoom: [14], aerialway: [gondola,cable_car] }
+                    draw:
+                        text-blend-order:
+                            font:
+                                weight: 600
+                later:
+                    filter: { $zoom: { min: 15 } }
+                    draw:
+                        text-blend-order:
+                            font:
+                                weight: 600
+        bridges-tunnels:
+            filter: { any: [is_bridge: yes, is_tunnel: yes] }
+            draw:
+                lines:
+                    outline:
+                        # except bridges and tunnels, their outlines should also self-sort
+                        order: function() { return feature.sort_key; }
+
+    buildings:
+        data: { source: osm, layer: buildings }
+        filter:
+            not: { location: underground }
+        # set default footprint and extrusion draw properties, but don't draw by default (rules below will turn visibility on)
+        draw:
+            polygons:
+                visible: false
+                order: 329
+                color: *building2
+            lines:
+                style: lines
+                order: 330
+                visible: false
+                color: [[14,[0.70,0.70,0.70]],[17,[0.65, 0.65, 0.65]]]
+                width: [[14, 0.6px], [15, 0.65px], [16,0.75px], [18, 1.25px]]
+
+        # turn interactive feature selection on for buildings with names
+        interactive:
+            filter: { name: true }
+            draw: { polygons: { interactive: true } }
+
+        # building footprints, pre-extrusion
+        footprints:
+            filter:
+                $zoom: { max: 18 }
+                any:
+                    # show footprints for buildings at least one zoom level before they will be extruded
+                    - { $zoom: [13], area: { min: 50000 } }
+                    - { $zoom: [13], height: { min: 250 } }
+                    - { $zoom: [13], volume: { min: 200000 } }
+                    - { $zoom: [14], area: { min: 5000 } }
+                    - { $zoom: [14], height: { min: 190 } }
+                    - { $zoom: [14], volume: { min: 150000 } }
+                    - { $zoom: [15], height: { min: 100 } }
+                    - { $zoom: [15], area: { min: 500 } }
+                    - { $zoom: [15], volume: { min: 100000 } }
+                    - { $zoom: [16], area: { min: 100 } }
+                    - { $zoom: [16], volume: { min: 50000 } }
+                    - { $zoom: { min: 17 } }
+            draw:
+                polygons:
+                    visible: true
+                lines:
+                    visible: true
+
+        # 3d buildings
+        extrude:
+            filter:
+                any:
+                    - { $zoom: [15], height: { min: 190 } }
+                    - { $zoom: [15], area: { min: 5000 } }
+                    - { $zoom: [15], volume: { min: 100000 } }
+                    - { $zoom: [16], height: { min: 100 } }
+                    - { $zoom: [16], area: { min: 3500 } }
+                    - { $zoom: [16], volume: { min: 50000 } }
+                    - { $zoom: [17], area: { min: 500 } }
+                    - { $zoom: [17], volume: { min: 15000 } }
+                    - { $zoom: { min: 18 } }
+            draw:
+                polygons:
+                    visible: true
+                    order: 438
+                    style: building-grid
+                    extrude: function() { return feature.height || 20; }
+                    color: [0.892,0.880,0.878]
+                lines:
+                    visible: true
+                    order: 439
+                    style: building-lines
+                    extrude: function() { return feature.height || 20; }
+
+        # landuse-specific rules
+        in_park:
+            filter: { landuse_kind: [park,forest,nature_reserve,conservation,golf_course,garden] }
+            draw:
+                polygons:
+                    color: [0.864,0.910,0.905]
+
+            # golf_course:
+            #     filter: { landuse_kind: golf_course }
+            #     draw:
+            #         polygons:
+            #             color: *building2
+            # nature_reserve:
+            #     filter: { landuse_kind: nature_reserve }
+            #     draw:
+            #         polygons:
+            #             color: *building2
+            # conservation:
+            #     filter: { landuse_kind: conservation }
+            #     draw:
+            #         polygons:
+            #             color: *building2
+            # zoo:
+            #     filter: { landuse_kind: zoo }
+            #     draw:
+            #         polygons:
+            #             color: *building2
+        in_university:
+            filter: { landuse_kind: [university,school] }
+            draw:
+                polygons:
+                    color: [0.950,0.917,0.883]
+                lines:
+                    color: *brown1_bo
+        in_hospital:
+            filter: { landuse_kind: hospital }
+            draw:
+                polygons:
+                    color: [0.976,0.908,0.913]
+        in_airport:
+            filter: { landuse_kind: [aerodrome, runway, taxiway] }
+            draw:
+                polygons:
+                    color: *purple_b
+                lines:
+                    color: *purple_bo
+                    width: [[14,0.5px],[15,0.5px],[17,0.5px],[18,0.75px],[19,0.25m]]
+        in_retail:
+           filter: { landuse_kind: retail }
+           draw:
+                polygons:
+                    color: [0.945, 0.898, 0.878]
+
+    buildings-labels:
+        data: { source: osm, layer: buildings }
+        filter:
+            all:
+                - { $zoom: { min: 17 } }
+                - $geometry: point
+                - not: { location: underground, kind: address }
+                - name: true
+#                - kind: [false, building, university, college, school, kindergarten]
+            any:
+                - { $zoom: [16], area: { min: 5000 } }
+                - { $zoom: [16], area: { min: 5000 } }
+                - { $zoom: [16], area: { min: 10000 }, landuse_kind: true }
+                - { $zoom: [16], area: { min: 7000 }, kind: [university, college, school, kindergarten] }
+                - { $zoom: [16], volume: { min: 50000 }, name: true }
+                - { $zoom: [17], area: { min: 3000 } }
+                - { $zoom: [17], area: { min: 2000 }, kind: [university, college, school, kindergarten] }
+                - { $zoom: [18], area: { min: 1000 } }
+                - { $zoom: [18], kind: [university, college, school, kindergarten] }
+                - { $zoom: [19], area: { min: 200 } }
+                - { $zoom: { min: 19 }, kind: [university, college, school, kindergarten] }
+                - { $zoom: { min: 20 }, area: true }
+        draw:
+            text-blend-order:
+                interactive: true
+                move_into_tile: true
+                priority: 70
+                order: 7
+                font:
+                    fill: '#666'
+                    family: *text_font_family
+                    style: italic
+                    size: 11px
+                    stroke: { color: *text_stroke_address, width: 1 }
+        building_labels-z15-z16-z17:
+            filter: { $zoom: [15,16,17] }
+            draw: { text-blend-order: { font: { size: 12px, stroke: { width: 2 } } } }
+        building_labels-z18:
+            filter: { $zoom: [18,19] }
+            draw: { text-blend-order: { font: { size: 12px, weight: 600, stroke: { width: 3 } } } }
+        building_labels-z20-up:
+            filter: { $zoom: { min: 20 } }
+            draw: { text-blend-order: { font: { size: 14px, weight: 600, stroke: { width: 3 }  } } }
+        building-labels-z16:
+            filter: function() { if( $zoom == 16 && feature.name.length > 20 ) { return true; } else { return false; } }
+            draw:
+                text-blend-order:
+                    visible: false
+        building-labels-z17:
+            filter: function() { if( $zoom == 17 && feature.name.length > 30 ) { return true; } else { return false; } }
+            draw:
+                text-blend-order:
+                    visible: false
+        building-labels-z20+:
+            filter: { $zoom: { min: 20 } }
+            draw:
+                text-blend-order:
+                    text_source: function() { if( feature.addr_housenumber ) { return feature.name + '\n' + feature.addr_housenumber; } else { return feature.name; } }
+    address-labels:
+        data: { source: osm, layer: buildings }
+        filter:
+            $zoom: { min: 20 }
+            any:
+                - kind: address
+                - { label_position: yes, addr_housenumber: true, name: false }
+        draw:
+            text-blend-order:
+                interactive: true
+                order: 7
+                visible: *text_visible_address
+                text_source: addr_housenumber
+                font:
+                    fill: *text_fill_address
+                    family: *text_font_family
+                    style: italic
+                    size: 10px
+                    stroke: { color: *text_stroke_address, width: 4 }
+
+    boundaries:
+        data: { source: osm, layer: boundaries }
+        # country subdivisions (states, provinces)
+        draw:
+            lines:
+                interactive: true
+                order: function() { return feature.sort_key; }
+#                color: red
+#                width: [[9, 1px], [14, 2px], [16, 3px], [17, 8m]]
+        country:
+            filter:
+                any:
+                    - type: country
+                    - kind: nation
+                    - admin_level: 2
+            draw:
+                lines:
+                    interactive: true
+                    color: *country_boundary
+                    width: [[1, 0.5px], [2, 1.0px], [4, 1.5px], [9, 2.5px], [14, 3.5px], [16, 4.5px], [17, 14m]]
+            water:
+                filter: { maritime_boundary: yes }
+                draw:
+                    lines:
+                        visible: false
+        region:
+            filter:
+                any:
+                    - type: state
+                    # territorial here is probably a hack
+                    - kind: [state, department, region, provincial, territorial, macroregion]
+                    - admin_level: 4
+            draw:
+                lines:
+                    interactive: true
+                    color: *region_boundary
+                    width: [[0, 0.5px], [2, 1.0px], [5, 1.25px], [6, 1.5px], [7, 1.75px], [9, 3.5px], [14, 5.5px], [16, 6.5px], [17, 16m]]
+            water:
+                filter: { maritime_boundary: yes }
+                draw:
+                    lines:
+                        visible: false
+            early:
+                filter: { scalerank: [0,3,4,5,6,7,8,9,10], $zoom: { max: 8 } }
+                draw:
+                    lines:
+                        visible: false
+        city_walls:
+            filter: { kind: city_wall }
+            draw:
+                lines:
+                    color: *city_wall
+                    width: [[12, 0.75px], [13, 1.0px], [14, 1.2px], [15, 2.0px], [16, 2.5px], [19, 6m]]
+        retaining_wall:
+            filter: { kind: retaining_wall }
+            draw:
+                lines:
+                    color: *retaining_wall
+                    width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 4m]]
+        snow_fence:
+            filter: { kind: snow_fence }
+            draw:
+                lines:
+                    color: *snow_fence
+                    width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 1.5m]]
+        fence:
+            filter: { kind: fence }
+            draw:
+                lines:
+                    color: *fence
+                    width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 1.5m]]
+
+    places:
+        data: { source: osm, layer: places }
+        filter: { not: { kind: [ocean, sea] } }
+        draw:
+            text-blend-order:
+                visible: false    # labels are enabled by each layer below
+                font:
+                    family: *text_font_family
+                    # weight: 500
+                    fill: *text_fill
+
+        continent:
+            filter: { name: true, kind: [continent], $zoom: {max: 5} }
+            draw:
+                text-blend-order:
+                    visible: *text_visible_continent
+                    font:
+                        size: 14px
+                        weight: 700
+                        # stroke: { color: *text_stroke, width: 4 }
+                        transform: uppercase
+
+        country-z2:
+            filter:
+                all:
+                    - kind: [country]
+                    - $zoom: [2]
+                    - name: ["United States of America","Brasil","中华人民共和国","Россия","Canada","Kalaallit Nunaat","Ísland","Australia","India","日本","Guam","Indonesia","South Africa","مصر","Nigeria","Kenya"]
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        fill: [0.30,0.30,0.30]
+                        weight: 400
+                        size: 10px
+                        transform: uppercase
+        country-z3:
+            filter: { name: true, population: true, kind: [country], $zoom: [3] }
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        fill: [0.20,0.20,0.20]
+                        size: 11px
+                        weight: 600
+                        # stroke: { color: *text_stroke, width: 4 }
+                        transform: uppercase
+    #            icons:
+    #                size: [[13, 12px], [15, 18px]]
+    #                interactive: true
+    #                sprite: *townspot_sprite
+            early-ones:
+                # US, Brazil, China, Russia, Canada, Greenland, Iceland, Australia, India, Japan, Guam, Indonesia, South Africa, Egypt, Nigeria, Kenya
+                filter: { not: { name: ["United States of America","Brasil","中华人民共和国","Россия","Canada","Kalaallit Nunaat","Ísland","Australia","India","日本","Guam","Indonesia","South Africa","مصر","Nigeria","Kenya"] }, $zoom: {min: 3, max: 4} }
+                draw:
+                    text-blend-order:
+                        visible: false
+        country-z4:
+            filter: { name: true, population: true, kind: [country], $zoom: [4] }
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        size: 12px
+                        weight: 600
+                        fill: [0.40,0.40,0.40]
+                        # stroke: { color: *text_stroke, width: 4 }
+                        transform: uppercase
+    #            icons:
+    #                size: [[13, 12px], [15, 18px]]
+    #                interactive: true
+    #                sprite: *townspot_sprite
+            early-ones-z4:
+                filter: { name: [Nederland,Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,Crna Gora,Македонија,The Gambia,Burundi,Swaziland,الإمارات العربية المتحدة,العراق,Singapore,El Salvador,Belize,Trinidad and Tobago, Saint Lucia, Montserrat,Anguilla,República Dominicana,Bahamas,British Virgin Islands,Antigua and Barbuda,Grenada,Sint Maarten,Saint Kitts and Nevis,Cayman Islands,België - Belgique - Belgien], $zoom: {min: 4, max: 5} }
+                draw:
+                    text-blend-order:
+                        visible: false
+        country-z5:
+            filter:
+                all:
+                    - name: true
+                    - population: true
+                    - kind: [country]
+                    - $zoom: [5]
+                any:
+                    - { population: { min: 5000000 } }
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        size: 13px
+                        weight: 400
+                        fill: [0.25,0.25,0.25]
+                        # stroke: { color: *text_stroke, width: 4 }
+                        transform: uppercase
+    #            icons:
+    #                size: [[13, 12px], [15, 18px]]
+    #                interactive: true
+    #                sprite: *townspot_sprite
+            early-ones-z5:
+                filter: { name: [Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,El Salvador,Belize,België - Belgique - Belgien], $zoom: {min: 5, max: 6} }
+                draw:
+                    text-blend-order:
+                        visible: false
+        country-z6:
+            # South Ossetia and Abkhazia aren't countries (they are disputed areas)
+            filter: { name: true, kind: [country], $zoom: [6] }
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        size: 14px
+                        weight: 600
+                        fill: [0.25,0.25,0.25]
+                        # stroke: { color: *text_stroke, width: 4 }
+                        transform: uppercase
+            small-ones-z6:
+                filter: { name: [Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,België - Belgique - Belgien,Хуссар Ирыстон,Аҧсны - Абхазия], $zoom: {min: 6, max: 7} }
+                draw:
+                    text-blend-order:
+                        visible: false
+        country-z7:
+            # South Ossetia and Abkhazia aren't countries (they are disputed areas)
+            filter: { name: true, kind: [country], $zoom: { min: 7, max: 9 } }
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        size: 16px
+                        weight: 600
+                        fill: [0.25,0.25,0.25]
+                        # stroke: { color: *text_stroke, width: 4 }
+                        transform: uppercase
+            small-ones-z7:
+                filter: { name: [Liechtenstein,San Marino,Civitatis Vaticanæ,Хуссар Ирыстон,Аҧсны - Абхазия], $zoom: {min: 7, max: 8} }
+                draw:
+                    text-blend-order:
+                        visible: false
+
+        region-z4:
+            filter: { name: true, kind: [state], $zoom: [4], not: { name: ["Western Cape","Eastern Cape","Northern Cape","North West","Limpopo","KwaZulu-Natal","Hamburg","Freie und Hansestadt Hamburg","Neuchâtel","Nordrhein-Westfalen","Haute-Normandie","Baden-Württemberg","Bayern","Sachsen-Anhalt","Berlin","Mecklenburg-Vorpommern","Schleswig-Holstein","Brandenburg","Niedersachsen","Saarland","Thüringen","Hessen","Sachsen"] } }
+            draw:
+                text-blend-order:
+                    priority: 14
+                    visible: *text_visible_admin
+                    text_source: 'name:short'
+                    font:
+                        size: 10px
+                        weight: 300
+                        fill: [0.3,0.3,0.3]
+
+        region-z5:
+            filter: { name: true, kind: [state], $zoom: [5], not: { name: ["Western Cape","Eastern Cape","Northern Cape","North West","Limpopo","KwaZulu-Natal","Hamburg","Freie und Hansestadt Hamburg","Neuchâtel","Nordrhein-Westfalen","Haute-Normandie","Baden-Württemberg","Bayern","Sachsen-Anhalt","Berlin","Mecklenburg-Vorpommern","Schleswig-Holstein","Brandenburg","Niedersachsen","Saarland","Thüringen","Hessen","Sachsen"] } }
+            draw:
+                text-blend-order:
+                    priority: 14
+                    visible: *text_visible_admin
+                    text_source: 'name:short'
+                    font:
+                        size: 13px
+                        weight: 300
+                        fill: [0.3,0.3,0.3]
+
+        region-z6:
+            filter: { name: true, kind: [state], $zoom: [6], not: { name: ["Western Cape","Eastern Cape","Northern Cape","North West","Limpopo","KwaZulu-Natal","Hamburg","Freie und Hansestadt Hamburg","Neuchâtel","Nordrhein-Westfalen","Haute-Normandie","Baden-Württemberg","Bayern","Sachsen-Anhalt","Berlin","Mecklenburg-Vorpommern","Schleswig-Holstein","Brandenburg","Niedersachsen","Saarland","Thüringen","Hessen","Sachsen"] } }
+            draw:
+                text-blend-order:
+                    priority: 14
+                    visible: *text_visible_admin
+                    text_source: 'name:short'
+                    font:
+                        size: 15px
+                        weight: 300
+                        fill: [0.4,0.4,0.4]
+
+        region:
+            filter: { name: true, kind: [state], $zoom: {min: 7, max: 9} }
+            draw:
+                text-blend-order:
+                    priority: 14
+                    visible: *text_visible_admin
+                    text_source: function() { if(feature["name:short"]) { return feature["name"]; } else { return ""; } }
+                    font:
+                        size: 14px
+                        weight: 300
+                        fill: [0.3,0.3,0.3]
+                        #stroke: { color: *text_stroke, width: 4 }
+                        transform: uppercase
+    #            icons:
+    #                size: [[13, 12px], [15, 18px]]
+    #                interactive: true
+    #                sprite: *townspot_sprite
+            pesky:
+                filter: { name: ["Western Cape","Eastern Cape","Northern Cape","North West","Limpopo","KwaZulu-Natal","Hamburg","Freie und Hansestadt Hamburg","Neuchâtel","Nordrhein-Westfalen","Haute-Normandie","Baden-Württemberg","Bayern","Sachsen-Anhalt","Berlin","Mecklenburg-Vorpommern","Schleswig-Holstein","Brandenburg","Niedersachsen","Saarland","Thüringen","Hessen","Sachsen"], $zoom: {min: 7, max: 8} }
+                draw:
+                    text-blend-order:
+                        visible: false
+            small-ones:
+                filter: { name: ["Delaware","New Jersey","Connecticut","Rhode Island","Massachusetts","New Hampshire","Vermont"], $zoom: {min: 7, max: 8} }
+                draw:
+                    text-blend-order:
+                        text_source: function() { return feature["name:abbreviation"] || feature["name"]; }
+                        font: { transform: uppercase }
+
+        populated-places:
+            draw:
+                icons:
+                    interactive: true
+                    priority: 5
+                text-blend-order:
+                    interactive: true
+                    anchor: bottom
+                    priority: 6
+
+            populated-places-natural-earth-z2:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [2], scalerank: 0 }
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_populated_places
+                        offset: [0, 3px] # half icon size
+                        font:
+                            size: 10px
+                            fill: *text_fill
+                            # stroke: { color: *text_stroke, width: 4 }
+                    icons:
+                        size: 5px
+                        visible: *icon_visible_populated_places
+                        sprite: townspot-s-rev
+
+            populated-places-natural-earth-z3:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [3] }
+                z3places-1:
+                    filter: { scalerank: [0] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            font:
+                                size: 11px
+                                fill: *text_fill
+                                # stroke: { color: *text_stroke, width: 4 }
+                        icons:
+                            size: 5px
+                            sprite: townspot-s-rev
+                z3places-2:
+                    filter: { scalerank: [1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 8
+                            font:
+                                size: 9px
+                                fill: *text_fill
+                                # stroke: { color: *text_stroke, width: 4 }
+                        icons:
+                            priority: 7
+                            size: 5px
+                            sprite: townspot-s-rev
+
+            populated-places-natural-earth-z4:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [4] }
+                z4places-1:
+                    filter: { scalerank: [0] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            font:
+                                size: 13px
+                                fill: *text_fill
+                                # stroke: { color: *text_stroke, width: 4 }
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+
+                z4places-2:
+                    filter: { scalerank: [1,2] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 8
+                            font:
+                                size: 10px
+                                fill: *text_fill
+                                # stroke: { color: *text_stroke, width: 4 }
+                        icons:
+                            priority: 7
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+
+            populated-places-natural-earth-z5:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [5] }
+                z5places-1:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 8
+                            font:
+                                size: 13px
+                        icons:
+                            priority: 7
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 4px] # half icon size
+                                priority: 6
+                            icons:
+                                priority: 5
+                                size: 8px
+                                sprite: capital-l
+
+                z5places-2:
+                    filter: { scalerank: [2] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 12
+                            font:
+                                size: 11px
+                        icons:
+                            priority: 11
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 3px] # half icon size
+                                priority: 10
+                            icons:
+                                priority: 9
+                                size: 6px
+                                sprite: capital-m
+
+                z5places-3:
+                    filter: { scalerank: [3,4] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 18
+                            font:
+                                fill: [0.25,0.25,0.25]
+                                size: 10px
+                        icons:
+                            priority: 17
+                            size: 5px
+                            sprite: townspot-s-rev
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 3px] # half icon size
+                                priority: 16
+                            icons:
+                                priority: 15
+                                size: 6px
+                                sprite: capital-m
+
+            populated-places-natural-earth-z6:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [6] }
+                z6places-1:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 4px] # half icon size
+                            priority: 8
+                            font:
+                                fill: *text_fill
+                                size: 15px
+                        icons:
+                            priority: 7
+                            size: 8px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-l-rev
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 4px] # half icon size
+                                priority: 6
+                            icons:
+                                sprite: capital-l
+                                size: 8px
+                                priority: 5
+
+                z6places-2:
+                    filter: { scalerank: [2,3,4] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 12
+                            font:
+                                fill: *text_fill
+                                size: 12px
+                        icons:
+                            priority: 11
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 3px] # half icon size
+                                priority: 10
+                            icons:
+                                size: 6px
+                                sprite: capital-m
+                                priority: 9
+
+                z6places-3:
+                    filter: { scalerank: [5,6] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 16
+                            font:
+                                fill: [0.25,0.25,0.25]
+                                size: 10px
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 15
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 3px] # half icon size
+                                priority: 14
+                            icons:
+                                size: 6px
+                                sprite: capital-m
+                                priority: 13
+
+            populated-places-natural-earth-z7:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [7] }
+                z7places-1:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 4px] # half icon size
+                            priority: 8
+                            font:
+                                fill: *text_fill
+                                size: 16px
+                        icons:
+                            size: 8px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-l-rev
+                            priority: 7
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 4px] # half icon size
+                                priority: 6
+                            icons:
+                                size: 8px
+                                sprite: capital-l
+                                priority: 5
+
+                z7places-2:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 14
+                            font:
+                                fill: *text_fill
+                                size: 13px
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 13
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 4px] # half icon size
+                                priority: 12
+                            icons:
+                                size: 8px
+                                sprite: capital-l
+                                priority: 11
+
+                z7places-3:
+                    filter: { scalerank: [6,7] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 18
+                            font:
+                                fill: [0.25,0.25,0.25]
+                                size: 11px
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 17
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 3px] # half icon size
+                                priority: 16
+                            icons:
+                                size: 6px
+                                sprite: capital-m
+                                priority: 15
+
+            populated-places-osm-z8:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [8]
+
+                z8places-1:
+                    filter:
+                        any:
+                            - { population: { min: 1000000 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 8
+                            font:
+                                size: 16px
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 7
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 4px] # half icon size
+                                priority: 6
+                            icons:
+                                size: 8px
+                                sprite: capital-l
+                                priority: 5
+                z8places-2:
+                    filter:
+                        any:
+                            - { population: { min: 150000, max: 999999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 12
+                            font:
+                                size: 13px
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 11
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 3px] # half icon size
+                                priority: 10
+                            icons:
+                                size: 6px
+                                sprite: capital-m
+                                priority: 9
+
+                z8places-3:
+                    filter:
+                        any:
+                            - { population: { min: 85000, max: 149999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 16
+                            font:
+                                fill: [0.25,0.25,0.25]
+                                size: 11px
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 15
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 3px] # half icon size
+                                priority: 14
+                            icons:
+                                size: 6px
+                                sprite: capital-m
+                                priority: 13
+
+                z8places-4:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 84999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 20
+                            font:
+                                fill: [0.30,0.30,0.30]
+                                size: 10px
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 19
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 3px] # half icon size
+                                priority: 18
+                            icons:
+                                size: 5px
+                                sprite: capital-m
+                                priority: 17
+                z8places-5:
+                    filter:
+                        all:
+                            - { population: { max: 50000 } }
+                        any:
+                            - { capital: yes }
+                            - { state_capital: yes }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 20
+                            font:
+                                fill: [0.30,0.30,0.30]
+                                size: 10px
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 19
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 3px] # half icon size
+                                priority: 18
+                            icons:
+                                size: 5px
+                                sprite: capital-s
+                                priority: 17
+
+            populated-places-natural-earth-z8-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [8], population: { max: 50000 } }
+                draw: { text-blend-order: { font: { fill: *text_fill } } }
+                z8places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 4px] # half icon size
+                            priority: 24
+                            font:
+                                size: 16px
+                        icons:
+                            size: 8px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-l-rev
+                            priority: 23
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                offset: [0, 4px] # half icon size
+                                priority: 22
+                            icons:
+                                size: 8px
+                                sprite: capital-l
+                                priority: 21
+
+                z8places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            font:
+                                size: 13px
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-m
+
+                z8places-3-ne:
+                    filter: { scalerank: [6,7] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 28
+                            font:
+                                size: 11px
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 27
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 26
+                            icons:
+                                sprite: capital-s
+                                priority: 25
+
+            populated-places-osm-z9:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [9]
+
+                z9places-1:
+                    filter:
+                        any:
+                            - { population: { min: 1000000 } }
+                    draw:
+                        text-blend-order:
+                            anchor: center
+                            visible: *text_visible_populated_places
+                            priority: 6
+                            font:
+                                size: 17px
+
+                z9places-2a:
+                    filter:
+                        any:
+                            - { population: { min: 350000, max: 999999 } }
+                    draw:
+                        text-blend-order:
+                            anchor: center
+                            visible: *text_visible_populated_places
+                            priority: 8
+                            font:
+                                size: 13px
+
+                z9places-2b:
+                    filter:
+                        any:
+                            - { population: { min: 150000, max: 350000 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 12
+                            font:
+                                size: 13px
+                        icons:
+                            size: 6px
+                            sprite: townspot-m-rev
+                            priority: 11
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 10
+                            icons:
+                                sprite: capital-m
+                                priority: 9
+
+                z9places-3:
+                    filter:
+                        any:
+                            - { population: { min: 85000, max: 149999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 16
+                            font:
+                                fill: [0.25,0.25,0.25]
+                                size: 11px
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 15
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 14
+                                font:
+                                    size: 15px
+                            icons:
+                                sprite: capital-m
+                                priority: 13
+
+                z9places-4:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 84999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 20
+                            font:
+                                fill: [0.30,0.30,0.30]
+                                size: 9px
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 19
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 18
+                            icons:
+                                sprite: capital-s
+                                priority: 17
+                z9places-5:
+                    filter:
+                        all:
+                            - { population: { max: 50000 } }
+                        any:
+                            - { capital: yes }
+                            - { state_capital: yes }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 20
+                            font:
+                                fill: [0.30,0.30,0.30]
+                                size: 9px
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 19
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 18
+                            icons:
+                                sprite: capital-s
+                                priority: 17
+
+            populated-places-osm-z9-no-population:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: false
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [9]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_populated_places
+                        offset: [0, 3px] # half icon size
+                        priority: 22
+                        font:
+                            size: 10px
+                    icons:
+                        size: 5px
+                        visible: *icon_visible_populated_places
+                        sprite: townspot-s-rev
+                        priority: 21
+
+            populated-places-natural-earth-z9-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [9], population: { max: 50000 } }
+                draw: { text-blend-order: { font: { fill: *text_fill } } }
+                z9places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 4px] # half icon size
+                            priority: 26
+                            font:
+                                size: 16px
+                        icons:
+                            size: 8px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-l-rev
+                            priority: 25
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 24
+                            icons:
+                                sprite: capital-l
+                                priority: 23
+
+                z9places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 30
+                            font:
+                                size: 13px
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 29
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 27
+                            icons:
+                                sprite: capital-m
+                                priority: 28
+
+                z9places-3-ne:
+                    filter: { scalerank: [6,7,8,9] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 34
+                            font:
+                                size: 11px
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 33
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 32
+                            icons:
+                                sprite: capital-m
+                                priority: 31
+
+            populated-places-osm-z10:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [10]
+
+                z10places-1:
+                    filter:
+                        any:
+                            - { population: { min: 1000000 } }
+                    draw:
+                        text-blend-order:
+                            anchor: center
+                            visible: *text_visible_populated_places
+                            priority: 5
+                            font:
+                                size: 17px
+
+                z10places-2a:
+                    filter:
+                        any:
+                            - { population: { min: 350000, max: 1000000 } }
+                    draw:
+                        text-blend-order:
+                            anchor: center
+                            visible: *text_visible_populated_places
+                            priority: 6
+                            font:
+                                size: 13px
+
+                z10places-2b:
+                    filter:
+                        any:
+                            - { population: { min: 150000, max: 350000 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 8
+                            font:
+                                size: 13px
+                        icons:
+                            size: 6px
+                            sprite: townspot-m-rev
+                            priority: 7
+
+                z10places-3:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 149999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 12
+                            font:
+                                fill: [0.25,0.25,0.25]
+                                size: 11px
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 11
+
+                z10places-4:
+                    filter:
+                        any:
+                            - { population: { min: 20000, max: 49999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 14
+                            font:
+                                fill: [0.35,0.35,0.35]
+                                size: 9px
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 13
+
+            populated-places-osm-z10-no-population:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: false
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [10]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_populated_places
+                        offset: [0, 3px] # half icon size
+                        priority: 16
+                        font:
+                            size: 10px
+                    icons:
+                        size: 5px
+                        visible: *icon_visible_populated_places
+                        sprite: townspot-s-rev
+                        priority: 15
+
+            populated-places-natural-earth-z10-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [10], population: { max: 20000 } }
+                draw: { text-blend-order: { font: { fill: *text_fill } } }
+                z10places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 2px] # half icon size
+                            priority: 17
+                            font:
+                                size: 16px
+
+                z10places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 22
+                            font:
+                                size: 13px
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 21
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 21
+                            icons:
+                                sprite: capital-m
+                                priority: 20
+
+                z10places-3-ne:
+                    filter: { scalerank: [6,7,8,9,10] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            offset: [0, 3px] # half icon size
+                            priority: 26
+                            font:
+                                size: 12px
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 25
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 24
+                            icons:
+                                size: 7px
+                                sprite: capital-m
+                                priority: 23
+
+            populated-places-osm-z11:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [11]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+
+                z11places-1:
+                    filter:
+                        any:
+                            - { population: { min: 1000000 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 5
+                            font:
+                                size: 18px
+
+                z11places-2:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 999999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 6
+                            font:
+                                size: 14px
+
+                z11places-3:
+                    filter:
+                        any:
+                        - { population: { min: 5000, max: 49999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 7
+                            font:
+                                size: 12px
+
+            populated-places-osm-z11-no-population:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: false
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [11]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        visible: *text_visible_populated_places
+                        priority: 8
+                        font:
+                            size: 11px
+
+            populated-places-natural-earth-z11-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [11], population: { max: 5000 } }
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        font:
+                            fill: *text_fill
+                z11places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 10
+                            font:
+                                size: 16px
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 9
+                                font:
+                                    size: 16px
+
+                z11places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 13
+                            font:
+                                size: 13px
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 11
+                                font:
+                                    size: 16px
+                    state_capital:
+                        filter: { state_capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 12
+                                font:
+                                    size: 14px
+
+                z11places-3-ne:
+                    filter: { scalerank: [6,7,8,9,10,11] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 15
+                            font:
+                                size: 11px
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 14
+                                font:
+                                    size: 14px
+
+            populated-places-osm-z12:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [12]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+
+                z12places-1:
+                    filter:
+                        any:
+                            - { population: { min: 1000000 } }
+
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 5
+                            font:
+                                size: 18px
+
+                z12places-2:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 999999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 6
+                            font:
+                                size: 14px
+
+                z12places-3:
+                    filter:
+                        any:
+                        - { population: { min: 5000, max: 49999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 7
+                            font:
+                                size: 11px
+
+                z12places-4:
+                    filter:
+                        any:
+                        - { population: { max: 5000 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 8
+                            font:
+                                size: 10px
+
+            populated-places-osm-z12-no-population:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: false
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [12]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        visible: *text_visible_populated_places
+                        priority: 9
+                        font:
+                            size: 11px
+
+            populated-places-natural-earth-z12-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [12], population: { max: 5000 } }
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        priority: 10
+                        font:
+                            fill: *text_fill
+
+                z12places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 12
+                            font:
+                                size: 16px
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 11
+                                font:
+                                    size: 16px
+
+                z12places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 14
+                            font:
+                                size: 13px
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 13
+                                font:
+                                    size: 16px
+
+                z12places-3-ne:
+                    filter: { scalerank: [6,7,8,9,10,11,12] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 16
+                            font:
+                                size: 11px
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 15
+                                font:
+                                    size: 14px
+
+            populated-places-osm-z13-z14:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [13,14]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        visible: *text_visible_populated_places
+                        font:
+                            weight: 600
+                            fill: *text_fill
+                z14:
+                    filter:
+                        $zoom: [14]
+                    draw:
+                        text-blend-order:
+                            font:
+                                weight: 600
+
+                z13places-1:
+                    filter:
+                        any:
+                            - { population: { min: 200000 } }
+                    draw:
+                        text-blend-order:
+                            visible: false
+
+                z13places-2:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 199999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 5
+                            font:
+                                size: 14px
+
+                z13places-3:
+                    filter:
+                        any:
+                        - { population: { min: 5000, max: 49999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 6
+                            font:
+                                size: 12px
+
+                z13places-4:
+                    filter:
+                        any:
+                            - population: false
+                            - population: true
+                              all:
+                                - population: { max: 5000 }
+                    draw:
+                        text-blend-order:
+                            font:
+                                size: 12px
+
+            populated-places-osm-z13-z14-no-population:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: false
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [13, 14]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        visible: *text_visible_populated_places
+                        priority: 7
+                        font:
+                            size: 11px
+
+            populated-places-natural-earth-z13-z14-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [13,14], population: { max: 5000 } }
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        font:
+                            fill: *text_fill
+                            weight: 400
+
+                z13places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            priority: 8
+                            interactive: false
+                            visible: false
+
+                z13places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        text-blend-order:
+                            priority: 9
+                            visible: *text_visible_populated_places
+                            font:
+                                size: 13px
+
+                z13places-3-ne:
+                    filter: { scalerank: [6,7,8,9,10,11,12] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 10
+                            font:
+                                size: 12px
+
+            neighborhood-z11:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [11]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11]
+                            - max_zoom: { min: 12 }
+                            - is_landuse_aoi: false
+                            #- kind_tile_rank: { max: 6 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        text_wrap: 10
+                        visible: *text_visible_neighbourhoods_e
+                        font:
+                            size: 9px
+                            weight: 400
+                            fill: *text_fill
+                            transform: uppercase
+                            stroke: { color: *text_stroke, width: 4 }
+            neighborhood-z12:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [12]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11,12]
+                            - max_zoom: { min: 13 }
+                            - is_landuse_aoi: false
+                            #- kind_tile_rank: { max: 8 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        text_wrap: 10
+                        visible: *text_visible_neighbourhoods_e
+                        font:
+                            size: 10px
+                            weight: 400
+                            fill: [0.300,0.300,0.300]
+                            transform: uppercase
+                            # stroke: { color: *text_stroke, width: 2 }
+            neighborhood-z13:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [13]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11,12,13]
+                            - max_zoom: { min: 14 }
+                            - is_landuse_aoi: false
+                            - kind_tile_rank: { max: 8 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        text_wrap: 10
+                        visible: *text_visible_neighbourhoods_e
+                        font:
+                            size: 11px
+                            weight: 400
+                            fill: [0.35,0.35,0.35]
+                            transform: uppercase
+                            # stroke: { color: *text_stroke, width: 2 }
+            neighborhood-z14:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [14]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11,12,13,14]
+                            - max_zoom: { min: 15 }
+                            - is_landuse_aoi: false
+                            - kind_tile_rank: { max: 8 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        text_wrap: 12
+                        visible: *text_visible_neighbourhoods
+                        font:
+                            size: 13px
+                            weight: 400
+                            fill: [0.000,0.000,0.000,0.500]
+                            transform: uppercase
+                            # stroke: { color: *text_stroke, width: 3 }
+            neighborhood-z15:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [15]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11,12,13,14,15]
+                            - max_zoom: { min: 16 }
+                            - is_landuse_aoi: false
+                            - kind_tile_rank: { max: 8 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        text_wrap: 12
+                        visible: *text_visible_neighbourhoods
+                        font:
+                            size: 16px
+                            weight: 300
+                            fill: [0.000,0.000,0.000,0.480]
+                            transform: uppercase
+                            # stroke: { color: *text_stroke, width: 3 }
+                z15-new:
+                    filter:
+                        all:
+                            - min_zoom: 15
+                    draw:
+                        text-blend-order:
+                            priority: 19
+                            font:
+                                size: 13px
+            neighborhood-z16:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [16]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11,12,13,14,15,16]
+                            - max_zoom: { min: 17 }
+                            - is_landuse_aoi: false
+                            - kind_tile_rank: { max: 8 }
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_neighbourhoods
+                        priority: 18
+                        font:
+                            size: 17px
+                            weight: 300
+                            fill: [0.000,0.000,0.000,0.400]
+                            transform: uppercase
+                            # stroke: { color: *text_stroke, width: 3 }
+
+    highway-exit:
+        data: { source: osm, layer: [pois] }
+        filter: { kind: motorway_junction, $zoom: { min: 14 } }
+        draw:
+            icons:
+                visible: false
+            text-blend-order:
+                visible: *text_visible_exits
+                interactive: true
+                text_source: ref
+                priority: 52
+                font:
+                    fill: *text_fill_exits
+                    size: [[12,9px],[15,12px],[17,14px]]
+                    stroke: { color: *text_stroke, width: [[12,2px],[14,3px],[15,3px]] }
+        later:
+            filter: { $zoom: { min: 16 } }
+            draw:
+                text-blend-order:
+                    font:
+                        weight: 600
+    airport-gate:
+        data: { source: osm, layer: [pois] }
+        filter: { kind: gate, aeroway: gate }
+        draw:
+            icons:
+                visible: false
+            text-blend-order:
+                visible: true
+                interactive: true
+                text_source: ref
+                font:
+                    fill: *text_fill
+                    size: [[16,9px],[17,12px],[20,14px]]
+                    #stroke: { color: *highway1, width: [[12,2px],[14,3px],[15,3px]] }
+        later:
+            filter: { $zoom: { min: 19 } }
+            draw:
+                text-blend-order:
+                    font:
+                        weight: 600
+
+    pois_and_landuse_labels:
+        data: { source: osm, layer: [pois,landuse] }
+        visible: *label_visible_poi_landuse
+        filter:
+            not: { kind: [building,farm,tree,gate,apron] }
+            any:
+                - area: false
+                  all:
+                      - $zoom: { min: 12 }
+                - area: true
+                  all:
+                      - $geometry: point
+                      - kind: true
+        draw:
+            icons:
+                size: [[13, 12px], [16, 16px], [18, 19px]]
+                interactive: true
+                visible: false
+                priority: 65
+            text-blend-order:
+                visible: false    # labels are enabled by each layer below
+                move_into_tile: false # preserves text alignment w/icons in JS
+                anchor: bottom
+                offset: [[13, [0, 6px]], [16, [0, 8px]], [18, [0, 10px]]] # offset tracks alongside icon size (half icon height)
+                interactive: true
+                priority: 66
+                font:
+                    family: *text_font_family
+                    weight: 400
+                    fill: [0.20,0.20,0.20]
+                    size: 10px
+                    stroke: { color: *text_stroke, width: 1 }
+        poi_labels-z14:
+            filter: { $zoom: [14] }
+            draw: { text-blend-order: { font: { size: 11px } } }
+        poi_labels-z15:
+            filter: { $zoom: [15,16,17] }
+            draw: { text-blend-order: { font: { size: 12px, stroke: { width: 2 } } } }
+        poi_labels-z18:
+            filter: { $zoom: [18,19] }
+            draw: { text-blend-order: { font: { size: 12px, weight: 600, stroke: { width: 3 } } } }
+        poi_labels-z20-up:
+            filter: { $zoom: { min: 20 } }
+            draw: { text-blend-order: { font: { size: 14px, weight: 600, stroke: { width: 3 }  } } }
+        no-name:
+            filter: { name: false }
+            sports-pitch:
+                filter: { kind: [grass, pitch], $geometry: point, area: true, $zoom: { min: 17 } }
+                draw:
+                    icons:
+                        sprite: function() { return feature.sport }
+                        visible: *icon_visible_poi_landuse_e
+                        priority: 69
+                baseball:
+                    filter: { sport: baseball }
+                    draw: { icons: { sprite: baseball-field } }
+                basketball:
+                    filter: { sport: basketball }
+                    draw: { icons: { sprite: basketball-court } }
+                football:
+                    filter: { sport: football }
+                    draw: { icons: { sprite: football-stadium } }
+                hockey:
+                    filter: { sport: hockey-field }
+                    draw: { icons: { sprite: hockey-field } }
+                soccer:
+                    filter: { sport: soccer }
+                    draw: { icons: { sprite: soccer-field } }
+                tennis:
+                    filter: { sport: tennis }
+                    draw: { icons: { sprite: tennis } }
+            toilets:
+                filter: { kind: toilets, $zoom: { min: 18 }  }
+                draw: { icons: { sprite: toilets, visible: *icon_visible_poi_landuse_e } }
+            playground:
+                filter: { kind: playground, $zoom: { min: 18 }  }
+                draw: { icons: { sprite: playground, visible: *icon_visible_poi_landuse_e } }
+            picnic_site:
+                filter: { kind: picnic_site, $zoom: { min: 18 }  }
+                draw: { icons: { sprite: picnic-spot, visible: *icon_visible_poi_landuse_e } }
+            information:
+                filter: { kind: information, $zoom: { min: 18 }  }
+                draw: { icons: { sprite: information, visible: *icon_visible_poi_landuse_e } }
+            drinking-water:
+                filter: { kind: drinking_water, $zoom: { min: 18 }  }
+                draw: { icons: { sprite: drinking-water, visible: *icon_visible_poi_landuse_e } }
+            traffic-signal:
+                filter: { kind: traffic_signals, $zoom: { min: 18 } }
+                draw:   { icons: { sprite: traffic-signal, visible: *icon_visible_poi_landuse_e } }
+            bicycle-parking:
+                filter: { kind: [bicycle_parking], $zoom: { min: 19 } }
+                draw:   { icons: { sprite: bicycle-parking, visible: *icon_visible_poi_landuse_e } }
+            car-parking:
+                filter: { kind: [parking], $zoom: { min: 17 } }
+                draw:   { icons: { sprite: parking, visible: *icon_visible_poi_landuse_e } }
+        has-name:
+            filter: { name: true }
+            # match 1:1 correlations between data and sprite name
+            direct-match:
+                filter: { area: false }
+                draw:
+                    icons:
+                        # sprite_source: kind
+                        sprite: function() { return feature.kind; }
+                        visible: *icon_visible_poi_landuse
+
+            # add generic icon at high zoom, if direct match fails
+            generic-icons:
+                filter: { $zoom: { min: 18 }, area: false }
+                draw:
+                    icons:
+                        sprite_default: generic
+                        visible: *icon_visible_poi_landuse
+                        priority: 67
+
+            # add generic icon at high zoom
+            default-label-names:
+                filter: { $zoom: { min: 13 }, area: false }
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_poi_landuse
+                        priority: 68
+
+            landuse-labels-green-areas-national-park:
+                filter:
+                    all:
+                        - area: true
+                        - $geometry: point
+                        - kind: [national_park, "park or protected land"]
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [4],  area: { min: 3000000000 } }
+                        - { $zoom: [5],  area: { min: 3000000000 } }
+                        - { $zoom: [6],  area: { min: 500000000 } }
+                        - { $zoom: [7,8,9],  area: { min: 100000000 } }
+                        - { $zoom: [10], area: { min: 50000000 } }
+                        - { $zoom: [11], area: { min: 25000000 } }
+                        - { $zoom: [12], area: { min: 5000000 } }
+                        - { $zoom: [13], area: { min: 200000 } }
+                        - { $zoom: [14], area: { min: 50000 } }
+                        - { $zoom: { min: 15 } }
+                national-park:
+                    # yosemite national park, joshua tree national park
+                    filter: function() { return feature.name && feature.name.indexOf("National Park") > -1; }
+                    visible: *label_visible_landuse_green
+                    draw:
+                        icons:
+                            visible: *icon_visible_landuse_green
+                            sprite: park
+                            priority: 41
+                        text-blend-order:
+                            visible: *text_visible_landuse_green
+                            priority: 42
+                            font:
+                                fill: [0.200,0.409,0.398] #*text_fill_park
+                                style: italic
+                                # stroke: { color: [0.870,0.870,0.870], width: 3px }
+                    natl-park-labels-z4-z6:
+                        filter: { $zoom: [4,5,6] }
+                        draw:
+                            icons:
+                                visible: false
+                            text-blend-order: { font: { size: 10px, stroke: { width: 2px } } }
+                    natl-park-labels-z7:
+                        filter: { $zoom: [7] }
+                        draw:
+                            text-blend-order: { font: { size: 10px, stroke: { width: 2px } } }
+                    natl-park-labels-z8:
+                        filter: { $zoom: [8,9] }
+                        draw:
+                            text-blend-order: { font: { size: 11px, stroke: { width: 2px } } }
+                    natl-park-labels-z10:
+                        filter: { $zoom: {min: 10, max: 14 } }
+                        draw:
+                            text-blend-order: { font: { size: 12px } }
+
+            landuse-labels-green-areas-not-national-park:
+                filter:
+                    all:
+                        - area: true
+                        - $geometry: point
+                        - kind: [park, national_park, "park or protected land",conservation, protected_area, nature_reserve, forest, grass]
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [5],    area: { min: 10000000000 } }
+                        - { $zoom: [6,7],  area: { min: 5000000000 } }
+                        - { $zoom: [8],    area: { min: 1000000000 } }
+                        - { $zoom: [9],    area: { min: 100000000 } }
+                        - { $zoom: [10],   area: { min: 50000000 } }
+                        - { $zoom: [11],   area: { min: 25000000 } }
+                        - { $zoom: [12],   area: { min: 5000000 } }
+                        - { $zoom: [13],   area: { min: 200000 } }
+                        - { $zoom: [14],   area: { min: 50000 } }
+                        - { $zoom: [15],   area: { min: 10000 } }
+                        - { $zoom: [16],   area: { min: 1000 } }
+                        - { $zoom: { min: 17 } }
+                not-national-park:
+                    filter: function() { return !( feature.name.indexOf("National Park") > -1 ); }
+                    draw:
+                        icons:
+                            visible: *icon_visible_landuse_green
+                            sprite: park
+                            priority: 41
+                        text-blend-order:
+                            visible: *text_visible_landuse_green
+                            priority: 42
+                            font:
+                                fill: [0.181,0.370,0.361]
+#                                size: 12px
+#                                weight: 400
+                                style: italic
+                                # stroke: { color: [0.870,0.870,0.870], width: 2 }
+                    green-areas-z6:
+                        # mojave national preserve
+                        filter: { $zoom: [6] }
+                        draw:
+                            icons: { visible: false }
+                            text-blend-order: { font: { size: 10px, stroke: { width: 2px } } }
+                    green-areas-z7:
+                        filter: { $zoom: [7] }
+                        draw:
+                            icons: { visible: false }
+                            text-blend-order: { font: { size: 10px } }
+                    green-areas-z8-z9:
+                        filter: { $zoom: { min: 8, max: 14 } }
+                        draw:
+                            text-blend-order: { font: { size: 11px } }
+                    wilderness-areas-early:
+                       filter: function() { return $zoom < 10 && feature.name && (feature.name.indexOf("Wilderness") > -1 || feature.name.indexOf("BLM") > -1) }
+                       draw:
+                           text-blend-order: { visible: false }
+                           icons: { visible: false }
+                    early-not-national-park:
+                        filter: { not: { kind: national_park }, $zoom: { max: 6 } }
+                        draw:
+                            text-blend-order: { visible: false }
+                            icons: { visible: false }
+                    not-national-park:
+                        filter: function() { return feature.name && feature.name.indexOf("Park") > -1 }
+                        # draw:
+                        #     icons:
+                        #         sprite: park
+                        early:
+                            filter: { $zoom: { max: 8 } }
+                            draw:
+                                text-blend-order: { visible: false }
+                                icons: { visible: false }
+                    forest:
+                        filter: function() { return $zoom < 8 && ((feature.name && feature.name.indexOf("Forest") > -1) || feature.protect_class >=6) }
+                        draw:
+                            text-blend-order: { visible: false }
+                            icons: { visible: false }
+                    hide-till-later:
+                        filter: { kind: [grass], $zoom: { max: 16 } }
+                        draw:
+                            text-blend-order: { visible: false }
+                            icons: { visible: false }
+                    only-text-later:
+                        filter: { kind: [grass], $zoom: { min: 16 } }
+                        draw:
+                            text-blend-order: { font: { style: italic } }
+                            icons: { visible: false }
+            beach:
+                filter:
+                    all:
+                        - area: true
+                        - $geometry: point
+                        - kind: [beach]
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [10],   area: { min: 300000 } }
+                        - { $zoom: [11],   area: { min: 100000 } }
+                        - { $zoom: [12],   area: { min: 50000 } }
+                        - { $zoom: [13],   area: { min: 50000 } }
+                        - { $zoom: [14],   area: { min: 20000 } }
+                        - { $zoom: [15],   area: { min: 10000 } }
+                        - { $zoom: [16],   area: { min: 1000 } }
+                        - { $zoom: { min: 17 } }
+                draw:
+                    icons:
+                        visible: *icon_visible_landuse_green
+                        interactive: true
+                        sprite: beach
+                    text-blend-order:
+                        visible: *text_visible_landuse_green
+                        interactive: true
+                        font:
+                            fill: *text_fill_beach
+                            stroke:
+                                color: *text_stroke_park
+            airport:
+                filter:
+                    all:
+                        - kind: [airport, aerodrome]
+                        - area: true
+                        - $geometry: point
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [9],  area: { min: 10000000 } }
+                        - { $zoom: [10], area: { min: 10000000 } }
+                        - { $zoom: [11], area: { min: 5000000 } }
+                        - { $zoom: [12], area: { min: 5000000 } }
+                        - { $zoom: [13], area: { min: 500000 } }
+                        - { $zoom: [14], area: { min: 20000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [15], area: { min: 10000 } }
+                        - { $zoom: [16], area: { min: 5000 } }
+                        - { $zoom: [17], area: { min: 2000 } }
+                        - { $zoom: { min: 18 } }
+                draw:
+                    icons:
+                        sprite: airport
+                        visible: *icon_visible_landuse_green
+                        priority: 42
+                    text-blend-order:
+                        visible: *text_visible_landuse_green
+                        priority: 41
+                        text_source: function() { if(feature.iata) { return feature.name + ' (' + feature.iata + ')'; } else { return feature.name; } }
+                        font:
+                            fill: [0.20,0.20,0.20] # *text_fill
+                            #size: 11px
+                            stroke: { color: *text_stroke, width: 4 }
+                early:
+                    filter: { $zoom: [9,10,11] }
+                    # todo: huh?
+                    draw: { text-blend-order: { text_source: iata, font: { size: 11px } } }
+                early2:
+                    filter: { $zoom: { min: 12, max: 14 } }
+                    draw: { text-blend-order: { font: { size: 11px } } }
+            university:
+                filter:
+                    all:
+                        - kind: [university, college]
+                        - area: true
+                        - $geometry: point
+                        - not: { $layer: buildings }
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [9],   area: { min: 10000000 } }
+                        - { $zoom: [10], area: { min: 5000000 } }
+                        - { $zoom: [11], area: { min: 2000000 } }
+                        - { $zoom: [12], area: { min: 500000 } }
+                        - { $zoom: [13], area: { min: 100000 } }
+                        - { $zoom: [14], area: { min: 100000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [15], area: { min: 40000 } }
+                        - { $zoom: [16], area: { min: 5000 } }
+                        - { $zoom: [17], area: { min: 2000 } }
+                        - { $zoom: { min: 18 } }
+                visible: *label_visible_landuse_green
+                draw:
+                    icons:
+                        sprite: college-university
+                        visible: *icon_visible_landuse_green
+                        priority: 41
+                    text-blend-order:
+                        visible: *text_visible_landuse_green
+                        priority: 42
+                        font:
+                            weight: 600
+                            fill: [0.20,0.20,0.20]
+                            #size: 10px
+                            # stroke: { color: *text_stroke, width: 4 }
+                early:
+                    filter: { $zoom: { max: 12 } }
+                    draw: { text-blend-order: { visible: false } }
+                early2:
+                    filter: { $zoom: { min: 12, max: 14 } }
+                    draw: { text-blend-order: { size: 11px } }
+            school:
+                filter:
+                    all:
+                        - kind: [school, kindergarten]
+                        - area: true
+                        - $geometry: point
+                        - not: { $layer: buildings }
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [13], area: { min: 100000 } }
+                        - { $zoom: [14], area: { min: 50000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [15], area: { min: 10000 } }
+                        - { $zoom: [16], area: { min: 5000 } }
+                        - { $zoom: [17], area: { min: 2000 } }
+                        - { $zoom: { min: 18 } }
+                draw:
+                    icons:
+                        sprite: school
+                        visible: *icon_visible_landuse_green
+                        priority: 41
+                    text-blend-order:
+                        visible: *text_visible_landuse_green
+                        font:
+                            fill: *text_fill
+                            size: 12px
+                            stroke: { color: *text_stroke, width: 4 }
+                early:
+                    filter: { $zoom: { max: 14 } }
+                    draw: { text-blend-order: { font: { size: 11px } } }
+            winter_sports:
+                filter:
+                    all:
+                        - kind: winter_sports
+                        - area: true
+                        - $geometry: point
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [10], area: { min: 5000000 } }
+                        - { $zoom: [11], area: { min: 2000000 } }
+                        - { $zoom: [12], area: { min: 500000 } }
+                        - { $zoom: [13], area: { min: 100000 } }
+                        - { $zoom: [14], area: { min: 100000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [15], area: { min: 40000 } }
+                        - { $zoom: [16], area: { min: 5000 } }
+                        - { $zoom: [17], area: { min: 2000 } }
+                        - { $zoom: { min: 18 } }
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_landuse_green
+                        font:
+                            fill: *text_fill
+                            size: 12px
+                            stroke: { color: *text_stroke, width: 4 }
+                    icons:
+                        sprite: ski-area
+                        visible: *icon_visible_landuse_green
+                        priority: 41
+                early:
+                    filter: { $zoom: { max: 14 } }
+                    draw: { text-blend-order: { font: { size: 10px } } }
+            tourism-related:
+                filter:
+                    all:
+                        - kind: [zoo, theme_park, resort, aquarium, winery, maze, stadium]
+                        - area: true
+                        - $geometry: point
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: { min: 11 }, area: { min: 400000 } }
+                        - { $zoom: { min: 12 }, area: { min: 200000 } }
+                        - { $zoom: { min: 13 }, area: { min: 50000 } }
+                        - { $zoom: { min: 14 }, area: { min: 20000 } }
+                        - { $zoom: { min: 15 }, area: { min: 10000 } }
+                        - { $zoom: { min: 15 }, area: { min: 2000 } }
+                        - { $zoom: { min: 16 } }
+                draw:
+                    icons:
+                        sprite: function() { return feature.kind; }
+                        sprite_default: generic
+                        visible: *icon_visible_poi_landuse
+                        priority: 43
+                    text-blend-order:
+                        visible: *text_visible_poi_landuse
+                        priority: 44
+                        font:
+                            fill: *text_fill
+                            size: 12px
+                            stroke: { color: *text_stroke, width: 4 }
+                early-sizing:
+                    filter: { $zoom: { max: 14 } }
+                    draw: { text-blend-order: { size: 11px } }
+            landuse-labels-not-green-areas:
+                filter:
+                    all:
+                        - $zoom: { min: 6 }
+                        - area: true
+                        - $geometry: point
+                        - not: { kind: [park, national_park, "park or protected land", conservation, protected_area, nature_reserve, airport, aerodrome, university, college, school, kindergarten, winter_sports, zoo, theme_park, resort, aquarium, winery, maze, stadium] }
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [5,6,7], area: { min: 5000000000 } }
+                        - { $zoom: [8],     area: { min: 1600000000 } }
+                        - { $zoom: [9],     area: { min: 400000000 } }
+                        - { $zoom: [10],    area: { min: 100000000 } }
+                        - { $zoom: [11],    area: { min: 25000000 } }
+                        - { $zoom: [12],    area: { min: 5000000 } }
+                        - { $zoom: [13],    area: { min: 1000000 } }
+                        - { $zoom: [14],    area: { min: 100000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [15],    area: { min: 5000 } }
+                        - { $zoom: [16],    area: { min: 2000 } }
+                        - { $zoom: { min: 17 } }
+                draw:
+                    icons:
+                        sprite: function() { return feature.kind; }
+                        sprite_default: generic
+                        visible: *icon_visible_poi_landuse
+                        priority: 43
+                    text-blend-order:
+                        visible: *text_visible_poi_landuse
+                        priority: 44
+                        font:
+                            fill: [0.20,0.20,0.20] # *text_fill
+#                            size: 10px
+                            weight: 600
+                            stroke: { color: *text_stroke, width: 4 }
+                early-sizing:
+                    filter: { $zoom: { max: 14 } }
+                    draw: { text-blend-order: { size: 11px } }
+                building-like:
+                    filter: { kind: [commercial,residential,warehouse,public,dormitory], osm_relation: false }
+                    draw:
+                        icons:
+                            sprite: building
+#                residential-relations-paris-wtf:
+#                    filter: { kind: [residential], osm_relation: true }
+#                    draw:
+#                        icons:
+#                            text-blend-order: { visible: true, text_source: short_name, font: { fill: red } }
+#                            icons: { sprite: park, visible: true }
+                hide-till-later:
+                    filter: { kind: [pedestrian,common,railway,ship,houseboat,common,grass,wetland,pitch], $zoom: { max: 17 } }
+                    draw:
+                        text-blend-order: { visible: false }
+                        icons: { visible: false }
+                only-text-later:
+                    filter: { kind: [pedestrian,common,railway,ship,houseboat,common,grass,wetland,pitch], $zoom: { min: 17 } }
+                    draw:
+                        text-blend-order: { font: { style: italic } }
+                        icons: { visible: false }
+                burial_vault-early:
+                    filter: { kind: [burial_vault], $zoom: { max: 19 } }
+                    draw:
+                        text-blend-order:  { visible: false }
+                        icons: { visible: false }
+            university-poi:
+                filter: { kind: [university, college], area: false, $zoom: { max: 16 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            office-early:
+                filter:
+                    any:
+                        - { kind: [insurance, office, company], $zoom: [15], area: { max: 10000 } }
+                        - { kind: [insurance, office, company], $zoom: [16], area: { max: 5000 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            bank-early:
+                filter: { kind: [bank], $zoom: { max: 17 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            post-office-early:
+                filter: { kind: [post_office], $zoom: { max: 14 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            atm-early:
+                filter: { kind: [atm], $zoom: { max: 18 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            bicycle-parking-early:
+                filter: { kind: [bicycle_parking], $zoom: { max: 19 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            yes-early:
+                filter: { kind: [yes], $zoom: { max: 18 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            peak-early:
+                filter: { kind: [peak], $zoom: { max: 16 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            drinking-water-early:
+                filter: { kind: [drinking_water], $zoom: { max: 18 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            memorial-early:
+                filter: { kind: [memorial], $zoom: { max: 13 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            animal-points-early:
+                filter: { kind: [animal], area: false, $zoom: { max: 18 } }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+#            animal-areas-early:
+#                filter: { kind: [animal], area: { min: 500 }, $zoom: { max: 18 } }
+#                draw:
+#                    text-blend-order:  { visible: false }
+#                    icons: { visible: false }
+            parking-labels-early:
+                filter:
+                    kind: [parking]
+                    $zoom: { max: 18 }
+                draw:
+                    text-blend-order:
+                        visible: false
+                    icons:
+                        visible: false
+            parking-labels:
+                filter:
+                    kind: [parking]
+                    $zoom: { min: 18 }
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_poi_landuse
+                        font:
+                            fill: [0.20,0.20,0.20] #*text_fill
+                            size: 10px
+                            stroke: { color: *text_stroke, width: 4 }
+            landuse-funky:
+                filter: { kind: [commercial, residential, wood], $zoom: { max: 17 } }
+                draw:
+                    text-blend-order:
+                        visible: false
+            car-sharing:
+                filter: { kind: car_sharing }
+                icons-early:
+                    filter: { $zoom: { max: 17 } }
+                    draw:
+                        icons:
+                            visible: false
+                text-labels-early:
+                    filter: { $zoom: { max: 19 } }
+                    draw:
+                        text-blend-order:
+                            visible: false
+            tower:
+                filter: { kind: [tower], label_placement: yes }
+                draw:
+                    icons:
+                        visible: false
+                    text-blend-order:
+                        font:
+                            style: italic
+            station-train-subway:
+                filter: { kind: [station, train-station, train_station], $zoom: { min: 11 } }
+                visible: *label_visible_station
+                draw:
+                    icons:
+                        visible: *icon_visible_station
+                        sprite: train-station
+                        size: [[13, 12px], [14, 12px], [15, 16px], [17, 18px], [18, 20px]]
+                        priority: 61
+                    text-blend-order:
+                        visible: *text_visible_station
+                        offset: [[13, [0, 6px]], [14, [0, 6px]],[15, [0, 8px]], [17, [0, 9px]], [18, [0, 10px]]]
+                        priority: 62
+                low-priority-early:
+                    filter: { kind_tile_rank: { min: 5 }, $zoom: { min: 0, max: 13 } }
+                    draw:
+                        icons:
+                            visible: false
+                            #size: [[12, 10px], [14, 10px], [15, 16px]]
+                        text-blend-order: { visible: false }
+                low-priority-early-z13:
+                    filter: { kind_tile_rank: { min: 5 }, $zoom: [13] }
+                    draw:
+                        icons:
+                            visible: false
+                            #size: [[12, 10px], [14, 10px], [15, 16px]]
+                        text-blend-order: { visible: false }
+                low-priority-early-z14:
+                    filter: { kind_tile_rank: { min: 7 }, $zoom: [14] }
+                    draw:
+                        #icons:
+                            #size: [[14, 11px], [15, 16px], [17, 18px], [18, 20px]]
+                            #visible: false
+                        text-blend-order: { visible: false }
+            tram-stop-early:
+                filter: { kind: tram_stop, $zoom: { max: 15 } }
+                draw:
+                    icons:
+                        visible: false
+            tram-stop-early-z15:
+                filter: { kind: tram_stop, $zoom: [15] }
+                draw:
+                    text-blend-order:
+                        visible: false
+            tram-stop:
+                filter: { kind: tram_stop, $zoom: { min: 15 } }
+                draw:
+                    icons:
+                        size: [[13, 12px], [16, 18px]]
+                    text-blend-order:
+                        offset: [[13, [0, 6px]], [16, [0, 9px]]]
+            bus-stop-bus-station-labels:
+                filter:
+                    kind: [bus_stop, bus_station]
+                    $zoom: { min: 18 }
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_poi_landuse
+                        font:
+                            fill: [0.20,0.20,0.20] # *text_fill
+                            size: 11px
+                            stroke: { color: *text_stroke, width: 4 }
+                bus_stop:
+                    filter:
+                        kind: [bus_stop]
+                        $zoom: { max: 19 }
+                    draw:
+                        icons:
+                            size: [[13, 8px], [19, 18px]]
+                        text-blend-order:
+                            visible: false
+            minor-z17-early:
+                filter:
+                    kind: [accountant, administrative, advertising_agency, architect, association, atm, bakery, bed_and_breakfast, bicycle, bicycle_parking, bicycle_rental, books, bus_stop, bus_stop, butcher, car, car_repair, chalet, clothes, company, computer, consulting, convenience, doityourself, drinking_water, dry_cleaning, educational_institution, emergency_phone, employment_agency, estate_agent, fashion, financial, florist, foundation, gate, gift, government, greengrocer, guest_house, hairdresser, hostel, hotel, insurance, it, jewelry, lawyer, mast, memorial, mobile_phone, motel, newspaper, ngo, notary, optician, parking, pet, physician, playground, political_party, post_box, religion, research, slipway, subway_entrance, tax_advisor, telecommunication, telephone, theatre, therapist, toilets, traffic_signals, travel_agent, water_tower, yes]
+                    area: false
+                    $zoom: { max: 17 }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+            minor-z18-early:
+                filter:
+                    kind: [bench, waste_basket]
+                    area: false
+                    $zoom: { max: 18 }
+                draw:
+                    text-blend-order:  { visible: false }
+                    icons: { visible: false }
+
+            icons:
+                adult-boutique:
+                    filter: { kind: [erotic, adult_boutique] }
+                    draw:   { icons: { sprite: adult-boutique } }
+                allotments:
+                    filter: { kind: [allotments] }
+                    draw:   { icons: { sprite: garden } }
+                airport:
+                    filter: { kind: [airport, aerodrome] }
+                    draw:   { icons: { sprite: airport } }
+                animal-shelter:
+                    filter: { kind: [animal_shelter, animal-shelter, animal_boarding] }
+                    draw:   { icons: { sprite: animal-shelter } }
+                antique-shop:
+                    filter: { kind: [antiques, antique-shop] }
+                    draw:   { icons: { sprite: antique-shop } }
+                art-gallery:
+                    filter: { kind: [art_gallery, art-gallery, art, artwork] }
+                    draw:   { icons: { sprite: art-gallery } }
+                athletics-sports:
+                    filter: { kind: [athletic_sports, recreation_ground, sports_centre] }
+                    draw:   { icons: { sprite: athletics-sports } }
+                automotive-shop:
+                    filter: { kind: [car_repair, automotive-shop, automotive, tyres] }
+                    draw:   { icons: { sprite: automotive-shop } }
+                bakery:
+                    filter: { kind: [bakery, pastry, chocolate] }
+                    draw:   { icons: { sprite: bakery } }
+                bar:
+                    filter: { kind: [pub, bar] }
+                    draw:   { icons: { sprite: bar } }
+                beer-garden:
+                    filter: { kind: [biergarten, beer-garden, brewery] }
+                    draw:   { icons: { sprite: beer-garden } }
+                bike-shop:
+                    filter: { kind: [bicycle, bicycle_rental, bike, bike_shop] }
+                    draw:   { icons: { sprite: bike-shop } }
+                bicycle-parking:
+                    filter: { kind: [bicycle_parking] }
+                    draw:   { icons: { sprite: bicycle-parking } }
+                boat-ferry:
+                    filter: { kind: [ferry_terminal, boat-ferry, ferry-boat, ferry] }
+                    draw:   { icons: { sprite: boat-ferry } }
+                boat-ramp:
+                    filter: { kind: [slipway, boat-ramp, boat_ramp] }
+                    draw:   { icons: { sprite: boat-ramp } }
+                bookstore:
+                    filter: { kind: [books, bookstore] }
+                    draw:   { icons: { sprite: bookstore } }
+                bowling-alley:
+                    filter: { kind: [bowling_alley, bowling-alley] }
+                    draw:   { icons: { sprite: bowling-alley } }
+                bridal-shop:
+                    filter: { kind: [bridal, bridal-shop] }
+                    draw:   { icons: { sprite: bridal-shop } }
+                building-icon:
+                    filter: { kind: [building, auditorium, terminal, hangar, retirement_home, manor, recreation_center, apartments] }
+                    draw:   { icons: { sprite: building } }
+                    early:
+                        filter:
+                            any:
+                                # show labels for smaller landuse areas at higher zooms
+                                - { $zoom: [14], area: { max: 200000 } }
+                                - { $zoom: [15], area: { max: 20000 } }
+                                - { $zoom: [16], area: { max: 5000 } }
+                                - { $zoom: [17], area: { max: 1000 } }
+                        draw:
+                            text-blend-order:
+                                visible: false
+                            icons:
+                                visible: false
+                burger:
+                    filter: { kind: [fast_food, burger] }
+                    draw:   { icons: { sprite: burger } }
+                taqueria:
+                    filter: { kind: [burrito,taqueria] }
+                    draw:   { icons: { sprite: taqueria } }
+                bus-station:
+                    filter: { kind: [bus_stop, bus_station] }
+                    draw:   { icons: { sprite: bus-station } }
+                camera-store:
+                    filter: { kind: [camera, camera-store, photo] }
+                    draw:   { icons: { sprite: camera-store } }
+                campground:
+                    filter: { kind: [campground, camp_site, caravan_site] }
+                    draw:   { icons: { sprite: campground } }
+                candy-store:
+                    filter: { kind: [candy, candy-store, confectionery] }
+                    draw:   { icons: { sprite: candy-store } }
+                car-dealership:
+                    filter: { kind: [car, car-dealership] }
+                    draw:   { icons: { sprite: car-dealership } }
+                car-wash:
+                    filter: { kind: [car_wash, car-wash] }
+                    draw:   { icons: { sprite: car-wash } }
+                castle:
+                    filter: { kind: [castle, fort] }
+                    draw:   { icons: { sprite: castle } }
+                cemetery:
+                    filter: { kind: [grave_yard, cemetery] }
+                    draw:   { icons: { sprite: cemetery } }
+                cheese-shop:
+                    filter: { kind: [cheese, cheese-shop] }
+                    draw:   { icons: { sprite: cheese-shop } }
+                clothing-store:
+                    filter: { kind: [clothes, chothing-store, "clothes store", fashion] }
+                    draw:   { icons: { sprite: clothing-store } }
+                coffee-shop:
+                    filter: { kind: [cafe, coffee-shop] }
+                    draw:   { icons: { sprite: coffee-shop } }
+                college-university:
+                    filter: { kind: [university, college, college-university], area: false }
+                    draw:   { icons: { sprite: college-university } }
+                concert-hall:
+                    filter: { kind: [music_venue] }
+                    draw:   { icons: { sprite: concert-hall } }
+                convenience-store:
+                    filter: { kind: [convenience, convenience-store, convenience_store, beverages] }
+                    draw:   { icons: { sprite: convenience-store } }
+                cosmetics-shop:
+                    filter: { kind: [cosmetics, cosmetics-shop, beauty] }
+                    draw:   { icons: { sprite: cosmetics-shop } }
+                department-store:
+                    filter: { kind: [department_store, department-store] }
+                    draw:   { icons: { sprite: department-store } }
+                dog-run:
+                    filter: { kind: [dog_park, dog_run, dog-run] }
+                    draw:   { icons: { sprite: dog-run } }
+                drinking-water:
+                    filter: { kind: drinking_water }
+                    draw: { icons: { sprite: drinking-water } }
+                dry-cleaning:
+                    filter: { kind: [dry_cleaning] }
+                    draw:   { icons: { sprite: dry-cleaning } }
+                electronics-store:
+                    filter: { kind: [electronics, electronics-store, computer] }
+                    draw:   { icons: { sprite: electronics-store } }
+                factory:
+                    filter: { kind: [factory, industrial, chimney, sub_station, substation, wastewater_plant, works, water_works, plant, generator] }
+                    draw:   { icons: { sprite: factory } }
+                farmers-market:
+                    filter: { kind: [farmers_market, farmers-market] }
+                    draw:   { icons: { sprite: farmers-market } }
+                fire-station:
+                    filter: { kind: [fire_station, fire-station] }
+                    draw:   { icons: { sprite: fire-station } }
+                fish-market:
+                    filter: { kind: [fish, fish-market, seafood, fishmonger] }
+                    draw:   { icons: { sprite: fish-market } }
+                fishing-spot:
+                    filter: { kind: [fishing_spot, fishing-spot, fishing] }
+                    draw:   { icons: { sprite: fishing-spot } }
+                fitness:
+                    filter: { kind: [gym, fitness, fitness_center] }
+                    draw:   { icons: { sprite: fitness } }
+                flea-market:
+                    filter: { kind: [flea_market, flea-market] }
+                    draw:   { icons: { sprite: flea-market } }
+                flower-shop:
+                    filter: { kind: [florist, flower-shop] }
+                    draw:   { icons: { sprite: flower-shop } }
+                forest:
+                    filter: { kind: [forest, conservation, wood] }
+                    draw:   { icons: { sprite: forest } }
+                furniture-store:
+                    filter: { kind: [furniture, furniture-store] }
+                    draw:   { icons: { sprite: furniture-store } }
+                garden-center:
+                    filter: { kind: [garden_centre, garden_center] }
+                    draw:   { icons: { sprite: garden-center } }
+                gas-station:
+                    filter: { kind: [fuel, gas-station] }
+                    draw:   { icons: { sprite: gas-station } }
+                general-entertainment:
+                    filter: { kind: [ticket, general_entertainment] }
+                    draw:   { icons: { sprite: general-entertainment } }
+                generic:
+                    filter: { kind: [generic] }
+                    draw:   { icons: { sprite: generic } }
+                gift-shop:
+                    filter: { kind: [gift, gift-shop] }
+                    draw:   { icons: { sprite: gift-shop } }
+                golf-course:
+                    filter: { kind: [golf-course, golf_course] }
+                    draw:   { icons: { sprite: golf-course } }
+                government-building:
+                    filter: { kind: [townhall, public_building, embassy] }
+                    draw:   { icons: { sprite: government-building } }
+                grocery-store:
+                    filter: { kind: [supermarket, grocery-store, health_food, greengrocer] }
+                    draw:   { icons: { sprite: grocery-store } }
+                harbor-marina:
+                    filter: { kind: [marina, harbor, harbor-marina, harbor_marina, dock, mooring] }
+                    draw:   { icons: { sprite: harbor-marina } }
+                hardware-store:
+                    filter: { kind: [hardware, hardware-store, doityourself, paint] }
+                    draw:   { icons: { sprite: hardware-store } }
+                hiking-trail:
+                    filter: { kind: [trailhead, hiking_trail] }
+                    draw:   { icons: { sprite: hiking-trail } }
+                hotel:
+                    filter: { kind: [hotel, motel, hostel] }
+                    draw:   { icons: { sprite: hotel } }
+                hunting-supply:
+                    filter: { kind: [hunting, fishing] }
+                    draw:   { icons: { sprite: hunting-supply } }
+                ice-cream-shop:
+                    filter: { kind: [ice_cream] }
+                    draw:   { icons: { sprite: ice-cream-shop } }
+                information:
+                    filter: { kind: [info, information] }
+                    draw:   { icons: { sprite: information } }
+                jewelry-store:
+                    filter: { kind: [jewelry, jewelry_store, jewelry-store] }
+                    draw:   { icons: { sprite: jewelry-store } }
+                landmark:
+                    filter: { kind: [landmark, memorial, monument, wayside_shrine, beacon] }
+                    draw:   { icons: { sprite: landmark } }
+                tower:
+                    filter: { kind: [tower], label_placement: false }
+                    draw:   { icons: { sprite: landmark } }
+                laundry:
+                    filter: { kind: [laundry] }
+                    draw:   { icons: { sprite: laundry } }
+                light-rail:
+                    filter: { kind: [light-rail, light_rail, tram_stop] }
+                    draw:   { icons: { sprite: light-rail } }
+                liquor-store:
+                    filter: { kind: [alcohol, liquor-store, liquor] }
+                    draw:   { icons: { sprite: liquor-store } }
+                market:
+                    filter: { kind: [market, variety_store, boutique, dairy, retail] }
+                    draw:   { icons: { sprite: market } }
+                mine:
+                    filter: { kind: [mind, quarry, mineshaft, adit] }
+                    draw:   { icons: { sprite: mine } }
+                miscellaneous-shop:
+                    filter: { kind: [houseware, miscellaneous-shop] }
+                    draw:   { icons: { sprite: miscellaneous-shop } }
+                mobile-phone-shop:
+                    filter: { kind: [mobile_phone] }
+                    draw:   { icons: { sprite: mobile-phone-shop } }
+                motorcycle-shop:
+                    filter: { kind: [motorcycle, motorcycle_shop, motorcycle_repair] }
+                    draw:   { icons: { sprite: motorcycle-shop } }
+                mountain:
+                    filter: { kind: [mountain, peak] }
+                    draw:   { icons: { sprite: mountain } }
+                movie-theatre:
+                    filter: { kind: [cinema, movie-theatre, movie-theater] }
+                    draw:   { icons: { sprite: movie-theatre } }
+                museum:
+                    filter: { kind: [museum, observatory] }
+                    draw:   { icons: { sprite: museum } }
+                music-store:
+                    filter: { kind: [music, music-store, musical_instrument] }
+                    draw:   { icons: { sprite: music-store } }
+                newsstand:
+                    filter: { kind: [kiosk, newsstand, newsagent] }
+                    draw:   { icons: { sprite: newsstand } }
+                nightlife:
+                    filter: { kind: [nightclub, nightlife] }
+                    draw:   { icons: { sprite: nightlife } }
+                office:
+                    filter: { kind: [insurance, office, company] }
+                    draw:   { icons: { sprite: office } }
+                office-supplies:
+                    filter: { kind: [office_supplies, office-supplies, stationery] }
+                    draw:   { icons: { sprite: office-supplies } }
+                optical-shop:
+                    filter: { kind: [optician, optical_shop, optical-shop] }
+                    draw:   { icons: { sprite: optical-shop } }
+                performing-arts:
+                    filter: { kind: [theater, theatre, performing-arts] }
+                    draw:   { icons: { sprite: performing-arts } }
+                pet-store:
+                    filter: { kind: [pet, pet-store, pet-service, pet_store] }
+                    draw:   { icons: { sprite: pet-store } }
+                pharmacy:
+                    filter: { kind: [pharmacy, chemist] }
+                    draw:   { icons: { sprite: pharmacy } }
+                photography-lab:
+                    filter: { kind: [photo_studio, photography_lab, photographer] }
+                    draw:   { icons: { sprite: photography-lab } }
+                picnic-spot:
+                    filter: { kind: [picnic_site, picnic_spot, picnic-spot] }
+                    draw:   { icons: { sprite: picnic-spot } }
+                pool:
+                    filter: { kind: [pool, swimming_pool, water_park] }
+                    draw:   { icons: { sprite: pool } }
+                pool-hall:
+                    filter: { kind: [billiards, pool-hall] }
+                    draw:   { icons: { sprite: pool-hall } }
+                post-office:
+                    filter: { kind: [post_office, post-office] }
+                    draw:   { icons: { sprite: post-office } }
+                power-pylon:
+                    filter: { kind: [tower, power-pylon, pylon] }
+                    draw:   { icons: { sprite: power-pylon } }
+                real-estate:
+                    filter: { kind: [estate_agent, real_estate] }
+                    draw:   { icons: { sprite: real-estate } }
+                recycling-facility:
+                    filter: { kind: [recycling, recycling-facility] }
+                    draw:   { icons: { sprite: recycling-facility } }
+                rental-car:
+                    filter: { kind: [rental-car, car_rental, car_sharing] }
+                    draw:   { icons: { sprite: rental-car } }
+                rest-area:
+                    filter: { kind: [rest_area, rest-area] }
+                    draw:   { icons: { sprite: rest-area } }
+                restaurant:
+                    filter: { kind: [restaurant, deli] }
+                    draw:   { icons: { sprite: restaurant } }
+                ruin:
+                    filter: { kind: [ruins, archaeological_site] }
+                    draw:   { icons: { sprite: ruin } }
+                salon-barber:
+                    filter: { kind: [hairdresser, salon-barber, salon, beauty_salon] }
+                    draw:   { icons: { sprite: salon-barber } }
+                ship-wreck:
+                    filter: { kind: [wreck] }
+                    draw:   { icons: { sprite: ship-wreck } }
+                shoe-store:
+                    filter: { kind: [shoes, shoe-store, shoe_store] }
+                    draw:   { icons: { sprite: shoe-store } }
+                smoke-shop:
+                    filter: { kind: [smoke_shop, tobacco] }
+                    draw:   { icons: { sprite: smoke-shop } }
+                spa-massage:
+                    filter: { kind: [spa, spa-massage, sauna, massage] }
+                    draw:   { icons: { sprite: spa-massage } }
+                spiritual-center:
+                    filter: { kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel] }
+                    draw:   { icons: { sprite: spiritual-center } }
+                church:
+                    filter: { kind: place_of_worship, religion: christian }
+                    draw:   { icons: { sprite: church } }
+                synagogue:
+                    filter: { kind: place_of_worship, religion: jewish }
+                    draw:   { icons: { sprite: synagogue } }
+                buddhist:
+                    filter: { kind: place_of_worship, religion: buddhist }
+                    draw:   { icons: { sprite: buddhism } }
+                mosque:
+                    filter: { kind: place_of_worship, religion: muslim }
+                    draw:   { icons: { sprite: mosque } }
+                sporting-goods-shop:
+                    filter: { kind: [sporting_goods, sporting-goods-shop, sports, outdoor] }
+                    draw:   { icons: { sprite: sporting-goods-shop } }
+                stable:
+                    filter: { kind: [stable, horse_riding] }
+                    draw:   { icons: { sprite: stable } }
+                storage-facility:
+                    filter: { kind: [storage, storage-facility] }
+                    draw:   { icons: { sprite: storage-facility } }
+                subway-entrance:
+                    filter: { kind: [subway_entrance] }
+                    draw:   { icons: { sprite: subway-entrance } }
+                tailor-shop:
+                    filter: { kind: [tailor, tailor-shop] }
+                    draw:   { icons: { sprite: tailor-shop } }
+                tattoo-parlor:
+                    filter: { kind: [tattoo, tattoo_parlor, tattoo-parlor] }
+                    draw:   { icons: { sprite: tattoo-parlor } }
+                theme-park:
+                    filter: { kind: [theme_park, theme-park, miniature_golf] }
+                    draw:   { icons: { sprite: theme-park } }
+                thrift-vintage-store:
+                    filter: { kind: [thrift, thrift-vintage-store, second_hand] }
+                    draw:   { icons: { sprite: thrift-vintage-store } }
+                toll-booth:
+                    filter: { kind: [toll_booth, checkpoint, border_control] }
+                    draw:   { icons: { sprite: toll-booth } }
+                toy-game-store:
+                    filter: { kind: [toys, toy-game-store, baby_goods] }
+                    draw:   { icons: { sprite: toy-game-store } }
+                toilets:
+                    filter: { kind: [toilets] }
+                    draw:   { icons: { sprite: toilets } }
+                veterinarian:
+                    filter: { kind: [pet_care, veterinarian, veterinary] }
+                    draw:   { icons: { sprite: veterinarian } }
+                video-game-store:
+                    filter: { kind: [video_games] }
+                    draw:   { icons: { sprite: video-game-store } }
+                video-store:
+                    filter: { kind: [video, video_store] }
+                    draw:   { icons: { sprite: video-store } }
+                view-point:
+                    filter: { kind: [viewpoint, view_point, view-point, vista] }
+                    draw:   { icons: { sprite: view-point } }
+                well:
+                    filter: { kind: [well, water_well] }
+                    draw:   { icons: { sprite: well } }
+                wine-shop:
+                    filter: { kind: [wine, wine-shop] }
+                    draw:   { icons: { sprite: wine-shop } }
+                winery:
+                    filter: { kind: [winery, wine] }
+                    draw:   { icons: { sprite: winery } }
+                winter_sport:
+                    filter: { kind: [ski, ski_rental, ski_school, ski_jumping, skiing] }
+                    draw:   { icons: { sprite: ski-area } }
+
+    # todo: ocean and sea features are hiding in the places layer
+    water-area-labels:
+        data: { source: osm, layer: [water] }
+        visible: *text_visible_water_labels
+        filter:
+            all:
+                - name: true
+                - $geometry: point
+                - not: { kind: [riverbank, dock, playa] }
+                - area: true
+            any:
+                # show labels for smaller landuse areas at higher zooms
+                - { $zoom: { min: 5 },  area: { min: 10000000000 } }
+                - { $zoom: { min: 6 },  area: { min: 5000000000 } }
+                - { $zoom: { min: 7 },  area: { min: 400000000 } }
+                - { $zoom: { min: 8 },  area: { min: 200000000 } }
+                - { $zoom: { min: 9 },  area: { min: 100000000 } }
+                - { $zoom: { min: 10 }, area: { min: 100000000 } }
+                - { $zoom: { min: 11 }, area: { min: 10000000 } }
+                - { $zoom: { min: 12 }, area: { min: 2000000 } }
+                - { $zoom: { min: 13 }, area: { min: 1000000 } }
+                - { $zoom: { min: 14 }, area: { min: 500000 } }
+                - { $zoom: { min: 15 }, area: { min: 100000 } }
+                - { $zoom: { min: 15 }, area: { min: 50000 } }
+                - { $zoom: { min: 16 }, area: { min: 20000 } }
+                - { $zoom: { min: 17 } }
+        default-label-text:
+            draw:
+                text-blend-order:
+                    font:
+                        fill: [0.314,0.591,0.640] #*text_fill_water
+                        family: *text_font_family
+                        style: italic
+                        weight: 400
+                        size: 12px
+                        # stroke: { color: [0.878,0.929,0.980], width: 2 }
+        lakes-z5:
+            filter: { $zoom: [5] }
+            draw:
+                text-blend-order: { font: { size: 9px } }
+        lakes-z6:
+            filter: { $zoom: [6] }
+            draw:
+                text-blend-order: { font: { size: 11px } }
+        lakes-z8:
+            filter: { $zoom: [8] }
+            draw:
+                text-blend-order: { font: { size: 12px } }
+
+    ocean-sea-labels:
+        data: { source: osm, layer: places }
+        visible: *text_visible_water_labels
+        filter: { name: true, kind: [sea, ocean] }
+        draw:
+            text-blend-order:
+                font:
+                    fill: [0.314,0.591,0.640] #*text_fill_water
+                    family: *text_font_family
+                    weight: 400
+                    size: 12px
+                    transform: uppercase
+        sea-early:
+            filter: { $zoom: [3], kind: sea }
+            draw: { text-blend-order: { visible: false } }
+        ocean-spacer:
+            filter: { kind: ocean }
+            ocean-spacer-z1-z4:
+                filter: { $zoom: { min: 1, max: 4 } }
+                draw:
+                    text-blend-order:
+                        text_source: function() { return feature.name.split('').join(' ') }
+                        text_wrap: false
+            ocean-spacer-z4-up:
+                filter: { $zoom: { min: 4 } }
+                draw:
+                    text-blend-order:
+                        text_source: function() { return feature.name.split('').join('  ') }
+                        text_wrap: false
+        ocean-labels-z1:
+            filter: { $zoom: [1] }
+            draw:
+                text-blend-order: { font: { size: 8px } }
+        ocean-labels-z2:
+            filter: { $zoom: [2] }
+            draw:
+                text-blend-order: { font: { size: 10px } }
+        ocean-labels-z3:
+            filter: { $zoom: [3] }
+            draw:
+                text-blend-order: { font: { size: 13px } }
+        ocean-labels-z4-up:
+            filter: { $zoom: { min: 4} }
+            draw:
+                text-blend-order: { font: { size: 16px } }
+
+        sea-spacer:
+            filter: { not: { kind: [ocean] }, $zoom: { min: 5 } }
+            draw:
+                text-blend-order:
+                    text_source: function() { return feature.name.split('').join(' ') }
+                    text_wrap: false
+
+        sea-labels:
+            filter: { not: { kind: [ocean] } }
+            sea-labels-z4:
+                    filter: { $zoom: [4] }
+                    draw:
+                        text-blend-order: { font: { size: 9px } }
+            sea-labels-z5:
+                    filter: { $zoom: [5] }
+                    draw:
+                        text-blend-order: { font: { size: 10px } }
+            sea-labels-z6:
+                    filter: { $zoom: [6] }
+                    draw:
+                        text-blend-order: { font: { size: 11px } }
+            sea-labels-z7:
+                    filter: { $zoom: [7] }
+                    draw:
+                        text-blend-order: { font: { size: 12px } }
+            sea-labels-z8:
+                    filter: { $zoom: { min: 8} }
+                    draw:
+                        text-blend-order: { font: { size: 14px } }
+
+    playa-labels:
+        data: { source: osm, layer: [water] }
+        visible: *text_visible_water_labels
+        filter:
+            all:
+                - name: true
+                - $geometry: point
+                - kind: playa
+                - area: true
+            any:
+                # show labels for smaller landuse areas at higher zooms
+                - { $zoom: { min: 7 },  area: { min: 1500000000 } }
+                - { $zoom: { min: 8 },  area: { min: 200000000 } }
+                - { $zoom: { min: 9 },  area: { min: 100000000 } }
+                - { $zoom: { min: 10 }, area: { min: 100000000 } }
+                - { $zoom: { min: 11 }, area: { min: 10000000 } }
+                - { $zoom: { min: 12 }, area: { min: 2000000 } }
+                - { $zoom: { min: 13 }, area: { min: 1000000 } }
+                - { $zoom: { min: 14 }, area: { min: 500000 } }
+                - { $zoom: { min: 15 }, area: { min: 100000 } }
+                - { $zoom: { min: 15 }, area: { min: 50000 } }
+                - { $zoom: { min: 16 }, area: { min: 20000 } }
+                - { $zoom: { min: 17 } }
+        draw:
+            text-blend-order:
+                font:
+                    fill: grey
+                    family: *text_font_family
+                    style: italic
+                    weight: 400
+                    size: 12px
+                    stroke: { color: *text_stroke_water, width: 3 }
+        # debug only
+#        icons:
+#            size: [[13, 12px], [15, 18px]]
+#            interactive: true
+#            sprite: *townspot_sprite
+    water-line-labels:
+        data: { source: osm, layer: [water] }
+        filter:
+            all:
+                - name: true
+                - $geometry: line
+                - kind: [river,canal,stream,dam,ditch,drain]
+                - $zoom: { min: 14 }
+        draw:
+            text-blend-order:
+                font:
+                    fill: [0.314,0.591,0.640]
+                    family: *text_font_family
+                    style: italic
+                    weight: 400
+                    size: 12px
+        water-line-labels-z14:
+            filter: { $zoom: [14] }
+            draw:
+                text-blend-order: { font: { size: 10px } }
+        water-line-labels-z17:
+            filter: { $zoom: [17] }
+            draw:
+                text-blend-order: { font: { size: 14px } }
+        not-river-not-stream:
+            filter: { kind: [canal,dam,ditch,drain], $zoom: { max: 16 } }
+            draw:
+                text-blend-order:
+                    visible: false
+        stream:
+            filter: { kind: [stream], $zoom: { max: 17 } }
+            draw:
+                text-blend-order:
+                    visible: false
+
+    landuse:
+        data: { source: osm }
+        draw:
+            dots2:
+                order: function() { return feature.sort_key; }
+                visible: false
+            dots-rev:
+                order: function() { return feature.sort_key; }
+                visible: false
+            polygons:
+                order: function() { return feature.sort_key; }
+        tier1:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 3 },  area: { min: 300000000 } }
+                    - { $zoom: { min: 4 },  area: { min: 300000000 } }
+                    - { $zoom: { min: 5 },  area: { min: 150000000 } }
+                    - { $zoom: { min: 6 },  area: { min: 150000000 } }
+                    - { $zoom: { min: 7 },  area: { min: 100000000 } }
+                    - { $zoom: { min: 8 },  area: { min: 10000000 } }
+                    - { $zoom: { min: 9 },  area: { min: 5000000 } }
+                    - { $zoom: { min: 10 }, area: { min: 1000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 500000 } }
+                    - { $zoom: { min: 12 }, area: { min: 500000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 50000 } }
+                    - { $zoom: { min: 15 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+            national_park:
+                filter: { kind: [national_park, "park or protected land"], not: { operator: [ "United States Forest Service", "US Forest Service", "U.S. Forest Service", "USDA Forest Service" ] } }
+                draw:
+                    dots2:
+                        color: [[4,[0.655,0.800,0.796]],[8,[0.588,0.780,0.773]]]
+                        # todo: what is this?
+                        order: 18
+                        visible: true
+                us_national_park:
+                    # yosemite national park, death valley national park, grand canyon national park
+                    filter: { operator: [ "United States National Park Service", "US National Park Service" ] }
+                    draw:
+                        dots2:
+                            color: [[4,[0.525,0.765,0.686]],[9,[0.416,0.737,0.631]]]
+                            order: 19
+                            visible: true
+                            # color: [[4,[0.242,0.737,0.712]],[12,[0.224,0.682,0.659]]]
+        tier2:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 4 },  area: { min: 1000000000 } }
+                    - { $zoom: { min: 5 },  area: { min: 1000000000 } }
+                    - { $zoom: { min: 6 },  area: { min: 150000000 } }
+                    - { $zoom: { min: 7 },  area: { min: 100000000 } }
+                    - { $zoom: { min: 8 },  area: { min: 10000000 } }
+                    - { $zoom: { min: 9 },  area: { min: 5000000 } }
+                    - { $zoom: { min: 10 }, area: { min: 1000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 500000 } }
+                    - { $zoom: { min: 12 }, area: { min: 250000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 50000 } }
+                    - { $zoom: { min: 15 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+            conservation:
+                filter:
+                    kind: [conservation, protected_area, nature_reserve]
+                    $zoom: { min: 4 }
+                draw:
+                    dots2:
+                        color: [0.420,0.808,0.698]
+                        visible: true
+                wilderness-areas:
+                    filter: function() { return feature.name && feature.name.indexOf("Wilderness") > -1 }
+                    draw:
+                        dots2:
+                            order: 25
+                            color: [0.027,0.804,0.494]
+                            visible: true
+
+                national_forest_level_6:
+                    filter: { protect_class: ["6",6] }
+                    draw:
+                        dots2:
+                            color: [0.442,0.960,0.865] #*green7
+                            visible: true
+
+            # gotta be a protected area to draw green, not just a landcover type
+            farm:
+                filter:
+                    kind: [farm, farmland]
+                    $zoom: { min: 10}
+                draw:
+                    dots2:
+                        color: [0.600,0.790,0.714]
+                        visible: *green4_v
+            forest:
+                filter: { kind: [forest,wood], $zoom: { min: 6 } }
+                national-forest:
+                    filter:
+                        operator: [ "United States Forest Service", "US Forest Service", "U.S. Forest Service", "USDA Forest Service" ]
+                    draw:
+                        dots2:
+                            color: *green7
+                            visible: true
+
+                landuse-forest:
+                    filter:
+                        not: { operator: [ "United States Forest Service", "US Forest Service", "U.S. Forest Service", "USDA Forest Service" ] }
+                        $zoom: { min: 10 }
+                    draw:
+                        dots2:
+                            color: [0.486,0.839,0.722]
+                            visible: true
+
+            nature_reserve:
+                filter: { kind: nature_reserve, $zoom: { min: 7 } }
+                draw:
+                    dots2:
+                        color: [0.596,0.788,0.624]
+                        visible: true
+                wilderness-areas:
+                    filter: function() { return feature.name && feature.name.indexOf("Wilderness") > -1 }
+                    draw:
+                        dots2:
+                            color: *green7
+                            visible: true
+
+            parks-and-national-forests-not-national-park:
+                filter: { $zoom: { min: 4 }, kind: [park, national_park, "park or protected land"], not: { operator: [ "United States National Park Service", "US National Park Service" ] } }
+                # default for national forests and more?
+                draw:
+                    dots2:
+                        # color: [[4,[0.655,0.800,0.796]],[11,[0.588,0.780,0.773]],[12,[0.242,0.737,0.712]],[14,[0.412,0.733,0.718]],[15,[0.635,0.792,0.788]]]
+                        color: [[4,[0.655,0.800,0.796]],[11,[0.588,0.780,0.773]],[12,[0.635,0.792,0.788]]]
+                        visible: true
+            urban:
+                filter: { kind: [urban, rural, residential] }
+                visible: *earth2_v
+                draw:
+                    dots2:
+                        color: [[0,*earth2],[9,*earth2]]
+                        visible: *earth2_v
+        tier3:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 8 },  area: { min: 10000000 } }
+                    - { $zoom: { min: 9 },  area: { min: 5000000 } }
+                    - { $zoom: { min: 10 }, area: { min: 1000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 500000 } }
+                    - { $zoom: { min: 12 }, area: { min: 500000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 50000 } }
+                    - { $zoom: { min: 15 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+            airport:
+                filter:
+                    kind: aerodrome
+                draw:
+                    dots2:
+                        color: [0.805,0.805,0.825]
+                        visible: *purple_v
+            military:
+                filter:
+                    kind: military
+                draw:
+                    dots2:
+                        color: [0.722,0.769,0.827]
+                        visible: true
+            university:
+                filter:
+                    kind: [university, college]
+                draw:
+                    dots2:
+                        color: [0.827,0.753,0.682]
+                        visible: true
+        tier4:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 10 }, area: { min: 1000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 500000 } }
+                    - { $zoom: { min: 12 }, area: { min: 500000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 50000 } }
+                    - { $zoom: { min: 15 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+            cemetery:
+                filter:
+                    kind: cemetery
+                draw:
+                    dots2:
+                        color: *green2
+                        visible: true
+            commercial:
+                filter:
+                    kind: commercial
+                draw:
+                    dots2:
+                        color: [0.855,0.748,0.667]
+                        visible: *grey1_v
+            golf_course:
+                filter:
+                    kind: golf_course
+                draw:
+                    dots2:
+                        color: [0.353,0.812,0.545]
+                        visible: true
+            hospital:
+                filter:
+                    kind: hospital
+                draw:
+                    dots2:
+                        color: [0.843,0.624,0.647]
+                        visible: true
+            industrial:
+                filter:
+                    kind: industrial
+                draw:
+                    dots-rev:
+                        color: [[8,[0.845,0.845,0.845]],[14,[0.835,0.835,0.835]],[15,[0.780,0.780,0.780]]]
+                        visible: true
+            power:
+                filter: { kind: [plant, generator, substation] }
+                draw:
+                    dots2:
+                        color: [0.679,0.679,0.679]
+                        visible: true
+            railway:
+                filter:
+                    kind: railway
+                draw:
+                    dots-rev:
+                        color: [0.898,0.910,0.918]
+                        visible: true
+            sports_centre:
+                filter:
+                    kind: sports_centre
+                draw:
+                    dots2:
+                        color: *green10
+            recreation_ground:
+                filter:
+                    kind: recreation_ground
+                draw:
+                    dots2:
+                        color: *green1
+                        visible: true
+            retail:
+                filter:
+                    kind: retail
+                draw:
+                    dots2:
+                        color: [0.955,0.752,0.650]
+                        visible: *grey1_v
+            stadium:
+                filter:
+                    kind: stadium
+                draw:
+                    dots2:
+                        color: [0.624,0.690,0.761]
+                        visible: true
+            zoo:
+                filter:
+                    kind: [zoo, wildlife_park]
+                draw:
+                    dots2:
+                        color: [0.498,1.000,0.851]
+                        visible: true
+            winter_sports:
+                filter:
+                    kind: winter_sports
+                draw:
+                    dots2:
+                        color: *grey8
+                        visible: *grey8_v
+            man-made:
+                filter: { kind: [pier,wastewater_plant,works,bridge,tower,breakwater,water_works,groyne,dike,cutline] }
+                draw:
+                    dots2:
+                        color: [0.690,0.690,0.690]
+                        visible: true
+                pier:
+                    filter: { kind: [pier,bridge,breakwater,groyne,dike,cutline] }
+                    draw:
+                        dots2:
+                            color: [0.679,0.679,0.679]
+                            visible: true
+        tier5:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 10 }, area: { min: 1000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 400000 } }
+                    - { $zoom: { min: 12 }, area: { min: 200000 } }
+                    - { $zoom: { min: 13 }, area: { min: 50000 } }
+                    - { $zoom: { min: 14 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 10000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+                all:
+                    - kind:
+                        - theme_park
+                        - resort
+                        - aquarium
+                        - winery
+                        - maze
+                        - beach
+            tourism-related:
+                filter:
+                    kind:
+                        - theme_park
+                        - resort
+                        - aquarium
+                        - winery
+                        - maze
+                draw:
+                    dots2:
+                        color: *grey10
+                        visible: true
+            beach:
+                filter:
+                    kind: beach
+                draw:
+                    dots2:
+                        color: [0.780,0.740,0.538]
+                        visible: true
+        tier6:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 12 }, area: { min: 500000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 50000 } }
+                    - { $zoom: { min: 15 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+            garden:
+                filter:
+                    kind: garden
+                draw:
+                    dots2:
+                        color: [0.604,0.973,0.722]
+                        visible: true
+            parking:
+                filter:
+                    all:
+                        - kind: parking
+                        - $zoom: { min: 14 }
+                    any:
+                        - { $zoom: { min: 14 }, area: { min: 10000 } }
+                        - { $zoom: { min: 15 }, area: { min: 5000 } }
+                draw:
+                    dots2:
+                        color: [0.765,0.765,0.765]
+                        visible: *grey1_v
+                early:
+                    filter: { $zoom: { max: 15 } }
+                    draw:
+                        dots2:
+                            color: *grey1_e
+                            visible: true
+            pedestrian:
+                filter:
+                    kind: [pedestrian,common]
+                draw:
+                    dots2:
+                        color: [0.740,0.740,0.740]
+                        visible: *grey1_v
+                green-stuff:
+                    filter:
+                        surface: [grass]
+                    draw:
+                        dots2:
+                            color: [0.584,0.843,0.792]
+            pitch:
+                filter: { kind: pitch }
+                draw:
+                    dots2:
+                        color: [0.490,0.812,0.631]
+                        visible: true
+            place_of_worship:
+                filter:
+                    kind: place_of_worship
+                draw:
+                    dots2:
+                        color: [0.910,0.972,1.000]
+                        visible: *grey1_v
+            playground:
+                filter:
+                    kind: playground
+                draw:
+                    dots-rev:
+                        color: [0.584,0.843,0.792]
+                        visible: true
+            school:
+                filter:
+                    kind: school
+                draw:
+                    dots2:
+                        color: [0.749,0.722,0.694]
+                        visible: true
+            minor-landuse:
+                filter:
+                    kind:
+                        - attraction
+                        - artwork
+                        - wilderness_hut
+                        - hanami
+                draw:
+                    dots2:
+                        color: [0.765,0.765,0.765]
+                        visible: true
+
+    landuse-not-filtered:
+        data: { source: osm, layer: landuse }
+        # runways and taxiways are also in the roads layer as lines
+        # these ones are probably duplicate features, but have AREA (a good thing)
+        filter:
+            kind:
+                - runway
+                - apron
+                - beach
+                - roller_coaster
+                - amusement_ride
+                - summer_toboggan
+                - trail_riding_station
+                - water_slide
+                - carousel
+                - animal
+                - enclosure
+                - petting_zoo
+                - aviary
+        draw:
+            dots2:
+                order: function() { return feature.sort_key; }
+                visible: false
+            dots-rev:
+                order: function() { return feature.sort_key; }
+                visible: false
+            polygons:
+                visible: false
+                order: function() { return feature.sort_key; }
+        runway:
+            filter:
+                kind: runway
+            draw:
+                polygons:
+                    visible: true
+                    color: [[10,[0.4,0.4,0.4]],[11,[0.50,0.50,0.50]],[12,[0.7,0.7,0.7]],[13,[0.75,0.75,0.75]],[14,[0.95,0.95,0.95]]]
+        apron:
+            filter:
+                kind: apron
+                $zoom: { min: 15}
+            draw:
+                dots-rev:
+                    visible: true
+                    color: [0.820,0.820,0.820]
+        minor-amusement-park-landuse:
+            filter:
+                kind:
+                    - roller_coaster
+                    - amusement_ride
+                    - summer_toboggan
+                    - trail_riding_station
+                    - water_slide
+                    - carousel
+            draw:
+                dots2:
+                    color: *grey12
+                    visible: true
+        minor-zoo-landuse:
+            filter:
+                kind:
+                    - animal
+                    - enclosure
+                    - petting_zoo
+                    - aviary
+            draw:
+                dots2:
+                    color: *green11
+                    visible: true
+    landuse_urban_area-early:
+        data: { source: osm, layer: landuse }
+        filter:
+            # This is from Natural Earth and only shows up from zoom(0,9)
+            kind: ['urban area']
+        draw:
+            dots2:
+                visible: *earth2_ev
+                order: function() { return feature.sort_key; }
+                color: [[4,[0.965,0.600,0.882]],[6,[0.965,0.600,0.882]],[7,[0.882,0.639,0.827]],[8,[0.757,0.729,0.753]]]
+
+
+    debug:
+        data: { source: osm }
+        draw:
+            flat_lines:
+                width: 2px
+                order: 1000
+                color: '#ff0000'
diff --git a/scenes/bubble-wrap/images/building-grid.gif b/scenes/bubble-wrap/images/building-grid.gif
new file mode 100644 (file)
index 0000000..f3ddca5
Binary files /dev/null and b/scenes/bubble-wrap/images/building-grid.gif differ
diff --git a/scenes/bubble-wrap/images/poi_icons_18@2x.png b/scenes/bubble-wrap/images/poi_icons_18@2x.png
new file mode 100644 (file)
index 0000000..fb7df40
Binary files /dev/null and b/scenes/bubble-wrap/images/poi_icons_18@2x.png differ
diff --git a/scenes/walkabout-style/images/building-grid.gif b/scenes/walkabout-style/images/building-grid.gif
new file mode 100644 (file)
index 0000000..f3ddca5
Binary files /dev/null and b/scenes/walkabout-style/images/building-grid.gif differ
diff --git a/scenes/walkabout-style/images/draw-test8.jpg b/scenes/walkabout-style/images/draw-test8.jpg
new file mode 100644 (file)
index 0000000..0690ad3
Binary files /dev/null and b/scenes/walkabout-style/images/draw-test8.jpg differ
diff --git a/scenes/walkabout-style/images/draw-test9.jpg b/scenes/walkabout-style/images/draw-test9.jpg
new file mode 100644 (file)
index 0000000..689e3cc
Binary files /dev/null and b/scenes/walkabout-style/images/draw-test9.jpg differ
diff --git a/scenes/walkabout-style/images/poi_icons_18@2x.png b/scenes/walkabout-style/images/poi_icons_18@2x.png
new file mode 100644 (file)
index 0000000..4da79c9
Binary files /dev/null and b/scenes/walkabout-style/images/poi_icons_18@2x.png differ
diff --git a/scenes/walkabout-style/images/relief-shading-environment-map.jpg b/scenes/walkabout-style/images/relief-shading-environment-map.jpg
new file mode 100644 (file)
index 0000000..a98c5fb
Binary files /dev/null and b/scenes/walkabout-style/images/relief-shading-environment-map.jpg differ
diff --git a/scenes/walkabout-style/walkabout-style.yaml b/scenes/walkabout-style/walkabout-style.yaml
new file mode 100644 (file)
index 0000000..2c56389
--- /dev/null
@@ -0,0 +1,7586 @@
+# Terrain environment map demo
+
+labels-global:
+    - &text_visible_continent         true
+    - &text_visible_island            true
+    - &text_visible_admin             true
+    - &text_visible_populated_places  true
+    - &icon_visible_populated_places  true
+    - &text_visible_neighbourhoods    true
+    - &text_visible_neighbourhoods_e  true
+    - &text_visible_building          true
+    - &text_visible_address           true
+    - &text_visible_water_labels      true
+    - &label_visible_landuse_green    true
+    - &icon_visible_landuse_green     true
+    - &text_visible_landuse_green     true
+    - &label_visible_poi_landuse      true
+    - &icon_visible_poi_landuse       true
+    - &text_visible_poi_landuse       true
+    - &label_visible_poi_landuse_e    true
+    - &icon_visible_poi_landuse_e     true
+    - &text_visible_poi_landuse_e     true
+    - &label_visible_station          true
+    - &icon_visible_station           true
+    - &text_visible_station           true
+    - &text_visible_highway           true
+    - &text_visible_highway_e         true
+    - &text_visible_trunk_primary     true
+    - &text_visible_trunk_primary_e2  true
+    - &text_visible_trunk_primary_e   true
+    - &text_visible_secondary         true
+    - &text_visible_secondary_e       true
+    - &text_visible_tertiary          true
+    - &text_visible_tertiary_e        true
+    - &text_visible_minor_road        true
+    - &text_visible_minor_road_e      true
+    - &text_visible_service_road      true
+    - &text_visible_path              true
+    - &text_visible_piste             true
+    - &text_visible_steps             true
+    - &text_visible_aerialway         true
+    - &text_visible_shields           false
+    - &text_visible_exits             true
+    - &text_visible_exits_e           true
+    - &text_visible_airport_gate      true
+
+settings:
+    cameras:
+        - &camera_settings            { type: isometric, axis: [-.2, .2] }
+
+    lights:
+        - &light_settings             { type: directional, direction: [1, 1, -.9], diffuse: 0.5, ambient: 0.85 }
+
+    roads:
+        - &highway1                   [1.00,1.00,1.00]
+        - &highway_link1              [0.00, 0.00, 0.00]
+        - &highway_casing1            [0.894,0.906,0.914]
+        - &highway_tunnel1            [0.930,0.930,0.930]
+        - &highway_tunnel_casing1     [0.894,0.906,0.914]
+        - &highway_link_tunnel_casing1 [0.350,0.350,0.350]
+        - &ferry1                     [0.410,0.750,0.833]
+        - &rail1                      '#999'
+        - &rail1_e                    '#bbb'
+        - &rail2                      '#777'             # less important rail (service, sidings)
+        - &major_road1                [1.0, 1.0, 1.0]
+        - &major_road1b               [0.935, 0.935, 0.935]
+        - &major_road1c               white    #15%
+        - &major_road2                [0.935, 0.935, 0.935]
+        - &major_road2a               [0.935, 0.935, 0.935]
+        - &major_road2b               [0.935, 0.935, 0.935]
+        - &major_road3                [0.935, 0.935, 0.935]
+        - &major_road4                [0.00, 0.00, 0.00]
+        - &major_road5                white
+        - &major_casing1              [0.40, 0.40, 0.40]        # same as highway_casing1
+        - &major_casing2              [0.40, 0.40, 0.40]        # zoomed out
+        - &major_tunnel1              [0.930,0.930,0.930]
+        - &major_tunnel_casing1       [1.00, 1.00, 1.00]
+        - &major_route1               [0.0, 0.0, 0.0]
+        - &major_route2               [0.2, 0.2, 0.2]           # zoomed out
+        - &minor_route                [0.97, 0.97, 0.97]        # same as major_route
+        - &minor_road1                [0.935, 0.935, 0.935]     # natural earth
+        - &minor_road2                [1.00,1.00,1.00]     # natural earth, same as major_road2
+        - &minor_road3                [0.935, 0.935, 0.935]
+        - &minor_road4                [0.935, 0.935, 0.935]     # zoomed out
+        - &minor_road5                [0.935, 0.935, 0.935]     # zoomed out, again
+        - &minor_casing1              white                     # same as highway_casing1
+        - &minor_casing2              white                     # zoomed out
+        - &minor_tunnel1              [0.930,0.930,0.930]
+        - &minor_tunnel_casing1       [1.00, 1.00, 1.00]
+        - &service_road1              [0.935, 0.935, 0.935]
+        - &service_road2              white
+        - &service_road_casing1       [0.40, 0.40, 0.40]
+        - &service_road_casing2       white
+        - &path1                      [0.97, 0.97, 0.97]
+        - &path2                      [0.97, 0.97, 0.97]        # zoomed out
+        - &path_casing1               [0.40, 0.40, 0.40]
+        - &path_bridge_casing1        [0.40, 0.40, 0.40]
+        - &path_bridge_casing2        [0.40, 0.40, 0.40]        # zoomed out
+        - &path_steps1                red
+        - &path_steps1_b              '#ccc'
+        - &piste_easy                 [0.367,0.750,0.622]
+        - &piste_intermediate         [0.420,0.678,0.863]
+        - &piste_advanced             [0.450,0.450,0.450]
+        - &piste_expert               [0.450,0.450,0.450]
+
+    boundaries:
+        - &country_boundary           [1.00,1.00,1.00]
+        - &region_boundary            [1.00,1.00,1.00]
+        - &subregion_boundary         [1.00,1.00,1.00]
+        - &city_wall                  [0.682,0.682,0.682]
+        - &retaining_wall             [0.827,0.808,0.780]
+        - &snow_fence                 [0.827,0.808,0.780]
+        - &fence                      [0.827,0.808,0.780]
+        - &dam                        [0.827,0.808,0.780]
+
+    areas:
+        - &scene1      white                    # map background
+        - &water1      [0.870, 0.870, 0.870]    # water wave
+        - &water2      [0.760, 0.760, 0.760]    # water wave
+        - &water3      [0.5, 0.5, 0.5]          # playa texture
+        - &water1_o    '#fff'                   # water stroke (ocean coastline)
+        - &water2_o    '#d1d1d1'                # water stroke 2 (streams, lake outlines)
+        - &earth1      white                    # land color
+        - &earth2      '#e9e4e0'                # urban
+        - &earth2_v    false                    # urban
+        - &green1      [0.50,0.50,0.50]         # park
+        - &green1_r    '#bbbbbb'                # park roads
+        - &green1_b    [.65, .65, .65]          # park buildings
+        - &green1_bo   [.8, .8, .8]             # park building outlines
+        - &green2      [0.90,0.90,0.90]         # cemetery
+        - &green3      '#9a9a9a'                # golf course
+        - &green4      [0.90,0.90,0.90]         # farm faint
+        - &green4_v    false                    # farm faint
+        - &green5      [0.75,0.75,0.75]         # farm
+        - &green6      [0.40,0.40,0.40]         # nature reserve
+        - &green7      [0.85,0.85,0.85]         # forest
+        - &green8      [0.80,0.80,0.80]         # conservation
+        - &green9      [0.85,0.85,0.85]         # forest (landcover)
+        - &green9_e    [0.90,0.90,0.90]         # forest (landcover) early
+        - &green9_v    true                     # forest (landcover) visibility
+        - &green10     [0.85,0.85,0.85]         # sports_centre
+        - &green11     [0.85,0.85,0.85]         # minor zoo related AOIs
+        - &green11_o   [0.85,0.85,0.85]         # minor zoo related AOIs outline
+        - &orange1     '#aaaaaa'                # stadium
+        - &orange2     [0.40,0.40,0.40]         # pitch (play field)
+        - &brown1      '#7b7b7b'                # university
+        - &brown1_r    '#bbbbbb'                # university roads
+        - &brown1_b    [.65, .65, .65]          # university buildings
+        - &brown1_bo   [.8, .8, .8]             # university building outlines
+        - &brown2      '#aaaaaa'                # school
+        - &brown3      [0.40,0.40,0.40]         # playground
+        - &red1        '#a2a2a2'                # hospital
+        - &red1_r      '#bbbbbb'                # hospital roads
+        - &red1_b      [.65, .65, .65]          # hospital buildings
+        - &red1_bo     [.8, .8, .8]             # hospital building outlines
+        - &gray-all    [0.935,0.960,0.970]      # default gray for landuse outdoor style
+        - &grey1       '#cccccc'                # pedestrian, retail, airport apron, parking, church
+        - &grey1_e     '#dad6d4'                # pedestrian, retail, airport apron, parking, church early zoom 14
+        - &grey1_v     true                     # pedestrian, retail, airport apron, parking, church
+        - &grey2       [0.5, 0.5, 0.5]          # airport runway
+        - &grey3       '#bbbbbb'                # railway
+        - &grey4       '#ffc52a'                # airport taxiway
+        - &grey5       '#ffc52a'                # airport taxiway
+        - &grey6       '#dddddd'                # industrial
+        - &grey6_b     [.65, .65, .65]          # industrial buildings
+        - &grey6_bo    [.8, .8, .8]             # industrial building outlines
+        - &grey7       '#ecebe9'                # pedestrian, match minor road / path color
+        - &grey7_v     true                     # pedestrian visibility
+        - &grey8       '#ecebe9'                # winter sports
+        - &grey8_v     true                     # winter sports visibility
+        - &grey9       [.7, .0, .0, 0.5]        #[.7, .7, .7]        # transit platform
+        - &grey9_o     [.5, .5, .5]             # transit platform outline
+        - &grey9_v     true                     # transit platform visibility
+        - &grey10      '#d4cce6'                # generic major landuse (theme park, resort, aquarium, winery)
+        - &grey10_o    '#bcb9c5'                # generic major landuse outline
+        - &grey11      '#d7d7d7'                # generic minor landuse (attraction, artwork)
+        - &grey11_o    '#cccccc'                # generic minor landuse outline
+        - &grey12      '#cfcfcf'                # generic minor amusements (roller coasters, rides, slide, carousel)
+        - &grey12_o    '#c5c5c5'                # generic minor amusements
+        - &purple      '#f0e1e1'                # airport
+        - &purple_v    false                    # airport
+        - &mystry1     '#aaaaaa'                # recreation ground (type of park, sometimes around reservoirs)
+        - &building1   white                    # building
+        - &building2   white                    # building stroke
+        - &building_o  25                       # building stroke order
+        - &building_e  true                     # building stroke order
+
+    labels:
+        - &text_fill   '#000'                       # WHITE
+        - &text_fill2  '#000'                       # WHITE
+        - &text_fill_road_e   '#555'                # WHITE
+        - &text_fill_exits    [0.40,0.40,0.40]      # motorway junctions, highway_casing1
+        - &text_fill_building '#000'                # tan
+        - &text_fill_address  [0.60,0.60,0.60]      # HUH
+        - &text_fill_water   [0.354,0.531,0.620]    # blue
+        - &text_fill_park    [0.175,0.175,0.175]    # green
+        - &text_fill_beach   [0.35,0.35,0.35]      # black
+        - &text_fill_piste   [0.350,0.350,0.350]    # dark gray
+        - &text_fill_piste_e [0.350,0.350,0.350]    # dark gray early
+        - &text_stroke       [0.913,0.925,0.933]    # land color
+        - &text_stroke_park  [0.913,0.925,0.933]     # land color
+        - &text_stroke_water [0.913,0.925,0.933]
+        - &text_stroke_address   [0.913,0.925,0.933]      # address stroke color
+        - &townspot_sprite   townspot-m-rev         # depends on land color and text settings
+        - &text_font_family  'Open Sans'            # branding in asperational Unicode, yo (or Helvetica)
+
+cameras:
+    camera1: *camera_settings
+
+scene:
+    background:
+        color: [0.894,0.902,0.898]
+    # animated: true
+
+textures:
+    pois:
+        url: images/poi_icons_18@2x.png
+        filtering: mipmap
+        sprites:
+            # define sprites: [x origin, y origin, width, height]
+            airport: [952, 0, 38, 38]
+            allotments: [552, 252, 38, 38]
+            aquarium: [916, 168, 38, 38]
+            art-gallery: [824, 168, 38, 38]
+            athletics-sports: [368, 168, 38, 38]
+            atm: [92, 168, 38, 38]
+            attraction: [550, 210, 38, 36]
+            automotive-shop: [184, 168, 38, 38]
+            bakery: [732, 168, 38, 38]
+            bank: [138, 168, 38, 36]
+            bar: [414, 168, 38, 38]
+            baseball-field: [690, 84, 38, 38]
+            basketball-court: [644, 84, 38, 38]
+            battlefield: [826, 210, 38, 38]
+            bbq: [230, 252, 38, 38]
+            beach: [828, 84, 38, 38]
+            beach-resort: [734, 210, 38, 38]
+            beer-garden: [458, 210, 38, 38]
+            bench: [630, 0, 38, 38]
+            bicycle-parking: [828, 126, 38, 38]
+            bike-shop: [46, 168, 38, 38]
+            boat-ferry: [906, 0, 38, 38]
+            boat-ramp: [276, 84, 40, 38]
+            boat-rental: [598, 252, 38, 38]
+            bookstore: [0, 168, 38, 38]
+            bridge: [92, 126, 38, 38]
+            buddhism: [966, 84, 38, 38]
+            building: [598, 168, 34, 34]
+            burger: [320, 210, 38, 38]
+            bus-station: [860, 0, 38, 38]
+            butcher: [46, 84, 38, 38]
+            campground: [0, 126, 38, 38]
+            candy-store: [182, 210, 38, 38]
+            capital-l: [146, 294, 16, 16]
+            capital-m: [126, 294, 12, 12]
+            capital-s: [106, 294, 10, 10]
+            capital-xl: [170, 294, 20, 20]
+            capital-xs: [92, 294, 8, 8]
+            car-dealership: [964, 126, 38, 38]
+            caravan-site: [964, 210, 38, 38]
+            castle: [506, 42, 38, 38]
+            cemetery: [920, 84, 38, 38]
+            church: [414, 126, 38, 38]
+            clothing-store: [0, 210, 38, 38]
+            coffee-shop: [686, 168, 38, 36]
+            college-university: [46, 210, 38, 38]
+            convenience-store: [184, 84, 38, 38]
+            courthouse: [446, 0, 38, 38]
+            current-location: [702, 294, 88, 86]
+            dentist: [266, 0, 34, 34]
+            department-store: [918, 126, 38, 38]
+            doctors: [224, 0, 34, 34]
+            dog-park: [138, 252, 38, 38]
+            dot-black: [0, 294, 38, 38]
+            dot-white: [966, 252, 38, 38]
+            drinking-water: [412, 210, 38, 38]
+            dry-cleaning: [138, 84, 38, 38]
+            electronics-store: [782, 126, 38, 38]
+            factory: [552, 168, 38, 38]
+            fire-station: [400, 0, 38, 38]
+            firepit: [92, 252, 38, 38]
+            fishing-area: [0, 252, 38, 38]
+            fitness: [0, 84, 38, 38]
+            flower-shop: [368, 126, 38, 38]
+            forest: [228, 210, 38, 38]
+            fountain: [506, 126, 38, 38]
+            garden: [874, 84, 38, 38]
+            gas: [736, 252, 38, 38]
+            gas-station: [136, 210, 38, 38]
+            generic: [46, 294, 38, 38]
+            geyser: [688, 210, 38, 38]
+            gift-shop: [322, 126, 38, 38]
+            golf-course: [598, 84, 38, 38]
+            government-building: [322, 168, 38, 38]
+            grocery-store: [736, 126, 38, 38]
+            harbor-marina: [276, 168, 40, 38]
+            hardware-store: [966, 42, 38, 38]
+            historic-site: [276, 126, 38, 38]
+            hospital: [182, 0, 34, 34]
+            hot-spring: [460, 84, 38, 38]
+            hotel: [814, 0, 38, 38]
+            hunting: [642, 210, 38, 38]
+            ice-cream-shop: [504, 210, 38, 38]
+            information: [596, 210, 38, 36]
+            jewelry-store: [828, 42, 38, 38]
+            landmark: [354, 0, 38, 38]
+            laundry: [782, 42, 38, 38]
+            library: [0, 0, 38, 38]
+            light-rail: [768, 0, 38, 38]
+            lighthouse: [414, 84, 38, 38]
+            liquor-store: [690, 126, 38, 38]
+            locate-off: [80, 426, 72, 70]
+            locate-on: [0, 426, 72, 70]
+            mall: [736, 42, 38, 38]
+            market: [690, 42, 38, 38]
+            mine: [874, 42, 38, 38]
+            mobile-phone-shop: [598, 42, 38, 38]
+            mosque: [90, 0, 38, 38]
+            motorcycle: [368, 252, 38, 38]
+            mountain: [368, 84, 38, 38]
+            movie-theatre: [962, 168, 38, 38]
+            museum: [230, 126, 38, 38]
+            music-store: [460, 42, 38, 38]
+            newsstand: [414, 42, 38, 38]
+            observatory: [690, 252, 38, 38]
+            office: [782, 84, 38, 38]
+            optical-shop: [368, 42, 38, 38]
+            outdoor: [828, 252, 38, 38]
+            park: [460, 126, 38, 38]
+            parking: [874, 126, 38, 36]
+            performing-arts: [778, 168, 38, 38]
+            pet-store: [322, 42, 38, 38]
+            pharmacy: [92, 84, 38, 38]
+            photography-lab: [276, 42, 38, 38]
+            picnic-spot: [322, 252, 38, 38]
+            pier: [722, 0, 38, 38]
+            playground: [552, 42, 38, 38]
+            police: [308, 0, 38, 38]
+            pool: [322, 84, 38, 38]
+            post-office: [506, 168, 38, 38]
+            quarry: [920, 42, 40, 38]
+            ranger-station: [276, 252, 38, 38]
+            real-estate: [230, 42, 38, 38]
+            recreation-track: [460, 252, 38, 38]
+            recycling-facility: [184, 42, 38, 38]
+            rental-car: [676, 0, 38, 38]
+            restaurant: [274, 210, 38, 38]
+            route-arrow: [408, 294, 128, 128]
+            route-start: [622, 294, 72, 92]
+            route-stop: [544, 294, 72, 92]
+            ruin: [584, 0, 38, 38]
+            salon-barber: [138, 42, 38, 38]
+            school: [736, 84, 38, 38]
+            scuba-diving: [782, 252, 38, 38]
+            search-active: [796, 294, 72, 108]
+            search-inactive: [876, 294, 72, 108]
+            shoe-store: [644, 42, 38, 38]
+            shower: [918, 210, 38, 38]
+            ski-area: [552, 126, 38, 38]
+            slipway: [872, 210, 38, 38]
+            soccer-field: [552, 84, 38, 38]
+            spiritual-center: [460, 168, 38, 38]
+            sporting-goods-shop: [92, 42, 38, 38]
+            spring: [506, 84, 38, 38]
+            stadium: [644, 126, 38, 38]
+            subway-entrance: [538, 0, 38, 38]
+            summer-camp: [506, 252, 38, 38]
+            swimming-area: [46, 252, 38, 38]
+            synagogue: [44, 0, 38, 38]
+            tailor-shop: [46, 42, 38, 38]
+            telescope: [644, 252, 38, 38]
+            tennis: [598, 126, 38, 38]
+            theme-park: [184, 126, 38, 38]
+            toilets: [46, 126, 38, 38]
+            townspot-l: [356, 294, 16, 16]
+            townspot-l-rev: [250, 294, 16, 16]
+            townspot-m: [336, 294, 12, 12]
+            townspot-m-rev: [230, 294, 12, 12]
+            townspot-s: [318, 294, 10, 10]
+            townspot-s-rev: [212, 294, 10, 10]
+            townspot-xl: [380, 294, 20, 20]
+            townspot-xl-rev: [274, 294, 20, 20]
+            townspot-xs: [302, 294, 8, 8]
+            townspot-xs-rev: [198, 294, 6, 6]
+            toy-game-store: [0, 42, 38, 38]
+            traffic-signal: [92, 210, 36, 34]
+            trailhead: [874, 252, 38, 38]
+            train-station: [492, 0, 38, 38]
+            tree: [920, 252, 38, 38]
+            veterinarian: [136, 0, 38, 38]
+            view-point: [870, 168, 40, 38]
+            vineyard: [230, 168, 40, 38]
+            volcano: [230, 84, 38, 38]
+            water-tower: [414, 252, 38, 38]
+            waterfall: [184, 252, 38, 38]
+            waterpark: [780, 210, 38, 38]
+            wine-bar: [366, 210, 38, 38]
+            winery: [640, 168, 38, 38]
+            zoo: [138, 126, 38, 38]
+
+    building-grid:
+        url: images/building-grid.gif
+        filtering: mipmap
+
+sources:
+    mapzen:
+        type: TopoJSON
+        # prod
+        url: https://vector.mapzen.com/osm/all/{z}/{x}/{y}.topojson?api_key=vector-tiles-TMwazSG
+        # earlier prod version
+        #url: https://vector.mapzen.com/osm/v0.9/all/{z}/{x}/{y}.topojson?api_key=vector-tiles-JUsa0Gc
+        # dev
+        #url:  http://vector.dev.mapzen.com/osm/all/{z}/{x}/{y}.topojson
+        # staging (proxy)
+        #url:  //localhost:8081/osm/all/{z}/{x}/{y}.topojson
+        # local tiles
+        #url:  //localhost:8080/all/{z}/{x}/{y}.topojson
+        rasters: [normals]
+        max_zoom: 16
+    normals: # normals
+        type: Raster
+        # prod
+        url: https://terrain-preview.mapzen.com/normal/{z}/{x}/{y}.png
+        # staging
+        #url: https://s3.amazonaws.com/elevation-tiles-prod/normal/{z}/{x}/{y}.png
+        # dev
+        #url: https://s3.amazonaws.com/mapzen-terrain-dev-us-east/v0.0.3/normal/{z}/{x}/{y}.png
+        #url: https://s3.amazonaws.com/mapzen-terrain-dev-us-east/v0.0.2/normal/{z}/{x}/{y}.png
+        max_zoom: 15
+
+styles:
+    highlight:
+        base: lines
+    dots-lines:
+        base: lines
+        lighting: false
+        texcoords: true
+        blend: overlay
+        shaders:
+            defines:
+                dotSize: .1
+            blocks:
+                color: |
+                    vec2 st = fract(v_texcoord.xy);
+                    st -= .5;
+                    color.a = 1.- step(dotSize, dot(st,st)*2.);
+    dashed:
+        base: lines
+        dash: [1.25, 1.25]
+        dash_background_color: [0.808,0.860,0.851]
+    dashedTunnel:
+        base: lines
+        dash: [5, 3]
+        #dash_background_color: red
+    dashedline:
+        base: lines
+        texcoords: true
+        shaders:
+            defines:
+                background: vec3(0.867, 0.867, 0.867)
+            blocks:
+                color: |
+                    // blend line 50/50 between two colors
+                    float t = fract(v_texcoord.y*.5);
+                    float e = 0.1; // edge feather
+                    vec3 v = vec3(
+                        smoothstep(.0, e, t) *
+                        (1. - smoothstep(.5, .5 + e, t))
+                    );
+                    color.rgb = mix(color.rgb, background, v);
+
+    functions-map:
+        shaders:
+            defines:
+                EPSILON: 0.0000001
+            blocks:
+                global: |
+                    float map (in float value, in float inputMin, in float inputMax, in float outputMin, in float outputMax, bool clamp) {
+                        if (abs(inputMin - inputMax) < EPSILON){
+                            return outputMin;
+                        } else {
+                            float outVal = ((value - inputMin) / (inputMax - inputMin) * (outputMax - outputMin) + outputMin);
+
+                            if( clamp ){
+                                if(outputMax < outputMin){
+                                    if( outVal < outputMax ) outVal = outputMax;
+                                    else if( outVal > outputMin ) outVal = outputMin;
+                                } else {
+                                    if( outVal > outputMax ) outVal = outputMax;
+                                    else if( outVal < outputMin ) outVal = outputMin;
+                                }
+                            }
+                            return outVal;
+                        }
+                    }
+
+                    float map (in float value, in float inputMin, in float inputMax, in float outputMin, in float outputMax) {
+                        return map(value, inputMin, inputMax, outputMin, outputMax, true);
+                    }
+    space-tile:
+        shaders:
+            blocks:
+                global: |
+                    // Variant to be add to both vertex and fragments shaders
+                    varying vec3 v_pos;
+                    //
+                    // Get the coordinates in tile space
+                    // ================================
+                    vec2 getTileCoords () {
+                        return fract(v_pos.xy);
+                    }
+                position: |
+                    // Normalize the attribute position of a vertex
+                    v_pos = modelPosition().xyz;
+
+    grids-grid:
+        shaders:
+            blocks:
+                global: |
+                    // Draw a grid in the space a specific resolution and pressition
+                    bool grid(vec2 st, float res, float press){
+                        vec2 grid = fract(st*res);
+                        return grid.x < res*press || grid.y < res*press;
+                    }
+                    //
+                    // Draw a grid in the space a specific resolution
+                    bool grid(vec2 st, float res){
+                        return grid(st, res, 1.0);
+                    }
+
+    grids-tile:
+        mix: [space-tile,grids-grid]
+        shaders:
+            blocks:
+                global: |
+                    // Draw a grid using tile coordenates in a specific resolution
+                    float tileGrid(float res){
+                        vec2 st = getTileCoords()*100.*res;
+                        float pct = 0.0;
+                        float press = .4+(1.0-fract(u_map_position.z))*0.1; //0.4
+                        if (grid(st,0.01,press)) pct += .5; //.5
+                        return pct;
+                    }
+                    // Draw two grid that smoothly interpolates acording to zooms
+                    float tileGrid(){
+                        return mix(tileGrid(1.),tileGrid(2.),fract(u_map_position.z));
+                    }
+
+    grid:
+        base: polygons
+        mix: [grids-tile]
+        shaders:
+            blocks:
+                color: |
+                    color = v_color*tileGrid();
+                    // color = vec4(v_color.r, v_color.g, v_color.b, 1.0);
+                    // color.rgba
+
+    shapes-rect:
+        shaders:
+            blocks:
+                global: |
+                    // get distance field of a rectangle in the center
+                    // ================================
+                    float rectDF(vec2 st, vec2 size) {
+                        //float aspect = u_resolution.x/u_resolution.y;
+                        st = st*2.-1.;
+                        //st.x *= aspect;
+                        return length(max(abs(st)-size,.0));
+                    }
+                    float rectDF(vec2 st, float size) {
+                        //float aspect = u_resolution.x/u_resolution.y;
+                        st = st*2.-1.;
+                        //st.x *= aspect;
+                        return length(max(abs(st)-size,.0));
+                    }
+
+                    // Draw a round corners rectangle in the center
+                    // ================================
+                    float rect(vec2 st, vec2 size, float radio) {
+                        radio = max(.000001, radio);
+                        return 1.0-step(radio, rectDF(st, size-radio));
+                    }
+
+                    float rect(vec2 st, float size, float radio) {
+                        return rect(st,vec2(size),radio);
+                    }
+
+                    // Draw a rectangle in the center
+                    // ================================
+                    float rect(vec2 st, vec2 size){
+                        size = .25-size*.125;
+                        vec2 uv = step(size,st*(1.0-st));
+                        return (uv.x*uv.y);
+                    }
+
+                    float rect(vec2 st, float size){
+                        return rect(st,vec2(size));
+                    }
+    shapes-cross:
+        mix: shapes-rect
+        shaders:
+            blocks:
+                global: |
+                    // Draw a Cross in the middle of the ST space
+                    float cross (vec2 st, float size, float width) {
+                        return  clamp(  rect(st, vec2(size*0.5,width*0.125)) +
+                                        rect(st, vec2(width*0.125,size*0.5)),0.,1.);
+                    }
+                    float cross(in vec2 st, float _size){
+                        return  rect(st, vec2(_size*0.5,_size*0.125)) +
+                                rect(st, vec2(_size*0.125,_size*0.5));
+                    }
+                    float cross(in vec2 st, vec2 _size){
+                        return  rect(st, vec2(_size.x*0.5,_size.y*0.125)) +
+                                rect(st, vec2(_size.y*0.125,_size.x*0.5));
+                    }
+    # terrain:
+    #     base: polygons
+    #     # mix: [grid]
+    #     raster: normal
+    #     shaders:
+    #         uniforms:
+    #             # u_envmap: images/relief-shading-environment-map.jpg
+    #             u_envmap: images/draw-test8.jpg
+    #             u_scale: 4.5 # higher values are more exaggerated
+    #             # z0 = 0.0001
+    #             # z1 = 0.0001
+    #             # z2 = 3.5
+    #             # z3 = 4.5
+    #             # z4 = 4.5
+    #             # z5 = 4.
+    #             # z6 = 3.5
+    #             # z7 = 2.5
+    #             # z8 = 2.5
+    #             # z9 = 2.
+    #             # z10 = 1.7
+    #             # z11 = 1.5
+    #             # z12 = 1.5
+    #             # z13 = 1.3
+    #             # z14 = 1.2
+    #             # z15 = 1.
+    #             # z16 = 0.8
+    #             # z17 = 0.4
+    #             # z17.8 = 0.1
+    #             # z18+ = 0.001
+    #             u_scale_end: 0.001
+    #             u_scale_fade_start: 3.
+    #             u_scale_fade_duration: 15.
+    #             u_color: [.9, .9, .9]
+    #             u_color_fade_start: 20.
+    #             u_color_fade_duration: 1.
+    #         blocks:
+    #             global: |
+    #                 // Simplified view-independent environment map
+    #                 vec4 terrainEnvmap (in sampler2D _tex, in vec3 _normal) {
+    #                     const vec3 eye = vec3(0.,0.,-1.);
+    #                     vec3 r = reflect(eye, _normal);
+    #                     r.z += 1.0;
+    #                     float m = 2. * length(r);
+    #                     vec2 uv = r.xy / m + .5;
+    #                     return texture2D(_tex, uv);
+    #                 }
+    #             color: |
+    #                 normal.z /= u_scale; // turn terrain exaggeration up/down
+    #                 // fade out spheremap normals
+    #                 float m = clamp((u_scale_fade_start + u_scale_fade_duration - u_map_position.z) * 1./u_scale_fade_duration, u_scale_end, u_scale);
+    #                 normal.z /= m;
+
+    #                 normal = normalize(normal);
+    #                 color = terrainEnvmap(u_envmap, normal);
+    #                 color *= v_color; // apply layer color
+    #                 // fade from spheremap to a solid color
+    #                 float c = clamp((u_map_position.z - u_color_fade_start) * 1./u_color_fade_duration, 0., 1.);
+    #                 color.rgb = mix(color.rgb, u_color, c);
+
+    terrain:
+        base: polygons
+        # mix: [grid]
+        raster: normal
+        shaders:
+            uniforms:
+                # u_envmap: images/relief-shading-environment-map.jpg
+                u_envmap: images/draw-test9.jpg
+                u_contrast: 1.
+                u_brightness: 1.
+            blocks:
+                global: |
+                    // Simplified view-independent environment map
+                    vec4 terrainEnvmap (in sampler2D _tex, in vec3 _normal) {
+                        const vec3 eye = vec3(0.,0.,-1.);
+                        vec3 r = reflect(eye, _normal);
+                        r.z += 1.;
+                        float m = 2. * length(r);
+                        vec2 uv = r.xy / m + .5;
+                        return texture2D(_tex, uv);
+                    }
+                    const float e = 2.71828;
+                color: |
+                    // scale up normals with a function
+                    // https://www.desmos.com/calculator/bv4mzh8erz
+                    //float scale = 10./(u_map_position.z-.7) + 1.8;
+                    float scale1 = 20./(u_map_position.z) + 1.5;
+                    normal.z /= scale1; // turn terrain exaggeration up/down
+                    // fade out spheremap normals with a function
+                    // https://www.desmos.com/calculator/ptgkzcnfyc
+                    float m = 3.5 * (u_map_position.z - 0.8) * pow(e, u_map_position.z * -.29);
+                    m = clamp(m, 0., 1.5);
+                    color = terrainEnvmap(u_envmap, normal);
+
+                    // Apply contrast
+                    float contrast = m;
+                    color.rgb = ((color.rgb - 0.5) * max(contrast, 0.)) + 0.5;
+                    // Apply brightness
+                    float brightness = .5 - m * .5;
+                    color.rgb += brightness;
+
+                    color *= v_color; // apply layer color
+
+    water-grid:
+        mix: grid
+        shaders:
+            blocks:
+                color: |
+                    color = v_color;
+                    color.rgb -= vec3(tileGrid());
+                    vec4 linecolor = vec4(0.489,0.776,0.820,1.0);
+                    vec4 colorlines = linecolor * tileGrid();
+                    color += colorlines;
+
+    # HSV/RGB functions
+    hsv:
+        shaders:
+            blocks:
+                global: |
+                    vec3 rgb2hsv(vec3 c)
+                    {
+                        vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
+                        vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
+                        vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
+                        float d = q.x - min(q.w, q.y);
+                        float e = 1.0e-10;
+                        return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
+                    }
+                    vec3 hsv2rgb(vec3 c)
+                    {
+                        vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
+                        vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
+                        return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
+                    }
+
+    scale-buildings:
+        shaders:
+            blocks:
+                position: |
+                    // scale buildings based on zoom
+                    float zoom = u_map_position.z;
+                    float min = .1;       // minimum building scale
+                    float midpoint = 16.; // middle of zoom range
+                    float inspeed = .1;   // number of zooms to scale buildings up
+                    float outspeed = 2.;  // number of zooms to scale buildings back down
+                    float e = 0.;
+
+                    if (zoom >= midpoint) {
+                        e = (zoom - midpoint) / (outspeed * .2);
+                    } else {
+                        e = abs(zoom - midpoint) / inspeed;
+                    }
+                    position.z *= ((1. - min) / (1. + (exp(e)))) + min;
+
+    building-grid:
+        base: polygons
+        lighting: false
+        mix: [hsv, scale-buildings]
+        texcoords: true
+        shaders:
+            uniforms:
+                u_tex_grid: building-grid
+            defines:
+                WALL_TINT: vec3(0.950, 0.950, 0.950)
+            blocks:
+                color: |
+                    if (dot(vec3(0., 0., 1.), worldNormal()) < 1.0 - TANGRAM_EPSILON) {
+                        // If it's a wall
+                        color.rgb = hsv2rgb(rgb2hsv(color.rgb) * WALL_TINT);
+                        color.rgb = mix(color.rgb, vec3(0.),
+                                        texture2D(u_tex_grid, v_texcoord).a);
+                    }
+
+    building-lines:
+        base: lines
+        mix: scale-buildings
+        texcoords: true
+
+
+    terrain-muted:
+        mix: grid-on-terrain
+        shaders:
+            uniforms:
+                u_scale: 1 # turn down the terrain
+
+    terrain-grid:
+        mix: grid-on-terrain
+        shaders:
+            uniforms:
+                u_scale: 2
+
+    grid-on-terrain:
+        mix: [grids-tile, terrain]
+        shaders:
+            blocks:
+                color: |
+                    color -= v_color*tileGrid();
+                    vec4 linecolor = vec4(0.489,0.776,0.820,1.0);
+                    color += linecolor * tileGrid();
+    dots-terrain:
+        mix: [space-tile, functions-map, terrain, shapes-cross]
+        shaders:
+            blocks:
+                color: |
+                    // Brightness
+                    float brightness2 = dot(normal, vec3(-0.838,-1.010,0.805));
+
+                    brightness2 = 1.-brightness2;
+
+                    // Scale
+                    float scale2 = map(floor(u_map_position.z), 8., 22., 0.0000001, .1, true);
+                    vec2 st = worldPosition().xy*scale2;
+
+
+                    // PATERNS
+                    float pct = 0.0;
+
+                    // Stripes
+                    // pct = step(brightness2*4.556,cos((st.x+st.y)));
+
+
+                    // Cell patterns
+                    st.x += step(1., mod(st.y,2.0)) *.5;
+                    vec2 f_st = fract(st);
+                    f_st -= .5;
+
+                    // Dots
+                     pct = step(brightness2*2.056,1.-dot(f_st,f_st)*10.400);
+
+                    // Lines
+                    // pct = rect(f_st+0.5,vec2(0.704,brightness2*0.472));
+
+                    // Cross
+                    //pct = cross(f_st+0.5,brightness2*6.128,brightness2*2.604);
+
+                    // Use this if you tint
+                    // if (pct < .5) {
+                        // discard;
+                    // }
+
+                    color.rgb = mix(color.rgb, v_color.rgb ,pct);
+
+    icons:
+        base: points
+        texture: pois
+        blend_order: 1
+    text-blend-order:
+        base: text
+        blend_order: 1
+    lines_transparent:
+        base: lines
+        blend: overlay
+    polygons_transparent:
+        base: polygons
+        blend: overlay
+
+
+layers:
+    earth:
+        data: { source: mapzen}
+        draw:
+            terrain:
+                order: function() { return feature.sort_key; }
+                color: [1.0, 1.0, 1.0]
+
+    water:
+        data: { source: mapzen, layer: water }
+        draw:
+            polygons:
+                #interactive: true
+                order: function() { return feature.sort_key; }
+                #color: [0.608,0.925,0.965]
+        later:
+            filter: { $zoom: { min: 12 } }
+            draw:
+                polygons:
+                    order: function() { return feature.sort_key + 1; }
+                    #color: [0.608,0.925,0.965]
+
+        lakes:
+            filter:
+                all:
+                    - kind: [ocean, lake, water, riverbank, reservoir, swimming_pool]
+                # WARNING: any area filters here must match the area filters in the water_boundaries-not-ocean layer
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 1 },  area: { min: 40000000000 } }
+                    - { $zoom: { min: 2 },  area: { min: 20000000000 } }
+                    # some weird natural earth scale set transition
+                    - { $zoom: { min: 3 },  area: { min: 80000000000 } }
+                    - { $zoom: { min: 4 },  area: { min: 5000000000 } }
+                    - { $zoom: { min: 5 },  area: { min: 700000000 } }
+                    - { $zoom: { min: 6 },  area: { min: 500000000 } }
+                    - { $zoom: { min: 7 },  area: { min: 160000000 } }
+                    - { $zoom: { min: 8 },  area: { min: 40000000 } }
+                    - { $zoom: { min: 9 },  area: { min: 10000000 } }
+                    - { $zoom: { min: 10 }, area: { min: 8000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 2000000 } }
+                    - { $zoom: { min: 12 }, area: { min: 200000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 2000 } }
+                    - { $zoom: { min: 15 } }
+            draw:
+                polygons:
+                    # color: [0.608,0.925,0.965] ## original color
+                    # color: [0.528,0.902,0.960] ## more saturated
+                    color: [0.432,0.890,0.960] ## even more saturated
+        playas:
+            filter: { kind: playa, $zoom: {min: 6} }
+            draw:
+                dashedline:
+                    order: function() { return feature.sort_key; }
+                    color: grey
+                    width: 1px
+                polygons_transparent:
+                    color: [0.85,0.85,0.85, 0.5]
+        other-water-areas:
+            filter: { not: { kind: [ocean, lake, water, reservoir, playa] }, $zoom: { min: 11 }, area: { min: 100 } }
+            draw:
+                polygons:
+                    color: [0.432,0.890,0.960]
+        swimming_pool:
+            filter: { kind: swimming_pool }
+            draw:
+                polygons:
+                    color: [0.432,0.890,0.960]
+        water-boundary-ocean-early:
+            filter: { boundary: yes, kind: ocean, $zoom: {min: 1, max: 17} }
+            draw:
+                lines:
+                    order: function() { return feature.sort_key; }
+                    color: [0.431,0.806,0.914]
+                    width: 1px
+                    join: round
+        water-boundary-ocean-late:
+            filter: { boundary: yes, kind: ocean, $zoom: {min: 17} }
+            draw:
+                lines:
+                    order: function() { return feature.sort_key; }
+                    color: [0.431,0.806,0.914]
+                    width: 1px
+                    join: round
+        water_boundaries-not-ocean:
+            # filter: { boundary: yes, not: { kind: [ocean,playa] }, $zoom: { min: 8 } }
+            filter:
+                all:
+                    - boundary: yes
+                    - not: { kind: [ocean,playa] }
+                    - $zoom: { min: 8}
+                # WARNING: any area filters here must match the area filters in the lakes layer
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 1 },  area: { min: 40000000000 } }
+                    - { $zoom: { min: 2 },  area: { min: 20000000000 } }
+                    # some weird natural earth scale set transition
+                    - { $zoom: { min: 3 },  area: { min: 80000000000 } }
+                    - { $zoom: { min: 4 },  area: { min: 5000000000 } }
+                    - { $zoom: { min: 5 },  area: { min: 700000000 } }
+                    - { $zoom: { min: 6 },  area: { min: 500000000 } }
+                    - { $zoom: { min: 7 },  area: { min: 160000000 } }
+                    - { $zoom: { min: 8 },  area: { min: 40000000 } }
+                    - { $zoom: { min: 9 },  area: { min: 10000000 } }
+                    - { $zoom: { min: 10 }, area: { min: 8000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 2000000 } }
+                    - { $zoom: { min: 12 }, area: { min: 200000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 2000 } }
+                    - { $zoom: { min: 15 } }
+            draw:
+                lines:
+                    order: function() { return feature.sort_key; }
+                    # color: [0.625,0.806,0.822]
+                    color: [0.431,0.806,0.914]
+                    width: 1px
+                    join: round
+            early:
+                filter: { $zoom: { min: 14 } }
+                draw:
+                    lines:
+                        order: 241
+            swimming-pools-early:
+                filter: { kind: swimming_pool, $zoom: { max: 19 } }
+                draw:
+                    lines:
+                        visible: false
+            riverbank:
+                # river boundaries like the thames in london, la seine in paris
+                filter: { kind: riverbank }
+                draw:
+                    lines:
+                        color: [0.431,0.806,0.914]
+                        width: 1px
+        river:
+            #river center lines, not boundaries for polygons
+            filter: { kind: [river,canal,stream,dam,ditch,drain], $zoom: { min: 11 }, not: { is_tunnel: true } }
+            draw:
+                lines:
+                    order: function() { return feature.sort_key; }
+                    interactive: true
+                    color: [[10,[0.472,0.834,0.890]],[14,[0.511,0.877,0.930]]]
+                    # color: [0.592,0.929,0.961]
+                    #color: [[11,[0.753,0.820,0.835]],[12,[0.710,0.800,0.824]],[13,[0.886,0.937,0.988]]]
+                    #width: [[14,2.5px],[15,4.0px],[17,8.0px],[18,10.0px]]
+                    width: [[10,0px],[11,0.75px],[12,1.0px],[13,1.25px],[14,2.25px],[15,3px],[16,4px],[17,5m]]
+                    cap: round
+                    outline:
+                        #color: [[11,[0.671,0.788,0.812]],[13,[0.710,0.800,0.824]],[14,[0.635,0.812,0.843]]]
+                        width: [[9,0px],[11,0px],[12,0px],[13,0.5px],[14,0.75px],[15,0.75px],[16,0.75px],[17,1px]]
+            not-river-early:
+                filter: { $zoom: [11,12], not: { kind: river } }
+                draw:
+                    lines:
+                        width: [[11,0px], [12,0.6px]]
+            intermittent:
+                filter:
+                    any:
+                        - intermittent: yes
+                        - kind: drain
+                draw:
+                    lines:
+                        visible: false
+                    dots-lines:
+                        interactive: true
+                        order: function() { return feature.sort_key; }
+                        color: [[10,[0.472,0.834,0.890]],[14,[0.511,0.877,0.930]]]
+                        width: [[10,0px],[11,0.5px],[12,1px],[13,2px],[14,3px],[15,4px],[16,5px]]
+
+    water-line-labels:
+        data: { source: mapzen, layer: [water] }
+        filter:
+            all:
+                - name: true
+                - $geometry: line
+                - kind: [river,canal,stream,dam,ditch,drain]
+                - $zoom: { min: 11 }
+        draw:
+            text-blend-order:
+                font:
+                    fill: *text_fill_water
+                    family: *text_font_family
+                    style: italic
+                    weight: 400
+                    size: [[12,11px],[13,12px]]
+        water-line-labels-z17:
+            filter: { $zoom: [17] }
+            draw:
+                text-blend-order: { font: { size: 14px } }
+        not-river-not-stream:
+            filter: { kind: [canal,dam,ditch,drain], $zoom: { max: 14 } }
+            draw:
+                text-blend-order:
+                    visible: false
+        stream:
+            filter: { kind: [stream], $zoom: { max: 14 } }
+            draw:
+                text-blend-order:
+                    visible: false
+
+    subway-light-rail:
+        data: { source: mapzen, layer: transit }
+        filter: { not: { kind: [platform] }, $zoom: { min: 14 } }
+        draw:
+            lines:
+                interactive: true
+                order: function() { return feature.sort_key || 275; }
+        railway:
+            filter: { kind: [railway,train] }
+            draw:
+                lines:
+                    color: [[14,[0.653,0.758,0.786]], [17,[0.670,0.777,0.807]]]
+                    width: [[14,0.4px],[15,0.75px],[16,1.1px],[18,2px],[19,1m]]
+        subway:
+            filter: { kind: subway }
+            draw:
+                lines:
+                    color: [[14,[0.653,0.758,0.786]], [17,[0.670,0.777,0.807]]]
+                    width: [[14,0.4px],[15,0.75px],[16,1.3px],[17,1.5px],[18,2m]]
+        light_rail:
+            filter: { kind: [light_rail,tram], $zoom: { min: 15 } }
+            draw:
+                lines:
+                    order: 415
+                    color: [[14,[0.653,0.758,0.786]], [17,[0.670,0.777,0.807]]]
+                    width: [[14,0px],[15,0.6px],[16,0.75px],[17,1.5px],[19,1m]]
+
+    railway-late:
+        data: { source: mapzen, layer: roads }
+        filter: { kind: rail, not: { railway: [subway,light_rail,tram] } }
+        draw:
+            lines:
+                interactive: true
+                order: function() { return feature.sort_key; }
+                color: [0.588,0.671,0.698]
+                width: [[12,0px],[13,0.25px],[14,0.4px],[15,0.75px],[16,0.75px],[18,1m]]
+        service:
+            filter: { service: true }
+            draw:
+                lines:
+                    color: [[14,[0.653,0.758,0.786]], [17,[0.670,0.777,0.807]]]
+                    width: [[14,0px],[15,0.3px],[16,0.5px],[18,0.75px],[19,0.5m]]
+        z-order:
+            #filter: { $zoom: {min: 12} }
+            draw:
+                lines:
+                    # let roads sort themselves past zoom 14
+                    order: function() { return feature.sort_key; }
+                    # but give them all the same outline
+                    outline:
+                        order: 354
+
+            bridges-tunnels:
+                filter: { any: [is_bridge: yes, is_tunnel: yes] }
+                draw:
+                    lines:
+                        outline:
+                            # except bridges and tunnels, their outlines should also self-sort
+                            order: function() { return feature.sort_key || 305; }
+
+    roads:
+        data: { source: mapzen, layer: roads }
+        filter: { not: { kind: rail } }
+        draw:
+            lines:
+                interactive: true
+                #color: black
+                width: 1px
+                order: function() { return feature.sort_key; }
+                # but give them all the same outline
+                outline:
+                    order: 352
+            text-blend-order:
+                visible: false    # labels are enabled by each layer below
+                font:
+                    family: *text_font_family
+                    weight: 500
+                    fill: *text_fill
+
+        early:
+            filter: { $zoom: { max: 15 } }
+            draw:
+                lines:
+                    outline:
+                        order: function() { return feature.sort_key; }
+        bridges-tunnels:
+            filter: { any: [is_bridge: yes, is_tunnel: yes] }
+            draw:
+                lines:
+                    #cap: butt
+                    outline:
+                        # except bridges and tunnels, their outlines should also self-sort
+                        order: function() { return feature.sort_key; }
+
+        # default outlines starting at zoom 16
+        default-outline-width:
+            filter: { $zoom: { min: 16 } }
+            draw:
+                lines:
+                    outline:
+                        width: function () { return 3/16 * Math.log($zoom); }
+
+        natural_earth_highways:
+            filter: { source: 'naturalearthdata.com' }
+            draw:
+                lines:
+                    color: [[5, [0.5,0.5,0.5]],[6, [0.350,0.350,0.350]]]
+                    width: [[5, 0.5px], [6, 0.5px], [7, 0.75px], [9, 1.5px], [14, 1.5px], [16, 4px], [17, 10m]]
+                    outline:
+                        color: *highway_casing1
+                        width: [[9, 0px], [10, 0px], [12, 1px], [16, 2px]]
+            major_road:
+                filter: { type: ['Secondary Highway','Road'] }
+                draw:
+                    lines:
+                        color: [[5, [0.75,0.75,0.75]], [8, [0.4,0.4,0.4]], [13, [0.4,0.4,0.4]], [17, *major_road1]]
+                        #color: red
+                        width: [[5, 0.25px], [7, 0.5px], [7, 0.75px], [9, 1px], [10, 9px], [11, 9px], [13, 1px], [16, 2.5px], [19, 6m]]
+                        outline:
+                            width: [[8, 0.0px], [9, 0.0px], [11, .5px], [16, .75px]]
+            minor_road:
+                filter: { type: 'Unknown' }
+                draw:
+                    lines:
+                        color: [[12, *minor_road1], [17, *minor_road2]]
+                        width: [[12, 1.0px], [14, 1.5px], [15, 3px], [16, 5m]]
+                        # outline:
+                        #     width: [[12, 0px], [14, .5px], [17, 1px]]
+            ferry:
+                filter: { kind: Ferry }
+                draw:
+                    lines:
+                        color: *ferry1
+                        width: [[12, 0.5px], [13, 0.75px], [15, 1.0px]]
+                        outline:
+                            width: 0px
+        highway:
+            filter: { kind: highway }
+            draw:
+                lines:
+                    color: [[8, [0.408,0.430,0.461]], [14, [0.408,0.430,0.461]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                    width: [[8, 1px], [12, 1.25px], [13, 1.5px], [14, 0px], [15, 1px], [16, 5px], [17, 10px], [18, 10m]]
+                    outline:
+                        color: [[8, [0.894,0.906,0.914]], [13, [0.408,0.430,0.461]], [14, [0.408,0.430,0.461]], [16, [0.408,0.430,0.461]]]
+                        width: [[8,0px], [13,0px], [14,1px], [15,2px], [16, 3px], [17, 4px], [18, 5px]]
+                #dashedTunnel:
+                #    width: [[8, 1px], [12, 1.25px], [13, 1.5px], [14, 0px], [15, 1px], [16, 5px], [17, 10px], [18, 10m]]
+            link:
+                filter: { is_link: yes } # on- and off-ramps, etc
+                draw:
+                    lines:
+                        #color: *highway_link1
+                        color: [[9, [0.50,0.50,0.50]], [13, [0.408,0.430,0.461]], [14, [1.0,1.0,1.0]], [15, [1.0,1.0,1.0]]]
+                        width: [[9, 0px], [11, 0.15px], [12, 0.5px], [13, 0.75px], [14, 0px], [15, 1px], [16, 2.5px], [17, 4px], [18, 8px], [19, 8px]]
+                        outline:
+                            color: [[9,[0.894,0.906,0.914]], [13, [0.408,0.430,0.461]], [14, [0.408,0.430,0.461]], [15, [0.408,0.430,0.461]]]
+                            width: [[9, 0px], [13, 0px], [14, 0.5px], [15, 1px], [16, 2px], [17, 2px], [18, 2px]]
+                early_link:
+                    filter: { $zoom: {min: 13, max: 15} }
+                    draw:
+                        lines:
+                            order: 352
+                tunnel-link:
+                    filter: {is_tunnel: yes, $zoom: {min: 13} }
+                    draw:
+                        lines:
+                            color: [[13,[0.790,0.790,0.790]], [14,[0.820,0.820,0.820]], [15,[0.950,0.950,0.950]], [16,[0.950,0.950,0.950]]]
+                            outline:
+                                color: [0.900,0.900,0.900]
+            tunnel:
+                filter: {is_tunnel: yes, $zoom: {min: 13} }
+                draw:
+                    #dashedTunnel:
+                    #    color: blue
+                    #    order: function() { return (feature.sort_key - 1); }
+                    lines:
+                        #visible: false
+                        color: [[13,[0.710,0.710,0.710]], [14,[0.779,0.802,0.828]], [15,[0.950,0.950,0.950]], [16,[0.950,0.950,0.950]]]
+                        outline:
+                            color: [[13, [0.720,0.720,0.720]], [14, [0.770,0.770,0.770]], [15, [0.80,0.80,0.80]], [16, [0.825,0.825,0.825]]]
+            highway_bridge:
+                filter: {is_bridge: yes}
+                draw:
+                    lines:
+                        cap: round
+                        outline:
+                            cap: butt
+            labels-highway-early:
+                filter: { $zoom: [7,8,9] }
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_shields
+                        text_source: ref
+                        font:
+                            fill: [0.408,0.427,0.459]
+                            weight: 400
+                            size: 9px
+                            stroke: { color: [0.898,0.906,0.910], width: 4 }
+            labels-highway-z10:
+                filter:
+                    $zoom: 10
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_shields
+                        text_source: ref
+                        font:
+                            fill: [0.408,0.427,0.459]
+                            weight: 400
+                            size: 9px
+                            stroke: { color: [0.898,0.906,0.910], width: 4 }
+            labels-highway-z11:
+                filter:
+                    $zoom: 11
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_shields
+                        text_source: ref
+                        font:
+                            fill: [0.408,0.427,0.459]
+                            weight: 600
+                            size: 10px
+                            stroke: { color: [0.898,0.906,0.910], width: 4 }
+            labels-highway-z12:
+                filter:
+                    $zoom: 12
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_shields
+                        text_source: ref
+                        font:
+                            fill: [0.408,0.427,0.459]
+                            weight: 600
+                            size: 10px
+                            stroke: { color: [0.898,0.906,0.910], width: 4 }
+            labels-highway-z13:
+                filter:
+                    $zoom: 13
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_highway
+                        #text_source: ref
+                        text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                        font:
+                            fill: [0.408,0.427,0.459]
+                            weight: 600
+                            size: 11px
+                            stroke: { color: [0.898,0.906,0.910], width: 4 }
+            labels-highway-z14:
+                filter:
+                    $zoom: 14
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_highway
+                        #text_source: ref
+                        text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                        font:
+                            fill: [0.408,0.427,0.459]
+                            weight: 600
+                            size: 11px
+                            stroke: { color: [0.898,0.906,0.910], width: 4 }
+            labels-highway-z15:
+                filter:
+                    $zoom: 15
+                draw:
+                    text-blend-order:
+                        visible: *text_visible_highway
+                        font:
+                            fill: [1.0,1.0,1.0]
+                            weight: 600
+                            size: 12px
+                            stroke: { color: [0.408,0.427,0.459], width: 4 }
+            labels-highway-z16:
+                filter: { $zoom: { min: 16, max: 18 } }
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_highway
+                        font:
+                            fill: [1.0,1.0,1.0]
+                            weight: 600
+                            size: 13px
+                            stroke: { color: [0.408,0.427,0.459], width: 4 }
+            labels-highway-z17:
+                filter: { $zoom: { min: 17 } }
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_highway
+                        font:
+                            fill: [0.408,0.427,0.459]
+                            weight: 600
+                            size: 15px
+                            stroke: { color: [1.000,1.000,1.000], width: 4 }
+            labels-highway-z18:
+                filter: { $zoom: { min: 18 } }
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_highway
+                        font:
+                            fill: [0.408,0.427,0.459]
+                            weight: 600
+                            size: 16px
+                            stroke: { color: [1.000,1.000,1.000], width: 4 }
+            labels-highway-z19:
+                filter: { $zoom: { min: 19 } }
+                draw:
+                    text-blend-order:
+                        priority: 50
+                        visible: *text_visible_highway
+                        font:
+                            fill: [0.408,0.427,0.459]
+                            weight: 600
+                            size: 16px
+                            stroke: { color: [1.000,1.000,1.000], width: 4 }
+
+        major_road:
+            filter: { kind: major_road }
+            # default style
+            draw:
+                lines:
+                    color: [[8, *major_road4], [13, major_road2], [17, [1.0,1.0,1.0]]]
+                    width: [[13, 1px], [14, 1px], [16, 2.5px], [17,3px]]
+                    outline:
+                        width: [[12, 0px], [13, .5px], [15, 1px], [17, 2px]]
+            trunk_primary:
+                filter: { highway: [trunk, primary] }
+                draw:
+                    lines:
+                        color: [[8, [0.529,0.556,0.592]], [11, [0.529,0.556,0.592]], [14, [0.529,0.556,0.592]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                        width: [[8, 0px], [11, 0.65px], [12, 0.75px], [13, 1px], [14, 1.5px], [15, 0px], [16, 3px], [17, 6px], [18, 9m]]
+                        outline:
+                            color: [[8,[0.894,0.906,0.914]], [14, [0.529,0.556,0.592]], [15, [0.529,0.556,0.592]], [16, [0.529,0.556,0.592]], [17,[0.578,0.608,0.650]], [18,[0.714,0.733,0.760]]]
+                            width: [[8,0px], [11,0px], [14,0px], [15, 1px], [16, 1.5px], [17, 2px], [18, 4px]]
+                early:
+                    filter: { $zoom: { max: 16 } }
+                    draw:
+                        lines:
+                            order: 352
+                            outline:
+                                order: function() { return feature.sort_key + 2; }
+                    primary:
+                        filter: { kind: [primary] }
+                        draw:
+                            lines:
+                                outline:
+                                    order: function() { return feature.sort_key + 1; }
+                routes:
+                    filter: { ref: true }
+                    draw:
+                        #dashedTunnel:
+                        #    width: [[9, 0.5px], [10, 0.5px], [11, 0.75px], [12, 1.25px], [13, 1.25px], [14, 0px], [15, 1px], [16, 4px], [17, 8px], [18, 9m]]
+                        #    outline:
+                        #        color: green
+                        #        width: [[8,0px], [13,0px], [14,0.75px], [15,2px], [16, 3px], [17, 4px], [18, 4px]]
+                        lines:
+                            color: [[10, [0.508,0.530,0.561]], [11, [0.408,0.430,0.461]], [13, [0.408,0.430,0.461]], [14,[1.0,1.0,1.0]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                            width: [[9, 0.6px], [10, 0.75px], [11, 1.0px], [12, 1.1px], [13, 0.8px], [14, 0.5px], [15, 1px], [16, 4px], [17, 8px], [18, 9m]]
+                            outline:
+                                color: [[8,[0.894,0.906,0.914]], [13, [0.529,0.556,0.592]], [14, [0.529,0.556,0.592]], [15, [0.529,0.556,0.592]], [16, [0.529,0.556,0.592]], [17,[0.578,0.608,0.650]], [18,[0.714,0.733,0.760]]]
+                                width: [[8,0px], [13,0px], [14,0.75px], [15,2px], [16, 3px], [17, 4px], [18, 4px]]
+                    early:
+                        filter: { $zoom: { max: 16 } }
+                        draw:
+                            lines:
+                                order: function() { return feature.sort_key + 2; }
+                                outline:
+                                    order: 353
+                    primary-route-in-green:
+                        filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden,wood,national_park,protected_area,battlefield] }
+                        draw:
+                            lines:
+                                color: [[8, [0.408,0.430,0.461]], [11, [0.408,0.430,0.461]], [14,[0.408,0.430,0.461]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                                width: [[9, 0.6px], [10, 0.75px], [11, 1.0px], [12, 1.1px], [13, 1.2px], [14, 0.5px], [15, 1px], [16, 4px], [17, 8px], [18, 9m]]
+                                outline:
+                                    color: [[8,[0.894,0.906,0.914]], [13, [0.529,0.556,0.592]], [15, [0.529,0.556,0.592]], [16, [0.529,0.556,0.592]], [17,[0.578,0.608,0.650]], [18,[0.714,0.733,0.760]]]
+                    # national-routes:
+                    #     filter: { network: [US:US, US:I] }
+                    #     draw:
+                    #         lines:
+                    #             color: *major_route1
+                    #             #color: [[8,*major_route2],[9,major_route2],[10,*major_route1]]
+                    #             width: [[8, 1px], [10, 1.15px], [11, 1px], [12, 1px], [14, 1.75px], [15, 3px], [16, 4px], [17, 4px]]
+                    #             outline:
+                    #                 color: [1.0,1.0,1.0]
+                    #                 width: 2px
+                    tunnel:
+                        filter: {is_tunnel: yes, $zoom: {min: 13} }
+                        draw:
+                            #dashedTunnel:
+                            #    color: blue
+                            #    order: function() { return (feature.sort_key - 1); }
+                            lines:
+                                #visible: false
+                                color: [[13,[0.710,0.710,0.710]], [14,[0.779,0.802,0.828]], [15,[0.950,0.950,0.950]]] #[15,[0.744,0.764,0.792]]
+                                outline:
+                                    color: [[13, [0.720,0.720,0.720]], [14, [0.770,0.770,0.770]], [15, [0.80,0.80,0.80]], [16, [0.825,0.825,0.825]]] #[15, [0.894,0.906,0.914]]
+                    labels-trunk_primary-route-z14:
+                        filter: { $zoom: [14] }
+                        draw:
+                            text-blend-order:
+                                priority: 53
+                                visible: *text_visible_trunk_primary_e2
+                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                font:
+                                    fill: [0.495,0.511,0.532]
+                                    size: 11px
+                                    stroke: { color: *text_stroke, width: 3 }
+                    labels-trunk_primary-route-z15:
+                        filter: { $zoom: [15] }
+                        draw:
+                            text-blend-order:
+                                priority: 53
+                                visible: *text_visible_trunk_primary
+                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                font:
+                                    fill: [0.495,0.511,0.532]
+                                    weight: 600
+                                    size: 12px
+                                    stroke: { color: [0.969,0.973,0.973], width: 3 }
+                    labels-trunk_primary-route-z16:
+                        filter: { $zoom: { min: 16 } }
+                        draw:
+                            text-blend-order:
+                                priority: 53
+                                visible: *text_visible_trunk_primary
+                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                font:
+                                    fill: [0.495,0.511,0.532]
+                                    weight: 600
+                                    size: 13px
+                                    stroke: { color: [0.969,0.973,0.973], width: 4 }
+                    labels-trunk_primary-route-z17-z18:
+                        filter: { $zoom: [17,18] }
+                        draw:
+                            text-blend-order:
+                                priority: 53
+                                visible: *text_visible_trunk_primary
+                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                font:
+                                    fill: [0.495,0.511,0.532]
+                                    weight: 600
+                                    size: 13px
+                                    stroke: { color: [0.969,0.973,0.973], width: 6 }
+                    labels-trunk_primary-route-z19:
+                        filter: { $zoom: { min: 19 } }
+                        draw:
+                            text-blend-order:
+                                priority: 53
+                                visible: *text_visible_trunk_primary
+                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                font:
+                                    fill: [0.495,0.511,0.532]
+                                    weight: 600
+                                    size: 16px
+                                    stroke: { color: [0.969,0.973,0.973], width: 6 }
+                primary-in-green:
+                    filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden,wood,national_park,protected_area,battlefield] }
+                    draw:
+                        lines:
+                            color: [[8, [0.408,0.430,0.461]], [11, [0.408,0.430,0.461]], [14,[0.408,0.430,0.461]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                            width: [[9, 0.6px], [10, 0.75px], [11, 1.0px], [12, 1.1px], [13, 1.0px], [14, 0.5px], [15, 1.2px], [16, 4px], [17, 8px], [18, 9m]]
+                            outline:
+                                color: [[8,[0.894,0.906,0.914]], [14, [0.529,0.556,0.592]], [15, [0.529,0.556,0.592]], [16, [0.529,0.556,0.592]], [17,[0.578,0.608,0.650]], [18,[0.714,0.733,0.760]]]
+                                width: [[8,0px], [13,0px], [14,0.75px], [15,1.5px], [16, 3px], [17, 4px], [18, 4px]]
+                    tunnel:
+                        filter: {is_tunnel: yes, $zoom: {min: 13} }
+                        draw:
+                            lines:
+                                color: [[13,[0.670,0.670,0.670]], [14,[0.720,0.720,0.720]], [15,[0.920,0.920,0.920]], [16,[0.920,0.920,0.920]]]
+                                outline:
+                                    color: [[13,[0.894,0.906,0.914]],[14,[0.894,0.906,0.914]],[15,[0.744,0.764,0.792]]]
+                                    width: [[13, 0px], [14, 0px], [15, 1px], [16, 1.5px], [17, 2px], [18, 4px]]
+                    # golf_course:
+                    #     filter: { landuse_kind: golf_course }
+                    #     draw:
+                    #         lines:
+                    #             outline:
+                    #                 color: [[10, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17, [0.00,0.00,0.00]]]
+                    # zoo:
+                    #     filter: { landuse_kind: zoo }
+                    #     draw:
+                    #         lines:
+                    #             outline:
+                    #                 color: [[10, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17, [0.00,0.00,0.00]]]
+                labels-trunk_primary-z11:
+                    filter:
+                        $zoom: [11]
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.495,0.511,0.532]
+                                size: 9px
+                                stroke: { color: *text_stroke, width: 2 }
+                labels-trunk_primary-z12:
+                    filter:
+                        $zoom: [12]
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.495,0.511,0.532]
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 3 }
+                labels-trunk_primary-z13:
+                    filter:
+                        $zoom: [13]
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.495,0.511,0.532]
+                                size: 11px
+                                stroke: { color: *text_stroke, width: 3 }
+                labels-trunk_primary-z14:
+                    filter:
+                        $zoom: [14]
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.495,0.511,0.532]
+                                size: 11px
+                                stroke: { color: *text_stroke, width: 4 }
+                labels-trunk_primary-z15:
+                    filter: { $zoom: [15] }
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.495,0.511,0.532]
+                                size: 12px
+                                stroke: { color: [0.969,0.973,0.973], width: 4 }
+                labels-trunk_primary-z16:
+                    filter: { $zoom: [16] }
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            font:
+                                fill: [0.495,0.511,0.532]
+                                weight: 600
+                                size: 13px
+                                stroke: { color: [0.969,0.973,0.973], width: 4 }
+                labels-trunk_primary-z17:
+                    filter: { $zoom: [17] }
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            font:
+                                fill: [0.495,0.511,0.532]
+                                weight: 600
+                                size: 13px
+                                stroke: { color: [0.969,0.973,0.973], width: 6 }
+                labels-trunk_primary-z18:
+                    filter: { $zoom: { min: 18 } }
+                    draw:
+                        text-blend-order:
+                            priority: 53
+                            visible: *text_visible_trunk_primary
+                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            font:
+                                fill: [0.495,0.511,0.532]
+                                weight: 600
+                                size: [[18,13px],[19,16px]]
+                                stroke: { color: [0.969,0.973,0.973], width: 6 }
+            link:
+                filter: { is_link: yes } # on- and off-ramps, etc
+                draw:
+                    lines:
+                        color: [[8, [0.529,0.556,0.592]], [11, [0.529,0.556,0.592]], [14, [0.529,0.556,0.592]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                        width: [[10, 0.5px], [13, 0.5px], [14, 1px], [15, 0px], [16, 1.75px], [17, 2px], [18, 3px], [19, 8px]]
+                        outline:
+                            color: [[8,[0.894,0.906,0.914]], [14, [0.529,0.556,0.592]], [15, [0.529,0.556,0.592]], [16, [0.529,0.556,0.592]], [17,[0.578,0.608,0.650]], [18,[0.714,0.733,0.760]]]
+                            width: [[10, 0px], [14, 0px], [15, 0.5px], [16, 1px], [17, 1px], [18, 1px]]
+            tunnel:
+                filter: {is_tunnel: yes, $zoom: {min: 13} }
+                draw:
+                    lines:
+                        color: [[13,[0.779,0.802,0.828]], [14,[0.779,0.802,0.828]], [15,[0.744,0.764,0.792]], [16,[0.950,0.950,0.950]]]
+                        outline:
+                            color: [[13, [0.894,0.906,0.914]], [15, [0.894,0.906,0.914]], [16, [0.85,0.85,0.85]]]
+                            width: [[8,0px], [11,0px], [14,0px], [16,1.5px], [17, 3px], [18, 3px]]
+            secondary:
+                filter: { highway: secondary }
+                draw:
+                    lines:
+                        color: [[10, [0.714,0.733,0.760]], [11, [0.714,0.733,0.760]], [12, [0.533,0.555,0.586]], [13, [0.529,0.556,0.592]], [14, [0.529,0.556,0.592]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                        width: [[10, 0.5px], [12, 0.5px], [13, 0.65px], [14, 1px], [15, 0px], [16, 3px], [17, 6px], [18, 9m]]
+                        outline:
+                            color: [[10, [0.894,0.906,0.914]], [14, [0.529,0.556,0.592]], [15, [0.529,0.556,0.592]], [16, [0.529,0.556,0.592]], [17,[0.578,0.608,0.650]], [18,[0.714,0.733,0.760]]]
+                            width: [[10,0px], [14,0px], [15,1px], [16, 1.5px], [17, 2px], [18, 4px]]
+                early:
+                    filter: { $zoom: { max: 16 } }
+                    draw:
+                        lines:
+                            order: 352
+                            outline:
+                                order: 353 #function() { return feature.sort_key + 2; }
+                routes:
+                    filter: { ref: true, $zoom: { min: 10} }
+                    draw:
+                        lines:
+                            color: [[11, [0.508,0.530,0.561]], [13, [0.408,0.430,0.461]], [14, [0.408,0.430,0.461]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                            width: [[11, 0.4px], [12, 0.75px], [13, 0.75px], [14, 1px], [15, 0px], [16, 1.5px], [17, 6px], [18, 9m]]
+                            outline:
+                                color: [[10, [0.894,0.906,0.914]], [14, [0.529,0.556,0.592]], [15, [0.529,0.556,0.592]], [16, [0.529,0.556,0.592]], [17,[0.578,0.608,0.650]], [18,[0.714,0.733,0.760]]]
+                                width: [[10,0.4px], [14,0.5px], [15,0.65px], [16,1.5px], [17, 2px], [18, 4px]]
+                    early:
+                        filter: { $zoom: { max: 15 } }
+                        draw:
+                            lines:
+                                order: function() { return feature.sort_key + 2; }
+                                outline:
+                                    order: 353
+                    secondary-route-in-green:
+                        filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden,wood,national_park,protected_area,battlefield] }
+                        draw:
+                            lines:
+                                color: [[11, [0.408,0.430,0.461]], [13, [0.408,0.430,0.461]], [14, [0.408,0.430,0.461]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                                width: [[11, 0.6px], [12, 0.75px], [13, 0.75px], [14, 1px], [15, 0px], [16, 1.5px], [17, 6px], [18, 9m]]
+                                outline:
+                                    width: [[10,0.5px], [14,0.5px], [15,0.65px], [16,1.5px], [17, 2px], [18, 4px]]
+                    tunnel:
+                        filter: {is_tunnel: yes, $zoom: {min: 13} }
+                        draw:
+                            lines:
+                                color: [[13,[0.779,0.802,0.828]], [14,[0.779,0.802,0.828]], [15,[0.8,0.8,0.8]], [16,[0.85,0.85,0.85]], [17,[0.950,0.950,0.950]]]
+                                outline:
+                                    color: [[13, [0.350,0.350,0.350]], [16, [0.350,0.350,0.350]], [17, [0.85,0.85,0.85]]]
+                                    width: [[10,0px], [17, 2px], [18, 2px]]
+                    labels-secondary-routes:
+                        filter: { $zoom: [13] }
+                        draw:
+                            text-blend-order:
+                                priority: 54
+                                visible: *text_visible_secondary_e
+                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                font:
+                                    fill: [0.536,0.556,0.581]
+                                    size: 11px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    labels-secondary-routes-z14:
+                        filter: { $zoom: [14] }
+                        draw:
+                            text-blend-order:
+                                priority: 54
+                                visible: *text_visible_secondary_e
+                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                font:
+                                    fill: [0.536,0.556,0.581]
+                                    size: 11px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    labels-secondary-routes-z15:
+                        filter: { $zoom: { min: 15 } }
+                        draw:
+                            text-blend-order:
+                                priority: 54
+                                visible: *text_visible_secondary_e
+                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                font:
+                                    fill: [0.536,0.556,0.581]
+                                    weight: 600
+                                    size: 11px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    labels-secondary-routes-z16:
+                        filter: { $zoom: { min: 16 } }
+                        draw:
+                            text-blend-order:
+                                priority: 54
+                                visible: *text_visible_secondary_e
+                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                font:
+                                    fill: [0.536,0.556,0.581]
+                                    weight: 600
+                                    size: 12px
+                                    stroke: { color: [0.969,0.973,0.973], width: 4 }
+                secondary-in-green:
+                    filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden,wood,national_park,protected_area,battlefield] }
+                    draw:
+                        lines:
+                            color: [[10, [0.714,0.733,0.760]], [11, [0.714,0.733,0.760]], [12, [0.533,0.555,0.586]], [13, [0.529,0.556,0.592]], [14, [0.529,0.556,0.592]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                            outline:
+                                color: [[10, [0.894,0.906,0.914]], [14, [0.529,0.556,0.592]], [15, [0.529,0.556,0.592]], [16, [0.529,0.556,0.592]], [17,[0.578,0.608,0.650]], [18,[0.714,0.733,0.760]]]
+                    labels-secondary-in-green-z13:
+                        filter: { $zoom: { min: 13 } }
+                        draw:
+                            text-blend-order:
+                                priority: 54
+                                visible: *text_visible_secondary_e
+                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                font:
+                                    fill: [0.536,0.556,0.581]
+                                    stroke: { color: [0.843,0.961,0.914], width: 4 }
+                    labels-secondary-in-green-z17:
+                        filter: { $zoom: { min: 17 } }
+                        draw:
+                            text-blend-order:
+                                priority: 54
+                                visible: *text_visible_secondary_e
+                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                font:
+                                    fill: [0.536,0.556,0.581]
+                                    stroke: { color: [1.00,1.00,1.00], width: 4 }
+                    # golf_course:
+                    #     filter: { landuse_kind: golf_course }
+                    #     draw:
+                    #         lines:
+                    #             outline:
+                    #                 color: [[10, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17, [0.00,0.00,0.00]]]
+                    # zoo:
+                    #     filter: { landuse_kind: zoo }
+                    #     draw:
+                    #         lines:
+                    #             outline:
+                    #                 color: [[10, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17, [0.00,0.00,0.00]]]
+                labels-secondary-z13:
+                    filter:
+                        $zoom: [13]
+                    draw:
+                        text-blend-order:
+                            priority: 54
+                            visible: *text_visible_secondary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 9px
+                                stroke: { color: *text_stroke, width: 4 }
+                labels-secondary-z14:
+                    filter:
+                        $zoom: [14]
+                    draw:
+                        text-blend-order:
+                            priority: 54
+                            visible: *text_visible_secondary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 9px
+                                stroke: { color: *text_stroke, width: 4 }
+                labels-secondary-z15:
+                    filter:
+                        $zoom: [15]
+                    draw:
+                        text-blend-order:
+                            priority: 54
+                            visible: *text_visible_secondary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 10px
+                                stroke: { color: [0.969,0.973,0.973], width: 4 }
+                labels-secondary-z16:
+                    filter: { $zoom: { min: 16, max: 18 } }
+                    draw:
+                        text-blend-order:
+                            priority: 54
+                            visible: *text_visible_secondary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 12px
+                                stroke: { color: [0.969,0.973,0.973], width: 4 }
+                labels-secondary-z17:
+                    filter: { $zoom: { min: 17 } }
+                    draw:
+                        text-blend-order:
+                            priority: 54
+                            visible: *text_visible_secondary
+                            #text_source: ref
+                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 13px
+                                stroke: { color: [0.969,0.973,0.973], width: 4 }
+            tertiary:
+                filter: { highway: [tertiary, tertiary_link] }
+                draw:
+                    lines:
+                        color: [[11, [0.714,0.733,0.760]], [12, [0.633,0.655,0.686]], [13, [0.529,0.556,0.592]], [14,[0.529,0.556,0.592]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                        width: [[11, 0.5px], [12, 0.65px], [13, 0.65px], [14, 1px], [15, 0px], [16, 1px], [17, 6px], [18, 9m]]
+                        outline:
+                            color: [0.529,0.556,0.592]
+                            width: [[11, 0px], [14, 0px], [15, 0.75px], [16, 1.5px], [17, 2px], [18, 3px]]
+                early:
+                    filter: { $zoom: { max: 15 } }
+                    draw:
+                        lines:
+                            order: 352
+                            outline:
+                                order: function() { return feature.sort_key + 3; }
+                routes:
+                    filter: { ref: true, $zoom: { min: 12} }
+                    draw:
+                        lines:
+                            color: [[11, [0.408,0.430,0.461]], [13, [0.408,0.430,0.461]], [14,[0.408,0.430,0.461]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                            width: [[11, 0.3px], [12, 0.4px], [13, .6px], [14, 1px], [15, 0px], [16, 1px], [17, 6px], [18, 9m]]
+                            outline:
+                                color: [[11, [0.894,0.906,0.914]], [14,[0.779,0.802,0.828]], [15, [0.529,0.556,0.592]]]
+                                width: [[11, 0px], [14, 0px], [15, 0.75px], [16, 1.5px], [17, 2px], [18, 3px]]
+                    early:
+                        filter: { $zoom: { max: 15 } }
+                        draw:
+                            lines:
+                                order: function() { return feature.sort_key + 3; }
+                                outline:
+                                    order: 353
+                    tunnel:
+                        filter: {is_tunnel: yes, $zoom: {min: 13} }
+                        draw:
+                            lines:
+                                color: *major_tunnel1
+                                outline:
+                                    color: *major_tunnel_casing1
+                link:
+                    filter: { is_link: yes } # on- and off-ramps, etc
+                    draw:
+                        lines:
+                            color: [[14, [0.714,0.733,0.760]], [15, [0.578,0.608,0.650]], [16, [0.533,0.555,0.586]], [17, [1.00,1.00,1.00]]]
+                            width: [[11, 0.0px], [12, 0.15px], [14, 0.15px], [15, 0.75px], [16, 1.25px], [17, 2px], [18, 2px], [19, 4px]]
+                            outline:
+                                color: [[11, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17,[0.578,0.608,0.650]]]
+                                width: [[11, 0px], [16, 0px], [17, 1px], [18, 1px]]
+                tertiary-in-green:
+                    filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden,wood,national_park,protected_area,battlefield,forest] }
+                    draw:
+                        lines:
+                            color: [[11, [0.408,0.430,0.461]], [13, [0.408,0.430,0.461]], [14,[0.408,0.430,0.461]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                            width: [[11, 0.4px], [12, 0.5px], [13, 0.6px], [14, .8px], [15, 0px], [16, 1px], [17, 6px], [18, 9m]]
+                            outline:
+                                color: [[11, [0.894,0.906,0.914]], [14,[0.779,0.802,0.828]], [15, [0.529,0.556,0.592]], [16, [0.529,0.556,0.592]], [17,[0.578,0.608,0.650]], [18,[0.714,0.733,0.760]]]
+                                width: [[10,0.5px], [14,0.5px], [15,0.65px], [16,1.5px], [17, 2px], [18, 4px]]
+                    green-routes:
+                        filter: { ref: true, $zoom: { min: 12} }
+                        draw:
+                            lines:
+                                width: [[11, 0.5px], [12, 0.6px], [13, 0.7px], [14, .9px], [15, 0px], [16, 1px], [17, 6px], [18, 9m]]
+                    labels-tertiary-in-green-z13:
+                        filter: { $zoom: { min: 13 } }
+                        draw:
+                            text-blend-order:
+                                priority: 55
+                                visible: *text_visible_tertiary_e
+                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                font:
+                                    fill: [0.536,0.556,0.581]
+                                    stroke: { color: [0.843,0.961,0.914], width: 4 }
+                    labels-tertiary-in-green-z17:
+                        filter: { $zoom: { min: 17 } }
+                        draw:
+                            text-blend-order:
+                                priority: 55
+                                visible: *text_visible_tertiary_e
+                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                font:
+                                    fill: [0.536,0.556,0.581]
+                                    stroke: { color: [1.00,1.00,1.00], width: 4 }
+                    # golf_course:
+                    #     filter: { landuse_kind: golf_course }
+                    #     draw:
+                    #         lines:
+                    #             outline:
+                    #                 color: [[11, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17, [0.00,0.00,0.00]]]
+                    # zoo:
+                    #     filter: { landuse_kind: zoo }
+                    #     draw:
+                    #         lines:
+                    #             outline:
+                    #                 color: [[11, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17, [0.00,0.00,0.00]]]
+                labels-tertiary-z13:
+                    filter: { $zoom: [13] }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 9px
+                                stroke: { color: *text_stroke, width: 4 }
+                labels-tertiary-z14:
+                    filter: { $zoom: [14] }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary_e
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 9px
+                                stroke: { color: *text_stroke, width: 4 }
+                labels-tertiary-z15:
+                    filter: { $zoom: [15] }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 10px
+                                stroke: { color: [0.969,0.973,0.973], width: 4 }
+                labels-tertiary-z16:
+                    filter: { $zoom: [16] }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 12px
+                                stroke: { color: [0.969,0.973,0.973], width: 4 }
+                labels-tertiary-z17:
+                    filter: { $zoom: { min: 17, max: 18 } }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 13px
+                                stroke: { color: [0.969,0.973,0.973], width: 4 }
+                labels-tertiary-z18:
+                    filter: { $zoom: { min: 18 } }
+                    draw:
+                        text-blend-order:
+                            priority: 55
+                            visible: *text_visible_tertiary
+                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                size: 13px
+                                stroke: { color: [0.969,0.973,0.973], width: 4 }
+        minor_road:
+            filter: { kind: minor_road, not: { highway: service, aeroway: [runway, taxiway] } }
+            draw:
+                lines:
+                    color: [[11, [0.885,0.885,0.885]], [12, [0.714,0.733,0.760]], [13, [0.779,0.802,0.828]], [14, [0.779,0.802,0.828]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                    width: [[11, 0.25px], [12, 0.35px], [13, 0.55px], [14, 1px], [15, 0px], [16, 1px], [17, 6px], [18, 9m]]
+                    outline:
+                        color: [[11, [0.894,0.906,0.914]], [14, [0.779,0.802,0.828]], [15, [0.714,0.733,0.760]], [16, [0.714,0.733,0.760]], [17, [0.744,0.764,0.792]]]
+                        width: [[11, 0px], [14, 0px], [15, 0.75px], [16, 1.5px], [17, 2px], [18, 3px]]
+            early:
+                filter: { $zoom: { max: 16 } }
+                draw:
+                    lines:
+                        order: 350
+                        outline:
+                            order: 351
+            motor_vehicle_no:
+                filter: { highway: unclassified, motor_vehicle: no }
+                draw:
+                    lines:
+                        visible: false
+
+            # Is this junk code?
+            round:
+                filter: { $zoom: { min: 17 } }
+                draw:
+                    lines:
+                        cap: round
+                        join: round
+
+            minor-in-green:
+                filter: { landuse_kind: [park,protected_area,nature_reserve,conservation,golf_course,garden,wood,farmland,farm,national_park,protected_area,battlefield] }
+                draw:
+                    lines:
+                        color: [[11, [0.885,0.885,0.885]], [12, [0.662,0.681,0.704]], [13, [0.662,0.681,0.704]], [14, [0.662,0.681,0.704]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                        outline:
+                            color: [[11, [0.894,0.906,0.914]], [14, [0.662,0.681,0.704]], [15, [0.662,0.681,0.704]], [16, [0.662,0.681,0.704]]]
+                labels-minor-in-green-z15:
+                    filter: { $zoom: { min: 15 } }
+                    draw:
+                        text-blend-order:
+                            priority: 56
+                            visible: *text_visible_minor_road_e
+                            text_source: name
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                stroke: { color: [0.843,0.961,0.914], width: 4 }
+                labels-minor-in-green-z17:
+                    filter: { $zoom: { min: 17 } }
+                    draw:
+                        text-blend-order:
+                            priority: 56
+                            visible: *text_visible_minor_road_e
+                            text_source: name
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                stroke: { color: [1.00,1.00,1.00], width: 4 }
+            #     golf_course:
+            #         filter: { landuse_kind: golf_course }
+            #         draw:
+            #             lines:
+            #                 outline:
+            #                     color: [[11, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17, [0.30,0.30,0.30]], [18, [0.00,0.00,0.00]]]
+            #     zoo:
+            #         filter: { landuse_kind: zoo }
+            #         draw:
+            #             lines:
+            #                 outline:
+            #                     color: [[11, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17, [0.30,0.30,0.30]], [18, [0.00,0.00,0.00]]]
+            # in_university:
+            #     filter: { landuse_kind: university }
+            #     draw:
+            #         lines:
+            #             color: [[11, [0.885,0.885,0.885]], [13, [0.75,0.75,0.75]], [14, [0.70,0.70,0.70]], [15, [0.6,0.6,0.6]], [16, [0.3,0.3,0.3]], [17, [1.0,1.0,1.0]]]
+            #             outline:
+            #                 color: [[11, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17, [0.00,0.00,0.00]]]
+            #                 width: [[11, 1px], [16, 0px], [17, 1.5px]]
+            # in_hospital:
+            #     filter: { landuse_kind: hospital }
+            #     draw:
+            #         lines:
+            #             color: [[11, [0.885,0.885,0.885]], [13, [0.75,0.75,0.75]], [14, [0.70,0.70,0.70]], [15, [0.6,0.6,0.6]], [16, [0.3,0.3,0.3]], [17, [1.0,1.0,1.0]]]
+            #             outline:
+            #                 color: [[11, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]], [17, [0.00,0.00,0.00]]]
+            #                 width: [[11, 1px], [16, 0px], [17, 1.5px]]
+
+            tunnel:
+                filter: {is_tunnel: yes, $zoom: {min: 13} }
+                draw:
+                    lines:
+                        color: *minor_tunnel1
+                        outline:
+                            color: *minor_tunnel_casing1
+            minor_road_bridge:
+                filter: { is_bridge: yes }
+                draw:
+                    lines:
+                        cap: round
+                        outline:
+                            cap: butt
+            labels-minor_road-z15:
+                filter: { $zoom: 15 }
+                draw:
+                    text-blend-order:
+                        priority: 56
+                        visible: *text_visible_minor_road_e
+                        text_source: name
+                        font:
+                            fill: [0.536,0.556,0.581]
+                            size: 9px
+                            stroke: { color: *text_stroke, width: 4 }
+            labels-minor_road-z16:
+                filter: { $zoom: 16 }
+                draw:
+                    text-blend-order:
+                        priority: 56
+                        visible: *text_visible_minor_road_e
+                        text_source: name
+                        font:
+                            fill: [0.536,0.556,0.581]
+                            size: 12px
+                            stroke: { color: *text_stroke, width: 4 }
+            labels-minor_road-z17:
+                filter: { $zoom: { min: 17, max: 18 } }
+                draw:
+                    text-blend-order:
+                        priority: 56
+                        visible: *text_visible_minor_road_e
+                        text_source: name
+                        font:
+                            fill: [0.40,0.40,0.40]
+                            size: 12px
+                            stroke: { color: [0.969,0.973,0.973], width: 4 }
+            labels-minor_road-z18:
+                filter: { $zoom: { min: 18 } }
+                draw:
+                    text-blend-order:
+                        priority: 56
+                        visible: *text_visible_minor_road
+                        text_source: name
+                        font:
+                            fill: [0.40,0.40,0.40]
+                            size: 13px
+                            stroke: { color: [0.969,0.973,0.973], width: 4 }
+        service_road:
+            filter: { kind: minor_road, highway: service }
+            draw:
+                lines:
+                    color: [[14, [0.714,0.733,0.760]], [15, [0.714,0.733,0.760]], [16, [1.0,1.0,1.0]], [17, [1.0,1.0,1.0]]]
+                    width: [[14, 0.25px], [15, 0.5px], [16, 0px], [17, 2px], [18, 6px], [19, 6px]]
+                    outline:
+                        color: [[14,[0.894,0.906,0.914]], [15,[0.714,0.733,0.760]], [16,[0.714,0.733,0.760]], [17, [0.791,0.812,0.842]]]
+                        width: [[13, 0px], [15, 0px], [16, 0.5px], [17, 2px], [18, 2px]]
+            service-in-green:
+                filter: { landuse_kind: [park,protected_area,nature_reserve,conservation,golf_course,garden,wood,farmland,farm,national_park,battlefield] }
+                draw:
+                    lines:
+                        color: [[14, [0.779,0.802,0.828]], [15, [0.779,0.802,0.828]], [16, [1.0,1.0,1.0]], [17, [1.0,1.0,1.0]]]
+                        outline:
+                            color: [[14,[0.894,0.906,0.914]], [15,[0.714,0.733,0.760]], [17,[0.714,0.733,0.760]]]
+                labels-service-in-green:
+                    draw:
+                        text-blend-order:
+                            priority: 57
+                            visible: *text_visible_service_road
+                            text_source: name
+                            font:
+                                fill: [0.536,0.556,0.581]
+                                stroke: { color: [0.843,0.961,0.914], width: 4 }
+            #     golf_course:
+            #         filter: { landuse_kind: golf_course }
+            #         draw:
+            #             lines:
+            #                 outline:
+            #                     color: [[14,[1.0,1.0,1.0]], [16,[1.0,1.0,1.0]], [17,[0.30,0.30,0.30]], [18,[0.00,0.00,0.00]]]
+            #                     width: [[13, 0px], [14, 0.5px], [16, 0px], [17, 1.0px]]
+            #     nature_reserve:
+            #         filter: { landuse_kind: nature_reserve }
+            #         draw:
+            #             lines:
+            #                 outline:
+            #                     color: [[14,[1.0,1.0,1.0]], [16,[1.0,1.0,1.0]], [17,[0.30,0.30,0.30]], [18,[0.00,0.00,0.00]]]
+            #                     width: [[13, 0px], [14, 0.5px], [16, 0px], [17, 1.0px]]
+            #     conservation:
+            #         filter: { landuse_kind: conservation }
+            #         draw:
+            #             lines:
+            #                 outline:
+            #                     color: [[14,[1.0,1.0,1.0]], [16,[1.0,1.0,1.0]], [17,[0.30,0.30,0.30]], [18,[0.00,0.00,0.00]]]
+            #                     width: [[13, 0px], [14, 0.5px], [16, 0px], [17, 1.0px]]
+            #     zoo:
+            #         filter: { landuse_kind: zoo }
+            #         draw:
+            #             lines:
+            #                 outline:
+            #                     color: [[14,[1.0,1.0,1.0]], [16,[1.0,1.0,1.0]], [17,[0.30,0.30,0.30]], [18,[0.00,0.00,0.00]]]
+            #                     width: [[13, 0px], [14, 0.5px], [16, 0px], [17, 1.0px]]
+            in_cemetery_garden:
+                filter: { landuse_kind: [cemetery,garden] }
+                draw:
+                    lines:
+                        color: [[14, [0.779,0.802,0.828]], [15, [0.779,0.802,0.828]], [16, [1.0,1.0,1.0]], [17, [1.0,1.0,1.0]]]
+                        width: [[14, 0.4px], [15, 0.5px], [16, 0px], [17, 2px], [18, 6px], [19, 6px]]
+                        outline:
+                            color: [[14,[0.894,0.906,0.914]], [15,[0.714,0.733,0.760]], [17,[0.714,0.733,0.760]]]
+            # in_university:
+            #     filter: { landuse_kind: university }
+            #     draw:
+            #         lines:
+            #             outline:
+            #                 color: [[14,[1.0,1.0,1.0]], [16,[1.0,1.0,1.0]], [17,[0.30,0.30,0.30]], [18,[0.00,0.00,0.00]]]
+            #                 width: [[13, 0px], [14, 0.5px], [16, 0px], [17, 1.0px]]
+            # in_hospital:
+            #     filter: { landuse_kind: hospital }
+            #     draw:
+            #         lines:
+            #             outline:
+            #                 color: [[14,[1.0,1.0,1.0]], [16,[1.0,1.0,1.0]], [17,[0.30,0.30,0.30]], [18,[0.00,0.00,0.00]]]
+            #                 width: [[13, 0px], [14, 0.5px], [16, 0px], [17, 1.0px]]
+            labels-service_road:
+                filter: { $zoom: 17 }
+                draw:
+                    text-blend-order:
+                        priority: 57
+                        visible: *text_visible_service_road
+                        text_source: name
+                        font:
+                            # need fill color?
+                            fill: [0.536,0.556,0.581]
+                            size: 12px
+                            stroke: { color: [0.969,0.973,0.973], width: 4 }
+            labels-service_road-z18:
+                filter: { $zoom: { min: 18 } }
+                draw:
+                    text-blend-order:
+                        priority: 57
+                        visible: *text_visible_service_road
+                        text_source: name
+                        font:
+                            fill: [0.536,0.556,0.581]
+                            size: 13px
+                            stroke: { color: [0.969,0.973,0.973], width: 4 }
+        path:
+            filter:
+                all:
+                    - kind: [path, portage_way]
+                not:
+                    - highway: [footway, steps, track, cycleway]
+                    - man_made: [pier]
+            draw:
+                dashedline:
+                    order: function() { return feature.sort_key; }
+                    interactive: true
+                    visible: false
+                    color: [0.350,0.350,0.350]
+                    width: [[14, 0.35px], [15, 0.5px], [16, 1px], [17, 2px], [18, 3px], [19, 4px]]
+                    # outline:
+                    #     color: [0.790,0.790,0.790]
+                    #     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            early:
+                filter:
+                    $zoom: { max: 17 }
+                draw:
+                    lines:
+                        order: 351
+                        outline:
+                            order: 350
+            portage_way:
+                filter: { kind: portage_way }
+                draw:
+                    lines:
+                        color: [0.350,0.350,0.350]
+            pedestrian:
+                filter: { highway: pedestrian }
+                draw:
+                    lines:
+                        color: [[16,[0.749,0.749,0.749]]]
+                        width: [[14, 0.35px], [15, 0.35px], [16, 1px], [17, 2px], [18, 3px], [19, 4px]]
+                        # outline:
+                        #     color: [0.790,0.790,0.790]
+                        #     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            bridge:
+                filter: { is_bridge: yes }
+                draw:
+                    lines:
+                        width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
+                        cap: round
+                        outline:
+                            color: [[15,*path_bridge_casing2],[16,*path_bridge_casing1]]
+                            width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+                            cap: butt
+            in_park:
+                filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden] }
+                draw:
+                    dashedline:
+                        color: [0.350,0.350,0.350]
+                        # outline:
+                        #     color: [0.790,0.790,0.790]
+                        #     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            #     golf_course:
+            #         filter: { landuse_kind: golf_course }
+            #         draw:
+            #             lines:
+            #                 color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
+            #                 outline:
+            #                     color: [0.790,0.790,0.790]
+            #                     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            #     nature_reserve:
+            #         filter: { landuse_kind: nature_reserve }
+            #         draw:
+            #             lines:
+            #                 color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
+            #                 outline:
+            #                     color: [0.790,0.790,0.790]
+            #                     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            #     conservation:
+            #         filter: { landuse_kind: conservation }
+            #         draw:
+            #             lines:
+            #                 color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
+            #                 outline:
+            #                     color: [0.790,0.790,0.790]
+            #                     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            # in_cemetery_garden:
+            #     filter: { landuse_kind: [cemetery,garden] }
+            #     draw:
+            #         lines:
+            #             color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
+            #             width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
+            #             outline:
+            #                 color: [0.790,0.790,0.790]
+            #                 width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            # in_zoo:
+            #     filter: { landuse_kind: zoo }
+            #     draw:
+            #         lines:
+            #             color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
+            #             width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
+            #             outline:
+            #                 color: [0.790,0.790,0.790]
+            #                 width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            # in_university:
+            #     filter: { landuse_kind: university }
+            #     draw:
+            #         lines:
+            #             color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
+            #             width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
+            #             outline:
+            #                 color: [0.790,0.790,0.790]
+            #                 width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            # in_hospital:
+            #     filter: { landuse_kind: hospital }
+            #     draw:
+            #         lines:
+            #             color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
+            #             width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
+            #             outline:
+            #                 color: [0.790,0.790,0.790]
+            #                 width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            labels-path:
+                filter: { $zoom: { min: 17 } }
+                draw:
+                    text-blend-order:
+                        priority: 58
+                        visible: *text_visible_path
+                        text_source: name
+                        font:
+                            fill: [0.536,0.556,0.581]
+                            size: 12px
+                            stroke: { color: *text_stroke, width: 4 }
+        track:
+            filter: { kind: path, highway: track }
+            draw:
+                lines:
+                    color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
+                    width: [[13, 0px], [14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
+                    cap: butt
+                    join: round
+                    outline:
+                        color: [0.790,0.790,0.790]
+                        width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+            bridge:
+                filter: { is_bridge: yes }
+                draw:
+                    lines:
+                        cap: butt
+                        width: [[13, 0px], [14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
+                        cap: round
+                        outline:
+                            color: [1.0,1.0,1.0]
+                            width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+                            cap: butt
+            in_park:
+                filter: { landuse_kind: [park,national_park,nature_reserve,conservation,golf_course,garden,battlefield] }
+                draw:
+                    lines:
+                        color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
+                        width: [[13, 0px], [14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
+                        outline:
+                            color: [0.790,0.790,0.790]
+                            width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
+        steps:
+            filter:
+                all:
+                    - kind: path
+                    - highway: steps
+            draw:
+                dashed:
+                    #order: function() { return feature.sort_key; }
+                    order: 1005
+                    color: [0.501,0.650,0.650]
+                    width: [[15, 0.6], [16, 1px], [17, 1px], [18, 4px], [19, 1.5m]]
+                    interactive: true
+                lines:
+                    visible: false
+                    order: 1000
+                    interactive: true
+                    #width: [[13, 0.75px], [14, 0.85px], [15, 1.1px], [16, 2px], [17, 6px], [18, 7px], [19, 10px]]
+                    #color: [[15,[0.120,0.600,0.520]],[16,[0.623,0.820,0.797]]]
+                    color: [[14,[0.510,0.752,0.695]],[15,[0.671,0.839,0.820]],[16,[0.671,0.839,0.820]]]
+                    width: [[13, 0.75px], [14, 0.6px], [15, 1px], [16, 2px], [17, 3px], [18, 4px], [19, 4px]]
+                    visible: true
+                    #color: purple
+            steps-late:
+                filter: { $zoom: { min: 17 } }
+                draw:
+                    # lines:
+                    #     color: [0.707,0.884,0.872]
+                    #     visible: true
+                    #     outline:
+                    #         width: [[17, 0px], [18, 1px], [19, 2px]]
+                    #         color: [0.850,0.850,0.850]
+                    dashed:
+                        width: [[17, 2px], [18, 3px], [19, 3.5px]]
+                        color: [0.501,0.650,0.650]
+            early-show-as-lines-z14:
+                filter: { $zoom: { max: 16 } }
+                draw:
+                    dashed:
+                        visible: false
+                    lines:
+                        visible: true
+            networked:
+                filter: { walking_network: true }
+                draw:
+                    lines:
+                        width: [[13, 0.75px], [14, 1px], [15, 2px], [16, 2px], [17, 3px], [18, 4px], [19, 4px]]
+                    dashed:
+                        width: [[13, 1.25px],[14, 2px],[15, 1.75px],[16, 2px], [17, 4px], [18, 5px], [19, 8px]]
+                    highlight:
+                        order: 980
+                        color: [[12,[0.900,1.000,0.850]],[14,[0.930,1.000,0.850]],[15,[1.000,1.000,0.870]]]
+                        width: [[12, 3px], [13, 4px], [14, 5px], [15, 6px], [16, 8px], [17, 10px], [18, 14px], [19, 16px]]
+                        join: round
+                early:
+                    filter: { $zoom: { max: 15 } }
+                    draw:
+                        lines:
+                            color: [0.120,0.600,0.520]
+                networked-steps-late:
+                    filter: { $zoom: { min: 18 } }
+                    draw:
+                        dashed:
+                            color: [0.120,0.600,0.520]
+            in_park:
+                filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden] }
+                draw:
+                    dashed:
+                        color: [0.120,0.600,0.520]
+            # in_university:
+            #     filter: { landuse_kind: university }
+            #     draw:
+            #         dashed:
+            #             color: *path_steps1_b
+            #             outline:
+            #                 color: [1.0,1.0,1.0]
+            # in_hospital:
+            #     filter: { landuse_kind: hospital }
+            #     draw:
+            #         dashed:
+            #             color: *path_steps1_b
+            #             outline:
+            #                 color: [1.0,1.0,1.0]
+            labels-steps:
+                filter: { $zoom: { min: 17 } }
+                draw:
+                    text-blend-order:
+                        priority: 59
+                        visible: *text_visible_steps
+                        text_source: name
+                        font:
+                            fill: [0.45,0.45,0.45]
+                            size: 11px
+                            stroke: { color: *text_stroke, width: 4 }
+        winter_sport_pistes:
+            filter: { kind: piste }
+            draw:
+                lines:
+                    order: 388   # We override the server value here because Eraser Map is also a special Ski Map
+                    cap: round
+                    join: round
+                    color: '#909090'
+                    width: [[13,0px],[14,1px],[15, 1.25px], [16, 2px], [18, 3m]]
+                text-blend-order:
+                    priority: 18
+                    visible: *text_visible_piste
+                    font:
+                        fill: *text_fill_piste
+                        size: 12px
+                        stroke: { color: [0.913,0.925,0.933], width: 4 }
+            early:
+                filter: { $zoom: { max: 15 } }
+                draw:
+                    text-blend-order:
+                        visible: false
+            early-z15:
+                filter: { $zoom: [15] }
+                draw:
+                    text-blend-order:
+                        font:
+                            fill: *text_fill_piste_e
+                            size: 11px
+            easy:
+                filter: { piste_difficulty: easy }
+                draw:
+                    lines:
+                        color: [0.367,0.750,0.622]
+            intermediate:
+                filter: { piste_difficulty: intermediate }
+                draw:
+                    lines:
+                        color: [0.420,0.678,0.863]
+            advanced:
+                filter: { piste_difficulty: advanced }
+                draw:
+                    lines:
+                        color: [0.450,0.450,0.450]
+                    text-blend-order:
+                        text_source: function() { if( feature.name ){ return '◆ ' + feature.name; } else { return ''; } }
+            expert:
+                filter: { piste_difficulty: expert }
+                draw:
+                    lines:
+                        color: [0.450,0.450,0.450]
+                    text-blend-order:
+                        text_source: function() { if( feature.name ){ return '◆◆ ' + feature.name; } else { return ''; } }
+        pier:
+            filter: { kind: path, man_made: pier }
+            draw:
+                lines:
+                    color: [0.993,0.993,0.993]
+                    width: [[13, 0px], [14, 0.5px],[15, 1.5px], [16, 2.5px],[17, 3px],[18, 3m]]
+                    outline:
+                        color: [0.431,0.806,0.914]
+                        width: [[15, 0px],[16,0.65px], [17, 0.75px], [18, 1px], [19, 1.5px]]
+        racetrack:
+            filter: { kind: racetrack }
+            draw:
+                lines:
+                    interactive: true
+                    cap: round
+                    join: round
+                    color: [0.400,0.666,0.690]
+                    width: [[13,0.5px],[14,1px],[15, 1px], [16, 1.5px], [18, 3px], [19, 5px]]
+        airport-lines:
+            filter: { kind: minor_road, aeroway: [runway,taxiway] }
+            draw:
+                lines:
+                    color: [[11, [0.25,0.25,0.25]], [17, [0.0,0.0,0.0]]]
+                    cap: butt
+                    width: [[10, 1px], [11, 1.5px], [12, 2px], [13, 4px], [14, 8px], [15, 16px], [16, 32px], [17, 60m]]
+                    outline:
+                        color: [1.0,1.0,1.0]
+            # Features come in at zoom 9, but include mostly minor airports without POIs until z13
+            early:
+                filter: { $zoom: { max: 12 }, not: { landuse_kind: [aerodrome, runway, taxiway] } }
+                draw:
+                    lines:
+                        visible: false
+            not-round:
+                filter: { $zoom: { min: 17 } }
+                draw:
+                    lines:
+                        cap: butt
+            taxiway:
+                filter: { aeroway: taxiway }
+                draw:
+                    lines:
+                        color: [[11, [0.885,0.885,0.885]], [13, [0.779,0.802,0.828]], [14,[0.779,0.802,0.828]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
+                        width: [[11, 0.5px], [12, 0.65px], [13, 0.65px], [14, 1px], [15, 0px], [16, 1px], [17, 6px], [18, 9m]]
+                        outline:
+                            color: [[11, [0.894,0.906,0.914]], [14,[0.779,0.802,0.828]], [15, [0.714,0.733,0.760]], [16, [0.714,0.733,0.760]], [17, [0.744,0.764,0.792]]]
+                            width: [[11, 0px], [14, 0px], [15, 0.75px], [16, 1.5px], [17, 2px], [18, 3px]]
+                early:
+                    filter: { $zoom: { max: 13 } }
+                    draw:
+                        lines:
+                            visible: false
+        ferry:
+            filter: { kind: ferry }
+            draw:
+                lines:
+                    color: [0.451,0.804,0.878]
+                    width: [[12, 0.5px], [13, 0.75px], [15, 1.0px]]
+        aerialway:
+            filter: { kind: aerialway }
+            draw:
+                lines:
+                    interactive: true
+                    color: [0.5,0.5,0.5]
+                    width: [[14, 0.5px], [15, 1.0px], [16, 2m]]
+            gondola_cable_car:
+                filter: { aerialway: [gondola, cable_car] }
+                draw:
+                    lines:
+                        color: [0.45,0.45,0.45]
+                        width: [[12, 0.5px], [13, 0.5px], [14, 1.75px], [15, 2.5px], [16, 2.5px], [18, 3m]]
+#                    lines_transparent:
+#                        color: [0.5,0.5,0.5]
+#                        width: [[12, 0px], [13, 5px], [14, 8px], [15, 10px], [16, 12px]]
+            chair_lift:
+                filter: { aerialway: chair_lift }
+                draw:
+                    lines:
+                        color: [0.45,0.45,0.45]
+                        width: [[12, 0.5px], [13, 0.5px], [14, 1.75px], [15, 2.5px], [16, 2.5px], [18, 3m]]
+#                    lines_transparent:
+#                        color: [0.5,0.5,0.5]
+#                        width: [[12, 0px], [13, 5px], [14, 8px], [15, 10px], [16, 12px], [18, 20px]]
+            aerialway-labels:
+                filter: { $zoom: { min: 14 } }
+                draw:
+                    text-blend-order:
+                        priority: 59
+                        visible: *text_visible_aerialway
+                        text_source: name
+                        font:
+                            fill: *text_fill
+                            size: 10px
+                            stroke: { color: *text_stroke_park, width: 4 }
+                minor:
+                    filter: { not: { aerialway: [gondola,cable_car,chair_lift] }, $zoom: { max: 17 } }
+                    draw:
+                        text-blend-order:
+                            visible: false
+                early_gondola:
+                    filter: { $zoom: [14], aerialway: [gondola,cable_car] }
+                    draw:
+                        text-blend-order:
+                            font:
+                                weight: 600
+                later:
+                    filter: { $zoom: { min: 15 } }
+                    draw:
+                        text-blend-order:
+                            font:
+                                weight: 600
+    buildings:
+        data: { source: mapzen, layer: buildings }
+        filter:
+            not: { location: underground }
+        # set default footprint and extrusion draw properties, but don't draw by default (rules below will turn visibility on)
+        draw:
+            polygons:
+                visible: false
+                order: 329
+                color: [[14,[0.930,0.940,0.940]],[15,[0.920,0.930,0.930]],[16,[0.930,0.940,0.940]]]
+            lines:
+                style: lines
+                order: 330
+                visible: false
+                color: [[14,[0.750,0.750,0.750]],[17,[0.85, 0.85, 0.85]]]
+                width: [[14, 0px], [15, 0.5px], [16,0.5px], [17,1px], [18, 1.25px]]
+
+        # turn interactive feature selection on for buildings with names
+        interactive:
+            filter: { name: true }
+            draw: { polygons: { interactive: true } }
+
+        # building footprints, pre-extrusion
+        footprints:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: [13], area: { min: 100000 }, name: true }
+                    - { $zoom: [13], area: { min: 100000 }, kind: true }
+                    - { $zoom: [13], height: { min: 250 } }
+                    - { $zoom: [13], volume: { min: 250000 } }
+                    - { $zoom: [14], area: { min: 20000 }, name: true }
+                    - { $zoom: [14], area: { min: 20000 }, kind: true }
+                    - { $zoom: [14], area: { min: 5000 }, landuse_kind: true }
+                    - { $zoom: [14], height: { min: 150 } }
+                    - { $zoom: [14], volume: { min: 150000 } }
+                    - { $zoom: [15], area: { min: 5000 }, name: true }
+                    - { $zoom: [15], area: { min: 5000 }, kind: true }
+                    - { $zoom: [15], area: { min: 3000 }, landuse_kind: true }
+                    - { $zoom: [15], height: { min: 100 } }
+                    - { $zoom: [15], volume: { min: 100000 } }
+                    - { $zoom: [16], area: { min: 1000 }, name: true }
+                    - { $zoom: [16], area: { min: 1000 }, kind: true }
+                    - { $zoom: [16], area: { min: 2000 }, landuse_kind: true }
+                    - { $zoom: [16], volume: { min: 50000 } }
+                    #- { $zoom: [16], height: { min: 50 } }
+                    - { $zoom: { min: 17 } }
+                all:
+                    - not: { location: underground }
+            # filter:
+            #     $zoom: { min: 15 }
+            #     any:
+            #         # show footprints for buildings at least one zoom level before they will be extruded
+            #         - { $zoom: [13], area: { min: 50000 } }
+            #         - { $zoom: [13], height: { min: 250 } }
+            #         - { $zoom: [13], volume: { min: 200000 } }
+            #         - { $zoom: [14], area: { min: 5000 } }
+            #         - { $zoom: [14], height: { min: 190 } }
+            #         - { $zoom: [14], volume: { min: 150000 } }
+            #         - { $zoom: [15], height: { min: 100 } }
+            #         - { $zoom: [15], area: { min: 500 } }
+            #         - { $zoom: [15], volume: { min: 100000 } }
+            #         - { $zoom: [16], area: { min: 100 } }
+            #         - { $zoom: [16], volume: { min: 50000 } }
+            #         - { $zoom: { min: 17 } }
+            draw:
+                polygons:
+                    visible: true
+                lines:
+                    visible: true
+
+        extrude:
+            filter:
+                any:
+                    # for the buildings that were visible at zoom 15, extrude those all up a bit at z17
+                    - { $zoom: [16], area: { min: 20000 }, name: true }
+                    - { $zoom: [16], area: { min: 20000 }, kind: true }
+                    - { $zoom: [16], area: { min: 5000 }, landuse_kind: true }
+                    - { $zoom: [16], height: { min: 150 } }
+                    - { $zoom: [16], volume: { min: 150000 } }
+                    - { $zoom: [17], area: { min: 5000 }, name: true }
+                    - { $zoom: [17], area: { min: 5000 }, kind: true }
+                    - { $zoom: [17], area: { min: 3000 }, landuse_kind: true }
+                    - { $zoom: [17], height: { min: 100 } }
+                    - { $zoom: [17], volume: { min: 100000 } }
+                    - { $zoom: { min: 18 } }
+            draw:
+                polygons:
+                    visible: true
+                    order: 438
+                    style: building-grid
+                    extrude: 100
+                    color: [0.930,0.940,0.940]
+                lines:
+                    visible: true
+                    order: 439
+                    style: building-lines
+                    extrude: 100
+            z16-default:
+                filter: { $zoom: [16] }
+                draw:
+                    polygons:
+                        extrude: 20
+                    lines:
+                        extrude: 20
+            z18-default:
+                filter: { $zoom: { min: 18 } }
+                draw:
+                    polygons:
+                        extrude: 20
+                    lines:
+                        extrude: 20
+            z18-special:
+                filter:
+                    any:
+                        - { $zoom: { min: 18 }, area: { min: 5000 }, name: true }
+                        - { $zoom: { min: 18 }, area: { min: 5000 }, kind: true }
+                        - { $zoom: { min: 18 }, area: { min: 3000 }, landuse_kind: true }
+                        - { $zoom: { min: 18 }, height: { min: 100 } }
+                        - { $zoom: { min: 18 }, volume: { min: 100000 } }
+                draw:
+                    polygons:
+                        extrude: 100
+                    lines:
+                        extrude: 100
+
+
+        # landuse-specific rules
+        # in_park:
+        #     filter: { landuse_kind: [park,forest,nature_reserve,conservation,golf_course,garden] }
+        #     draw:
+        #         polygons:
+        #             color: [0.864,0.910,0.905]
+
+        #     # golf_course:
+        #     #     filter: { landuse_kind: golf_course }
+        #     #     draw:
+        #     #         polygons:
+        #     #             color: *building2
+        #     # nature_reserve:
+        #     #     filter: { landuse_kind: nature_reserve }
+        #     #     draw:
+        #     #         polygons:
+        #     #             color: *building2
+        #     # conservation:
+        #     #     filter: { landuse_kind: conservation }
+        #     #     draw:
+        #     #         polygons:
+        #     #             color: *building2
+        #     # zoo:
+        #     #     filter: { landuse_kind: zoo }
+        #     #     draw:
+        #     #         polygons:
+        #     #             color: *building2
+        # in_university:
+        #     filter: { landuse_kind: [university,school] }
+        #     draw:
+        #         polygons:
+        #             color: [0.950,0.917,0.883]
+        #         lines:
+        #             color: *brown1_bo
+        # in_hospital:
+        #     filter: { landuse_kind: hospital }
+        #     draw:
+        #         polygons:
+        #             color: [0.976,0.908,0.913]
+        # in_airport:
+        #     filter: { landuse_kind: [aerodrome, runway, taxiway] }
+        #     draw:
+        #         polygons:
+        #             color: *purple_b
+        #         lines:
+        #             color: *purple_bo
+        #             width: [[14,0.5px],[15,0.5px],[17,0.5px],[18,0.75px],[19,0.25m]]
+        # in_retail:
+        #    filter: { landuse_kind: retail }
+        #    draw:
+        #         polygons:
+        #             color: [0.945, 0.898, 0.878]
+
+    buildings-labels:
+        data: { source: mapzen, layer: buildings }
+        filter:
+            all:
+                - { $zoom: { min: 17 } }
+                - $geometry: point
+                - not: { location: underground, kind: address }
+                - name: true
+            any:
+                - { $zoom: [16], area: { min: 5000 } }
+                - { $zoom: [16], area: { min: 5000 } }
+                - { $zoom: [16], area: { min: 10000 }, landuse_kind: true }
+                - { $zoom: [16], area: { min: 7000 }, kind: [university, college, school, kindergarten] }
+                - { $zoom: [16], volume: { min: 50000 }, name: true }
+                - { $zoom: [17], area: { min: 3000 } }
+                - { $zoom: [17], area: { min: 2000 }, kind: [university, college, school, kindergarten] }
+                - { $zoom: [18], area: { min: 1000 } }
+                - { $zoom: [18], kind: [university, college, school, kindergarten] }
+                - { $zoom: [19], area: { min: 200 } }
+                - { $zoom: { min: 19 }, kind: [university, college, school, kindergarten] }
+                - { $zoom: { min: 20 }, area: true }
+        draw:
+            text-blend-order:
+                interactive: true
+                move_into_tile: true
+                priority: 70
+                visible: *text_visible_building
+                order: 7
+                font:
+                    fill: '#666'
+                    family: *text_font_family
+                    style: italic
+                    size: 11px
+                    stroke: { color: *text_stroke_address, width: 1 }
+        building_labels-z15-z16-z17:
+            filter: { $zoom: [15,16,17] }
+            draw: { text-blend-order: { font: { size: 12px, stroke: { width: 2 } } } }
+        building_labels-z18:
+            filter: { $zoom: [18,19] }
+            draw: { text-blend-order: { font: { size: 12px, weight: 600, stroke: { width: 3 } } } }
+        building_labels-z20-up:
+            filter: { $zoom: { min: 20 } }
+            draw: { text-blend-order: { font: { size: 14px, weight: 600, stroke: { width: 3 }  } } }
+        building-labels-z16:
+            filter: function() { if( $zoom == 16 && feature.name.length > 20 ) { return true; } else { return false; } }
+            draw:
+                text-blend-order:
+                    visible: false
+        building-labels-z17:
+            filter: function() { if( $zoom == 17 && feature.name.length > 30 ) { return true; } else { return false; } }
+            draw:
+                text-blend-order:
+                    visible: false
+        building-labels-z20+:
+            filter: { $zoom: { min: 20 } }
+            draw:
+                text-blend-order:
+                    text_source: function() { if( feature.addr_housenumber ) { return feature.name + '\n' + feature.addr_housenumber; } else { return feature.name; } }
+    address-labels:
+        data: { source: mapzen, layer: buildings }
+        filter:
+            $zoom: { min: 20 }
+            any:
+                - kind: address
+                - { label_position: yes, addr_housenumber: true, name: false }
+        draw:
+            text-blend-order:
+                interactive: true
+                order: 7
+                visible: *text_visible_address
+                text_source: addr_housenumber
+                font:
+                    fill: *text_fill_address
+                    family: *text_font_family
+                    style: italic
+                    size: 10px
+                    stroke: { color: *text_stroke_address, width: 4 }
+
+    boundaries:
+        data: { source: mapzen, layer: boundaries }
+        # country subdivisions (states, provinces)
+        draw:
+            lines:
+                interactive: true
+                order: function() { return (feature.sort_key + 100); }
+#                color: red
+#                width: [[9, 1px], [14, 2px], [16, 3px], [17, 8m]]
+        country:
+            filter:
+                any:
+                    - type: country
+                    - kind: nation
+                    - admin_level: 2
+            draw:
+                lines:
+                    interactive: true
+                    color: *country_boundary
+                    width: [[1, 0.5px], [2, 1.0px], [4, 1.5px], [9, 2.5px], [14, 3.5px], [16, 4.5px], [17, 14m]]
+            water:
+                filter: { maritime_boundary: yes }
+                draw:
+                    lines:
+                        visible: false
+                        #order: function() { return (feature.sort_key - 2); }
+                        #color: [0.568,0.942,1.000]
+        region:
+            filter:
+                any:
+                    - type: state
+                    # territorial here is probably a hack
+                    - kind: [state, department, region, provincial, territorial]
+                    - admin_level: 4
+                not:
+                    # deal with bogus Hungary data
+                    - scalerank: 0
+            draw:
+                lines:
+                    interactive: true
+                    color: *region_boundary
+                    width: [[0, 0.5px], [2, 1.0px], [5, 1.25px], [6, 1.5px], [7, 1.75px], [9, 2.0px], [14, 4.0px], [16, 5.0px], [17, 10m]]
+            water:
+                filter: { maritime_boundary: yes }
+                draw:
+                    lines:
+                        visible: false
+            early:
+                filter: { scalerank: [0,3,4,5,6,7,8,9,10], $zoom: { max: 8 } }
+                draw:
+                    lines:
+                        visible: false
+        city_walls:
+            filter: { kind: city_wall }
+            draw:
+                lines:
+                    color: *city_wall
+                    width: [[12, 0.75px], [13, 1.0px], [14, 1.2px], [15, 2.0px], [16, 2.5px], [19, 6m]]
+        retaining_wall:
+            filter: { kind: retaining_wall }
+            draw:
+                lines:
+                    color: *retaining_wall
+                    width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 4m]]
+        snow_fence:
+            filter: { kind: snow_fence }
+            draw:
+                lines:
+                    color: *snow_fence
+                    width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 1.5m]]
+        fence:
+            filter: { kind: fence }
+            draw:
+                lines:
+                    color: [[14,[0.770,0.765,0.755]],[18,[0.770,0.765,0.755]],[19,[0.841,0.837,0.824]]]
+                    width: [[14, 0.5px], [15, 0.75px], [16, 0.75px], [18, 1.5px], [19, 1m]]
+        dam:
+            filter: { kind: dam }
+            draw:
+                lines:
+                    color: *dam
+                    width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 1.5m]]
+
+    places:
+        data: { source: mapzen, layer: places }
+        filter: { not: { kind: [ocean, sea] } }
+        draw:
+            text-blend-order:
+                visible: false    # labels are enabled by each layer below
+                font:
+                    family: *text_font_family
+                    # weight: 500
+                    fill: *text_fill
+
+        country-z2:
+            filter:
+                all:
+                    - kind: [country]
+                    - $zoom: [2]
+                    - name: ["United States of America","Brasil","中华人民共和国","Россия","Canada","Kalaallit Nunaat","Ísland","Australia","India","日本","Guam","Indonesia","South Africa","مصر","Nigeria","Kenya"]
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        fill: *text_fill
+                        weight: 200
+                        size: 11px
+                        stroke: { color: *text_stroke, width: 4 }
+        country-z3:
+            filter: { name: true, population: true, kind: [country], $zoom: [3] }
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        fill: *text_fill
+                        weight: 200
+                        size: 11px
+                        stroke: { color: *text_stroke, width: 4 }
+    #            icons:
+    #                size: [[13, 12px], [15, 18px]]
+    #                interactive: true
+    #                sprite: *townspot_sprite
+            early-ones:
+                # US, Brazil, China, Russia, Canada, Greenland, Iceland, Australia, India, Japan, Guam, Indonesia, South Africa, Egypt, Nigeria, Kenya
+                filter: { not: { name: ["United States of America","Brasil","中华人民共和国","Россия","Canada","Kalaallit Nunaat","Ísland","Australia","India","日本","Guam","Indonesia","South Africa","مصر","Nigeria","Kenya"] }, $zoom: {min: 3, max: 4} }
+                draw:
+                    text-blend-order:
+                        visible: false
+        country-z4:
+            filter: { name: true, population: true, kind: [country], $zoom: [4] }
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        fill: *text_fill
+                        weight: 200
+                        size: 13px
+                        stroke: { color: *text_stroke, width: 4 }
+    #            icons:
+    #                size: [[13, 12px], [15, 18px]]
+    #                interactive: true
+    #                sprite: *townspot_sprite
+            early-ones-z4:
+                filter: { name: [Nederland,Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,Crna Gora,Македонија,The Gambia,Burundi,Swaziland,الإمارات العربية المتحدة,العراق,Singapore,El Salvador,Belize,Trinidad and Tobago, Saint Lucia, Montserrat,Anguilla,República Dominicana,Bahamas,British Virgin Islands,Antigua and Barbuda,Grenada,Sint Maarten,Saint Kitts and Nevis,Cayman Islands,België - Belgique - Belgien], $zoom: {min: 4, max: 5} }
+                draw:
+                    text-blend-order:
+                        visible: false
+        country-z5:
+            filter:
+                all:
+                    - name: true
+                    - population: true
+                    - kind: [country]
+                    - $zoom: [5]
+                any:
+                    - { population: { min: 5000000 } }
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        fill: *text_fill
+                        weight: 600
+                        size: 13px
+                        stroke: { color: *text_stroke, width: 4 }
+            # country-spacer-z5:
+            #     filter: { kind: country, $zoom: [5] }
+            #     draw:
+            #         text-blend-order:
+            #             text_source: function() { return feature.name.split('').join(' ') }
+            #             text_wrap: false
+    #            icons:
+    #                size: [[13, 12px], [15, 18px]]
+    #                interactive: true
+    #                sprite: *townspot_sprite
+            early-ones-z5:
+                filter: { name: [Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,El Salvador,Belize,België - Belgique - Belgien], $zoom: {min: 5, max: 6} }
+                draw:
+                    text-blend-order:
+                        visible: false
+        country-z6:
+            # South Ossetia and Abkhazia aren't countries (they are disputed areas)
+            filter: { name: true, kind: [country], $zoom: [6] }
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        size: 14px
+                        weight: 600
+                        fill: *text_fill
+                        stroke: { color: *text_stroke, width: 4 }
+            small-ones-z6:
+                filter: { name: [Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,België - Belgique - Belgien,Хуссар Ирыстон,Аҧсны - Абхазия], $zoom: {min: 6, max: 7} }
+                draw:
+                    text-blend-order:
+                        visible: false
+        country-z7:
+            # South Ossetia and Abkhazia aren't countries (they are disputed areas)
+            filter: { name: true, kind: [country], $zoom: { min: 7, max: 9 } }
+            draw:
+                text-blend-order:
+                    priority: 3
+                    visible: *text_visible_admin
+                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    font:
+                        size: 16px
+                        weight: 600
+                        fill: *text_fill
+                        stroke: { color: *text_stroke, width: 4 }
+            small-ones-z7:
+                filter: { name: [Liechtenstein,San Marino,Civitatis Vaticanæ,Хуссар Ирыстон,Аҧсны - Абхазия], $zoom: {min: 7, max: 8} }
+                draw:
+                    text-blend-order:
+                        visible: false
+
+        region-z4:
+            filter: { name: true, kind: [state], $zoom: [4], not: { name: ["Western Cape","Eastern Cape","Northern Cape","North West","Limpopo","KwaZulu-Natal","Hamburg","Freie und Hansestadt Hamburg","Neuchâtel","Nordrhein-Westfalen","Haute-Normandie","Baden-Württemberg","Bayern","Sachsen-Anhalt","Berlin","Mecklenburg-Vorpommern","Schleswig-Holstein","Brandenburg","Niedersachsen","Saarland","Thüringen","Hessen","Sachsen"] } }
+            draw:
+                text-blend-order:
+                    priority: 14
+                    visible: *text_visible_admin
+                    text_source: 'name:short'
+                    font:
+                        size: 11px
+                        weight: 400
+                        fill: [0.70,0.70,0.70]
+                        stroke: { color: *text_stroke, width: 4 }
+
+        region-z5:
+            filter: { name: true, kind: [state], $zoom: [5], not: { name: ["Western Cape","Eastern Cape","Northern Cape","North West","Limpopo","KwaZulu-Natal","Hamburg","Freie und Hansestadt Hamburg","Neuchâtel","Nordrhein-Westfalen","Haute-Normandie","Baden-Württemberg","Bayern","Sachsen-Anhalt","Berlin","Mecklenburg-Vorpommern","Schleswig-Holstein","Brandenburg","Niedersachsen","Saarland","Thüringen","Hessen","Sachsen"] } }
+            draw:
+                text-blend-order:
+                    priority: 14
+                    visible: *text_visible_admin
+                    text_source: 'name:short'
+                    font:
+                        size: 18px
+                        weight: 200
+                        fill: [0.5,0.5,0.5,0.5]
+                        stroke: { color: *text_stroke, width: 4 }
+
+        region-z6:
+            filter: { name: true, kind: [state], $zoom: [6], not: { name: ["Western Cape","Eastern Cape","Northern Cape","North West","Limpopo","KwaZulu-Natal","Hamburg","Freie und Hansestadt Hamburg","Neuchâtel","Nordrhein-Westfalen","Haute-Normandie","Baden-Württemberg","Bayern","Sachsen-Anhalt","Berlin","Mecklenburg-Vorpommern","Schleswig-Holstein","Brandenburg","Niedersachsen","Saarland","Thüringen","Hessen","Sachsen"] } }
+            draw:
+                text-blend-order:
+                    priority: 14
+                    visible: *text_visible_admin
+                    text_source: 'name:short'
+                    font:
+                        size: 21px
+                        weight: 200
+                        fill: [0.5,0.5,0.5,0.5]
+                        # stroke: { color: *text_stroke, width: 4 }
+                        transform: uppercase
+
+        region:
+            filter: { name: true, kind: [state], $zoom: {min: 7, max: 9} }
+            draw:
+                text-blend-order:
+                    priority: 14
+                    visible: *text_visible_admin
+                    text_source: function() { if(feature["name:short"]) { return feature["name"]; } else { return ""; } }
+                    font:
+                        size: 30px
+                        weight: 200
+                        fill: [0.5,0.5,0.5,0.5]
+                        # stroke: { color: *text_stroke, width: 4 }
+                        transform: uppercase
+    #            icons:
+    #                size: [[13, 12px], [15, 18px]]
+    #                interactive: true
+    #                sprite: *townspot_sprite
+            pesky:
+                filter: { name: ["Western Cape","Eastern Cape","Northern Cape","North West","Limpopo","KwaZulu-Natal","Hamburg","Freie und Hansestadt Hamburg","Neuchâtel","Nordrhein-Westfalen","Haute-Normandie","Baden-Württemberg","Bayern","Sachsen-Anhalt","Berlin","Mecklenburg-Vorpommern","Schleswig-Holstein","Brandenburg","Niedersachsen","Saarland","Thüringen","Hessen","Sachsen"], $zoom: {min: 7, max: 8} }
+                draw:
+                    text-blend-order:
+                        visible: false
+            small-ones:
+                filter: { name: ["Delaware","New Jersey","Connecticut","Rhode Island","Massachusetts","New Hampshire","Vermont"], $zoom: {min: 7, max: 8} }
+                draw:
+                    text-blend-order:
+                        text_source: function() { return feature["name:abbreviation"] || feature["name"]; }
+                        font: { transform: uppercase }
+
+        populated-places:
+            draw:
+                icons:
+                    interactive: true
+                    priority: 5
+                    text:
+                        interactive: true
+                        anchor: bottom
+
+            populated-places-natural-earth-z2:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [2], scalerank: 0 }
+                draw:
+                    icons:
+                        size: 5px
+                        visible: *icon_visible_populated_places
+                        sprite: townspot-s-rev
+                        text:
+                            visible: *text_visible_populated_places
+                            font:
+                                size: 10px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-natural-earth-z3:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [3] }
+                z3places-1:
+                    filter: { scalerank: [0] }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 11px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                z3places-2:
+                    filter: { scalerank: [1] }
+                    draw:
+                        icons:
+                            priority: 7
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 9px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-natural-earth-z4:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [4] }
+                z4places-1:
+                    filter: { scalerank: [0] }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 11px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+
+                z4places-2:
+                    filter: { scalerank: [1,2] }
+                    draw:
+                        icons:
+                            priority: 7
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 9px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-natural-earth-z5:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [5] }
+                z5places-1:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        icons:
+                            priority: 7
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 15px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                priority: 5
+                                size: 8px
+                                sprite: capital-l
+#                                text:
+#                                    priority: 6
+
+                z5places-2:
+                    filter: { scalerank: [2] }
+                    draw:
+                        icons:
+                            priority: 11
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 12px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                priority: 9
+                                size: 6px
+                                sprite: capital-m
+#                                text:
+#                                    priority: 10
+
+                z5places-3:
+                    filter: { scalerank: [3,4] }
+                    draw:
+                        icons:
+                            priority: 17
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 10px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                priority: 15
+                                size: 6px
+                                sprite: capital-m
+#                                text:
+#                                    priority: 16
+
+            populated-places-natural-earth-z6:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [6] }
+                z6places-1:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        icons:
+                            priority: 7
+                            size: 8px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-l-rev
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 16px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-l
+                                size: 8px
+                                priority: 5
+#                                text:
+#                                    priority: 6
+
+                z6places-2:
+                    filter: { scalerank: [2,3,4] }
+                    draw:
+                        icons:
+                            priority: 11
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 13px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 6px
+                                sprite: capital-m
+                                priority: 9
+#                                text:
+#                                    priority: 10
+
+                z6places-3:
+                    filter: { scalerank: [5,6] }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 15
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 11px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 6px
+                                sprite: capital-m
+                                priority: 13
+#                                text:
+#                                    priority: 14
+
+            populated-places-natural-earth-z7:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [7] }
+                z7places-1:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        icons:
+                            size: 8px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-l-rev
+                            priority: 7
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 17px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 8px
+                                sprite: capital-l
+                                priority: 5
+#                                text:
+#                                    priority: 6
+
+                z7places-2:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 13
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 14px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 8px
+                                sprite: capital-l
+                                priority: 11
+#                                text:
+#                                    priority: 12
+
+                z7places-3:
+                    filter: { scalerank: [6,7] }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 17
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 12px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 6px
+                                sprite: capital-m
+                                priority: 15
+#                                text:
+#                                    priority: 16
+
+            populated-places-osm-z8:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [8]
+
+                z8places-1:
+                    filter:
+                        any:
+                            - { population: { min: 1000000 } }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 7
+                            repeat_group: abc
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 17px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 8px
+                                sprite: capital-l
+                                priority: 5
+#                                text:
+#                                    priority: 6
+                z8places-2:
+                    filter:
+                        any:
+                            - { population: { min: 150000, max: 999999 } }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 11
+                            repeat_group: abc
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 14px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 6px
+                                sprite: capital-m
+                                priority: 9
+#                                text:
+#                                    priority: 10
+
+                z8places-3:
+                    filter:
+                        any:
+                            - { population: { min: 85000, max: 149999 } }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 15
+                            repeat_group: abc
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 12px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 6px
+                                sprite: capital-m
+                                priority: 13
+#                                text:
+#                                    priority: 14
+
+                z8places-4:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 84999 } }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 19
+                            repeat_group: abc
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 10px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 5px
+                                sprite: capital-m
+                                priority: 17
+#                                text:
+#                                    priority: 18
+                z8places-5:
+                    filter:
+                        all:
+                            - { population: { max: 50000 } }
+                        any:
+                            - { capital: yes }
+                            - { state_capital: yes }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 19
+                            repeat_group: abc
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 10px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 5px
+                                sprite: capital-s
+                                priority: 17
+#                                text:
+#                                    priority: 18
+
+            populated-places-natural-earth-z8-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [8], population: { max: 50000 } }
+                draw: { icons: { text: { font: { fill: *text_fill } } } }
+                z8places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        icons:
+                            size: 8px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-l-rev
+                            priority: 23
+                            repeat_group: abc
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 17px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 8px
+                                sprite: capital-l
+                                priority: 21
+#                                text:
+#                                    priority: 22
+
+                z8places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            repeat_group: abc
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 14px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-m
+
+                z8places-3-ne:
+                    filter: { scalerank: [6,7] }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 27
+                            repeat_group: abc
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 10px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-s
+                                priority: 25
+#                                text:
+#                                    priority: 26
+
+            populated-places-osm-z9:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [9]
+
+                z9places-1:
+                    filter:
+                        any:
+                            - { population: { min: 1000000 } }
+                    draw:
+                        text-blend-order:
+                            anchor: center
+                            visible: *text_visible_populated_places
+                            priority: 6
+                            font:
+                                size: 17px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z9places-2a:
+                    filter:
+                        any:
+                            - { population: { min: 350000, max: 999999 } }
+                    draw:
+                        text-blend-order:
+                            anchor: center
+                            visible: *text_visible_populated_places
+                            priority: 8
+                            font:
+                                size: 14px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z9places-2b:
+                    filter:
+                        any:
+                            - { population: { min: 150000, max: 350000 } }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 11
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 14px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-m
+                                priority: 9
+#                                text:
+#                                    priority: 10
+
+                z9places-3:
+                    filter:
+                        any:
+                            - { population: { min: 85000, max: 149999 } }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 15
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 12px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-m
+                                priority: 13
+                                text:
+                                    font:
+                                        size: 14px
+
+                z9places-4:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 84999 } }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 19
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 10px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-s
+                                priority: 17
+#                                text:
+#                                    priority: 18
+                z9places-5:
+                    filter:
+                        all:
+                            - { population: { max: 50000 } }
+                        any:
+                            - { capital: yes }
+                            - { state_capital: yes }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 19
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 10px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-s
+                                priority: 17
+#                                text:
+#                                    priority: 18
+
+            populated-places-osm-z9-no-population:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: false
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [9]
+                        - kind: [city,town]
+                draw:
+                    icons:
+                        size: 5px
+                        visible: *icon_visible_populated_places
+                        sprite: townspot-s-rev
+                        priority: 21
+                        text:
+                            # anchor: center
+                            visible: *text_visible_populated_places
+                            font:
+                                size: 10px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-natural-earth-z9-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [9], population: { max: 50000 } }
+                draw: { icons: { text: { font: { fill: *text_fill } } } }
+                z9places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        icons:
+                            size: 8px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-l-rev
+                            priority: 25
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 17px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-l
+                                priority: 23
+#                                text:
+#                                    priority: 24
+
+                z9places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 29
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 14px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-m
+                                priority: 28
+#                                text:
+#                                    priority: 27
+
+                z9places-3-ne:
+                    filter: { scalerank: [6,7,8,9] }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 33
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 12px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-m
+                                priority: 31
+#                                text:
+#                                    priority: 32
+
+            populated-places-osm-z10:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [10]
+
+                z10places-1:
+                    filter:
+                        any:
+                            - { population: { min: 1000000 } }
+                    draw:
+                        text-blend-order:
+                            anchor: center
+                            visible: *text_visible_populated_places
+                            font:
+                                size: 17px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z10places-2a:
+                    filter:
+                        any:
+                            - { population: { min: 350000, max: 1000000 } }
+                    draw:
+                        text-blend-order:
+                            anchor: center
+                            visible: *text_visible_populated_places
+                            font:
+                                size: 14px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z10places-2b:
+                    filter:
+                        any:
+                            - { population: { min: 150000, max: 350000 } }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 7
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 14px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+
+                z10places-3:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 149999 } }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 11
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 12px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+
+                z10places-4:
+                    filter:
+                        any:
+                            - { population: { min: 20000, max: 49999 } }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 13
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 10px
+                                    fill: *text_fill
+                                    stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-osm-z10-no-population:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: false
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [10]
+                        - kind: [city,town]
+                draw:
+                    icons:
+                        size: 5px
+                        visible: *icon_visible_populated_places
+                        sprite: townspot-s-rev
+                        priority: 15
+                        text:
+                            # anchor: center
+                            visible: *text_visible_populated_places
+                            font:
+                                size: 10px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-natural-earth-z10-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [10], population: { max: 20000 } }
+                draw: { icons: { text: { font: { fill: *text_fill } } } }
+                z10places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        icons:
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 17px
+                                    stroke: { color: *text_stroke, width: 4 }
+
+                z10places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        icons:
+                            size: 6px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-m-rev
+                            priority: 21
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 14px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                sprite: capital-m
+                                priority: 20
+#                                text:
+#                                    priority: 21
+
+                z10places-3-ne:
+                    filter: { scalerank: [6,7,8,9,10] }
+                    draw:
+                        icons:
+                            size: 5px
+                            visible: *icon_visible_populated_places
+                            sprite: townspot-s-rev
+                            priority: 25
+                            text:
+                                visible: *text_visible_populated_places
+                                font:
+                                    size: 12px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            icons:
+                                size: 7px
+                                sprite: capital-m
+                                priority: 23
+#                                text:
+#                                    priority: 24
+
+            populated-places-osm-z11:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [11]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+
+                z11places-1:
+                    filter:
+                        any:
+                            - { population: { min: 1000000 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 5
+                            font:
+                                size: 18px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z11places-2:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 999999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 6
+                            font:
+                                size: 14px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z11places-3:
+                    filter:
+                        any:
+                        - { population: { min: 5000, max: 49999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 7
+                            font:
+                                size: 11px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-osm-z11-no-population:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: false
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [11]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        visible: *text_visible_populated_places
+                        priority: 8
+                        font:
+                            size: 11px
+                            fill: *text_fill
+                            stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-natural-earth-z11-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [11], population: { max: 5000 } }
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        font:
+                            fill: *text_fill
+                z11places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 10
+                            font:
+                                size: 18px
+                                stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 9
+                                font:
+                                    size: 18px
+                                    stroke: { color: *text_stroke, width: 4 }
+
+                z11places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 13
+                            font:
+                                size: 14px
+                                stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 11
+                                font:
+                                    size: 14px
+                                    stroke: { color: *text_stroke, width: 4 }
+                    state_capital:
+                        filter: { state_capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 12
+                                font:
+                                    size: 14px
+                                    stroke: { color: *text_stroke, width: 4 }
+
+                z11places-3-ne:
+                    filter: { scalerank: [6,7,8,9,10,11] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 15
+                            font:
+                                size: 11px
+                                stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 14
+                                font:
+                                    size: 11px
+                                    stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-osm-z12:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [12]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+
+                z12places-1:
+                    filter:
+                        any:
+                            - { population: { min: 1000000 } }
+
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 5
+                            font:
+                                size: 18px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z12places-2:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 999999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 6
+                            font:
+                                size: 14px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z12places-3:
+                    filter:
+                        any:
+                        - { population: { min: 5000, max: 49999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 7
+                            font:
+                                size: 11px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z12places-4:
+                    filter:
+                        any:
+                        - { population: { max: 5000 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 8
+                            font:
+                                size: 11px
+                                fill: *text_fill
+                                stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-osm-z12-no-population:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: false
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [12]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        visible: *text_visible_populated_places
+                        priority: 9
+                        font:
+                            size: 11px
+                            fill: *text_fill
+                            stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-natural-earth-z12-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [12], population: { max: 5000 } }
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        priority: 10
+                        font:
+                            fill: *text_fill
+
+                z12places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 12
+                            font:
+                                size: 18px
+                                stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 11
+                                font:
+                                    size: 18px
+                                    stroke: { color: *text_stroke, width: 4 }
+
+                z12places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 14
+                            font:
+                                size: 14px
+                                stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 13
+                                font:
+                                    size: 14px
+                                    stroke: { color: *text_stroke, width: 4 }
+
+                z12places-3-ne:
+                    filter: { scalerank: [6,7,8,9,10,11,12] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 16
+                            font:
+                                size: 11px
+                                stroke: { color: *text_stroke, width: 4 }
+                    capital:
+                        filter: { capital: yes }
+                        draw:
+                            text-blend-order:
+                                priority: 15
+                                font:
+                                    size: 11px
+                                    stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-osm-z13-z14:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: true
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [13,14]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        visible: *text_visible_populated_places
+                        font:
+                            weight: 600
+                            fill: *text_fill
+                z14:
+                    filter:
+                        $zoom: [14]
+                    draw:
+                        text-blend-order:
+                            font:
+                                weight: 600
+
+                z13places-1:
+                    filter:
+                        any:
+                            - { population: { min: 200000 } }
+                    draw:
+                        text-blend-order:
+                            visible: false
+
+                z13places-2:
+                    filter:
+                        any:
+                            - { population: { min: 50000, max: 199999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 5
+                            font:
+                                size: 14px
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z13places-3:
+                    filter:
+                        any:
+                        - { population: { min: 5000, max: 49999 } }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 6
+                            font:
+                                size: 12px
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z13places-4:
+                    filter:
+                        any:
+                            - population: false
+                            - population: true
+                              all:
+                                - population: { max: 5000 }
+                    draw:
+                        text-blend-order:
+                            font:
+                                size: 12px
+                                stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-osm-z13-z14-no-population:
+                filter:
+                    all:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - name: true
+                        - population: false
+                        - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
+                        - $zoom: [13, 14]
+                        - kind: [city,town]
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        visible: *text_visible_populated_places
+                        priority: 7
+                        font:
+                            size: 11px
+                            stroke: { color: *text_stroke, width: 4 }
+
+            populated-places-natural-earth-z13-z14-backfill:
+                filter: { name: true, source: naturalearthdata.com, $zoom: [13,14], population: { max: 5000 } }
+                draw:
+                    text-blend-order:
+                        anchor: center
+                        font:
+                            fill: *text_fill
+                            weight: 400
+
+                z13places-1-ne:
+                    filter: { scalerank: [0,1] }
+                    draw:
+                        text-blend-order:
+                            priority: 8
+                            interactive: false
+                            visible: false
+
+                z13places-2-ne:
+                    filter: { scalerank: [2,3,4,5] }
+                    draw:
+                        text-blend-order:
+                            priority: 9
+                            visible: *text_visible_populated_places
+                            font:
+                                size: 13px
+                                stroke: { color: *text_stroke, width: 4 }
+
+                z13places-3-ne:
+                    filter: { scalerank: [6,7,8,9,10,11,12] }
+                    draw:
+                        text-blend-order:
+                            visible: *text_visible_populated_places
+                            priority: 10
+                            font:
+                                size: 12px
+                                stroke: { color: *text_stroke, width: 4 }
+
+            neighborhood-z11:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [11]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11]
+                            - max_zoom: { min: 12 }
+                            - is_landuse_aoi: false
+                            #- kind_tile_rank: { max: 6 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        text_wrap: 10
+                        visible: *text_visible_neighbourhoods_e
+                        font:
+                            size: 9px
+                            weight: 400
+                            fill: [0.085,0.658,0.710]
+                            transform: uppercase
+                            stroke: { color: [0.894,0.906,0.914], width: 4 }
+            neighborhood-z12:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [12]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11,12]
+                            - max_zoom: { min: 13 }
+                            - is_landuse_aoi: false
+                            #- kind_tile_rank: { max: 8 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        text_wrap: 10
+                        visible: *text_visible_neighbourhoods_e
+                        font:
+                            size: 10px
+                            weight: 400
+                            fill: [0.085,0.658,0.710]
+                            transform: uppercase
+                            stroke: { color: [0.894,0.906,0.914], width: 4 }
+            neighborhood-z13:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [13]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11,12,13]
+                            - max_zoom: { min: 14 }
+                            - is_landuse_aoi: false
+                            - kind_tile_rank: { max: 8 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        text_wrap: 10
+                        visible: *text_visible_neighbourhoods_e
+                        font:
+                            size: 12px
+                            weight: 400
+                            fill: [0.085,0.658,0.710]
+                            transform: uppercase
+                            stroke: { color: [0.904,0.916,0.924], width: 4 }
+            neighborhood-z14:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [14]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11,12,13,14]
+                            - max_zoom: { min: 15 }
+                            - is_landuse_aoi: false
+                            - kind_tile_rank: { max: 8 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        text_wrap: 12
+                        visible: *text_visible_neighbourhoods
+                        font:
+                            size: 15px
+                            weight: 300
+                            fill: [0.085,0.658,0.710]
+                            transform: uppercase
+                            stroke: { color: [0.914,0.926,0.934], width: 5 }
+            neighborhood-z15:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [15]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11,12,13,14,15]
+                            - max_zoom: { min: 16 }
+                            - is_landuse_aoi: false
+                            - kind_tile_rank: { max: 8 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        text_wrap: 12
+                        visible: *text_visible_neighbourhoods
+                        font:
+                            size: 18px
+                            weight: 200
+                            fill: [0.085,0.658,0.710]
+                            transform: uppercase
+                            stroke: { color: [0.949,0.953,0.953], width: 6 }
+                z15-new:
+                    filter:
+                        all:
+                            - min_zoom: 15
+                    draw:
+                        text-blend-order:
+                            priority: 19
+                            font:
+                                size: 13px
+            neighborhood-z16:
+                filter:
+                    all:
+                        - name: true
+                        - kind: [macrohood, neighbourhood]
+                        - $zoom: [16]
+                    any:
+                        - source: [openstreetmap, openstreetmap.org]
+                        - source: [whosonfirst, whosonfirst.mapzen.com]
+                          all:
+                            - min_zoom: [11,12,13,14,15,16]
+                            - max_zoom: { min: 17 }
+                            - is_landuse_aoi: false
+                            - kind_tile_rank: { max: 8 }
+                draw:
+                    text-blend-order:
+                        priority: 18
+                        visible: *text_visible_neighbourhoods
+                        font:
+                            size: 20px
+                            weight: 300
+                            fill: [0.082,0.780,1.000]
+                            transform: uppercase
+                            stroke: { color: [0.949,0.953,0.953], width: 6 }
+
+    highway-exit:
+        data: { source: mapzen, layer: [pois] }
+        filter: { kind: motorway_junction, $zoom: { min: 15 } }
+        draw:
+            icons:
+                visible: false
+            text-blend-order:
+                visible: *text_visible_exits
+                interactive: true
+                text_source: ref
+                priority: 52
+                font:
+                    fill: *text_fill_exits
+                    size: [[12,9px],[15,12px],[17,14px]]
+                    stroke: { color: *text_stroke, width: [[12,2px],[14,3px],[15,3px]] }
+        later:
+            filter: { $zoom: { min: 16 } }
+            draw:
+                text-blend-order:
+                    font:
+                        weight: 600
+    airport-gate:
+        data: { source: mapzen, layer: [pois] }
+        filter: { kind: gate, aeroway: gate, $zoom: { min: 16 } }
+        draw:
+            icons:
+                visible: false
+            text-blend-order:
+                visible: *text_visible_airport_gate
+                interactive: true
+                text_source: ref
+                font:
+                    fill: *text_fill_exits
+                    size: [[16,9px],[17,10px],[20,12px]]
+                    #stroke: { color: *highway1, width: [[12,2px],[14,3px],[15,3px]] }
+        later:
+            filter: { $zoom: { min: 19 } }
+            draw:
+                text-blend-order:
+                    font:
+                        weight: 600
+
+    pois_and_landuse_labels:
+        data: { source: mapzen, layer: [pois,landuse] }
+        visible: *label_visible_poi_landuse
+        filter:
+            all:
+                - not: { kind: [building,address,apron,residential] }
+                - $geometry: point
+                # White list a few kinds to "always" show per the tile zoom inclusion, else test feature's min_zoom
+                - function() { if( feature.kind == 'attraction' || feature.kind == 'landmark' || feature.kind == 'playground' || feature.kind == 'toilets' ) { return true } else { return feature.min_zoom <= $zoom } }
+                - any:
+                    - area: false
+                      all:
+                          - $zoom: { min: 12 }
+                    - area: false
+                      elevation: true
+                      all:
+                          - $zoom: { min: 11 }
+                    - area: true
+                      all:
+                          - kind: true
+        draw:
+            icons:
+                size: [[13, 18px], [16, 18px], [18, 22px]]
+                interactive: true
+                visible: false
+                priority: 45
+                repeat_group: abc
+                text:
+                    visible: false    # labels are enabled by each layer below
+                    move_into_tile: false # preserves text alignment w/icons in JS
+                    anchor: bottom
+                    interactive: true
+                    font:
+                        family: *text_font_family
+                        weight: 600
+                        fill: [0.10,0.10,0.10]
+                        size: 10px
+                        stroke: { color: *text_stroke, width: 3 }
+            text:
+                visible: false    # labels are enabled by each layer below, and these are only for special cases like enclosures
+                move_into_tile: false # preserves text alignment w/icons in JS
+                anchor: bottom
+                interactive: true
+                font:
+                    family: *text_font_family
+                    weight: 600
+                    fill: [0.10,0.10,0.10]
+                    size: 10px
+                    stroke: { color: *text_stroke, width: 3 }
+        poi_labels-z14:
+            filter: { $zoom: [14] }
+            draw: { icons: { text: { font: { size: 10px } } } }
+        poi_labels-z15:
+            filter: { $zoom: [15,16,17] }
+            draw: { icons: { text: { font: { size: 10px, stroke: { width: 2 } } } } }
+        poi_labels-z18:
+            filter: { $zoom: [18,19] }
+            draw: { icons: { text: { font: { size: 11px, weight: 600, stroke: { width: 3 } } } } }
+        poi_labels-z20-up:
+            filter: { $zoom: { min: 20 } }
+            draw: { icons: { text: { font: { size: 11px, weight: 600, stroke: { width: 3 }  } } } }
+
+        # since the blocks below are filtering by area and by name, we need a block here
+        # that adjusts the color by kind first
+        text-colours:
+            greens:
+                filter: { kind: [park, national_park, "park or protected land", conservation, protected_area, nature_reserve, forest, grass, beach, battlefield] }
+                draw:
+                    icons:
+                        text:
+                            font:
+                                fill: [0.032,0.522,0.530]
+                                weight: 600
+                                stroke:
+                                    color: *text_stroke_park
+        no-name:
+            filter: { name: false }
+            sports-pitch:
+                filter: { kind: [grass, pitch], $geometry: point, area: true, $zoom: { min: 16 } }
+                draw:
+                    icons:
+                        sprite: function() { return feature.sport; }
+                        visible: *icon_visible_poi_landuse_e
+                        priority: 49
+                baseball:
+                    filter: { sport: baseball }
+                    draw: { icons: { sprite: baseball-field } }
+                basketball:
+                    filter: { sport: basketball }
+                    draw: { icons: { sprite: basketball-court } }
+                football:
+                    filter: { sport: football }
+                    draw: { icons: { sprite: football-stadium } }
+                hockey:
+                    filter: { sport: hockey-field }
+                    draw: { icons: { sprite: hockey-field } }
+                soccer:
+                    filter: { sport: soccer }
+                    draw: { icons: { sprite: soccer-field } }
+                tennis:
+                    filter: { sport: tennis }
+                    draw: { icons: { sprite: tennis } }
+            tree:
+                filter: { kind: tree, $zoom: { min: 18 } }
+                draw:
+                    icons:
+                        # TODO: put tree icons behind the buildings
+                        # See SF State University #20/37.72314/-122.47772
+                        sprite: tree
+                        color: [0.145,0.745,0.643]
+                        visible: *icon_visible_poi_landuse_e
+                z18:
+                    filter: { $zoom: [18] }
+                    draw:
+                        icons:
+                            # to circle white SMALL
+                            color: [0.459,0.765,0.722]
+                            sprite: dot-white
+                z19:
+                    filter: { $zoom: [19] }
+                    draw:
+                        icons:
+                            # to circle white SMALL
+                            sprite: tree
+            gate:
+                filter: { kind: gate, $zoom: { min: 19 } }
+                draw:
+                    icons:
+                        # to circle black generic
+                        sprite: dot-black
+                        visible: *icon_visible_poi_landuse_e
+                        text:
+                            text_source: function() { return 'gate'; }
+            toilets:
+                filter: { kind: toilets, $zoom: { min: 16 }  }
+                draw: { icons: { sprite: toilets, visible: *icon_visible_poi_landuse_e } }
+            toilets:
+                filter: { kind: toilets, $zoom: { min: 16 }  }
+                draw: { icons: { sprite: toilets, visible: *icon_visible_poi_landuse_e } }
+            playground:
+                filter: { kind: playground, $zoom: { min: 18 }  }
+                draw: { icons: { sprite: playground, visible: *icon_visible_poi_landuse_e } }
+            picnic_site:
+                filter: { kind: [picnic_site, picnic_table], $zoom: { min: 15 }  }
+                draw: { icons: { sprite: picnic-spot, visible: *icon_visible_poi_landuse_e } }
+            information:
+                filter: { kind: information, $zoom: { min: 18 }  }
+                draw: { icons: { sprite: information, visible: *icon_visible_poi_landuse_e } }
+            drinking-water:
+                filter: { kind: drinking_water, $zoom: { min: 18 }  }
+                draw: { icons: { sprite: drinking-water, visible: *icon_visible_poi_landuse_e } }
+            traffic-signal:
+                filter: { kind: traffic_signals, $zoom: { min: 18 } }
+                draw:   { icons: { sprite: traffic-signal, visible: *icon_visible_poi_landuse_e } }
+            bicycle-parking:
+                filter: { kind: [bicycle_parking], $zoom: { min: 19 } }
+                draw:   { icons: { sprite: bicycle-parking, visible: *icon_visible_poi_landuse_e } }
+            car-parking:
+                filter: { kind: parking, $zoom: { min: 17 } }
+                draw:
+                    icons:
+                        sprite: parking
+                        visible: *icon_visible_poi_landuse_e
+            power_tower:
+                filter: { kind: [power_tower], $zoom: { max: 16 } }
+                draw:   { icons: { visible: false } }
+            power_pole:
+                filter: { kind: [power_pole], $zoom: { max: 17 } }
+                draw:   { icons: { visible: false } }
+            playgrounds:
+                filter:
+                    all:
+                        - kind: [playground, allotments, attraction, landmark]
+                    any:
+                        - { $zoom: [15], area: { min: 600 } }
+                        - { $zoom: [16], area: { min: 300 } }
+                        - { $zoom: { min: 17 } }
+                draw:
+                    icons:
+                        sprite: function() { return feature.kind; }
+            pylon:
+                filter: { kind: [pylon], $zoom: { max: 17 } }
+                draw:   { icons: { visible: false }}
+            bbq:
+                filter: { kind: [bbq], $zoom: { min: 17 } }
+                draw:
+                    icons:
+                        sprite: bbq
+                        visible: *icon_visible_poi_landuse_e
+            ranger-station:
+                filter: { kind: [ranger_station], $zoom: { min: 15 } }
+                draw:   { icons: { sprite: ranger-station, visible: *icon_visible_poi_landuse_e } }
+            trailhead:
+                filter: { kind: [trailhead], $zoom: { min: 15 } }
+                draw:   { icons: { sprite: trailhead, visible: *icon_visible_poi_landuse_e } }
+            firepit:
+                filter: { kind: [firepit], $zoom: { min: 15 } }
+                draw:   { icons: { sprite: firepit, visible: *icon_visible_poi_landuse_e } }
+            swimming-area:
+                filter: { kind: [swimming_area], $zoom: { min: 15 } }
+                draw:   { icons: { sprite: swimming-area, visible: *icon_visible_poi_landuse_e } }
+            fishing_area:
+                filter: { kind: [fishing_area], $zoom: { min: 15 } }
+                draw:   { icons: { sprite: fishing-area, visible: *icon_visible_poi_landuse_e } }
+            slipway:
+                filter: { kind: [slipway], $zoom: { min: 15 } }
+                draw:   { icons: { sprite: slipway, visible: *icon_visible_poi_landuse_e } }
+            hot-spring:
+                filter: { kind: [hot_spring], $zoom: { min: 15 } }
+                draw:   { icons: { sprite: hot-spring, visible: *icon_visible_poi_landuse_e } }
+            spring:
+                filter: { kind: [spring], $zoom: { min: 15 } }
+                draw:   { icons: { sprite: spring, visible: *icon_visible_poi_landuse_e } }
+            shower:
+                filter: { kind: [shower], $zoom: { min: 15 } }
+                draw:   { icons: { sprite: shower, visible: *icon_visible_poi_landuse_e } }
+            geyser:
+                filter: { kind: [geyser], $zoom: { min: 15 } }
+                draw:   { icons: { sprite: geyser, visible: *icon_visible_poi_landuse_e } }
+            observatory:
+                    filter: { kind: [observatory], $zoom: { min: 14 } }
+                    draw:   { icons: { sprite: observatory, visible: *icon_visible_poi_landuse_e } }
+            boat-rental:
+                    filter: { kind: [boat_rental], $zoom: { min: 15 } }
+                    draw:   { icons: { sprite: boat-rental, visible: *icon_visible_poi_landuse_e } }
+            water-tower:
+                    filter: { kind: [water_tower], $zoom: { min: 15 } }
+                    draw:   { icons: { sprite: water-tower, visible: *icon_visible_poi_landuse_e } }
+            battlefield:
+                    filter: { kind: [battlefield] }
+                    draw:   { icons: { sprite: battlefield, visible: *icon_visible_poi_landuse_e } }
+            walking-or-bicycle_junction:
+                filter: { kind: [bicycle_junction, walking_junction] }
+                draw:
+                    icons:
+                        sprite: generic
+                        visible: *icon_visible_poi_landuse_e
+                        text:
+                            visible: true
+                            text_source: ref
+            outdoor-needing-icons:
+                filter: { kind: [bicycle_repair_station, life_ring, waste_disposal, watering_place, water_point, lifeguard_tower, power_pole, power_tower, petroleum_well, communications_tower, silo, putin, egress, hazard, put_in_egress, rapid, beacon, cross, water_well, saddle, dune, sinkhole, rock, stone, bicycle_junction, walking_junction, dam, boat_storage, windmill, horse, fire_lookout, fee_station, rest_area] }
+                draw:
+                    icons:
+                        priority: 43
+                        sprite: generic
+                hide-early:
+                    filter: { kind: [recreation_track, dam] }
+                    draw:
+                        icons:
+                            priority: 50
+                    early:
+                        filter: { $zoom: { max: 15 } }
+                        draw:
+                            icons:
+                                visible: false
+        has-name:
+            filter: { name: true }
+            # match 1:1 correlations between data and sprite name
+            direct-match:
+                filter:
+                    all:
+                        - area: false
+                draw:
+                    icons:
+                        # sprite_source: kind
+                        sprite: function() { return feature.kind; }
+                        visible: *icon_visible_poi_landuse
+            # add generic icon at high zoom, if direct match fails
+            generic-icons:
+               filter: { $zoom: { min: 18 }, area: false }
+               draw:
+                   icons:
+                       priority: 47
+                       sprite_default: generic
+                       visible: *icon_visible_poi_landuse
+
+            # add generic icon at high zoom
+            default-label-names:
+               filter: { $zoom: { min: 13 }, area: false }
+               draw:
+                    icons:
+                        text:
+                           visible: *text_visible_poi_landuse
+            landuse-labels-green-areas-national-park:
+                filter:
+                    all:
+                        - area: true
+                        - $geometry: point
+                        - kind: [national_park, "park or protected land"]
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [4],  area: { min: 3000000000 } }
+                        - { $zoom: [5],  area: { min: 3000000000 } }
+                        - { $zoom: [6],  area: { min: 500000000 } }
+                        - { $zoom: [7,8,9],  area: { min: 100000000 } }
+                        - { $zoom: [10], area: { min: 50000000 } }
+                        - { $zoom: [11], area: { min: 25000000 } }
+                        - { $zoom: [12], area: { min: 5000000 } }
+                        - { $zoom: [13], area: { min: 200000 } }
+                        - { $zoom: [14], area: { min: 50000 } }
+                        - { $zoom: { min: 15 } }
+                national-park:
+                    # yosemite national park, joshua tree national park
+                    filter: function() { return feature.name && ((feature.name.indexOf("National Park") > -1) || feature.name.indexOf("National Monument") > -1); }
+                    visible: *label_visible_landuse_green
+                    draw:
+                        icons:
+                            visible: *icon_visible_landuse_green
+                            sprite: park
+                            priority: 41
+                            text:
+                                visible: *text_visible_landuse_green
+                                font:
+                                    style: italic
+                                    stroke: { color: *text_stroke_park, width: 4 }
+                    natl-park-labels-z4-z5:
+                        filter: { $zoom: [4,5] }
+                        draw:
+                            icons:
+                                visible: false
+                                text: { font: { size: 9px, stroke: { width: 2px } } }
+                    natl-park-labels-z6:
+                        filter: { $zoom: [6] }
+                        draw:
+                            icons:
+                                text: { font: { size: 9px, stroke: { width: 2px } } }
+                    natl-park-labels-z7:
+                        filter: { $zoom: [7] }
+                        draw:
+                            icons:
+                                text: { font: { size: 10px, stroke: { width: 2px } } }
+                    natl-park-labels-z8:
+                        filter: { $zoom: [8,9] }
+                        draw:
+                            icons:
+                                text: { font: { size: 11px, stroke: { width: 2px } } }
+                    natl-park-labels-z10:
+                        filter: { $zoom: {min: 10, max: 14 } }
+                        draw:
+                            icons:
+                                text: { font: { size: 12px } }
+                    poi_labels-z14:
+                        filter: { $zoom: [14] }
+                        draw: { icons: { text: { font: { size: 11px } } } }
+                    poi_labels-z15:
+                        filter: { $zoom: [15,16,17] }
+                        draw: { icons: { text: { font: { size: 11px } } } }
+                    poi_labels-z18:
+                        filter: { $zoom: [18,19] }
+                        draw: { icons: { text: { font: { size: 11px } } } }
+                    poi_labels-z20-up:
+                        filter: { $zoom: { min: 20 } }
+                        draw: { icons: { text: { font: { size: 11px } } } }
+            landuse-labels-green-areas-not-national-park:
+                filter:
+                    all:
+                        - area: true
+                        - $geometry: point
+                        - kind: [park, national_park, "park or protected land", conservation, protected_area, nature_reserve, forest, grass]
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [5],    area: { min: 10000000000 } }
+                        - { $zoom: [6,7],  area: { min: 5000000000 } }
+                        - { $zoom: [8],    area: { min: 1000000000 } }
+                        - { $zoom: [9],    area: { min: 100000000 } }
+                        - { $zoom: [10],   area: { min: 50000000 } }
+                        - { $zoom: [11],   area: { min: 10000000 } }
+                        - { $zoom: [12],   area: { min: 5000000 } }
+                        - { $zoom: [13],   area: { min: 200000 } }
+                        - { $zoom: [14],   area: { min: 50000 } }
+                        - { $zoom: [15],   area: { min: 10000 } }
+                        - { $zoom: [16],   area: { min: 1000 } }
+                        - { $zoom: { min: 17 } }
+                not-national-park:
+                    filter: function() { return feature.name && !((feature.name.indexOf("National Park") > -1) || feature.name.indexOf("National Monument") > -1); }
+                    draw:
+                        icons:
+                            visible: *icon_visible_landuse_green
+                            sprite: park
+                            priority: 41
+                            text:
+                                visible: *text_visible_landuse_green
+                                font:
+                                    #fill: [0.032,0.522,0.530]
+                                    # fill: [0.093,0.473,0.408]
+                                    size: 11px
+                                    style: italic
+                                    stroke: { color: *text_stroke_park, width: 3 }
+                    green-areas-z6:
+                        # mojave national preserve
+                        filter: { $zoom: [6] }
+                        draw:
+                            icons:
+                                visible: false
+                                text: { font: { size: 10px, stroke: { width: 2px } } }
+                    green-areas-z7:
+                        filter: { $zoom: [7] }
+                        draw:
+                            icons:
+                                visible: false
+                                text: { font: { size: 10px, stroke: { width: 2px } } }
+                    green-areas-z17-up:
+                        filter: { $zoom: { min: 17 } }
+                        draw:
+                            icons:
+                                text:
+                                    font:
+                                        size: 11px
+                                        stroke: { color: *text_stroke, width: 4 }
+
+                    wilderness-areas:
+                        filter: function() { return feature.name && (feature.name.indexOf("Wilderness") > -1 || feature.name.indexOf("BLM") > -1) }
+                        draw:
+                            icons:
+                                sprite: forest
+                        early:
+                           filter: { $zoom: { max: 8 } }
+                           draw:
+                                icons:
+                                    visible: false
+                                    text: { visible: false }
+                    early-not-national-park:
+                        filter: { not: { kind: [national_park] }, $zoom: { max: 6 } }
+                        draw:
+                            icons:
+                                visible: false
+                                text: { visible: false }
+                    not-national-park:
+                        filter: function() { return feature.name && !((feature.name.indexOf("National Park") > -1) || feature.name.indexOf("National Monument") > -1); }
+                        # draw:
+                        #     icons:
+                        #         sprite: park
+                        early:
+                            filter: { $zoom: { max: 8 } }
+                            draw:
+                                icons:
+                                    visible: false
+                                    text: { visible: false }
+                    forest:
+                        filter: function() { return ( (feature.name && feature.name.indexOf("Forest") > -1) || (feature.protect_class >=6 && feature.name.indexOf("Park") < 0) ) }
+                        draw:
+                            icons:
+                                sprite: forest
+                        early:
+                            filter: { $zoom: { max: 8 } }
+                            draw:
+                                icons:
+                                    visible: false
+                                    text: { visible: false }
+                    hide-till-later:
+                        filter: { kind: [grass], $zoom: { max: 16 } }
+                        draw:
+                            icons:
+                                visible: false
+                                text: { visible: false }
+                    only-text-later:
+                        filter: { kind: [grass], $zoom: { min: 16 } }
+                        draw:
+                            icons:
+                                visible: false
+                                text: { font: { style: italic } }
+            battlefield:
+                filter:
+                    all:
+                        - area: true
+                        - $geometry: point
+                        - kind: [battlefield]
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [4],  area: { min: 3000000000 } }
+                        - { $zoom: [5],  area: { min: 3000000000 } }
+                        - { $zoom: [6],  area: { min: 500000000 } }
+                        - { $zoom: [7,8,9],  area: { min: 10000000 } }
+                        - { $zoom: [10], area: { min: 5000000 } }
+                        - { $zoom: [11], area: { min: 5000000 } }
+                        - { $zoom: [12], area: { min: 5000000 } }
+                        - { $zoom: [13], area: { min: 200000 } }
+                        - { $zoom: [14], area: { min: 50000 } }
+                        - { $zoom: { min: 15 } }
+                draw:
+                    icons:
+                        visible: *icon_visible_landuse_green
+                        sprite: battlefield
+                        priority: 41
+                        text:
+                            visible: *text_visible_landuse_green
+                            font:
+                                #fill: [0.058,0.605,0.615]
+                                # fill: [0.093,0.473,0.408]
+                                style: italic
+                                stroke: { color: *text_stroke_park, width: 4 }
+            beach:
+                filter:
+                    all:
+                        - area: true
+                        - $geometry: point
+                        - kind: [beach]
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [10],   area: { min: 300000 } }
+                        - { $zoom: [11],   area: { min: 100000 } }
+                        - { $zoom: [12],   area: { min: 50000 } }
+                        - { $zoom: [13],   area: { min: 50000 } }
+                        - { $zoom: [14],   area: { min: 20000 } }
+                        - { $zoom: [15],   area: { min: 10000 } }
+                        - { $zoom: [16],   area: { min: 1000 } }
+                        - { $zoom: { min: 17 } }
+                draw:
+                    icons:
+                        visible: *icon_visible_landuse_green
+                        interactive: true
+                        sprite: beach
+                        text:
+                            visible: *text_visible_landuse_green
+                            interactive: true
+            airport:
+                filter:
+                    all:
+                        - kind: [airport, aerodrome]
+                        - area: true
+                        - $geometry: point
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [9],  area: { min: 10000000 } }
+                        - { $zoom: [10], area: { min: 10000000 } }
+                        - { $zoom: [11], area: { min: 5000000 } }
+                        - { $zoom: [12], area: { min: 5000000 } }
+                        - { $zoom: [13], area: { min: 500000 } }
+                        - { $zoom: [14], area: { min: 20000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [15], area: { min: 10000 } }
+                        - { $zoom: [16], area: { min: 5000 } }
+                        - { $zoom: [17], area: { min: 2000 } }
+                        - { $zoom: { min: 18 } }
+                draw:
+                    icons:
+                        sprite: airport
+                        visible: *icon_visible_landuse_green
+                        priority: 42
+                        text:
+                            visible: *text_visible_landuse_green
+                            text_source: function() { if(feature.iata) { return feature.name + ' (' + feature.iata + ')'; } else { return feature.name; } }
+                            font:
+                                #fill: [0.10,0.10,0.10]
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 4 }
+                early:
+                    filter: { $zoom: [9,10,11] }
+                    # todo: huh?
+                    draw: { icons: { text: { text_source: iata, font: { size: 11px } } } }
+                early2:
+                    filter: { $zoom: { min: 12, max: 14 } }
+                    draw: { icons: { text: { font: { size: 11px } } } }
+            university:
+                filter:
+                    all:
+                        - kind: [university, college]
+                        - area: true
+                        - $geometry: point
+                        - not: { $layer: buildings }
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [9],   area: { min: 10000000 } }
+                        - { $zoom: [10], area: { min: 5000000 } }
+                        - { $zoom: [11], area: { min: 2000000 } }
+                        - { $zoom: [12], area: { min: 500000 } }
+                        - { $zoom: [13], area: { min: 100000 } }
+                        - { $zoom: [14], area: { min: 100000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [15], area: { min: 40000 } }
+                        - { $zoom: [16], area: { min: 5000 } }
+                        - { $zoom: [17], area: { min: 2000 } }
+                        - { $zoom: { min: 18 } }
+                visible: *label_visible_landuse_green
+                draw:
+                    icons:
+                        sprite: college-university
+                        visible: *icon_visible_landuse_green
+                        priority: 41
+                        text:
+                            visible: *text_visible_landuse_green
+                            font:
+                                #fill: [0.10,0.10,0.10]
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 4 }
+                early:
+                    filter: { $zoom: { max: 12 } }
+                    draw: { icons: { text: { visible: false } } }
+                early2:
+                    filter: { $zoom: { min: 12, max: 14 } }
+                    draw: { icons: { text: { font: { size: 10px } } } }
+            school:
+                filter:
+                    all:
+                        - kind: [school, kindergarten]
+                        - area: true
+                        - $geometry: point
+                        - not: { $layer: buildings }
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        #- { $zoom: [13], area: { min: 100000 } }
+                        #- { $zoom: [14], area: { min: 50000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        #- { $zoom: [15], area: { min: 10000 } }
+                        - { $zoom: [16], area: { min: 5000 } }
+                        - { $zoom: [17], area: { min: 2000 } }
+                        - { $zoom: { min: 18 } }
+                draw:
+                    icons:
+                        sprite: school
+                        visible: *icon_visible_landuse_green
+                        priority: 41
+                        text:
+                            visible: *text_visible_landuse_green
+                            font:
+                                #fill: [0.10,0.10,0.10]
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 4 }
+                early:
+                    filter: { $zoom: { max: 14 } }
+                    draw: { icons: { text: { font: { size: 11px } } } }
+            winter_sports:
+                filter:
+                    all:
+                        - kind: winter_sports
+                        - area: true
+                        - $geometry: point
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [10], area: { min: 5000000 } }
+                        - { $zoom: [11], area: { min: 2000000 } }
+                        - { $zoom: [12], area: { min: 500000 } }
+                        - { $zoom: [13], area: { min: 100000 } }
+                        - { $zoom: [14], area: { min: 100000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [15], area: { min: 40000 } }
+                        - { $zoom: [16], area: { min: 5000 } }
+                        - { $zoom: [17], area: { min: 2000 } }
+                        - { $zoom: { min: 18 } }
+                draw:
+                    icons:
+                        sprite: ski-area
+                        visible: *icon_visible_landuse_green
+                        priority: 41
+                        text:
+                            visible: *text_visible_landuse_green
+                            font:
+                                #fill: [0.10,0.10,0.10]
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 4 }
+#                early:
+#                    filter: { $zoom: { max: 14 } }
+#                    draw: { icons: { text: { font: { size: 10px } } } }
+            tourism-related:
+                filter:
+                    all:
+                        - kind: [zoo, theme_park, resort, aquarium, winery, maze, stadium, enclosure, animal]
+                        - area: true
+                        - $geometry: point
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: { min: 11 }, area: { min: 400000 } }
+                        - { $zoom: { min: 12 }, area: { min: 200000 } }
+                        - { $zoom: { min: 13 }, area: { min: 50000 } }
+                        - { $zoom: { min: 14 }, area: { min: 20000 } }
+                        - { $zoom: { min: 15 }, area: { min: 2000 } }
+                        - { $zoom: { min: 16 } }
+                draw:
+                    icons:
+                        sprite: function() { return feature.kind; }
+                        sprite_default: generic
+                        visible: *icon_visible_poi_landuse
+                        priority: 43
+                        text:
+                            visible: *text_visible_poi_landuse
+                            font:
+                                #fill: [0.10,0.10,0.10]
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 4 }
+                enclosure:
+                    filter: { kind: [enclosure, animal] }
+                    draw:
+                        icons:
+                            visible: false
+                            sprite_default: dot-black
+                        text:
+                            text_wrap: 10
+                            font:
+                                style: italic
+                                weight: 400
+                #early-sizing:
+#                    filter: { $zoom: { max: 14 } }
+#                    draw: { icons: { text: { font: { size: 10px } } } }
+            playgrounds_allotments_attraction_landmark_supermarket:
+                filter:
+                    all:
+                        - kind: [playground, allotments, attraction, landmark, supermarket]
+                        - area: true
+                        - $geometry: point
+                    any:
+                        - { $zoom: [15], area: { min: 600 } }
+                        - { $zoom: [16], area: { min: 300 } }
+                        - { $zoom: { min: 17 } }
+                draw:
+                    icons:
+                        visible: *icon_visible_landuse_green
+                        priority: 41
+                        text:
+                            visible: *text_visible_landuse_green
+                            font:
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 4 }
+                attraction:
+                    filter: { kind: [attraction] }
+                    draw:
+                        icons:
+                            sprite: attraction
+                landmark:
+                    filter: { kind: [landmark] }
+                    draw:
+                        icons:
+                            sprite: landmark
+            glacier:
+                filter:
+                    all:
+                        - kind: glacier
+                        - area: true
+                        - $geometry: point
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [10],    area: { min: 20000000 } }
+                        - { $zoom: [11],    area: { min: 5000000 } }
+                        - { $zoom: [12],    area: { min: 2000000 } }
+                        - { $zoom: [13],    area: { min: 500000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: { min: 14 } }
+                draw:
+                    icons:
+                        visible: false
+                    text:
+                        visible: true
+                        priority: 44
+                        interactive: true
+                        text_wrap: 10
+                        font:
+                            weight: 400
+                            style: italic
+                            fill: '#4ba3c5'
+            sports-pitch-areas:
+                filter: { kind: [grass, pitch], $zoom: { min: 16 } }
+                draw:
+                    icons:
+                        sprite: function() { return feature.sport; }
+                        visible: *icon_visible_poi_landuse_e
+                        priority: 49
+                baseball:
+                    filter: { sport: baseball }
+                    draw: { icons: { sprite: baseball-field } }
+                basketball:
+                    filter: { sport: basketball }
+                    draw: { icons: { sprite: basketball-court } }
+                football:
+                    filter: { sport: football }
+                    draw: { icons: { sprite: football-stadium } }
+                hockey:
+                    filter: { sport: hockey-field }
+                    draw: { icons: { sprite: hockey-field } }
+                soccer:
+                    filter: { sport: soccer }
+                    draw: { icons: { sprite: soccer-field } }
+                tennis:
+                    filter: { sport: tennis }
+                    draw: { icons: { sprite: tennis } }
+            landuse-labels-not-any-above:
+                filter:
+                    all:
+                        - $zoom: { min: 6 }
+                        - area: true
+                        - $geometry: point
+                        - not: { kind: [park, national_park, "park or protected land", battlefield, conservation, protected_area, nature_reserve, forest, grass, beach, airport, aerodrome, university, college, school, kindergarten, winter_sports, zoo, theme_park, resort, aquarium, winery, maze, stadium, playground, allotments, attraction, landmark, glacier] }
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [5,6,7], area: { min: 5000000000 } }
+                        - { $zoom: [8],     area: { min: 1600000000 } }
+                        - { $zoom: [9],     area: { min: 400000000 } }
+                        - { $zoom: [10],    area: { min: 100000000 } }
+                        - { $zoom: [11],    area: { min: 25000000 } }
+                        - { $zoom: [12],    area: { min: 5000000 } }
+                        - { $zoom: [13],    area: { min: 1000000 } }
+                        - { $zoom: [14],    area: { min: 50000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [15],    area: { min: 5000 } }
+                        - { $zoom: [16],    area: { min: 2000 } }
+                        - { $zoom: { min: 17 } }
+                draw:
+                    icons:
+                        sprite: function() { return feature.kind; }
+                        sprite_default: generic
+                        visible: *icon_visible_poi_landuse
+                        priority: 43
+                        text:
+                            visible: *text_visible_poi_landuse
+                            font:
+                                weight: 600
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 3 }
+                landuse-z18:
+                    filter: { $zoom: { min: 18 } }
+                    draw:
+                        icons:
+                            text:
+                                font:
+                                    size: 11px
+                                    stroke: { color: *text_stroke, width: 4 }
+                # building-like:
+                #     filter: { kind: [commercial,residential,warehouse,public,dormitory], osm_relation: false }
+                #     draw:
+                #         icons:
+                #             sprite: building
+                residential-relations-paris-wtf-early:
+                    filter: { kind: [residential], osm_relation: true, $zoom: { max: 13 } }
+                    draw:
+                        icons:
+                            visible: false
+                            text: { visible: false }
+                residential-relations-paris-wtf:
+                    filter: { kind: [residential], osm_relation: true, $zoom: { min: 13 } }
+                    draw:
+                        icons:
+                            visible: false
+                            text:
+                                visible: true
+                                text_source: short_name
+                hide-till-later:
+                    filter: { kind: [pedestrian,common,railway,ship,houseboat,common,grass,wetland], $zoom: { max: 17 } }
+                    draw:
+                        icons:
+                            visible: false
+                            text: { visible: false }
+                only-text-later:
+                    filter: { kind: [pedestrian,common,railway,ship,houseboat,common,grass,wetland], $zoom: { min: 17 } }
+                    draw:
+                        icons:
+                            visible: false
+                            text: { font: { style: italic } }
+                burial_vault-early:
+                    filter: { kind: [burial_vault], $zoom: { max: 19 } }
+                    draw:
+                        icons:
+                            visible: false
+                            text:  { visible: false }
+            university-poi:
+                filter: { kind: [university, college], area: false, $zoom: { max: 16 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            office-early:
+                filter:
+                    any:
+                        - { kind: [insurance, office, company], $zoom: [15], area: { max: 10000 } }
+                        - { kind: [insurance, office, company], $zoom: [16], area: { max: 5000 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            bank-early:
+                filter: { kind: [bank], $zoom: { max: 17 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            post-office-early:
+                filter: { kind: [post_office], $zoom: { max: 14 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            pylon-early:
+                filter: { kind: [pylon], name: true, $zoom: { max: 18 } }
+                draw:   { icons: { text: { visible: false } } }
+            school-early:
+                filter: { kind: [school, kindergarten], $zoom: { max: 16 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            atm-early:
+                filter: { kind: [atm], $zoom: { max: 18 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            bicycle-parking-early:
+                filter: { kind: [bicycle_parking], $zoom: { max: 19 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            yes-early:
+                filter: { kind: [yes], $zoom: { max: 18 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            peak-early:
+                filter: { kind: [peak, volcano] }
+                draw:
+                    icons:
+                        visible: true
+                        priority: 43
+                        text:  { visible: true }
+                low-priority-early-z11:
+                    filter: { kind_tile_rank: { min: 3 }, $zoom: [11,12] }
+                    draw:
+                        icons:
+                            visible: false
+                            text: { visible: false }
+                low-priority-early-z13:
+                    filter: { kind_tile_rank: { min: 4 }, $zoom: [13] }
+                    draw:
+                        icons:
+                            visible: false
+                            text: { visible: false }
+                peak-labels-later:
+                    filter: { kind: [peak, volcano], $zoom: { min: 14 } }
+                    draw:
+                        icons:
+                            text:
+                                text_source: function() { if( feature.name && feature.elevation ) { return feature.name + "\n" + feature.elevation + "m"; } else { if( feature.name ) { return feature.name; } else { return feature.elevation; } } }
+            waterfall-early:
+                filter: { kind: [waterfall], $zoom: { max: 14 } }
+                draw:
+                    icons:
+                        visible: true
+                        text:  { visible: true }
+                low-priority-early-z11:
+                    filter: { kind_tile_rank: { min: 3 }, $zoom: [11,12] }
+                    draw:
+                        icons:
+                            visible: false
+                            text: { visible: false }
+                low-priority-early-z13:
+                    filter: { kind_tile_rank: { min: 4 }, $zoom: [13] }
+                    draw:
+                        icons:
+                            visible: false
+                            text: { visible: false }
+            waterfall-labels:
+                filter: { kind: [waterfall], $zoom: { min: 14 } }
+                draw:
+                    icons:
+                        text:
+                            text_source: function() { if( feature.name && feature.height ) { return feature.name + "\n" + feature.height; } else { if( feature.name ) { return feature.name; } else { return feature.height; } } }
+            drinking-water-early:
+                filter: { kind: [drinking_water], $zoom: { max: 18 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            memorial-early:
+                filter: { kind: [memorial], $zoom: { max: 13 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            animal-points-early:
+                filter: { kind: [animal], area: false, $zoom: { max: 18 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+#            animal-areas-early:
+#                filter: { kind: [animal], area: { min: 500 }, $zoom: { max: 18 } }
+#                draw:
+#                    icons:
+#                        visible: false
+#                        text:  { visible: false }
+            parking-labels-early:
+                filter:
+                    kind: [parking]
+                    $zoom: { max: 18 }
+                draw:
+                    icons:
+                        visible: false
+                        text:
+                            visible: false
+            parking-labels:
+                filter:
+                    kind: [parking]
+                    $zoom: { min: 18 }
+                draw:
+                    icons:
+                        text:
+                            visible: *text_visible_poi_landuse
+                            font:
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 4 }
+            landuse-funky:
+                filter: { kind: [commercial, residential, wood], $zoom: { max: 17 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:
+                            visible: false
+            car-sharing:
+                filter: { kind: car_sharing }
+                icons-early:
+                    filter: { $zoom: { max: 17 } }
+                    draw:
+                        icons:
+                            visible: false
+                text-labels-early:
+                    filter: { $zoom: { max: 19 } }
+                    draw:
+                        icons:
+                            text:
+                                visible: false
+            bicycle_rental_station-early:
+                filter: { kind: bicycle_rental_station }
+                icons-early:
+                    filter: { $zoom: { max: 17 } }
+                    draw:
+                        icons:
+                            size: [[16, 14px], [17, 16px], [18, 20px]]
+                early-names:
+                    filter: { $zoom: { max: 17 } }
+                    draw:
+                        icons:
+                            text:
+                                visible: false
+            tower:
+                filter: { kind: [tower], label_placement: yes }
+                draw:
+                    icons:
+                        visible: false
+                        text:
+                            font:
+                                style: italic
+            station-train-subway:
+                filter: { kind: [station, train-station, train_station], $zoom: { min: 11 } }
+                visible: *label_visible_station
+                draw:
+                    icons:
+                        visible: *icon_visible_station
+                        sprite: train-station
+                        size: [[13, 12px], [14, 12px], [15, 16px], [17, 18px], [18, 20px]]
+                        priority: 41
+                        text:
+                            visible: *text_visible_station
+                            font:
+                                weight: 600
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 4 }
+                low-priority-early:
+                    filter: { kind_tile_rank: { min: 5 }, $zoom: { min: 0, max: 13 } }
+                    draw:
+                        icons:
+                            visible: false
+                            #size: [[12, 10px], [14, 10px], [15, 16px]]
+                            text: { visible: false }
+                low-priority-early-z13:
+                    filter: { kind_tile_rank: { min: 5 }, $zoom: [13] }
+                    draw:
+                        icons:
+                            visible: false
+                            #size: [[12, 10px], [14, 10px], [15, 16px]]
+                            text: { visible: false }
+                low-priority-early-z14:
+                    filter: { kind_tile_rank: { min: 7 }, $zoom: [14] }
+                    draw:
+                        icons:
+                            #size: [[14, 11px], [15, 16px], [17, 18px], [18, 20px]]
+                            #visible: false
+                            text: { visible: false }
+                stations-later:
+                    filter: { $zoom: { min: 18 } }
+                    draw:
+                        icons:
+                            text:
+                                font:
+                                    size: 11px
+            tram-stop-early:
+                filter: { kind: tram_stop, $zoom: { max: 15 } }
+                draw:
+                    icons:
+                        visible: false
+                        text:
+                            visible: false
+            tram-stop-early-z15:
+                filter: { kind: tram_stop, $zoom: [15] }
+                draw:
+                    icons:
+                        text:
+                            visible: false
+            tram-stop:
+                filter: { kind: tram_stop, $zoom: { min: 15 } }
+                draw:
+                    icons:
+                        size: [[16, 12px], [17, 18px]]
+            glaciers-pois:
+                filter: { $zoom: { min: 14 }, kind: glacier, area: false }
+                draw:
+                    icons:
+                        visible: false
+                        text:
+                            visible: false
+                    text:
+                        visible: false
+                        priority: 45
+                        interactive: true
+                        text_wrap: 10
+                        font:
+                            weight: 400
+                            style: italic
+                            fill: '#4ba3c5'
+            bus-stop-bus-station-labels:
+                filter:
+                    kind: [bus_stop, bus_station]
+                    $zoom: { min: 18 }
+                draw:
+                    icons:
+                        size: [[17, 8px], [19, 18px]]
+                        text:
+                            visible: *text_visible_poi_landuse
+                            font:
+                                size: 10px
+                                stroke: { color: *text_stroke, width: 4 }
+            bus_stop-early:
+                filter:
+                    kind: [bus_stop]
+                    $zoom: { max: 17 }
+                draw:
+                    icons:
+                        visible: false
+                        text:
+                            visible: false
+            bus_stop-early-z17:
+                filter:
+                    kind: [bus_stop]
+                    $zoom: [17,18]
+                draw:
+                    icons:
+                        size: [[17, 16px], [19, 18px]]
+                        text:
+                            visible: false
+            minor-z17-early:
+                filter:
+                    kind: [accountant, administrative, advertising_agency, architect, association, atm, bakery, bed_and_breakfast, bicycle, bicycle_parking, bicycle_rental_station, books, bus_stop, butcher, car, car_repair, chalet, clothes, company, computer, consulting, convenience, doityourself, drinking_water, dry_cleaning, educational_institution, emergency_phone, employment_agency, estate_agent, fashion, financial, florist, foundation, gate, gift, government, greengrocer, guest_house, hairdresser, hostel, hotel, insurance, it, jewelry, lawyer, mast, memorial, mobile_phone, motel, newspaper, ngo, notary, optician, parking, pet, physician, playground, political_party, post_box, religion, research, subway_entrance, tax_advisor, telecommunication, telephone, theatre, therapist, toilets, traffic_signals, travel_agent, water_tower, yes]
+                    area: false
+                    $zoom: { max: 17 }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            minor-z18-early:
+                filter:
+                    kind: [bench, waste_basket]
+                    area: false
+                    $zoom: { max: 18 }
+                draw:
+                    icons:
+                        visible: false
+                        text:  { visible: false }
+            outdoor-needing-icons:
+                filter: { kind: [bicycle_repair_station, cycle_barrier, life_ring, waste_disposal, watering_place, water_point, lifeguard_tower, power_pole, power_tower, petroleum_well, communications_tower, putin, egress, hazard, put_in_egress, rapid, beacon, cross, mineshaft, adit, water_well, saddle, dune, sinkhole, rock, stone, bicycle_junction, walking_junction, dam, boat_storage, windmill, fishing, recreation_track, horse, fire_lookout, fee_station, rest_area] }
+                draw:
+                    icons:
+                        order: 41
+                        sprite: generic
+                        text:
+                            order: 42
+            outdoor-has-icons:
+                filter: { kind: [outdoor, lighthouse, saddle, picnic_area, picnic_table, camp_site, ski, mine, zoo, museum, gas, gas_canister, slipway, mineshaft, adit, recreation_track, playground, allotments, attraction, landmark] }
+                draw:
+                    icons:
+                        order: 41
+                        text:
+                            order: 42
+            not-outdoor-not-landuse:
+                filter: { area: false, not: { kind: [park, national_park, outdoor, bicycle_repair_station, life_ring, waste_disposal, watering_place, water_point, lifeguard_tower, power_pole, power_tower, petroleum_well, bicycle_junction, walking_junction, dam, boat_storage, windmill, playground, allotments, attraction, landmark] } }
+                draw:
+                    icons:
+                        order: 45
+                        text:
+                            order: 46
+            suppress-early:
+                filter: { $zoom: { max: 15 }, kind: [scrub, wetland, scree, meadow, grass, farmyard, farmland, wood, pier, breakwater, groyne, dike, cutline, residential, retail, commercial, industrial] }
+                draw:
+                    icons:
+                        visible: false
+                    text:
+                        visible: false
+                meadow:
+                    filter: { kind: [meadow], $zoom: [14] }
+                    draw:
+                        text:
+                            visible: true
+                            text_wrap: 10
+                            font:
+                                style: italic
+            suppress-the-icon-text-label-only:
+                filter: { $zoom: { min: 15 }, kind: [scrub, wetland, scree, meadow, village_green, common, grass, farmyard, farmland, wood, enclosure, animal, pier, breakwater, groyne, dike, cutline, residential, retail, commercial, industrial] }
+                draw:
+                    icons:
+                        visible: false
+                    text:
+                        visible: true
+                        text_wrap: 10
+                        font:
+                            style: italic
+            icons:
+                adult-boutique:
+                    filter: { kind: [erotic, adult_boutique] }
+                    draw:   { icons: { sprite: adult-boutique } }
+                allotments:
+                    filter: { kind: [allotments] }
+                    draw:   { icons: { sprite: allotments } }
+                airport:
+                    filter: { kind: [airport, aerodrome] }
+                    draw:   { icons: { sprite: airport } }
+                animal-shelter:
+                    filter: { kind: [animal_shelter, animal-shelter, animal_boarding] }
+                    draw:   { icons: { sprite: animal-shelter } }
+                antique-shop:
+                    filter: { kind: [antiques, antique-shop] }
+                    draw:   { icons: { sprite: antique-shop } }
+                art-gallery:
+                    filter: { kind: [art_gallery, art-gallery, art, artwork] }
+                    draw:   { icons: { sprite: art-gallery } }
+                athletics-sports:
+                    filter: { kind: [athletic_sports, recreation_ground, sports_centre] }
+                    draw:   { icons: { sprite: athletics-sports } }
+                automotive-shop:
+                    filter: { kind: [car_repair, automotive-shop, automotive, tyres] }
+                    draw:   { icons: { sprite: automotive-shop } }
+                bbq:
+                    filter: { kind: [bbq] }
+                    draw:   { icons: { sprite: bbq } }
+                bakery:
+                    filter: { kind: [bakery, pastry, chocolate] }
+                    draw:   { icons: { sprite: bakery } }
+                bar:
+                    filter: { kind: [pub, bar] }
+                    draw:   { icons: { sprite: bar } }
+                beach-resort:
+                    filter: { kind: [beach_resort] }
+                    draw:   { icons: { sprite: beach-resort } }
+                beer-garden:
+                    filter: { kind: [biergarten, beer-garden, brewery] }
+                    draw:   { icons: { sprite: beer-garden } }
+                bike-shop:
+                    filter: { kind: [bicycle, bicycle_rental, bike, bike_shop, bicycle_rental_station] }
+                    draw:   { icons: { sprite: bike-shop } }
+                bicycle-parking:
+                    filter: { kind: [bicycle_parking] }
+                    draw:   { icons: { sprite: bicycle-parking } }
+                boat-ferry:
+                    filter: { kind: [ferry_terminal, boat-ferry, ferry-boat, ferry] }
+                    draw:   { icons: { sprite: boat-ferry } }
+                boat-ramp:
+                    filter: { kind: [boat-ramp, boat_ramp] }
+                    draw:   { icons: { sprite: boat-ramp } }
+                bookstore:
+                    filter: { kind: [books, bookstore] }
+                    draw:   { icons: { sprite: bookstore } }
+                bowling-alley:
+                    filter: { kind: [bowling_alley, bowling-alley] }
+                    draw:   { icons: { sprite: bowling-alley } }
+                bridal-shop:
+                    filter: { kind: [bridal, bridal-shop] }
+                    draw:   { icons: { sprite: bridal-shop } }
+                building-icon:
+                    filter: { kind: [building, auditorium, terminal, hangar, retirement_home, manor, recreation_center, apartments] }
+                    draw:   { icons: { sprite: building } }
+                    early:
+                       filter:
+                           any:
+                               # show labels for smaller landuse areas at higher zooms
+                               - { $zoom: [14], area: { max: 200000 } }
+                               - { $zoom: [15], area: { max: 20000 } }
+                               - { $zoom: [16], area: { max: 5000 } }
+                               - { $zoom: [17], area: { max: 1000 } }
+                       draw:
+                           icons:
+                               visible: false
+                               text:
+                                   visible: false
+                burger:
+                    filter: { kind: [fast_food, burger] }
+                    draw:   { icons: { sprite: burger } }
+                bus-station:
+                    filter: { kind: [bus_stop, bus_station] }
+                    draw:   { icons: { sprite: bus-station } }
+                camera-store:
+                    filter: { kind: [camera, camera-store, photo] }
+                    draw:   { icons: { sprite: camera-store } }
+                campground:
+                    filter: { kind: [campground, camp_site] }
+                    draw:   { icons: { sprite: campground } }
+                candy-store:
+                    filter: { kind: [candy, candy-store, confectionery] }
+                    draw:   { icons: { sprite: candy-store } }
+                caravan-site:
+                    filter: { kind: [caravan_site] }
+                    draw:   { icons: { sprite: caravan-site } }
+                car-dealership:
+                    filter: { kind: [car, car-dealership] }
+                    draw:   { icons: { sprite: car-dealership } }
+                car-wash:
+                    filter: { kind: [car_wash, car-wash] }
+                    draw:   { icons: { sprite: car-wash } }
+                castle:
+                    filter: { kind: [castle, fort] }
+                    draw:   { icons: { sprite: castle } }
+                cemetery:
+                    filter: { kind: [grave_yard, cemetery] }
+                    draw:   { icons: { sprite: cemetery } }
+                cheese-shop:
+                    filter: { kind: [cheese, cheese-shop] }
+                    draw:   { icons: { sprite: cheese-shop } }
+                clothing-store:
+                    filter: { kind: [clothes, chothing-store, "clothes store", fashion] }
+                    draw:   { icons: { sprite: clothing-store } }
+                coffee-shop:
+                    filter: { kind: [cafe, coffee-shop] }
+                    draw:   { icons: { sprite: coffee-shop } }
+                college-university:
+                    filter: { kind: [university, college, college-university], area: false }
+                    draw:   { icons: { sprite: college-university } }
+                commercial:
+                    filter: { kind: [commercial] }
+                    draw:   { icons: { sprite: mall } }
+                concert-hall:
+                    filter: { kind: [music_venue] }
+                    draw:   { icons: { sprite: concert-hall } }
+                convenience-store:
+                    filter: { kind: [convenience, convenience-store, convenience_store, beverages] }
+                    draw:   { icons: { sprite: convenience-store } }
+                cosmetics-shop:
+                    filter: { kind: [cosmetics, cosmetics-shop, beauty] }
+                    draw:   { icons: { sprite: cosmetics-shop } }
+                dam:
+                    filter: { kind: [dam] }
+                    draw:   { icons: { sprite: dot-black } }
+                department-store:
+                    filter: { kind: [department_store, department-store] }
+                    draw:   { icons: { sprite: department-store } }
+                doctors:
+                    filter: { kind: [doctors, clinic] }
+                    draw:   { icons: { sprite: doctors } }
+                dog-park:
+                    filter: { kind: [dog_park, dog_run, dog-run] }
+                    draw:   { icons: { sprite: dog-park } }
+                drinking-water:
+                    filter: { kind: drinking_water }
+                    draw: { icons: { sprite: drinking-water } }
+                dry-cleaning:
+                    filter: { kind: [dry_cleaning] }
+                    draw:   { icons: { sprite: dry-cleaning } }
+                electronics-store:
+                    filter: { kind: [electronics, electronics-store, computer] }
+                    draw:   { icons: { sprite: electronics-store } }
+                factory:
+                    filter: { kind: [factory, industrial, chimney, sub_station, substation, wastewater_plant, works, water_works, plant, generator] }
+                    draw:   { icons: { sprite: factory } }
+                farmers-market:
+                    filter: { kind: [farmers_market, farmers-market] }
+                    draw:   { icons: { sprite: farmers-market } }
+                fire-station:
+                    filter: { kind: [fire_station, fire-station] }
+                    draw:   { icons: { sprite: fire-station } }
+                fish-market:
+                    filter: { kind: [fish, fish-market, seafood, fishmonger] }
+                    draw:   { icons: { sprite: fish-market } }
+                fishing-area:
+                    filter: { kind: [fishing_area, fishing-spot, fishing] }
+                    draw:   { icons: { sprite: fishing-area } }
+                fitness:
+                    filter: { kind: [gym, fitness, fitness_center] }
+                    draw:   { icons: { sprite: fitness } }
+                flea-market:
+                    filter: { kind: [flea_market, flea-market] }
+                    draw:   { icons: { sprite: flea-market } }
+                flower-shop:
+                    filter: { kind: [florist, flower-shop] }
+                    draw: { icons: { sprite: flower-shop } }
+                forest:
+                    filter: { kind: [forest, conservation, wood] }
+                    draw:   { icons: { sprite: forest } }
+                furniture-store:
+                    filter: { kind: [furniture, furniture-store] }
+                    draw:   { icons: { sprite: furniture-store } }
+                garden-center:
+                    filter: { kind: [garden_centre, garden_center] }
+                    draw:   { icons: { sprite: garden-center } }
+                gas:
+                    filter: { kind: [gas, gas_canister] }
+                    draw:   { icons: { sprite: gas } }
+                gas-station:
+                    filter: { kind: [fuel, gas-station] }
+                    draw:   { icons: { sprite: gas-station } }
+                general-entertainment:
+                    filter: { kind: [ticket, general_entertainment] }
+                    draw:   { icons: { sprite: general-entertainment } }
+                generic:
+                    filter: { kind: [generic] }
+                    draw:   { icons: { sprite: generic } }
+                gift-shop:
+                    filter: { kind: [gift, gift-shop] }
+                    draw:   { icons: { sprite: gift-shop } }
+                golf-course:
+                    filter: { kind: [golf-course, golf_course] }
+                    draw:   { icons: { sprite: golf-course } }
+                government-building:
+                    filter: { kind: [townhall, public_building, embassy] }
+                    draw:   { icons: { sprite: government-building } }
+                grocery-store:
+                    filter: { kind: [supermarket, grocery-store, health_food, greengrocer] }
+                    draw:   { icons: { sprite: grocery-store } }
+                harbor-marina:
+                    filter: { kind: [marina, harbor, harbor-marina, harbor_marina, dock, mooring] }
+                    draw:   { icons: { sprite: harbor-marina } }
+                hardware-store:
+                    filter: { kind: [hardware, hardware-store, doityourself, paint] }
+                    draw:   { icons: { sprite: hardware-store } }
+                hotel:
+                    filter: { kind: [hotel, motel, hostel] }
+                    draw:   { icons: { sprite: hotel } }
+                hot_spring:
+                    filter: { kind: [hot_spring] }
+                    draw:   { icons: { sprite: hot-spring } }
+                hunting:
+                    filter: { kind: [hunting] }
+                    draw:   { icons: { sprite: hunting } }
+                ice-cream-shop:
+                    filter: { kind: [ice_cream] }
+                    draw:   { icons: { sprite: ice-cream-shop } }
+                information:
+                    filter: { kind: [info, information] }
+                    draw:   { icons: { sprite: information } }
+                jewelry-store:
+                    filter: { kind: [jewelry, jewelry_store, jewelry-store] }
+                    draw:   { icons: { sprite: jewelry-store } }
+                landmark:
+                    filter: { kind: [landmark, memorial, monument, wayside_shrine, beacon] }
+                    draw:   { icons: { sprite: landmark } }
+                tower:
+                    filter: { kind: [tower], label_placement: false }
+                    draw:   { icons: { sprite: landmark } }
+                laundry:
+                    filter: { kind: [laundry] }
+                    draw:   { icons: { sprite: laundry } }
+                light-rail:
+                    filter: { kind: [light-rail, light_rail, tram_stop] }
+                    draw:   { icons: { sprite: light-rail } }
+                liquor-store:
+                    filter: { kind: [alcohol, liquor-store, liquor] }
+                    draw:   { icons: { sprite: liquor-store } }
+                market:
+                    filter: { kind: [market, variety_store, boutique, dairy, retail] }
+                    draw:   { icons: { sprite: market } }
+                mine:
+                    filter: { kind: [mine, mineshaft, adit] }
+                    draw:   { icons: { sprite: mine } }
+                quarry:
+                    filter: { kind: [quarry] }
+                    draw:   { icons: { sprite: quarry } }
+                miscellaneous-shop:
+                    filter: { kind: [houseware, miscellaneous-shop] }
+                    draw:   { icons: { sprite: miscellaneous-shop } }
+                mobile-phone-shop:
+                    filter: { kind: [mobile_phone] }
+                    draw:   { icons: { sprite: mobile-phone-shop } }
+                motorcycle-shop:
+                    filter: { kind: [motorcycle_shop, motorcycle_repair] }
+                    draw:   { icons: { sprite: motorcycle-shop } }
+                motorcycle:
+                    filter: { kind: [motorcycle] }
+                    draw:   { icons: { sprite: motorcycle } }
+                mountain:
+                    filter: { kind: [mountain, peak] }
+                    draw:   { icons: { sprite: mountain } }
+                movie-theatre:
+                    filter: { kind: [cinema, movie-theatre, movie-theater] }
+                    draw:   { icons: { sprite: movie-theatre } }
+                museum:
+                    filter: { kind: [museum] }
+                    draw:   { icons: { sprite: museum } }
+                music-store:
+                    filter: { kind: [music, music-store, musical_instrument] }
+                    draw:   { icons: { sprite: music-store } }
+                newsstand:
+                    filter: { kind: [kiosk, newsstand, newsagent] }
+                    draw:   { icons: { sprite: newsstand } }
+                nightlife:
+                    filter: { kind: [nightclub, nightlife] }
+                    draw:   { icons: { sprite: nightlife } }
+                office:
+                    filter: { kind: [insurance, office, company] }
+                    draw:   { icons: { sprite: office } }
+                office-supplies:
+                    filter: { kind: [office_supplies, office-supplies, stationery] }
+                    draw:   { icons: { sprite: office-supplies } }
+                optical-shop:
+                    filter: { kind: [optician, optical_shop, optical-shop] }
+                    draw:   { icons: { sprite: optical-shop } }
+                outdoor:
+                    filter: { kind: [outdoor] }
+                    draw:   { icons: { sprite: outdoor } }
+                performing-arts:
+                    filter: { kind: [theater, theatre, performing-arts] }
+                    draw:   { icons: { sprite: performing-arts } }
+                pet-store:
+                    filter: { kind: [pet, pet-store, pet-service, pet_store] }
+                    draw:   { icons: { sprite: pet-store } }
+                pharmacy:
+                    filter: { kind: [pharmacy, chemist] }
+                    draw:   { icons: { sprite: pharmacy } }
+                photography-lab:
+                    filter: { kind: [photo_studio, photography_lab, photographer] }
+                    draw:   { icons: { sprite: photography-lab } }
+                picnic-spot:
+                    filter: { kind: [picnic_site, picnic_spot, picnic-spot, picnic_table] }
+                    draw:   { icons: { sprite: picnic-spot } }
+                pool:
+                    filter: { kind: [pool, swimming_pool] }
+                    draw:   { icons: { sprite: pool } }
+                pool-hall:
+                    filter: { kind: [billiards, pool-hall] }
+                    draw:   { icons: { sprite: pool-hall } }
+                post-office:
+                    filter: { kind: [post_office, post-office] }
+                    draw:   { icons: { sprite: post-office } }
+                power-pylon:
+                    filter: { kind: [tower, power-pylon, pylon] }
+                    draw:   { icons: { sprite: power-pylon } }
+                ranger-station:
+                    filter: { kind: [ranger_station] }
+                    draw:   { icons: { sprite: ranger-station } }
+                real-estate:
+                    filter: { kind: [estate_agent, real_estate] }
+                    draw:   { icons: { sprite: real-estate } }
+                recreation-track:
+                    filter: { kind: [recreation_track] }
+                    draw:   { icons: { sprite: recreation-track } }
+                recycling-facility:
+                    filter: { kind: [recycling, recycling-facility] }
+                    draw:   { icons: { sprite: recycling-facility } }
+                rental-car:
+                    filter: { kind: [rental-car, car_rental, car_sharing] }
+                    draw:   { icons: { sprite: rental-car } }
+                rest-area:
+                    filter: { kind: [rest_area, rest-area] }
+                    draw:   { icons: { sprite: rest-area } }
+                restaurant:
+                    filter: { kind: [restaurant, deli] }
+                    draw:   { icons: { sprite: restaurant } }
+                ruin:
+                    filter: { kind: [ruins, archaeological_site] }
+                    draw:   { icons: { sprite: ruin } }
+                salon-barber:
+                    filter: { kind: [hairdresser, salon-barber, salon, beauty_salon] }
+                    draw:   { icons: { sprite: salon-barber } }
+                scuba-diving:
+                    filter: { kind: [scuba_diving,dive_centre] }
+                    draw:   { icons: { sprite: scuba-diving } }
+                ship-wreck:
+                    filter: { kind: [wreck] }
+                    draw:   { icons: { sprite: ship-wreck } }
+                shoe-store:
+                    filter: { kind: [shoes, shoe-store, shoe_store] }
+                    draw:   { icons: { sprite: shoe-store } }
+                slipway:
+                    filter: { kind: [slipway] }
+                    draw:   { icons: { sprite: slipway } }
+                smoke-shop:
+                    filter: { kind: [smoke_shop, tobacco] }
+                    draw:   { icons: { sprite: smoke-shop } }
+                spa-massage:
+                    filter: { kind: [spa, spa-massage, sauna, massage] }
+                    draw:   { icons: { sprite: spa-massage } }
+                # prefix with "a-" here to allow Tangram to sort the generic style 1st, allowing more specific religion tags to win later
+                a-spiritual-center:
+                    filter:
+                        all:
+                            - kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel]
+                    draw:   { icons: { sprite: spiritual-center } }
+                church:
+                    filter: { kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel], religion: christian }
+                    draw:   { icons: { sprite: church } }
+                synagogue:
+                    filter: { kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel], religion: jewish }
+                    draw:   { icons: { sprite: synagogue } }
+                buddhist:
+                    filter: { kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel], religion: buddhist }
+                    draw:   { icons: { sprite: buddhism } }
+                mosque:
+                    filter: { kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel], religion: muslim }
+                    draw:   { icons: { sprite: mosque } }
+                sporting-goods-shop:
+                    filter: { kind: [sporting_goods, sporting-goods-shop, sports] }
+                    draw:   { icons: { sprite: sporting-goods-shop } }
+                stable:
+                    filter: { kind: [stable, horse_riding, horse] }
+                    draw:   { icons: { sprite: stable } }
+                storage-facility:
+                    filter: { kind: [storage, storage-facility] }
+                    draw:   { icons: { sprite: storage-facility } }
+                subway-entrance:
+                    filter: { kind: [subway_entrance] }
+                    draw:   { icons: { sprite: subway-entrance } }
+                summer-camp:
+                    filter: { kind: [summer_camp] }
+                    draw:   { icons: { sprite: summer-camp } }
+                tailor-shop:
+                    filter: { kind: [tailor, tailor-shop] }
+                    draw:   { icons: { sprite: tailor-shop } }
+                tattoo-parlor:
+                    filter: { kind: [tattoo, tattoo_parlor, tattoo-parlor] }
+                    draw:   { icons: { sprite: tattoo-parlor } }
+                telescope:
+                    filter: { kind: [telescope] }
+                    draw:   { icons: { sprite: telescope } }
+                theme-park:
+                    filter: { kind: [theme_park, theme-park, miniature_golf] }
+                    draw:   { icons: { sprite: theme-park } }
+                thrift-vintage-store:
+                    filter: { kind: [thrift, thrift-vintage-store, second_hand] }
+                    draw:   { icons: { sprite: thrift-vintage-store } }
+                toll-booth:
+                    filter: { kind: [toll_booth, checkpoint, border_control] }
+                    draw:   { icons: { sprite: toll-booth } }
+                toy-game-store:
+                    filter: { kind: [toys, toy-game-store, baby_goods] }
+                    draw:   { icons: { sprite: toy-game-store } }
+                toilets:
+                    filter: { kind: [toilets] }
+                    draw:   { icons: { sprite: toilets } }
+                trailhead:
+                    filter: { kind: [trailhead, hiking_trail] }
+                    draw:   { icons: { sprite: trailhead } }
+                veterinarian:
+                    filter: { kind: [pet_care, veterinarian, veterinary] }
+                    draw:   { icons: { sprite: veterinarian } }
+                video-game-store:
+                    filter: { kind: [video_games] }
+                    draw:   { icons: { sprite: video-game-store } }
+                video-store:
+                    filter: { kind: [video, video_store] }
+                    draw:   { icons: { sprite: video-store } }
+                view-point:
+                    filter: { kind: [viewpoint, view_point, view-point, vista] }
+                    draw:   { icons: { sprite: view-point } }
+                waterfall:
+                    filter: { kind: [waterfall] }
+                    draw:   { icons: { sprite: waterfall } }
+                waterpark:
+                    filter: { kind: [water_park] }
+                    draw:   { icons: { sprite: waterpark } }
+                well:
+                    filter: { kind: [well, water_well] }
+                    draw:   { icons: { sprite: well } }
+                wine-shop:
+                    filter: { kind: [wine, wine-shop] }
+                    draw:   { icons: { sprite: wine-shop } }
+                winery:
+                    filter: { kind: [winery, wine] }
+                    draw:   { icons: { sprite: winery } }
+                winter_sport:
+                    filter: { kind: [ski, ski_rental, ski_school, ski_jumping, skiing] }
+                    draw:   { icons: { sprite: ski-area } }
+    water-area-labels:
+        data: { source: mapzen, layer: [water] }
+        visible: *text_visible_water_labels
+        filter:
+            all:
+                - name: true
+                - $geometry: point
+                - not: { kind: [riverbank, dock, playa] }
+                - area: true
+            any:
+                # show labels for smaller landuse areas at higher zooms
+                - { $zoom: { min: 5 },  area: { min: 10000000000 } }
+                - { $zoom: { min: 6 },  area: { min: 5000000000 } }
+                - { $zoom: { min: 7 },  area: { min: 400000000 } }
+                - { $zoom: { min: 8 },  area: { min: 200000000 } }
+                - { $zoom: { min: 9 },  area: { min: 100000000 } }
+                - { $zoom: { min: 10 }, area: { min: 100000000 } }
+                - { $zoom: { min: 11 }, area: { min: 10000000 } }
+                - { $zoom: { min: 12 }, area: { min: 2000000 } }
+                - { $zoom: { min: 13 }, area: { min: 1000000 } }
+                - { $zoom: { min: 14 }, area: { min: 500000 } }
+                - { $zoom: { min: 15 }, area: { min: 100000 } }
+                - { $zoom: { min: 15 }, area: { min: 50000 } }
+                - { $zoom: { min: 16 }, area: { min: 20000 } }
+                - { $zoom: { min: 17 } }
+        default-label-text:
+            draw:
+                text-blend-order:
+                    font:
+                        fill: *text_fill_water
+                        family: *text_font_family
+                        style: italic
+                        weight: 400
+                        size: 12px
+                        # stroke: { color: [0.878,0.929,0.980], width: 2 }
+        lakes-z5:
+            filter: { $zoom: [5] }
+            draw:
+                text-blend-order: { font: { size: 9px } }
+        lakes-z6:
+            filter: { $zoom: [6] }
+            draw:
+                text-blend-order: { font: { size: 11px } }
+        lakes-z8:
+            filter: { $zoom: [8] }
+            draw:
+                text-blend-order: { font: { size: 12px } }
+
+    ocean-sea-labels:
+        data: { source: mapzen, layer: water }
+        visible: *text_visible_water_labels
+        filter: { name: true, kind: [sea, ocean] }
+        draw:
+            text-blend-order:
+                font:
+                    fill: *text_fill_water
+                    family: *text_font_family
+                    weight: 400
+                    size: 12px
+                    transform: uppercase
+        sea-early:
+            filter: { $zoom: [3], kind: sea }
+            draw: { text-blend-order: { visible: false } }
+        ocean-spacer:
+            filter: { kind: ocean }
+            ocean-spacer-z1-z4:
+                filter: { $zoom: { min: 1, max: 4 } }
+                draw:
+                    text-blend-order:
+                        text_source: function() { return feature.name.split('').join(' ') }
+                        text_wrap: false
+            ocean-spacer-z4-up:
+                filter: { $zoom: { min: 4 } }
+                draw:
+                    text-blend-order:
+                        text_source: function() { return feature.name.split('').join('  ') }
+                        text_wrap: false
+        ocean-labels-z1:
+            filter: { $zoom: [1] }
+            draw:
+                text-blend-order: { font: { size: 8px } }
+        ocean-labels-z2:
+            filter: { $zoom: [2] }
+            draw:
+                text-blend-order: { font: { size: 10px } }
+        ocean-labels-z3:
+            filter: { $zoom: [3] }
+            draw:
+                text-blend-order: { font: { size: 13px } }
+        ocean-labels-z4-up:
+            filter: { $zoom: { min: 4} }
+            draw:
+                text-blend-order: { font: { size: 16px } }
+
+        sea-spacer:
+            filter: { not: { kind: [ocean] }, $zoom: { min: 4 } }
+            draw:
+                text-blend-order:
+                    text_source: function() { return feature.name.split('').join(' ') }
+                    text_wrap: false
+
+        sea-labels:
+            filter: { not: { kind: [ocean] } }
+            sea-labels-z4:
+                filter: { $zoom: [4] }
+                draw:
+                    text-blend-order: { font: { size: 8px, fill: [0.250,0.250,0.250] } }
+            sea-labels-z5:
+                filter: { $zoom: [5] }
+                draw:
+                    text-blend-order: { font: { size: 10px } }
+            sea-labels-z6:
+                filter: { $zoom: [6] }
+                draw:
+                    text-blend-order: { font: { size: 11px } }
+            sea-labels-z7:
+                filter: { $zoom: [7] }
+                draw:
+                    text-blend-order: { font: { size: 12px } }
+            sea-labels-z8:
+                filter: { $zoom: { min: 8} }
+                draw:
+                    text-blend-order: { font: { size: 14px } }
+
+    earth-labels:
+        data: { source: mapzen, layer: earth }
+        filter: { name: true }
+        continent:
+            filter: { name: true, kind: [continent], $zoom: {max: 5} }
+            draw:
+                text-blend-order:
+                    visible: *text_visible_continent
+                    font:
+                        size: 14px
+                        style: italic
+                        fill: *text_fill
+                        weight: 600
+                        # stroke: { color: *text_stroke, width: 4 }
+                        transform: uppercase
+        continent-spacer:
+            filter: { kind: continent }
+            continent-spacer-z1-z5:
+                filter: { $zoom: { min: 1, max: 5 } }
+                draw:
+                    text-blend-order:
+                        text_source: function() { return feature.name.split('').join(' ') }
+                        text_wrap: false
+        island:
+            filter: { kind: [archipelago, island, islet] }
+            draw:
+                text-blend-order:
+                    visible: *text_visible_island
+                    text_wrap: 10
+                    font:
+                        size: 12px
+                        style: italic
+                        fill: *text_fill
+                        weight: 400
+                        stroke: { color: *text_stroke, width: 4 }
+                        #transform: uppercase
+
+    landuse:
+        data: { source: mapzen }
+        draw:
+            terrain:
+                order: function() { return feature.sort_key; }
+                visible: false
+        tier1:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 3 },  area: { min: 300000000 } }
+                    - { $zoom: { min: 4 },  area: { min: 300000000 } }
+                    - { $zoom: { min: 5 },  area: { min: 150000000 } }
+                    - { $zoom: { min: 6 },  area: { min: 150000000 } }
+                    - { $zoom: { min: 7 },  area: { min: 100000000 } }
+                    - { $zoom: { min: 8 },  area: { min: 10000000 } }
+                    - { $zoom: { min: 9 },  area: { min: 5000000 } }
+                    - { $zoom: { min: 10 }, area: { min: 1000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 500000 } }
+                    - { $zoom: { min: 12 }, area: { min: 500000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 50000 } }
+                    - { $zoom: { min: 15 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+            national_park:
+                filter: { kind: [national_park, "park or protected land", battlefield], not: { operator: [ "United States Forest Service", "US Forest Service", "U.S. Forest Service", "USDA Forest Service" ] } }
+                draw:
+                    terrain:
+                        interactive: false
+                        color: [0.890,1.00,1.00]
+                        # todo: what is this?
+                        order: 18
+                        visible: true
+                us_national_park:
+                    # yosemite national park, death valley national park, grand canyon national park
+                    filter: { operator: [ "United States National Park Service", "US National Park Service" ] }
+                    draw:
+                        terrain:
+                            visible: true
+
+        tier2:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 4 },  area: { min: 1000000000 } }
+                    - { $zoom: { min: 5 },  area: { min: 1000000000 } }
+                    - { $zoom: { min: 6 },  area: { min: 150000000 } }
+                    - { $zoom: { min: 7 },  area: { min: 100000000 } }
+                    - { $zoom: { min: 8 },  area: { min: 10000000 } }
+                    - { $zoom: { min: 9 },  area: { min: 5000000 } }
+                    - { $zoom: { min: 10 }, area: { min: 1000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 500000 } }
+                    - { $zoom: { min: 12 }, area: { min: 250000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 50000 } }
+                    - { $zoom: { min: 15 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+            conservation:
+                filter:
+                    kind: [conservation, protected_area, nature_reserve]
+                    $zoom: { min: 4 }
+                draw:
+                    terrain:
+                        # color: [1.00,0.974,0.950]
+                        color: [0.945,0.995,0.945]
+                        visible: true
+                wilderness-areas:
+                    filter: function() { return feature.name && feature.name.indexOf("Wilderness") > -1 }
+                    draw:
+                        terrain:
+                            order: 25
+                            visible: true
+
+                national_forest_level_6:
+                    filter: { protect_class: ["6",6] }
+                    draw:
+                        terrain:
+                            color: [0.945,0.995,0.945] #*green7
+                            visible: true
+
+            # gotta be a protected area to draw green, not just a landcover type
+            farm:
+                filter:
+                    kind: [farm, farmland]
+                    $zoom: { min: 10}
+                draw:
+                    polygons:
+                        color: [1.00,1.00,1.00]
+                        visible: *green4_v
+            forest:
+                filter: { kind: [forest,wood], $zoom: { min: 6 } }
+                national-forest:
+                    filter:
+                        operator: [ "United States Forest Service", "US Forest Service", "U.S. Forest Service", "USDA Forest Service" ]
+                    draw:
+                        terrain:
+                            color: [0.936,0.981,0.946]
+                            visible: true
+
+                landuse-forest:
+                    filter:
+                        not: { operator: [ "United States Forest Service", "US Forest Service", "U.S. Forest Service", "USDA Forest Service" ] }
+                        $zoom: { min: 6 }
+                    draw:
+                        terrain:
+                            color: [0.936,0.981,0.946]
+                            visible: true
+
+            nature_reserve:
+                filter: { kind: nature_reserve, $zoom: { min: 7 } }
+                draw:
+                    terrain-grid:
+                        order: function() { return feature.sort_key; }
+                wilderness-areas:
+                    filter: function() { return feature.name && feature.name.indexOf("Wilderness") > -1 }
+                    draw:
+                        terrain:
+                            color: [0.890,0.973,0.886]
+                        # outline:
+                        #     style: lines
+                        #     color: red
+                        #     width: [[9,1px],[10,2px],[12,4px]]
+
+            parks-and-national-forests-not-national-park:
+                filter: { $zoom: { min: 4 }, kind: [park, national_park, "park or protected land", battlefield], not: { operator: [ "United States National Park Service", "US National Park Service" ] } }
+                # default for national forests and more?
+                draw:
+                    terrain:
+                        color: [0.880,1.000,0.950]
+                        # color: [0.850,1.000,0.938]
+                        # color: [0.860,0.993,1.000]
+                        # color: [0.915,0.995,0.995]
+                        visible: true
+            # urban:
+            #     filter: { kind: [urban, rural, residential] }
+            #     visible: *earth2_v
+            #     draw:
+            #         polygons:
+            #             color: [1.00,1.00,1.00]
+            #             visible: *earth2_v
+        tier3:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 8 },  area: { min: 10000000 } }
+                    - { $zoom: { min: 9 },  area: { min: 5000000 } }
+                    - { $zoom: { min: 10 }, area: { min: 1000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 500000 } }
+                    - { $zoom: { min: 12 }, area: { min: 500000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 50000 } }
+                    - { $zoom: { min: 15 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+            airport:
+                filter:
+                    kind: aerodrome
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: *purple_v
+            military:
+                filter:
+                    kind: military
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: true
+            university:
+                filter:
+                    kind: [university, college]
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: true
+        tier4:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 10 }, area: { min: 1000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 500000 } }
+                    - { $zoom: { min: 12 }, area: { min: 500000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 50000 } }
+                    - { $zoom: { min: 15 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+            cemetery:
+                filter:
+                    kind: cemetery
+                draw:
+                    terrain:
+                        color: [0.982,1.000,0.960]
+                        visible: true
+            golf_course:
+                filter:
+                    kind: golf_course
+                draw:
+                    terrain:
+                        color: [0.890,1.000,0.892]
+                        # color: [0.840,1.000,0.907]
+                        visible: true
+            hospital:
+                filter:
+                    kind: hospital
+                draw:
+                    terrain:
+                        color: [0.988,0.938,0.953]
+                        visible: true
+            industrial:
+                filter:
+                    kind: industrial
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: true
+            power:
+                filter: { kind: [plant, generator, substation] }
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: true
+            railway:
+                filter:
+                    kind: railway
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: true
+        # IGNORE THIS FOR NOW
+        #     sports_centre:
+        #         filter:
+        #             kind: sports_centre
+        #         draw:
+        #             polygons:
+        #                 color: [1.0,1.0,1.0]
+            recreation_ground:
+                filter:
+                    kind: recreation_ground
+                draw:
+                    terrain:
+                        color: [0.945,0.995,0.945]
+                        visible: true
+            stadium:
+                filter:
+                    kind: stadium
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: true
+            zoo:
+                filter:
+                    kind: [zoo, wildlife_park]
+                draw:
+                    terrain:
+                        color: [0.830,1.000,0.972]
+                        visible: true
+            winter_sports:
+                filter:
+                    kind: winter_sports
+                draw:
+                    terrain:
+                        color: [1.0,1.0,1.0]
+                        visible: *grey8_v
+            man-made:
+                filter: { kind: [pier,wastewater_plant,works,bridge,tower,breakwater,water_works,groyne,dike,cutline] }
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: true
+                pier:
+                    filter: { kind: [pier,bridge,breakwater,groyne,dike,cutline] }
+                    draw:
+                        terrain:
+                            color: [1.000,0.973,0.930]
+                            visible: true
+            camp_site:
+                filter: { kind: camp_site }
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: true
+
+        tier5:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 10 }, area: { min: 1000000 } }
+                    - { $zoom: { min: 11 }, area: { min: 400000 } }
+                    - { $zoom: { min: 12 }, area: { min: 200000 } }
+                    - { $zoom: { min: 13 }, area: { min: 50000 } }
+                    - { $zoom: { min: 14 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 10000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+                all:
+                    - kind:
+                        - theme_park
+                        - resort
+                        - aquarium
+                        - winery
+                        - maze
+                        - beach
+            tourism-related:
+                filter:
+                    kind:
+                        - theme_park
+                        - resort
+                        - aquarium
+                        - winery
+                        - maze
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: true
+            beach:
+                filter:
+                    kind: beach
+                draw:
+                    terrain:
+                        color: [1.000,0.953,0.900]
+                        # color: [0.975,0.975,0.828]
+                        visible: true
+        tier6:
+            filter:
+                any:
+                    # limit show smaller landuse areas to higher zooms
+                    - { $zoom: { min: 12 }, area: { min: 500000 } }
+                    - { $zoom: { min: 13 }, area: { min: 100000 } }
+                    - { $zoom: { min: 14 }, area: { min: 50000 } }
+                    - { $zoom: { min: 15 }, area: { min: 20000 } }
+                    - { $zoom: { min: 15 }, area: { min: 2000 } }
+                    - { $zoom: { min: 16 } }
+            garden:
+                filter:
+                    kind: [garden, allotments]
+                draw:
+                    terrain:
+                        color: [0.790,0.973,0.896]
+                        visible: true
+            parking:
+                filter:
+                    all:
+                        - kind: parking
+                        - $zoom: { min: 14 }
+                    any:
+                        - { $zoom: { min: 14 }, area: { min: 10000 } }
+                        - { $zoom: { min: 15 }, area: { min: 5000 } }
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: *grey1_v
+                early:
+                    filter: { $zoom: { max: 15 } }
+                    draw:
+                        terrain:
+                            color: [0.950,0.950,0.950]
+                            visible: true
+        pedestrian:
+            filter:
+                kind: [pedestrian,common]
+            draw:
+                terrain:
+                    color: [0.945,0.995,0.945]
+                    visible: *grey1_v
+            green-stuff:
+                filter:
+                    surface: [grass]
+                draw:
+                    terrain:
+                        color: [0.791,0.953,0.883]
+
+        glacier:
+            filter:
+                kind: glacier
+            draw:
+                terrain:
+                    color: [0.890,0.970,1.000]
+                    # color: [0.975,0.975,0.828]
+                    visible: true
+
+        minor_green_stuff:
+            filter:
+                kind: [pitch, meadow, village_green, grass, farmland, playground]
+            draw:
+                terrain:
+                    color: [0.808,0.962,0.951]
+                    # color: [0.702,0.949,0.932]
+                    # color: [0.975,0.975,0.828]
+                    visible: true
+            farmland_friends:
+                filter: { kind: [farmland] }
+                draw:
+                    terrain:
+                        color: [0.965,0.996,0.965]
+                        #visible: false
+            meadow_friends:
+                filter: { kind: [meadow, grass] }
+                draw:
+                    terrain:
+                        color: [0.825,0.976,0.895]
+            pitch_later:
+                filter: { kind: pitch, $zoom: { min: 17 } }
+                draw:
+                    lines:
+                        color: [0.526,0.809,0.752]
+                        order: 500
+                        width: 0.5m
+
+        wetland:
+            filter:
+                kind: [wetland]
+            draw:
+                terrain:
+                    color: [0.930,0.973,0.980]
+                    # color: [0.975,0.975,0.828]
+                    visible: true
+        scrub:
+            filter:
+                kind: [scrub]
+            draw:
+                terrain:
+                    color: [1.000,0.973,0.930]
+                    # color: [0.975,0.975,0.828]
+                    visible: true
+            later:
+                filter: { $zoom: { min: 15 } }
+                draw:
+                    lines:
+                        color: blue
+                        width: 0.5px
+
+        minor_other_stuff:
+            filter:
+                kind: [scree, farmyard]
+            draw:
+                terrain:
+                    color: [1.000,0.953,0.900]
+                    # color: [0.975,0.975,0.828]
+                    visible: true
+            later:
+                filter: { $zoom: { min: 15 } }
+                draw:
+                    lines:
+                        color: red
+                        width: 0.5px
+
+            place_of_worship:
+                filter:
+                    kind: place_of_worship
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: *grey1_v
+            playground:
+                filter:
+                    kind: playground
+                draw:
+                    terrain:
+                        color: [0.795,1.000,0.955]
+                        visible: true
+            school:
+                filter:
+                    kind: school
+                draw:
+                    terrain:
+                        color: *gray-all
+                        visible: true
+
+            minor-landuse:
+                filter:
+                    kind:
+                        - attraction
+                        - artwork
+                        - wilderness_hut
+                        - hanami
+                draw:
+                    terrain:
+                        color: [0.795,1.000,0.955]
+                        visible: true
+
+        # GO MELLOW
+        # 18/41.19776/-8.68722
+        tree_row:
+            filter:
+                kind: tree_row
+            draw:
+                lines:
+                    order: 501 # function() { return feature.sort_key; }
+                    color: [0.602,0.860,0.722]
+                    width: [[16,1px],[17,2px],[19,1.5m]]
+                    visible: true
+        # GO MELLOW
+        # 20/37.76779/-122.40096
+        hedge:
+            filter:
+                kind: hedge
+            draw:
+                lines:
+                    order: 500 # function() { return feature.sort_key; }
+                    color: [0.602,0.860,0.722]
+                    width: [[16,0.5px],[17,1px],[19,1m]]
+                    visible: true
+
+    natural-overlay:
+        data: { source: mapzen, layer: earth }
+        filter: { kind: [cliff, arete, ridge, valley] }
+        draw:
+            lines:
+                order: 999
+                interactive: true
+        #cliff:
+#            filter: { kind: cliff }
+#            draw:
+#                lines:
+#                    color: blue
+#                    width: 0.2px
+#                    order: 1001
+        #arete:
+#            filter: { kind: arete }
+#            draw:
+#                lines:
+#                    color: red
+#                    width: 0.2px
+#                    order: 1000
+        ridge_valley:
+            filter: { kind: [ridge, valley] }
+            draw:
+                lines:
+                    visible: false
+                text-blend-order:
+                    priority: 50
+                    font:
+                        fill: black
+                        weight: 200
+                        size: 10px
+                        style: italic
+                        stroke: { color: [0.894,0.906,0.914], width: 3 }
+            ridge:
+                filter: { kind: ridge }
+                draw:
+                    lines:
+                        visible: false
+                    text-blend-order:
+                        font:
+                            fill: black
+                            weight: 200
+                            size: 10px
+                            style: italic
+                            stroke: { color: [0.894,0.906,0.914], width: 3 }
+
+    path-overlay:
+        data: { source: mapzen, layer: roads }
+        filter:
+            all:
+                - kind: path
+            not:
+                - man_made: [pier]
+        draw:
+            lines:
+                color: [[11,[0.408,0.741,0.690]],[15,[0.131,0.667,0.575]]] #[11,[0.252,0.509,0.60]],[12,[0.120,0.600,0.520]]
+            dashedline:
+                color: [0.120,0.600,0.520]
+            dots-lines:
+                color: [0.120,0.600,0.520]
+                # color: [0.257,0.520,0.802] ## added red
+                # color: [0.302,0.649,0.740] ## more blue
+                # color: [0.292,0.650,0.644] ## more green
+                # color: [0.416,0.750,0.746]
+        # bigger path, sometimes paved (walk with friends side-by-side), also tracks that are no vehicles
+        paths:
+            filter:
+                any:
+                    - highway: path
+                    - all:
+                        - highway: track
+                        - motor_vehicle: no
+            draw:
+                lines:
+                    join: round
+                    cap: round
+                    color: [[13, [0.510,0.752,0.695]], [14,[0.412,0.710,0.665]], [15, [0.298,0.686,0.627]], [16, [0.860,1.000,0.977]], [17, [0.860,1.000,0.977]]]
+                    width: [[13, 1px], [14, 1.1px], [15, 1.4px], [16, 0px], [17, 1px], [18, 1.75px], [19, 2.25px]]
+                    order: 1003
+                    outline:
+                        color: [0.120,0.600,0.520]
+                        width: [[15, 0px], [16, 0.8px], [17, 1.25px], [18, 2.5px]]
+            networked:
+                filter: { walking_network: true }
+                draw:
+                    lines:
+                        width: [[12, 1px], [13, 1px], [14, 1.1px], [15, 1.5px], [16, 0px], [17, 1.5px], [18, 1.75px], [19, 2.25px]]
+                    highlight:
+                        order: 980
+                        color: [[12,[1.000,1.000,0.870]],[15,[1.000,1.000,0.870]]]
+                        width: [[12, 3px], [13, 4px], [14, 5px], [15, 6px], [16, 7px], [17, 10px], [18, 14px], [19, 16px]]
+                        join: round
+            no_name_early_not_designated:
+                filter: { name: false, $zoom: { max: 14 } }
+                draw:
+                    lines:
+                        width: [[0,1px]]
+            in_zoo_golf_course:
+                filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments] }
+                draw:
+                    lines:
+                        width: [[13, 0.5px], [15, 0.65px], [16, 0px], [17, 1.5px], [18, 1.75px], [19, 2.25px]]
+                early:
+                    filter: { $zoom: { max: 15 } }
+                    draw:
+                        lines:
+                            visible: false
+            labels-path:
+                #filter: { $zoom: { min: 17 } }
+                draw:
+                    text-blend-order:
+                        priority: 58
+                        visible: *text_visible_path
+                        font:
+                            fill: [0.143,0.544,0.481]
+                            # fill: [0.256,0.570,0.565]
+                            size: 12px
+                            stroke: { color: *text_stroke, width: 4 }
+                in_zoo_golf_course:
+                    filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments], $zoom: { max: 15 } }
+                    draw:
+                        text-blend-order:
+                            visible: false
+
+
+        # single hiking path
+        footway:
+            filter: { highway: [footway] }
+            draw:
+                dots-lines:
+                    order: 1002
+                    interactive: true
+                    color: [0.120,0.600,0.520]
+                    #width: [[13, 0.75px], [14, 0.85px], [15, 1.1px], [16, 3px], [17, 6px], [18, 7px], [19, 10px]]
+                    width: [[13, 0.75px], [14, 1px], [15, 3.5px], [16, 3px], [17, 4px], [18, 5px], [19, 8px]]
+                    visible: true
+                    #color: purple
+                lines:
+                    order: 1000
+                    interactive: true
+                    #width: [[13, 0.75px], [14, 0.85px], [15, 1.1px], [16, 2px], [17, 6px], [18, 7px], [19, 10px]]
+                    #color: [[15,[0.120,0.600,0.520]],[16,[0.623,0.820,0.797]]]
+                    color: [[14,[0.510,0.752,0.695]],[15,[0.671,0.839,0.820]],[16,[0.671,0.839,0.820]]]
+                    width: [[13, 0.75px], [14, 0.6px], [15, 1px], [16, 2px], [17, 3px], [18, 4px], [19, 4px]]
+                    visible: true
+                    #color: purple
+                dashedline:
+                    order: 1005
+            early-show-as-lines-z14:
+                filter: { $zoom: { max: 15 } }
+                draw:
+                    dots-lines:
+                        visible: false
+                    lines:
+                        visible: true
+            early-show-as-lines-z15:
+                filter: { $zoom: [15] }
+                draw:
+                    dots-lines:
+                        visible: true
+                    lines:
+                        visible: true
+            networked:
+                filter: { walking_network: true }
+                draw:
+                    lines:
+                        #width: [[12, 0.75px], [13, 1px], [14, 1px], [15, 1.25px], [16, 0px], [17, 1.5px], [18, 1.75px], [19, 2.25px]]
+                        width: [[13, 1.25px],[14, 1.4px],[15, 1.75px],[16, 2px], [17, 4px], [18, 5px], [19, 8px]]
+                        #color: [[15,[0.120,0.600,0.520]],[16,[0.623,0.820,0.797]]]
+                    highlight:
+                        order: 980
+                        color: [[12,[0.900,1.000,0.850]],[14,[0.930,1.000,0.850]],[15,[1.000,1.000,0.870]]]
+                        width: [[12, 3px], [13, 4px], [14, 5px], [15, 6px], [16, 8px], [17, 10px], [18, 14px], [19, 16px]]
+                        join: round
+                early:
+                    filter: { $zoom: { max: 15 } }
+                    draw:
+                        lines:
+                            color: [0.120,0.600,0.520]
+            # de-emphasize less important trails at early zooms
+            # where less important are trails without names, trails in less interesting landuse, or just early
+            in_zoo_golf_course:
+                filter:
+                    all:
+                        - landuse_kind: [zoo, enclosure, petting_zoo, golf_course, garden, university, parking, pedestrian, attraction, residential, stadium, playground, allotments]
+                        - $zoom: { max: 17 }
+                draw:
+                    lines:
+                        visible: true
+                early:
+                    filter: { $zoom: { max: 16 } }
+                    draw:
+                        dots-lines:
+                            visible: false
+                early-z15:
+                    filter: { $zoom: { max: 16 } }
+                    draw:
+                        lines:
+                            color: [0.120,0.600,0.520]
+                            width: [[14,0.4px],[15,0.5px]]
+                garden-early:
+                    filter: { kind: [garden] }
+                    draw:
+                        lines:
+                            width: [[14,0.1px],[15,0.3px]]
+            in_cemetery:
+                filter:
+                    all:
+                        - landuse_kind: [cemetery]
+                draw:
+                    lines:
+                        visible: true
+                        color: [0.863,0.941,0.867]
+                    dots-lines:
+                        color: [0.510,0.752,0.695]
+                early:
+                    filter: { $zoom: { max: 16 } }
+                    draw:
+                        dots-lines:
+                            visible: false
+                early-z15:
+                    filter: { $zoom: { max: 16 } }
+                    draw:
+                        lines:
+                            color: [0.510,0.752,0.695]
+                            width: [[14,0.25px],[15,0.5px]]
+            sidewalk-crossing:
+                filter: { footway: [sidewalk, crossing], not: { walking_network: true } }
+                draw:
+                    lines:
+                        order: 350 # function() { return feature.sort_key; }
+                    dots-lines:
+                        order: 351 # function() { return (feature.sort_key + 1); }
+                    dashedline:
+                        visible: false
+                early-z17:
+                    filter: { $zoom: { max: 18 } }
+                    draw:
+                        lines:
+                            visible: false
+                        dots-lines:
+                            visible: false
+                early-z17-lines:
+                    filter: { $zoom: [17] }
+                    draw:
+                        lines:
+                            visible: true
+                            width: 1.5px
+            labels-footpaths:
+                filter: { $zoom: { min: 15 } }
+                draw:
+                    text-blend-order:
+                        priority: 58
+                        visible: *text_visible_path
+                        font:
+                            fill: [0.143,0.544,0.481]
+                            size: 12px
+                            stroke: { color: *text_stroke, width: 4 }
+                in_zoo_golf_course:
+                    filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments], $zoom: { max: 15 } }
+                    draw:
+                        text-blend-order:
+                            visible: false
+
+        cycleway_pedestrian:
+            filter:
+                all:
+                    - highway: [cycleway, pedestrian]
+                    - not: { highway: [pedestrian], walking_network: true }
+            draw:
+                lines:
+#                    color: blue #[0.120,0.600,0.520]
+#                    width: [[13, 1px], [14, 1.45px], [15, 1.1px], [16, 1.5px], [17, 2px], [18, 5px], [19, 6px]]
+#                    order: 1004
+                    interactive: true
+                    color: [[11,[0.120,0.600,0.520]],[14,[0.120,0.600,0.520]],[15,[1.00,1.00,1.00]]]
+                    #width: [[11, 0.25px], [12, 0.35px], [13, 0.55px],[14,1px],[15,0px]]
+                    width: [[13, 0.75px], [14, 1.1px], [15, 1.1px], [16, 1.5px], [17, 2.2px], [18, 5px], [19, 6px]]
+                    # let roads sort themselves past zoom 14
+                    order: 1004
+                    outline:
+                        color: [0.120,0.600,0.520]
+                        width: [[11, 0px],[14, 0px],[15, 0.5px],[16, 1px]]
+            networked:
+                filter: { walking_network: true }
+                draw:
+                    lines:
+                        color: [[11,[0.120,0.600,0.520]],[14,[0.120,0.600,0.520]],[15,[1.00,1.00,1.00]]]
+                        width: [[13, 0.75px], [14, 1.1px], [15, 1.1px], [16, 1.5px], [17, 2.2px], [18, 5px], [19, 6px]]
+                    highlight:
+                        order: 980
+                        color: [[12,[0.900,1.000,0.850]],[14,[0.930,1.000,0.850]],[15,[1.000,1.000,0.880]]]
+                        width: [[12, 0px], [13, 4px], [14, 5px], [15, 7px], [16, 10px], [17, 12px], [18, 14px], [19, 16px]]
+                        join: round
+            late:
+                filter: { $zoom: { min: 15 } }
+                draw:
+                    lines:
+                        color: [1.00,1.00,1.00]#[0.145,0.745,0.643] #[[17,'#c8ecf7'],[18,'#a9d9e8']] #white
+                        join: round
+                        cap: round
+                        outline:
+                            #color: [0.120,0.600,0.520]
+                            join: round
+                            cap: round
+                            width: [[15, 1px], [16, 1.5px], [17, 1.6px], [18, 2px], [19, 2px]]
+                            order: 999
+            labels-cycleway:
+                filter: { $zoom: { min: 14 } }
+                draw:
+                    text-blend-order:
+                        priority: 58
+                        visible: *text_visible_path
+                        font:
+                            fill: [0.120,0.600,0.520]
+                            size: 12px
+                            stroke: { color: *text_stroke, width: 4 }
+
+    track-overlay:
+        data: { source: mapzen, layer: roads }
+        filter:
+            all:
+                - kind: path
+                - highway: [track]
+                - motor_vehicle: false
+        draw:
+            lines:
+                color: [[13,[0.773,0.705,0.605]],[14,[0.630,0.519,0.418]]]
+                # color: [0.756,0.563,0.499]
+                width: [[13, 0.6px], [14, 1px], [15, 1.1px], [16, 1.25px], [17, 1.5px], [18, 5px], [19, 6px]]
+                order: 990
+                interactive: true
+        late:
+            filter: { $zoom: { min: 16 } }
+            draw:
+                lines:
+                    color: white
+                    join: round
+                    cap: round
+                    outline:
+                        color: [0.630,0.519,0.418]
+                        # color: [0.756,0.563,0.499]
+                        join: round
+                        cap: round
+                        width: [[16, 1px], [17, 1.5px], [18, 2px], [19, 2px]]
+                        order: 999
+        in_zoo_golf_course:
+            filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments] }
+            draw:
+                lines:
+                    width: [[13, 1px], [14, 1.45px], [15, 1.1px], [16, 1.5px], [17, 2px], [18, 5px], [19, 6px]]
+            early:
+                filter: { $zoom: { max: 15 } }
+                draw:
+                    lines:
+                        visible: false
+        networked:
+            filter: { walking_network: true }
+            draw:
+                lines:
+                    width: [[13, 1px], [14, 1.2px], [15, 1.5px], [16, 1.25px], [17, 1.5px], [18, 3px], [19, 4px]]
+                highlight:
+                    order: 980
+                    color: [[12,[1.000,1.000,0.870]],[15,[1.000,1.000,0.870]]]
+                    width: [[12, 2.5px], [13, 4px], [14, 5px], [15, 6px], [16, 8px], [17, 10px], [18, 14px], [19, 16px]]
+                    join: round
+            early:
+                filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments], $zoom: { max: 15 } }
+                draw:
+                    lines:
+                        visible: true
+        labels-track:
+            #filter: { $zoom: { min: 17 } }
+            draw:
+                text-blend-order:
+                    priority: 58
+                    visible: *text_visible_path
+                    font:
+                        fill: [0.536,0.451,0.378]
+                        size: 12px
+                        stroke: { color: *text_stroke, width: 4 }
+            in_zoo_golf_course-early:
+                filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments], $zoom: { max: 15 } }
+                draw:
+                    text-blend-order:
+                        visible: false
+    other-roads-no-motorvehicle-overlay:
+        data: { source: mapzen, layer: roads }
+        filter:
+            all:
+                - not: { kind: [path,ferry] }
+                - motor_vehicle: no
+        draw:
+            lines:
+                color: [0.710,0.553,0.522]
+                width: [[11, 0.25px], [12, 0.35px], [13, 0.55px], [14, 1px], [15, 0px], [16, 1.5px], [17, 3px], [18, 3m]]
+                order: 990
+                interactive: true
+        late:
+            filter: { $zoom: { min: 15 } }
+            draw:
+                lines:
+                    color: [0.940,0.940,0.940]
+                    join: round
+                    cap: round
+                    outline:
+                        color: [0.710,0.553,0.522]
+                        join: round
+                        cap: round
+                        width: [[15, 0.5px], [16, 1.25px], [17, 1.5px], [18, 1.5px], [19, 3px]]
+                        order: 999
+        labels-track:
+            #filter: { $zoom: { min: 17 } }
+            draw:
+                text-blend-order:
+                    priority: 58
+                    visible: *text_visible_path
+                    font:
+                        fill: [0.536,0.451,0.378]
+                        size: 12px
+                        stroke: { color: *text_stroke, width: 4 }
+
+
+    other-roads-walking-network-only:
+        data: { source: mapzen, layer: roads }
+        filter:
+            all:
+                - walking_network: true
+                - not:
+                    any:
+                        - { kind: [path,ferry], not: { highway: pedestrian } }
+                        #- motor_vehicle: [no,false]
+                        - highway: [track]
+        draw:
+            lines:
+                color: [0.120,0.600,0.520]
+                width: [[11, 0.25px], [12, 0.35px], [13, 0.55px], [14, 1px], [15, 0px], [16, 1px], [17, 6px], [18, 9m]]
+                order: 990
+                interactive: true
+        double-lines:
+            filter: { $zoom: { min: 16 } }
+            draw:
+                lines:
+                    color: [1.000,1.000,0.870]
+                    width: [[15,0px],[16,1px],[17,4px],[18,6m]]
+                    outline:
+                        color: [0.120,0.600,0.520]
+                        width: [[15, 0.5px],[16, 1.5px],[17, 1.5px],[18, 2.5px],[19, 1m]]
+                casing_left:
+                    visible: false
+                    interactive: true
+                    order: 486
+                    color: [0.120,0.600,0.520]
+                    width: [[15, 0.5px],[16, 5.5px],[17, 10px],[18, 9m],[19, 8m]]
+                casing_right:
+                    visible: false
+                    interactive: true
+                    order: 486
+                    color: white
+                    width: [[15, 0.5px],[16, 6px],[17, 10px],[18, 9m],[19, 8m]]
+        the_network:
+            draw:
+                lines:
+                    width: [[13, 0.9px], [14, 1.2px], [15, 2.0px], [16, 1px], [17, 2px], [18, 6m]]
+                highlight:
+                    order: 980
+                    color: [[12,[0.900,1.000,0.850]],[14,[0.930,1.000,0.850]],[15,[1.000,1.000,0.870]]]
+                    width: [[12, 3px], [13, 4px], [14, 5px], [15, 6px], [16, 10px], [17, 12px], [18, 14px], [19, 16px]]
+                    join: round
+        hide-most-till-mid-zooms:
+            filter:
+                all:
+                    - $zoom: { max: 12 }
+                    - walking_network: [lwn,rwn]
+            draw:
+                lines:
+                    visible: false
+                highlight:
+                    visible: false
index 28246e98db9402483e4b698c2af8a029fa89a887..e027ec79c1f297d829cdd1ca99b183efbbb7eca2 100644 (file)
@@ -25,7 +25,8 @@ extern "C" {
 #include "tangram/tangram.h"
 #include "tangram/platform_tizen.h"
 
-#define NORMAL_SCENE_FILE_PATH "/usr/share/config/maps-plugin-mapzen/scene/scene.yaml"
+#define NORMAL_SCENE_FILE_PATH "/usr/share/maps/mapzen/scenes/bubble-wrap/bubble-wrap.yaml"
+#define TERRAIN_SCENE_FILE_PATH "/usr/share/maps/mapzen/scenes/walkabout-style/walkabout-style.yaml"
 
 TangramView::TangramView()
 {
@@ -394,7 +395,12 @@ mapzen_error_e TangramView::captureSnapshot(maps_view_h view, void **data, int *
        }
 
        pixelGetCb(view, nullptr);
+
        unsigned int *pixels = (unsigned int*)malloc(m_w * m_h * sizeof(unsigned int));
+       if (!pixels) {
+               return MAPZEN_ERROR_OUT_OF_MEMORY;
+       }
+
        Tangram::captureSnapshot(pixels);
 
        for (int i = 0; i < m_h; ++i) {
@@ -405,6 +411,7 @@ mapzen_error_e TangramView::captureSnapshot(maps_view_h view, void **data, int *
        *width = m_w;
        *height = m_h;
 
+       free(pixels);
        return MAPZEN_ERROR_NONE;
 }
 
@@ -436,10 +443,10 @@ void TangramView::setMapType(maps_view_h view)
                const char* newSceneFile = NORMAL_SCENE_FILE_PATH;
                switch(newViewType) {
                        case TANGRAM_VIEW_TERRAIN:
-                               // TODO: newSceneFile = path_to_terrain_scene
+                               newSceneFile = TERRAIN_SCENE_FILE_PATH;
                                break;
                        case TANGRAM_VIEW_NORMAL:
-                               // TODO: newSceneFile = path_to_normal_scene
+                               newSceneFile = NORMAL_SCENE_FILE_PATH;
                                break;
                        default:
                                return;