Update terrain style
[platform/core/location/maps-plugin-mapzen.git] / scenes / walkabout-style / walkabout-style.yaml
index 2c56389..21ec58b 100644 (file)
@@ -1,4 +1,81 @@
-# Terrain environment map demo
+# Walkabout is an outdoor style perfect for hiking or getting out and about, with
+# mountains, ski trails, biking paths, and transit stops.
+#
+# Give OpenStreetMap data a professional basemap skin using the Tangram graphics library
+# and Mapzen's versatile Vector Tiles.
+#
+# Please use and adapt the open source scene file in your own projects!
+#
+# Authors: Geraldine Sarmiento, Nathaniel V. Kelso
+# Read more: https://github.com/tangrams/walkabout-style
+#
+
+global:
+    #ux/ui
+    #
+    # missing language
+    # missing transit overlay
+    #
+    # To facilitate data visualizations several recommended sort orders are provided
+    #
+    # Your classic raster map overlay.
+    # Over all line and polygon features.
+    # Under map labels (icons and text), under UI elements
+    # (like routeline and search result pins).
+    sdk_order_over_everything_but_text_0: 490
+    sdk_order_over_everything_but_text_1: 491
+    sdk_order_over_everything_but_text_2: 492
+    sdk_order_over_everything_but_text_3: 493
+    sdk_order_over_everything_but_text_4: 494
+    sdk_order_over_everything_but_text_5: 495
+    sdk_order_over_everything_but_text_6: 496
+    sdk_order_over_everything_but_text_7: 497
+    sdk_order_over_everything_but_text_8: 498
+    sdk_order_over_everything_but_text_9: 499
+    #
+    # Your classic "underlay"
+    # Under roads. Above borders, water, landuse, and earth.
+    sdk_order_under_roads_0: 290
+    sdk_order_under_roads_1: 291
+    sdk_order_under_roads_2: 292
+    sdk_order_under_roads_3: 293
+    sdk_order_under_roads_4: 294
+    sdk_order_under_roads_5: 295
+    sdk_order_under_roads_6: 296
+    sdk_order_under_roads_7: 297
+    sdk_order_under_roads_8: 298
+    sdk_order_under_roads_9: 299
+    #
+    # Under water.
+    # Above earth and most landuse.
+    sdk_order_under_water_0: 190
+    sdk_order_under_water_1: 191
+    sdk_order_under_water_2: 192
+    sdk_order_under_water_3: 193
+    sdk_order_under_water_4: 194
+    sdk_order_under_water_5: 195
+    sdk_order_under_water_6: 196
+    sdk_order_under_water_7: 197
+    sdk_order_under_water_8: 198
+    sdk_order_under_water_9: 199
+    #
+    # Under everything.
+    # Tip: disable earth layer.
+    sdk_order_under_everything_0: 0
+    sdk_order_under_everything_1: 1
+    sdk_order_under_everything_2: 2
+    sdk_order_under_everything_3: 3
+    sdk_order_under_everything_4: 4
+    sdk_order_under_everything_5: 5
+    sdk_order_under_everything_6: 6
+    sdk_order_under_everything_7: 7
+    sdk_order_under_everything_8: 8
+    sdk_order_under_everything_9: 9
+    #
+    # default order for basemap features
+    feature_order: function() { return feature.sort_rank; }
+    #
+    # TODO: YAML based globals below will move into this Tangram globals block
 
 labels-global:
     - &text_visible_continent         true
@@ -12,26 +89,26 @@ labels-global:
     - &text_visible_address           true
     - &text_visible_water_labels      true
     - &label_visible_landuse_green    true
-    - &icon_visible_landuse_green     true
+    - &icon_visible_landuse_green     true      #this needs work
     - &text_visible_landuse_green     true
     - &label_visible_poi_landuse      true
-    - &icon_visible_poi_landuse       true
-    - &text_visible_poi_landuse       true
+    - &icon_visible_poi_landuse       false     #false for default
+    - &text_visible_poi_landuse       false     #false for default
     - &label_visible_poi_landuse_e    true
-    - &icon_visible_poi_landuse_e     true
+    - &icon_visible_poi_landuse_e     false     #false for default
     - &text_visible_poi_landuse_e     true
-    - &label_visible_station          true
-    - &icon_visible_station           true
-    - &text_visible_station           true
+    - &label_visible_station          false     #false for default
+    - &icon_visible_station           false     #false for default
+    - &text_visible_station           false     #false for default
     - &text_visible_highway           true
-    - &text_visible_highway_e         true
+    - &text_visible_highway_e         false     #false for default
     - &text_visible_trunk_primary     true
-    - &text_visible_trunk_primary_e2  true
-    - &text_visible_trunk_primary_e   true
+    - &text_visible_trunk_primary_e2  false     #false for default
+    - &text_visible_trunk_primary_e   false     #false for default
     - &text_visible_secondary         true
-    - &text_visible_secondary_e       true
+    - &text_visible_secondary_e       false     #false for default
     - &text_visible_tertiary          true
-    - &text_visible_tertiary_e        true
+    - &text_visible_tertiary_e        false     #false for default
     - &text_visible_minor_road        true
     - &text_visible_minor_road_e      true
     - &text_visible_service_road      true
@@ -39,9 +116,9 @@ labels-global:
     - &text_visible_piste             true
     - &text_visible_steps             true
     - &text_visible_aerialway         true
-    - &text_visible_shields           false
+    - &text_visible_shields           true
     - &text_visible_exits             true
-    - &text_visible_exits_e           true
+    - &text_visible_exits_e           false     #false for default
     - &text_visible_airport_gate      true
 
 settings:
@@ -178,7 +255,7 @@ settings:
         - &grey12      '#cfcfcf'                # generic minor amusements (roller coasters, rides, slide, carousel)
         - &grey12_o    '#c5c5c5'                # generic minor amusements
         - &purple      '#f0e1e1'                # airport
-        - &purple_v    false                    # airport
+        - &purple_v    true                     # airport
         - &mystry1     '#aaaaaa'                # recreation ground (type of park, sometimes around reservoirs)
         - &building1   white                    # building
         - &building2   white                    # building stroke
@@ -212,191 +289,422 @@ scene:
         color: [0.894,0.902,0.898]
     # animated: true
 
+fonts:
+    Montserrat:
+        url: https://fonts.gstatic.com/s/montserrat/v7/zhcz-_WihjSQC0oHJ9TCYL3hpw3pgy2gAi-Ip7WPMi0.woff
+
 textures:
     pois:
         url: images/poi_icons_18@2x.png
         filtering: mipmap
         sprites:
             # define sprites: [x origin, y origin, width, height]
+            'US:CA_1char': [220, 606, 82, 92]
+            'US:CA_2char': [120, 606, 94, 94]
+            'US:CA_3char': [0, 606, 112, 92]
+            'US:CA_4char': [808, 510, 124, 92]
+            'US:CA_5char': [672, 510, 128, 92]
+            'US:I_1char': [0, 710, 90, 100]
+            'US:I_2char': [138, 314, 102, 102]
+            'US:I_3char': [0, 314, 132, 100]
+            'US:I_4char': [756, 210, 140, 100]
+            'US:I_5char': [596, 210, 152, 100]
+            'US:NY_1char': [768, 418, 72, 88]
+            'US:NY_2char': [112, 418, 88, 88]
+            'US:NY_3char': [0, 418, 104, 86]
+            'US:NY_4char': [896, 314, 116, 86]
+            'US:NY_5char': [768, 314, 120, 86]
+            'US:PA_1char': [688, 418, 72, 88]
+            'US:PA_2char': [592, 418, 88, 88]
+            'US:PA_3char': [472, 418, 112, 88]
+            'US:PA_4char': [344, 418, 120, 88]
+            'US:PA_5char': [208, 418, 128, 88]
+            'US:US_1char': [900, 606, 88, 94]
+            'US:US_2char': [788, 608, 106, 94]
+            'US:US_3char': [642, 606, 138, 100]
+            'US:US_4char': [478, 606, 158, 100]
+            'US:US_5char': [308, 606, 164, 100]
             airport: [952, 0, 38, 38]
-            allotments: [552, 252, 38, 38]
+            aerodrome: [952, 0, 38, 38]
+            allotments: [46, 814, 38, 38]
             aquarium: [916, 168, 38, 38]
             art-gallery: [824, 168, 38, 38]
+            art_gallery: [824, 168, 38, 38]
+            art: [824, 168, 38, 38]
             athletics-sports: [368, 168, 38, 38]
+            pitch: [368, 168, 38, 38]
+            athletic_sports: [368, 168, 38, 38]
+            recreation_ground: [368, 168, 38, 38]
             atm: [92, 168, 38, 38]
-            attraction: [550, 210, 38, 36]
+            attraction: [550, 210, 38, 38]
             automotive-shop: [184, 168, 38, 38]
+            car_repair: [184, 168, 38, 38]
+            automotive: [184, 168, 38, 38]
+            tyres: [184, 168, 38, 38]
             bakery: [732, 168, 38, 38]
-            bank: [138, 168, 38, 36]
+            pastry: [732, 168, 38, 38]
+            chocolate: [732, 168, 38, 38]
+            bank: [138, 168, 38, 38]
             bar: [414, 168, 38, 38]
+            pub: [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]
+            battlefield: [324, 710, 38, 38]
+            bbq: [738, 710, 38, 38]
             beach: [828, 84, 38, 38]
-            beach-resort: [734, 210, 38, 38]
+            beach-resort: [232, 710, 38, 38]
+            beach_resort: [232, 710, 38, 38]
             beer-garden: [458, 210, 38, 38]
+            biergarten: [458, 210, 38, 38]
+            brewery: [458, 210, 38, 38]
             bench: [630, 0, 38, 38]
             bicycle-parking: [828, 126, 38, 38]
             bike-shop: [46, 168, 38, 38]
+            bicycle: [46, 168, 38, 38]
+            bicycle_rental: [46, 168, 38, 38]
+            bike: [46, 168, 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]
+            ferry_terminal: [906, 0, 38, 38]
+            ferry-boat: [906, 0, 38, 38]
+            ferry: [906, 0, 38, 38]
+            boat-ramp: [276, 84, 38, 38]
+            slipway: [276, 84, 38, 38]
+            boat_ramp: [276, 84, 38, 38]
+            boat-rental: [92, 814, 38, 38]
+            boat_rental: [92, 814, 38, 38]
             bookstore: [0, 168, 38, 38]
+            books: [0, 168, 38, 38]
             bridge: [92, 126, 38, 38]
             buddhism: [966, 84, 38, 38]
-            building: [598, 168, 34, 34]
+            building: [598, 168, 38, 38]
+            auditorium: [598, 168, 38, 38]
+            terminal: [598, 168, 38, 38]
+            hangar: [598, 168, 38, 38]
+            retirement_home: [598, 168, 38, 38]
+            manor: [598, 168, 38, 38]
+            recreation_center: [598, 168, 38, 38]
+            apartments: [598, 168, 38, 38]
             burger: [320, 210, 38, 38]
+            fast_food: [320, 210, 38, 38]
             bus-station: [860, 0, 38, 38]
+            bus_stop: [860, 0, 38, 38]
+            bus_station: [860, 0, 38, 38]
             butcher: [46, 84, 38, 38]
             campground: [0, 126, 38, 38]
+            camp_site: [0, 126, 38, 38]
+            caravan_site: [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]
+            candy: [182, 210, 38, 38]
+            confectionery: [182, 210, 38, 38]
+            capital-l: [652, 814, 16, 16]
+            capital-m: [632, 814, 12, 12]
+            capital-s: [612, 814, 10, 10]
+            capital-xl: [676, 814, 20, 20]
+            capital-xs: [598, 814, 8, 8]
             car-dealership: [964, 126, 38, 38]
-            caravan-site: [964, 210, 38, 38]
+            car: [964, 126, 38, 38]
+            caravan-site: [462, 710, 38, 38]
+            caravan_site: [462, 710, 38, 38]
             castle: [506, 42, 38, 38]
+            fort: [506, 42, 38, 38]
             cemetery: [920, 84, 38, 38]
+            grave_yard: [920, 84, 38, 38]
             church: [414, 126, 38, 38]
             clothing-store: [0, 210, 38, 38]
-            coffee-shop: [686, 168, 38, 36]
+            clothes: [0, 210, 38, 38]
+            chothing-store: [0, 210, 38, 38]
+            "clothesstore": [0, 210, 38, 38]
+            fashion: [0, 210, 38, 38]
+            coffee-shop: [686, 168, 38, 38]
+            cafe: [686, 168, 38, 38]
             college-university: [46, 210, 38, 38]
+            university: [46, 210, 38, 38]
+            college: [46, 210, 38, 38]
             convenience-store: [184, 84, 38, 38]
+            convenience: [184, 84, 38, 38]
+            convenience_store: [184, 84, 38, 38]
+            beverages: [184, 84, 38, 38]
+            county_shield_1char: [848, 418, 72, 72]
+            county_shield_2char: [672, 314, 88, 72]
+            county_shield_3char: [560, 314, 104, 72]
+            county_shield_4char: [416, 314, 136, 72]
+            county_shield_5char: [248, 314, 160, 72]
             courthouse: [446, 0, 38, 38]
-            current-location: [702, 294, 88, 86]
-            dentist: [266, 0, 34, 34]
+            dentist: [266, 0, 38, 38]
             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]
+            department_store: [918, 126, 38, 38]
+            doctors: [224, 0, 38, 38]
+            clinic: [224, 0, 38, 38]
+            dog-park: [646, 710, 38, 38]
+            dog_park: [646, 710, 38, 38]
+            dog_run: [646, 710, 38, 38]
+            dog-run: [646, 710, 38, 38]
+            dot-black: [506, 814, 38, 38]
+            dot-white: [460, 814, 38, 38]
             drinking-water: [412, 210, 38, 38]
             dry-cleaning: [138, 84, 38, 38]
+            dry_cleaning: [138, 84, 38, 38]
             electronics-store: [782, 126, 38, 38]
+            electronics: [782, 126, 38, 38]
+            computer: [782, 126, 38, 38]
             factory: [552, 168, 38, 38]
+            industrial: [552, 168, 38, 38]
+            chimney: [552, 168, 38, 38]
+            sub_station: [552, 168, 38, 38]
+            substation: [552, 168, 38, 38]
+            wastewater_plant: [552, 168, 38, 38]
+            works: [552, 168, 38, 38]
+            water_works: [552, 168, 38, 38]
+            plant: [552, 168, 38, 38]
+            generator: [552, 168, 38, 38]
             fire-station: [400, 0, 38, 38]
-            firepit: [92, 252, 38, 38]
-            fishing-area: [0, 252, 38, 38]
+            fire_station: [400, 0, 38, 38]
+            firepit: [600, 710, 38, 38]
+            fishing-area: [508, 710, 38, 38]
+            fishing_area: [508, 710, 38, 38]
             fitness: [0, 84, 38, 38]
+            gym: [0, 84, 38, 38]
+            fitness_center: [0, 84, 38, 38]
             flower-shop: [368, 126, 38, 38]
+            florist: [368, 126, 38, 38]
             forest: [228, 210, 38, 38]
+            conservation: [228, 210, 38, 38]
+            nature_reserve: [228, 210, 38, 38]
             fountain: [506, 126, 38, 38]
             garden: [874, 84, 38, 38]
-            gas: [736, 252, 38, 38]
+            gas: [230, 814, 38, 38]
+            gas_canister: [230, 814, 38, 38]
             gas-station: [136, 210, 38, 38]
-            generic: [46, 294, 38, 38]
-            geyser: [688, 210, 38, 38]
+            fuel: [136, 210, 38, 38]
+            generic: [552, 814, 38, 38]
+            subway_entrance: [552, 814, 38, 38]
+            generic_shield_1char: [592, 510, 72, 72]
+            generic_shield_2char: [488, 510, 98, 72]
+            generic_shield_3char: [348, 510, 132, 72]
+            generic_shield_4char: [188, 510, 152, 72]
+            generic_shield_5char: [0, 510, 180, 72]
+            geyser: [186, 710, 38, 38]
             gift-shop: [322, 126, 38, 38]
+            gift: [322, 126, 38, 38]
             golf-course: [598, 84, 38, 38]
+            golf_course: [598, 84, 38, 38]
             government-building: [322, 168, 38, 38]
+            townhall: [322, 168, 38, 38]
+            public_building: [322, 168, 38, 38]
+            embassy: [322, 168, 38, 38]
             grocery-store: [736, 126, 38, 38]
-            harbor-marina: [276, 168, 40, 38]
+            supermarket: [736, 126, 38, 38]
+            health_food: [736, 126, 38, 38]
+            greengrocer: [736, 126, 38, 38]
+            harbor-marina: [276, 168, 38, 38]
+            marina: [276, 168, 38, 38]
+            harbor: [276, 168, 38, 38]
+            harbor_marina: [276, 168, 38, 38]
+            dock: [276, 168, 38, 38]
+            mooring: [276, 168, 38, 38]
             hardware-store: [966, 42, 38, 38]
+            hardware: [966, 42, 38, 38]
+            doityourself: [966, 42, 38, 38]
+            paint: [966, 42, 38, 38]
             historic-site: [276, 126, 38, 38]
-            hospital: [182, 0, 34, 34]
+            hospital: [182, 0, 38, 38]
             hot-spring: [460, 84, 38, 38]
+            hot_spring: [460, 84, 38, 38]
             hotel: [814, 0, 38, 38]
-            hunting: [642, 210, 38, 38]
+            motel: [814, 0, 38, 38]
+            hostel: [814, 0, 38, 38]
+            hunting: [140, 710, 38, 38]
             ice-cream-shop: [504, 210, 38, 38]
-            information: [596, 210, 38, 36]
+            ice_cream: [504, 210, 38, 38]
+            information: [96, 710, 38, 38]
+            info: [96, 710, 38, 38]
             jewelry-store: [828, 42, 38, 38]
+            jewelry: [828, 42, 38, 38]
+            jewelry_store: [828, 42, 38, 38]
             landmark: [354, 0, 38, 38]
+            memorial: [354, 0, 38, 38]
+            monument: [354, 0, 38, 38]
+            wayside_shrine: [354, 0, 38, 38]
+            tower: [354, 0, 38, 38]
+            beacon: [354, 0, 38, 38]
             laundry: [782, 42, 38, 38]
+            dry_cleaning: [782, 42, 38, 38]
             library: [0, 0, 38, 38]
             light-rail: [768, 0, 38, 38]
+            light_rail: [768, 0, 38, 38]
+            tram_stop: [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]
+            alcohol: [690, 126, 38, 38]
+            liquor: [690, 126, 38, 38]
             mall: [736, 42, 38, 38]
             market: [690, 42, 38, 38]
+            variety_store: [690, 42, 38, 38]
+            boutique: [690, 42, 38, 38]
+            dairy: [690, 42, 38, 38]
+            retail: [690, 42, 38, 38]
             mine: [874, 42, 38, 38]
             mobile-phone-shop: [598, 42, 38, 38]
+            mobile_phone: [598, 42, 38, 38]
             mosque: [90, 0, 38, 38]
-            motorcycle: [368, 252, 38, 38]
+            motorcycle: [876, 710, 38, 38]
             mountain: [368, 84, 38, 38]
+            peak: [368, 84, 38, 38]
             movie-theatre: [962, 168, 38, 38]
+            cinema: [962, 168, 38, 38]
+            movie-theater: [962, 168, 38, 38]
             museum: [230, 126, 38, 38]
+            observatory: [230, 126, 38, 38]
             music-store: [460, 42, 38, 38]
+            music: [460, 42, 38, 38]
+            musical_instrument: [460, 42, 38, 38]
             newsstand: [414, 42, 38, 38]
-            observatory: [690, 252, 38, 38]
+            kiosk: [414, 42, 38, 38]
+            newsagent: [414, 42, 38, 38]
+            observatory: [184, 814, 38, 38]
             office: [782, 84, 38, 38]
+            insurance: [782, 84, 38, 38]
+            company: [782, 84, 38, 38]
             optical-shop: [368, 42, 38, 38]
-            outdoor: [828, 252, 38, 38]
+            optician: [368, 42, 38, 38]
+            optical_shop: [368, 42, 38, 38]
+            outdoor: [322, 814, 38, 38]
             park: [460, 126, 38, 38]
-            parking: [874, 126, 38, 36]
+            parking: [874, 126, 38, 38]
             performing-arts: [778, 168, 38, 38]
+            theater: [778, 168, 38, 38]
+            theatre: [778, 168, 38, 38]
             pet-store: [322, 42, 38, 38]
+            pet: [322, 42, 38, 38]
+            pet-service: [322, 42, 38, 38]
+            pet_store: [322, 42, 38, 38]
             pharmacy: [92, 84, 38, 38]
+            chemist: [92, 84, 38, 38]
             photography-lab: [276, 42, 38, 38]
-            picnic-spot: [322, 252, 38, 38]
+            photo_studio: [276, 42, 38, 38]
+            photography_lab: [276, 42, 38, 38]
+            photographer: [276, 42, 38, 38]
+            picnic-spot: [830, 710, 38, 38]
+            picnic_site: [830, 710, 38, 38]
+            picnic_table: [830, 710, 38, 38]
             pier: [722, 0, 38, 38]
             playground: [552, 42, 38, 38]
             police: [308, 0, 38, 38]
             pool: [322, 84, 38, 38]
+            swimming_pool: [322, 84, 38, 38]
             post-office: [506, 168, 38, 38]
-            quarry: [920, 42, 40, 38]
-            ranger-station: [276, 252, 38, 38]
+            post_office: [506, 168, 38, 38]
+            quarry: [920, 42, 38, 38]
+            mineshaft: [920, 42, 38, 38]
+            adit: [920, 42, 38, 38]
+            ranger-station: [784, 710, 38, 38]
+            ranger_station: [784, 710, 38, 38]
             real-estate: [230, 42, 38, 38]
-            recreation-track: [460, 252, 38, 38]
+            estate_agent: [230, 42, 38, 38]
+            real_estate: [230, 42, 38, 38]
+            recreation-track: [968, 710, 38, 38]
+            recreation_track: [968, 710, 38, 38]
             recycling-facility: [184, 42, 38, 38]
+            recycling: [184, 42, 38, 38]
             rental-car: [676, 0, 38, 38]
+            car_rental: [676, 0, 38, 38]
+            car_sharing: [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]
+            deli: [274, 210, 38, 38]
             ruin: [584, 0, 38, 38]
+            ruins: [584, 0, 38, 38]
+            archaeological_site: [584, 0, 38, 38]
             salon-barber: [138, 42, 38, 38]
+            hairdresser: [138, 42, 38, 38]
+            salon: [138, 42, 38, 38]
+            beauty_salon: [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]
+            kindergarten: [736, 84, 38, 38]
+            scuba-diving: [276, 814, 38, 38]
+            scuba_diving: [276, 814, 38, 38]
+            dive_centre: [276, 814, 38, 38]
             shoe-store: [644, 42, 38, 38]
-            shower: [918, 210, 38, 38]
+            shoes: [644, 42, 38, 38]
+            shoe_store: [644, 42, 38, 38]
+            shower: [416, 710, 38, 38]
             ski-area: [552, 126, 38, 38]
-            slipway: [872, 210, 38, 38]
+            slipway: [370, 710, 38, 38]
             soccer-field: [552, 84, 38, 38]
             spiritual-center: [460, 168, 38, 38]
+            spiritual_center: [460, 168, 38, 38]
+            place_of_worship: [460, 168, 38, 38]
+            wayside_chapel: [460, 168, 38, 38]
             sporting-goods-shop: [92, 42, 38, 38]
+            sporting_goods: [92, 42, 38, 38]
+            sports: [92, 42, 38, 38]
+            outdoor: [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]
+            summer-camp: [0, 814, 38, 38]
+            summer_camp: [0, 814, 38, 38]
+            swimming-area: [554, 710, 38, 38]
+            swimming_area: [554, 710, 38, 38]
             synagogue: [44, 0, 38, 38]
             tailor-shop: [46, 42, 38, 38]
-            telescope: [644, 252, 38, 38]
+            tailor: [46, 42, 38, 38]
+            telescope: [138, 814, 38, 38]
             tennis: [598, 126, 38, 38]
             theme-park: [184, 126, 38, 38]
+            theme_park: [184, 126, 38, 38]
+            miniature_golf: [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]
+            townspot-l: [862, 814, 16, 16]
+            townspot-l-rev: [756, 814, 16, 16]
+            townspot-m: [842, 814, 12, 12]
+            townspot-m-rev: [736, 814, 12, 12]
+            townspot-s: [824, 814, 10, 10]
+            townspot-s-rev: [718, 814, 10, 10]
+            townspot-xl: [886, 814, 20, 20]
+            townspot-xl-rev: [780, 814, 20, 20]
+            townspot-xs: [808, 814, 8, 8]
+            townspot-xs-rev: [704, 814, 6, 6]
             toy-game-store: [0, 42, 38, 38]
-            traffic-signal: [92, 210, 36, 34]
-            trailhead: [874, 252, 38, 38]
+            toys: [0, 42, 38, 38]
+            baby_goods: [0, 42, 38, 38]
+            traffic-signal: [92, 210, 38, 38]
+            traffic_signals: [92, 210, 38, 38]
+            trailhead: [368, 814, 38, 38]
             train-station: [492, 0, 38, 38]
-            tree: [920, 252, 38, 38]
+            station: [492, 0, 38, 38]
+            train-staion: [492, 0, 38, 38]
+            tree: [414, 814, 38, 38]
             veterinarian: [136, 0, 38, 38]
-            view-point: [870, 168, 40, 38]
-            vineyard: [230, 168, 40, 38]
+            pet_care: [136, 0, 38, 38]
+            veterinary: [136, 0, 38, 38]
+            view-point: [870, 168, 38, 38]
+            viewpoint: [870, 168, 38, 38]
+            view_point: [870, 168, 38, 38]
+            vista: [870, 168, 38, 38]
+            vineyard: [230, 168, 38, 38]
             volcano: [230, 84, 38, 38]
-            water-tower: [414, 252, 38, 38]
-            waterfall: [184, 252, 38, 38]
-            waterpark: [780, 210, 38, 38]
+            water-tower: [922, 710, 38, 38]
+            water_tower: [922, 710, 38, 38]
+            waterfall: [692, 710, 38, 38]
+            waterpark: [278, 710, 38, 38]
+            water_park: [278, 710, 38, 38]
             wine-bar: [366, 210, 38, 38]
             winery: [640, 168, 38, 38]
+            wine: [640, 168, 38, 38]
             zoo: [138, 126, 38, 38]
+            #
+            ux-current-location: [294, 856, 88, 88]
+            ux-locate-off: [628, 856, 72, 72]
+            ux-locate-on: [548, 856, 72, 72]
+            ux-route-arrow: [0, 856, 128, 128]
+            ux-route-start: [214, 856, 72, 92]
+            ux-route-stop: [136, 856, 72, 92]
+            ux-search-active: [388, 856, 72, 108]
+            ux-search-inactive: [468, 856, 72, 108]
+            #
+            # HACK: not currently in source sprite sheet (capital-xl)
+            ux-transit-stop: [676, 814, 20, 20]
 
     building-grid:
         url: images/building-grid.gif
@@ -406,28 +714,71 @@ 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
+        url:  https://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson?api_key=vector-tiles-VyYjZGS
         # 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
+        #url:  https://tile.dev.mapzen.com/mapzen/vector/v1/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
+        url: https://tile.mapzen.com/mapzen/terrain/v1/normal/{z}/{x}/{y}.png
         max_zoom: 15
 
+#    # 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
+#    # Dashed route line
+#    mz_dash_line:
+#        type: GeoJSON
+#        url: https://gist.githubusercontent.com/anonymous/d73b851c64c3e5fbfc2754aa32f44c10/raw/938ae435776e176919c4797bed1465a92e403ef3/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
+
 styles:
     highlight:
         base: lines
@@ -615,68 +966,10 @@ styles:
                         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]
+        lighting: false
         raster: normal
         shaders:
             uniforms:
@@ -869,14 +1162,200 @@ styles:
     polygons_transparent:
         base: polygons
         blend: overlay
-
+    ux-route-line-overlay:
+        base: lines
+        blend: overlay
+        blend_order: 0
+    ux-route-line-dash-overlay:
+        base: lines
+        blend: overlay
+        blend_order: 0
+        dash: [2, 1]
+    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
 
 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_dash:
+        data: { source: mz_dash_line }
+        draw:
+            ux-route-line-dash-overlay:
+                color: '#06a6d4'
+                order: 500
+                width: [[2,2px],[5,2.5px],[11,3px],[16,7px],[17,9px]]
+    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: mapzen}
         draw:
             terrain:
-                order: function() { return feature.sort_key; }
+                order: function() { return feature.sort_rank; }
                 color: [1.0, 1.0, 1.0]
 
     water:
@@ -884,13 +1363,13 @@ layers:
         draw:
             polygons:
                 #interactive: true
-                order: function() { return feature.sort_key; }
+                order: function() { return feature.sort_rank; }
                 #color: [0.608,0.925,0.965]
         later:
             filter: { $zoom: { min: 12 } }
             draw:
                 polygons:
-                    order: function() { return feature.sort_key + 1; }
+                    order: function() { return feature.sort_rank + 1; }
                     #color: [0.608,0.925,0.965]
 
         lakes:
@@ -900,7 +1379,7 @@ layers:
                 # 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: 0 },  area: { min: 40000000000 } }
                     - { $zoom: { min: 2 },  area: { min: 20000000000 } }
                     # some weird natural earth scale set transition
                     - { $zoom: { min: 3 },  area: { min: 80000000000 } }
@@ -925,7 +1404,7 @@ layers:
             filter: { kind: playa, $zoom: {min: 6} }
             draw:
                 dashedline:
-                    order: function() { return feature.sort_key; }
+                    order: function() { return feature.sort_rank; }
                     color: grey
                     width: 1px
                 polygons_transparent:
@@ -941,26 +1420,26 @@ layers:
                 polygons:
                     color: [0.432,0.890,0.960]
         water-boundary-ocean-early:
-            filter: { boundary: yes, kind: ocean, $zoom: {min: 1, max: 17} }
+            filter: { boundary: true, kind: ocean, $zoom: {min: 1, max: 17} }
             draw:
                 lines:
-                    order: function() { return feature.sort_key; }
+                    order: function() { return feature.sort_rank; }
                     color: [0.431,0.806,0.914]
                     width: 1px
                     join: round
         water-boundary-ocean-late:
-            filter: { boundary: yes, kind: ocean, $zoom: {min: 17} }
+            filter: { boundary: true, kind: ocean, $zoom: {min: 17} }
             draw:
                 lines:
-                    order: function() { return feature.sort_key; }
+                    order: function() { return feature.sort_rank; }
                     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: { boundary: true, not: { kind: [ocean,playa] }, $zoom: { min: 8 } }
             filter:
                 all:
-                    - boundary: yes
+                    - boundary: true
                     - not: { kind: [ocean,playa] }
                     - $zoom: { min: 8}
                 # WARNING: any area filters here must match the area filters in the lakes layer
@@ -984,7 +1463,7 @@ layers:
                     - { $zoom: { min: 15 } }
             draw:
                 lines:
-                    order: function() { return feature.sort_key; }
+                    order: function() { return feature.sort_rank; }
                     # color: [0.625,0.806,0.822]
                     color: [0.431,0.806,0.914]
                     width: 1px
@@ -1011,7 +1490,7 @@ layers:
             filter: { kind: [river,canal,stream,dam,ditch,drain], $zoom: { min: 11 }, not: { is_tunnel: true } }
             draw:
                 lines:
-                    order: function() { return feature.sort_key; }
+                    order: function() { return feature.sort_rank; }
                     interactive: true
                     color: [[10,[0.472,0.834,0.890]],[14,[0.511,0.877,0.930]]]
                     # color: [0.592,0.929,0.961]
@@ -1030,19 +1509,20 @@ layers:
             intermittent:
                 filter:
                     any:
-                        - intermittent: yes
+                        - intermittent: true
                         - kind: drain
                 draw:
                     lines:
                         visible: false
                     dots-lines:
                         interactive: true
-                        order: function() { return feature.sort_key; }
+                        order: function() { return feature.sort_rank; }
                         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] }
+        visible: *text_visible_water_labels
         filter:
             all:
                 - name: true
@@ -1078,7 +1558,7 @@ layers:
         draw:
             lines:
                 interactive: true
-                order: function() { return feature.sort_key || 275; }
+                order: function() { return feature.sort_rank || 275; }
         railway:
             filter: { kind: [railway,train] }
             draw:
@@ -1105,7 +1585,7 @@ layers:
         draw:
             lines:
                 interactive: true
-                order: function() { return feature.sort_key; }
+                order: function() { return feature.sort_rank; }
                 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:
@@ -1119,18 +1599,18 @@ layers:
             draw:
                 lines:
                     # let roads sort themselves past zoom 14
-                    order: function() { return feature.sort_key; }
+                    order: function() { return feature.sort_rank; }
                     # but give them all the same outline
                     outline:
                         order: 354
 
             bridges-tunnels:
-                filter: { any: [is_bridge: yes, is_tunnel: yes] }
+                filter: { any: [is_bridge: true, is_tunnel: true] }
                 draw:
                     lines:
                         outline:
                             # except bridges and tunnels, their outlines should also self-sort
-                            order: function() { return feature.sort_key || 305; }
+                            order: function() { return feature.sort_rank || 305; }
 
     roads:
         data: { source: mapzen, layer: roads }
@@ -1140,7 +1620,7 @@ layers:
                 interactive: true
                 #color: black
                 width: 1px
-                order: function() { return feature.sort_key; }
+                order: function() { return feature.sort_rank; }
                 # but give them all the same outline
                 outline:
                     order: 352
@@ -1156,15 +1636,15 @@ layers:
             draw:
                 lines:
                     outline:
-                        order: function() { return feature.sort_key; }
+                        order: function() { return feature.sort_rank; }
         bridges-tunnels:
-            filter: { any: [is_bridge: yes, is_tunnel: yes] }
+            filter: { any: [is_bridge: true, is_tunnel: true] }
             draw:
                 lines:
                     #cap: butt
                     outline:
                         # except bridges and tunnels, their outlines should also self-sort
-                        order: function() { return feature.sort_key; }
+                        order: function() { return feature.sort_rank; }
 
         # default outlines starting at zoom 16
         default-outline-width:
@@ -1220,7 +1700,7 @@ layers:
                 #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
+                filter: { is_link: true } # on- and off-ramps, etc
                 draw:
                     lines:
                         #color: *highway_link1
@@ -1235,78 +1715,78 @@ layers:
                         lines:
                             order: 352
                 tunnel-link:
-                    filter: {is_tunnel: yes, $zoom: {min: 13} }
+                    filter: {is_tunnel: true, $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} }
+                filter: {is_tunnel: true, $zoom: {min: 13} }
                 draw:
                     #dashedTunnel:
                     #    color: blue
-                    #    order: function() { return (feature.sort_key - 1); }
+                    #    order: function() { return (feature.sort_rank - 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}
+                filter: {is_bridge: true}
                 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-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
@@ -1315,7 +1795,7 @@ layers:
                         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; } }
+                        #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
@@ -1329,7 +1809,7 @@ layers:
                         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; } }
+                        #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
@@ -1401,7 +1881,7 @@ layers:
                     outline:
                         width: [[12, 0px], [13, .5px], [15, 1px], [17, 2px]]
             trunk_primary:
-                filter: { highway: [trunk, primary] }
+                filter: { kind_detail: [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]]]
@@ -1415,13 +1895,13 @@ layers:
                         lines:
                             order: 352
                             outline:
-                                order: function() { return feature.sort_key + 2; }
+                                order: function() { return feature.sort_rank + 2; }
                     primary:
                         filter: { kind: [primary] }
                         draw:
                             lines:
                                 outline:
-                                    order: function() { return feature.sort_key + 1; }
+                                    order: function() { return feature.sort_rank + 1; }
                 routes:
                     filter: { ref: true }
                     draw:
@@ -1440,7 +1920,7 @@ layers:
                         filter: { $zoom: { max: 16 } }
                         draw:
                             lines:
-                                order: function() { return feature.sort_key + 2; }
+                                order: function() { return feature.sort_rank + 2; }
                                 outline:
                                     order: 353
                     primary-route-in-green:
@@ -1462,11 +1942,11 @@ layers:
                     #                 color: [1.0,1.0,1.0]
                     #                 width: 2px
                     tunnel:
-                        filter: {is_tunnel: yes, $zoom: {min: 13} }
+                        filter: {is_tunnel: true, $zoom: {min: 13} }
                         draw:
                             #dashedTunnel:
                             #    color: blue
-                            #    order: function() { return (feature.sort_key - 1); }
+                            #    order: function() { return (feature.sort_rank - 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]]
@@ -1476,9 +1956,9 @@ layers:
                         filter: { $zoom: [14] }
                         draw:
                             text-blend-order:
-                                priority: 53
+                                priority: 51
                                 visible: *text_visible_trunk_primary_e2
-                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                #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
@@ -1487,9 +1967,9 @@ layers:
                         filter: { $zoom: [15] }
                         draw:
                             text-blend-order:
-                                priority: 53
+                                priority: 51
                                 visible: *text_visible_trunk_primary
-                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                #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
@@ -1499,9 +1979,9 @@ layers:
                         filter: { $zoom: { min: 16 } }
                         draw:
                             text-blend-order:
-                                priority: 53
+                                priority: 51
                                 visible: *text_visible_trunk_primary
-                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                #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
@@ -1511,9 +1991,9 @@ layers:
                         filter: { $zoom: [17,18] }
                         draw:
                             text-blend-order:
-                                priority: 53
+                                priority: 51
                                 visible: *text_visible_trunk_primary
-                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                #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
@@ -1523,9 +2003,9 @@ layers:
                         filter: { $zoom: { min: 19 } }
                         draw:
                             text-blend-order:
-                                priority: 53
+                                priority: 51
                                 visible: *text_visible_trunk_primary
-                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                #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
@@ -1541,7 +2021,7 @@ layers:
                                 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} }
+                        filter: {is_tunnel: true, $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]]]
@@ -1565,9 +2045,9 @@ layers:
                         $zoom: [11]
                     draw:
                         text-blend-order:
-                            priority: 53
+                            priority: 51
                             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; } }
+                            #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
@@ -1577,9 +2057,9 @@ layers:
                         $zoom: [12]
                     draw:
                         text-blend-order:
-                            priority: 53
+                            priority: 51
                             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; } }
+                            #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
@@ -1589,9 +2069,9 @@ layers:
                         $zoom: [13]
                     draw:
                         text-blend-order:
-                            priority: 53
+                            priority: 51
                             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; } }
+                            #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
@@ -1601,9 +2081,9 @@ layers:
                         $zoom: [14]
                     draw:
                         text-blend-order:
-                            priority: 53
+                            priority: 51
                             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; } }
+                            #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
@@ -1612,9 +2092,9 @@ layers:
                     filter: { $zoom: [15] }
                     draw:
                         text-blend-order:
-                            priority: 53
+                            priority: 51
                             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; } }
+                            #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
@@ -1623,9 +2103,9 @@ layers:
                     filter: { $zoom: [16] }
                     draw:
                         text-blend-order:
-                            priority: 53
+                            priority: 51
                             visible: *text_visible_trunk_primary
-                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            #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
@@ -1635,9 +2115,9 @@ layers:
                     filter: { $zoom: [17] }
                     draw:
                         text-blend-order:
-                            priority: 53
+                            priority: 51
                             visible: *text_visible_trunk_primary
-                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            #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
@@ -1647,16 +2127,16 @@ layers:
                     filter: { $zoom: { min: 18 } }
                     draw:
                         text-blend-order:
-                            priority: 53
+                            priority: 51
                             visible: *text_visible_trunk_primary
-                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            #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
+                filter: { is_link: true } # 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]]]
@@ -1665,7 +2145,7 @@ layers:
                             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} }
+                filter: {is_tunnel: true, $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]]]
@@ -1673,7 +2153,7 @@ layers:
                             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 }
+                filter: { kind_detail: 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]]]
@@ -1687,7 +2167,7 @@ layers:
                         lines:
                             order: 352
                             outline:
-                                order: 353 #function() { return feature.sort_key + 2; }
+                                order: 353 #function() { return feature.sort_rank + 2; }
                 routes:
                     filter: { ref: true, $zoom: { min: 10} }
                     draw:
@@ -1701,7 +2181,7 @@ layers:
                         filter: { $zoom: { max: 15 } }
                         draw:
                             lines:
-                                order: function() { return feature.sort_key + 2; }
+                                order: function() { return feature.sort_rank + 2; }
                                 outline:
                                     order: 353
                     secondary-route-in-green:
@@ -1713,7 +2193,7 @@ layers:
                                 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} }
+                        filter: {is_tunnel: true, $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]]]
@@ -1724,9 +2204,9 @@ layers:
                         filter: { $zoom: [13] }
                         draw:
                             text-blend-order:
-                                priority: 54
+                                priority: 56
                                 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; } }
+                                #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
@@ -1735,9 +2215,9 @@ layers:
                         filter: { $zoom: [14] }
                         draw:
                             text-blend-order:
-                                priority: 54
+                                priority: 56
                                 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; } }
+                                #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
@@ -1746,9 +2226,9 @@ layers:
                         filter: { $zoom: { min: 15 } }
                         draw:
                             text-blend-order:
-                                priority: 54
+                                priority: 56
                                 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; } }
+                                #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
@@ -1758,9 +2238,9 @@ layers:
                         filter: { $zoom: { min: 16 } }
                         draw:
                             text-blend-order:
-                                priority: 54
+                                priority: 56
                                 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; } }
+                                #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
@@ -1777,9 +2257,9 @@ layers:
                         filter: { $zoom: { min: 13 } }
                         draw:
                             text-blend-order:
-                                priority: 54
+                                priority: 56
                                 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; } }
+                                #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 }
@@ -1787,9 +2267,9 @@ layers:
                         filter: { $zoom: { min: 17 } }
                         draw:
                             text-blend-order:
-                                priority: 54
+                                priority: 56
                                 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; } }
+                                #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 }
@@ -1810,9 +2290,9 @@ layers:
                         $zoom: [13]
                     draw:
                         text-blend-order:
-                            priority: 54
+                            priority: 56
                             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; } }
+                            #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
@@ -1822,9 +2302,9 @@ layers:
                         $zoom: [14]
                     draw:
                         text-blend-order:
-                            priority: 54
+                            priority: 56
                             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; } }
+                            #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
@@ -1834,9 +2314,9 @@ layers:
                         $zoom: [15]
                     draw:
                         text-blend-order:
-                            priority: 54
+                            priority: 56
                             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; } }
+                            #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
@@ -1845,9 +2325,9 @@ layers:
                     filter: { $zoom: { min: 16, max: 18 } }
                     draw:
                         text-blend-order:
-                            priority: 54
+                            priority: 56
                             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; } }
+                            #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
@@ -1856,16 +2336,16 @@ layers:
                     filter: { $zoom: { min: 17 } }
                     draw:
                         text-blend-order:
-                            priority: 54
+                            priority: 56
                             visible: *text_visible_secondary
                             #text_source: ref
-                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            #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] }
+                filter: { kind_detail: [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]]]
@@ -1879,7 +2359,7 @@ layers:
                         lines:
                             order: 352
                             outline:
-                                order: function() { return feature.sort_key + 3; }
+                                order: function() { return feature.sort_rank + 3; }
                 routes:
                     filter: { ref: true, $zoom: { min: 12} }
                     draw:
@@ -1893,18 +2373,18 @@ layers:
                         filter: { $zoom: { max: 15 } }
                         draw:
                             lines:
-                                order: function() { return feature.sort_key + 3; }
+                                order: function() { return feature.sort_rank + 3; }
                                 outline:
                                     order: 353
                     tunnel:
-                        filter: {is_tunnel: yes, $zoom: {min: 13} }
+                        filter: {is_tunnel: true, $zoom: {min: 13} }
                         draw:
                             lines:
                                 color: *major_tunnel1
                                 outline:
                                     color: *major_tunnel_casing1
                 link:
-                    filter: { is_link: yes } # on- and off-ramps, etc
+                    filter: { is_link: true } # 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]]]
@@ -1930,9 +2410,9 @@ layers:
                         filter: { $zoom: { min: 13 } }
                         draw:
                             text-blend-order:
-                                priority: 55
+                                priority: 57
                                 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; } }
+                                #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 }
@@ -1940,9 +2420,9 @@ layers:
                         filter: { $zoom: { min: 17 } }
                         draw:
                             text-blend-order:
-                                priority: 55
+                                priority: 57
                                 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; } }
+                                #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 }
@@ -1962,9 +2442,9 @@ layers:
                     filter: { $zoom: [13] }
                     draw:
                         text-blend-order:
-                            priority: 55
+                            priority: 57
                             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; } }
+                            #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
@@ -1973,9 +2453,9 @@ layers:
                     filter: { $zoom: [14] }
                     draw:
                         text-blend-order:
-                            priority: 55
+                            priority: 57
                             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; } }
+                            #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
@@ -1984,9 +2464,9 @@ layers:
                     filter: { $zoom: [15] }
                     draw:
                         text-blend-order:
-                            priority: 55
+                            priority: 57
                             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; } }
+                            #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
@@ -1995,9 +2475,9 @@ layers:
                     filter: { $zoom: [16] }
                     draw:
                         text-blend-order:
-                            priority: 55
+                            priority: 57
                             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; } }
+                            #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
@@ -2006,9 +2486,9 @@ layers:
                     filter: { $zoom: { min: 17, max: 18 } }
                     draw:
                         text-blend-order:
-                            priority: 55
+                            priority: 57
                             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; } }
+                            #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
@@ -2017,15 +2497,15 @@ layers:
                     filter: { $zoom: { min: 18 } }
                     draw:
                         text-blend-order:
-                            priority: 55
+                            priority: 57
                             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; } }
+                            #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] } }
+            filter: { kind: minor_road, not: { kind_detail: service } }
             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]]]
@@ -2041,7 +2521,7 @@ layers:
                         outline:
                             order: 351
             motor_vehicle_no:
-                filter: { highway: unclassified, motor_vehicle: no }
+                filter: { kind_detail: unclassified, motor_vehicle: no }
                 draw:
                     lines:
                         visible: false
@@ -2065,7 +2545,7 @@ layers:
                     filter: { $zoom: { min: 15 } }
                     draw:
                         text-blend-order:
-                            priority: 56
+                            priority: 59
                             visible: *text_visible_minor_road_e
                             text_source: name
                             font:
@@ -2075,7 +2555,7 @@ layers:
                     filter: { $zoom: { min: 17 } }
                     draw:
                         text-blend-order:
-                            priority: 56
+                            priority: 59
                             visible: *text_visible_minor_road_e
                             text_source: name
                             font:
@@ -2111,14 +2591,14 @@ layers:
             #                 width: [[11, 1px], [16, 0px], [17, 1.5px]]
 
             tunnel:
-                filter: {is_tunnel: yes, $zoom: {min: 13} }
+                filter: {is_tunnel: true, $zoom: {min: 13} }
                 draw:
                     lines:
                         color: *minor_tunnel1
                         outline:
                             color: *minor_tunnel_casing1
             minor_road_bridge:
-                filter: { is_bridge: yes }
+                filter: { is_bridge: true }
                 draw:
                     lines:
                         cap: round
@@ -2128,7 +2608,7 @@ layers:
                 filter: { $zoom: 15 }
                 draw:
                     text-blend-order:
-                        priority: 56
+                        priority: 59
                         visible: *text_visible_minor_road_e
                         text_source: name
                         font:
@@ -2139,7 +2619,7 @@ layers:
                 filter: { $zoom: 16 }
                 draw:
                     text-blend-order:
-                        priority: 56
+                        priority: 59
                         visible: *text_visible_minor_road_e
                         text_source: name
                         font:
@@ -2150,7 +2630,7 @@ layers:
                 filter: { $zoom: { min: 17, max: 18 } }
                 draw:
                     text-blend-order:
-                        priority: 56
+                        priority: 59
                         visible: *text_visible_minor_road_e
                         text_source: name
                         font:
@@ -2161,7 +2641,7 @@ layers:
                 filter: { $zoom: { min: 18 } }
                 draw:
                     text-blend-order:
-                        priority: 56
+                        priority: 59
                         visible: *text_visible_minor_road
                         text_source: name
                         font:
@@ -2169,7 +2649,7 @@ layers:
                             size: 13px
                             stroke: { color: [0.969,0.973,0.973], width: 4 }
         service_road:
-            filter: { kind: minor_road, highway: service }
+            filter: { kind: minor_road, kind_detail: 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]]]
@@ -2187,7 +2667,7 @@ layers:
                 labels-service-in-green:
                     draw:
                         text-blend-order:
-                            priority: 57
+                            priority: 60
                             visible: *text_visible_service_road
                             text_source: name
                             font:
@@ -2247,7 +2727,7 @@ layers:
                 filter: { $zoom: 17 }
                 draw:
                     text-blend-order:
-                        priority: 57
+                        priority: 60
                         visible: *text_visible_service_road
                         text_source: name
                         font:
@@ -2259,23 +2739,560 @@ layers:
                 filter: { $zoom: { min: 18 } }
                 draw:
                     text-blend-order:
-                        priority: 57
+                        priority: 60
                         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 }
+
+        shields:
+            filter:
+                $zoom: { min: 6 }
+                #
+                # United State looks great with shield_text alone, but...
+                #
+                #shield_text: true    # some roads don't have shield text, deal with that later
+                #
+                # Europe doesn't have many network relations set, so we could look for either
+                # shield_text or ref (with no shield_text) but...
+                # that makes United States look a bit funky with `(xxx)` and generic shields
+                # showing up in fields of custom state shields like US:CA and US:NY
+                #
+                any:
+                    - shield_text: true    # some roads don't have shield text, deal with that later
+                    - all:
+                        - shield_text: false    # some roads don't have shield text, deal with that later
+                        - ref: true
+                        - kind_detail: [motorway, trunk, primary, secondary, tertiary]
+            # default
+            draw:
+                icons:
+                    # you need to match any custom shield to the vector tile `network` values
+                    sprite: |
+                        function() {
+                            if( feature.shield_text ) {
+                                return ('generic_shield_' + feature.shield_text.length + 'char');
+                            } else {
+                                return ('generic_shield_' + feature.ref.length + 'char');
+                            }
+                        }
+                    sprite_default: generic_shield_5char
+                    priority: 58
+                    repeat_group: shields
+                    repeat_distance: [[8,90px],[10,40px],[13,30px]]
+                    placement: midpoint
+                    placement_min_length_ratio:
+                        - [8, 0.1]
+                        - [9, 0.25]
+                        - [10, 0.25]
+                        - [11, 0.15]
+                        - [12, 1]
+                        - [13, 1.50]
+                        - [14, 2.0]
+                    cull_from_tile: true
+                    visible: false
+                    text:
+                        offset: [0px, -0.5px]
+                        repeat_distance: 200px
+                        anchor: center
+                        text_source: |
+                            function() {
+                                if( feature.shield_text ) {
+                                    return feature.shield_text;
+                                } else {
+                                    return feature.ref;
+                                }
+                            }
+                        font:
+                            family: Montserrat
+                            #fill: [0.308,0.308,0.308]
+                            fill: [0.320,0.320,0.320]
+                            size: [[7,7px],[12,8px],[16,11px]]
+
+            default_priority_highway:
+                filter:
+                    all:
+                        - kind_detail: motorway
+                        - $zoom: { min: 9 }
+                draw:
+                    icons:
+                        priority: 47
+                        #color: yellow
+                        visible: *text_visible_shields
+
+            default_priority_trunk:
+                filter:
+                    all:
+                        - kind_detail: [trunk]
+                        - $zoom: { min: 10 }
+                draw:
+                    icons:
+                        priority: 48
+                        #color: red
+                        visible: *text_visible_shields
+            default_priority_primary:
+                filter:
+                    all:
+                        - kind_detail: [primary]
+                        - $zoom: { min: 12 }
+                draw:
+                    icons:
+                        priority: 49
+                        #color: aqua
+                        visible: *text_visible_shields
+            default_priority_trunk_secondary:
+                filter:
+                    all:
+                        - kind_detail: [secondary]
+                        - $zoom: { min: 12 }
+                draw:
+                    icons:
+                        priority: 53
+                        #color: blue
+                        visible: *text_visible_shields
+            default_priority_trunk_tertiary:
+                filter:
+                    all:
+                        - kind_detail: tertiary
+                        - $zoom: { min: 13 }
+                draw:
+                    icons:
+                        priority: 55
+                        #color: green
+                        visible: *text_visible_shields
+            # not-special:
+            #     filter:
+            #         not: { network: ['US:I','US:US'] }
+            #         $zoom: { max: 9 }
+            #     draw:
+            #         icons:
+            #             visible: false
+            width_1char:
+                filter: |
+                    function() {
+                        if( feature.shield_text ) {
+                            return (feature.shield_text.length === 1)
+                        } else {
+                            return (feature.ref.length === 1)
+                        }
+                    }
+                draw:
+                    icons:
+                        size: [[6,[14px,14px]],[13,[16px,16px]],[16,[18px,18px]]]
+            width_2char:
+                filter: |
+                    function() {
+                        if( feature.shield_text ) {
+                            return (feature.shield_text.length === 2)
+                        } else {
+                            return (feature.ref.length === 2)
+                        }
+                    }
+                draw:
+                    icons:
+                        size: [[6,[18px,14px]],[13,[20px,15px]],[16,[24px,18px]]]
+            width_3char:
+                filter: |
+                    function() {
+                        if( feature.shield_text ) {
+                            return (feature.shield_text.length === 3)
+                        } else {
+                            return (feature.ref.length === 3)
+                        }
+                    }
+                draw:
+                    icons:
+                        size: [[6,[25px,14px]],[13,[27px,15px]],[16,[33px,18px]]]
+            width_4char:
+                filter: |
+                    function() {
+                        if( feature.shield_text ) {
+                            return (feature.shield_text.length === 4)
+                        } else {
+                            return (feature.ref.length === 4)
+                        }
+                    }
+                draw:
+                    icons:
+                        size: [[6,[29px,14px]],[13,[31px,15px]],[16,[38px,18px]]]
+                # London sucks
+                early:
+                    filter: { $zoom: { max: 14 } }
+                    draw:
+                        icons:
+                            visible: false
+            width_5char:
+                filter: |
+                    function() {
+                        if( feature.shield_text ) {
+                            return (feature.shield_text.length === 5)
+                        } else {
+                            return (feature.ref.length === 5)
+                        }
+                    }
+                draw:
+                    icons:
+                        size: [[6,[34px,14px]],[13,[37px,15px]],[16,[45px,18px]]]
+                # London sucks
+                early:
+                    filter: { $zoom: { max: 14 } }
+                    draw:
+                        icons:
+                            visible: false
+            # this is kinda a hack
+            width_longggggg:
+                filter: |
+                    function() {
+                        if( feature.shield_text ) {
+                            return (feature.shield_text.length > 5)
+                        } else {
+                            return (feature.ref.length > 5)
+                        }
+                    }
+                draw:
+                    icons:
+                        visible: false
+            # missing-route-relations:
+            #     filter: { shield_text: false }
+            #     draw:
+            #         lines:
+            #             order: 1000
+            #             color: red
+            #             width: 2px
+            #
+            # Now for the good stuff
+            #
+            legit-shields:
+                filter: { shield_text: true }
+                # draw:
+                #     icons:
+                #         color: red
+                # US Interstate roads
+                US-I:
+                    filter:
+                        network: 'US:I'
+                    draw:
+                        icons:
+                            # you need to match any custom shield to the vector tile `network` values
+                            sprite: function() { return (feature.network + '_' + feature.shield_text.length + 'char'); }
+                            priority: 46
+                            visible: *text_visible_shields
+                            text:
+                                offset: [0px, 0.5px]
+                                font:
+                                    fill: [1.0,1.0,1.0]
+                                    size: [[7,8px],[13,9px],[15,11px]]
+                    width_1char:
+                        filter: function() { return (feature.shield_text.length === 1) }
+                        draw:
+                            icons:
+                                size: [[6,[15px,18px]],[13,[17px,20px]],[15,[22px,25px]]]
+                    width_2char:
+                        filter: function() { return (feature.shield_text.length === 2) }
+                        draw:
+                            icons:
+                                size: [[6,[18px,18px]],[13,[20px,20px]],[15,[25px,25px]]]
+                    width_3char:
+                        filter: function() { return (feature.shield_text.length === 3) }
+                        draw:
+                            icons:
+                                size: [[6,[23px,18px]],[13,[26px,20px]],[15,[33px,25px]]]
+                    width_4char:
+                        filter: function() { return (feature.shield_text.length === 4) }
+                        draw:
+                            icons:
+                                size: [[6,[25px,18px]],[13,[27px,20px]],[15,[35px,25px]]]
+                    width_5char:
+                        filter: function() { return (feature.shield_text.length === 5) }
+                        draw:
+                            icons:
+                                size: [[6,[26px,18px]],[13,[30px,20px]],[15,[38px,25px]]]
+                # US Federal Routes
+                US-US:
+                    filter:
+                        network: ['US:US','US:US:Business', 'US:US:Truck', 'US:US:Alternate']
+                        $zoom: { min: 7 }
+                    draw:
+                        icons:
+                            # you need to match any custom shield to the vector tile `network` values
+                            sprite: |
+                                function() { return ('US:US_' + feature.shield_text.length + 'char'); }
+                            priority: 47
+                            cull_from_tile: true
+                            visible: *text_visible_shields
+                            text:
+                                offset: [0px, -0.7px]
+                                font:
+                                    fill: [0.0,0.0,0.0]
+                                    size: [[7,8px],[13,9px],[15,11px]]
+                    # early:
+                    #     filter: { $zoom: [7] }
+                    #     icons:
+                    #         visible: false
+                    width_1char:
+                        filter: function() { return (feature.shield_text.length === 1) }
+                        draw:
+                            icons:
+                                size: [[6,[15px,17px]],[13,[17px,19px]],[15,[22px,24px]]]
+                    width_2char:
+                        filter: function() { return (feature.shield_text.length === 2) }
+                        draw:
+                            icons:
+                                size: [[6,[18px,17px]],[13,[20px,19px]],[15,[26px,24px]]]
+                    width_3char:
+                        filter: function() { return (feature.shield_text.length === 3) }
+                        draw:
+                            icons:
+                                size: [[6,[22px,17px]],[13,[25px,19px]],[15,[34px,25px]]]
+                    width_4char:
+                        filter: function() { return (feature.shield_text.length === 4) }
+                        draw:
+                            icons:
+                                size: [[6,[25px,17px]],[13,[29px,19px]],[15,[39px,25px]]]
+                    width_5char:
+                        filter: function() { return (feature.shield_text.length === 5) }
+                        draw:
+                            icons:
+                                size: [[6,[27px,17px]],[13,[30px,19px]],[15,[41px,25px]]]
+                # US State Routes
+                # US-states:
+                #     # Match state highways: `US:??`
+                #     filter: |
+                #         function() {
+                #             return feature.shield_text &&
+                #                 /^US:(?!US)\w\w$/.test(feature.network)
+                #         }
+                #     draw:
+                #         icons:
+                #             # you need to match any custom shield to the vector tile `network` values
+                #             priority: 18
+                #     early:
+                #         filter: { $zoom: [7,8,9] }
+                #         icons:
+                #             visible: false
+                US-CA:
+                    # Match California state highways: `US:CA`
+                    filter: |
+                        function() {
+                            return feature.shield_text &&
+                                /^US:CA$/.test(feature.network)
+                        }
+                    draw:
+                        icons:
+                            sprite: function() { return (feature.network + '_' + feature.shield_text.length + 'char'); }
+                            text:
+                                offset: [0px, 1px]
+                                font:
+                                    fill: [1.0,1.0,1.0]
+                                    size: [[7,7px],[13,9px],[15,10px]]
+                    motorway:
+                        filter: { kind_detail: [motorway], $zoom: [7,8] }
+                        draw:
+                            icons:
+                                visible: *text_visible_shields
+                    trunk:
+                        filter: { kind_detail: [trunk], $zoom: [8,9] }
+                        draw:
+                            icons:
+                                visible: *text_visible_shields
+                    primary:
+                        filter: { kind_detail: primary, $zoom: [10,11] }
+                        draw:
+                            icons:
+                                visible: *text_visible_shields
+                    width_1char:
+                        filter: function() { return (feature.shield_text.length === 1) }
+                        draw:
+                            icons:
+                                size: [[6,[14px,16px]],[13,[15px,18px]],[15,[18px,21px]]]
+                    width_2char:
+                        filter: function() { return (feature.shield_text.length === 2) }
+                        draw:
+                            icons:
+                                size: [[6,[18px,18px]],[13,[20px,20px]],[15,[23px,23px]]]
+                    width_3char:
+                        filter: function() { return (feature.shield_text.length === 3) }
+                        draw:
+                            icons:
+                                size: [[6,[21px,18px]],[13,[24px,20px]],[15,[28px,23px]]]
+                    width_4char:
+                        filter: function() { return (feature.shield_text.length === 4) }
+                        draw:
+                            icons:
+                                size: [[6,[24px,18px]],[13,[26px,20px]],[15,[31px,23px]]]
+                    width_5char:
+                        filter: function() { return (feature.shield_text.length === 5) }
+                        draw:
+                            icons:
+                                size: [[6,[25px,18px]],[13,[27px,20px]],[15,[32px,23px]]]
+                US-NY:
+                    # Match New York state highways: `US:NY`
+                    filter: |
+                        function() {
+                            return feature.shield_text &&
+                                /^US:NY$/.test(feature.network)
+                                /* (/^US:NY$/.test(feature.network) || /^NY:US$/.test(feature.network)) */
+                        }
+                    draw:
+                        icons:
+                            sprite: |
+                                function() { return ( 'US:NY_' + feature.shield_text.length + 'char'); }
+                            text:
+                                # offset: [0px, 1px]
+                                font:
+                                    fill: [0.0,0.0,0.0]
+                                    size: [[7,7px],[13,9px],[15,10px]]
+                    width_1char:
+                        filter: function() { return (feature.shield_text.length === 1) }
+                        draw:
+                            icons:
+                                size: [[6,[13px,17px]],[13,[15px,19px]],[15,[18px,22px]]]
+                    width_2char:
+                        filter: function() { return (feature.shield_text.length === 2) }
+                        draw:
+                            icons:
+                                size: [[6,[17px,17px]],[13,[19px,19px]],[15,[22px,22px]]]
+                    width_3char:
+                        filter: function() { return (feature.shield_text.length === 3) }
+                        draw:
+                            icons:
+                                size: [[6,[20px,17px]],[13,[22px,19px]],[15,[27px,22px]]]
+                    width_4char:
+                        filter: function() { return (feature.shield_text.length === 4) }
+                        draw:
+                            icons:
+                                size: [[6,[21px,17px]],[13,[24px,19px]],[15,[29px,22px]]]
+                    width_5char:
+                        filter: function() { return (feature.shield_text.length === 5) }
+                        draw:
+                            icons:
+                                size: [[6,[22px,17px]],[13,[25px,19px]],[15,[30px,22px]]]
+                US-PA:
+                    # Match Pennsylvania state highways
+                    filter: |
+                        function() {
+                            return feature.shield_text &&
+                                /^US:PA$/.test(feature.network)
+                        }
+                    draw:
+                        icons:
+                            sprite: |
+                                function() { return ( 'US:PA_' + feature.shield_text.length + 'char'); }
+                            text:
+                                offset: [0px, 1px]
+                                font:
+                                    fill: [0.0,0.0,0.0]
+                                    size: [[7,7px],[13,9px],[15,10px]]
+                    width_1char:
+                        filter: function() { return (feature.shield_text.length === 1) }
+                        draw:
+                            icons:
+                                size: [[6,[13px,17px]],[13,[15px,19px]],[15,[18px,22px]]]
+                    width_2char:
+                        filter: function() { return (feature.shield_text.length === 2) }
+                        draw:
+                            icons:
+                                size: [[6,[17px,17px]],[13,[19px,19px]],[15,[22px,22px]]]
+                    width_3char:
+                        filter: function() { return (feature.shield_text.length === 3) }
+                        draw:
+                            icons:
+                                size: [[6,[21px,17px]],[13,[24px,19px]],[15,[28px,22px]]]
+                    width_4char:
+                        filter: function() { return (feature.shield_text.length === 4) }
+                        draw:
+                            icons:
+                                size: [[6,[22px,17px]],[13,[25px,19px]],[15,[30x,22px]]]
+                    width_5char:
+                        filter: function() { return (feature.shield_text.length === 5) }
+                        draw:
+                            icons:
+                                size: [[6,[24px,17px]],[13,[27px,19px]],[15,[32px,22px]]]
+                # USA County Routes
+                US-counties:
+                    # Match state highways: `US:??:*`
+                    #
+                    # this is very USA specific
+                    #
+                    # filter: |
+                    #     function() {
+                    #         return feature.shield_text &&
+                    #             /^US:(?!US)\w\w:.*$/.test(feature.network)
+                    #     }
+                    #
+                    # this generic for any country with 3rd level networks (like county routes in USA)
+                    # BEWARE:
+                    # US:US:Business  about 150
+                    # US:US:Truck
+                    # US:US:Alternate
+    #
+                    # STATE ROUTE
+                    # ??:??:Loop  about 200
+                    # ??:??:Spur  about 200
+                    # ??:??:Business   about 100
+    #
+                    # STATE TEXAS SPECIAL ROUTE
+                    # US:TX:FM -- probably just state? there are 3k of these
+                    #
+                    #
+                    filter: |
+                        function() {
+                            return feature.shield_text &&
+                                /^\w+:\w+:(!Alternate).+$/.test(feature.network) &&
+                                $zoom > 10
+                        }
+                    draw:
+                        icons:
+                            # you need to match any custom shield to the vector tile `network` values
+                            sprite: function() { return ('county_shield_' + feature.shield_text.length + 'char'); }
+                            # priority: 19
+                            visible: *text_visible_shields
+                            text:
+                                font:
+                                    fill: [0.320,0.320,0.320]
+                                    #size: [[11,7px],[15,10px]]
+                    # early:
+                    #     filter: { $zoom: { max: 11 } }
+                    #     draw:
+                    #         icons:
+                    #             visible: false
+                    width_1char:
+                        filter: function() { return (feature.shield_text.length === 1) }
+                        draw:
+                            icons:
+                                size: [[6,[14px,14px]],[13,[16px,16px]],[15,[18px,18px]]]
+                    width_2char:
+                        filter: function() { return (feature.shield_text.length === 2) }
+                        draw:
+                            icons:
+                                size: [[6,[16px,14px]],[13,[18px,15px]],[15,[22px,18px]]]
+                    width_3char:
+                        filter: function() { return (feature.shield_text.length === 3) }
+                        draw:
+                            icons:
+                                size: [[6,[20px,14px]],[13,[21px,15px]],[15,[26px,18px]]]
+                    width_4char:
+                        filter: function() { return (feature.shield_text.length === 4) }
+                        draw:
+                            icons:
+                                size: [[6,[25px,14px]],[13,[28px,15px]],[15,[34px,18px]]]
+                    width_5char:
+                        filter: function() { return (feature.shield_text.length === 5) }
+                        draw:
+                            icons:
+                                size: [[6,[30px,14px]],[13,[33px,15px]],[15,[40px,18px]]]
         path:
             filter:
                 all:
                     - kind: [path, portage_way]
                 not:
-                    - highway: [footway, steps, track, cycleway]
-                    - man_made: [pier]
+                    - kind_detail: [footway, steps, track, cycleway]
+                    - kind_detail: [pier]
             draw:
                 dashedline:
-                    order: function() { return feature.sort_key; }
+                    order: function() { return feature.sort_rank; }
                     interactive: true
                     visible: false
                     color: [0.350,0.350,0.350]
@@ -2297,7 +3314,7 @@ layers:
                     lines:
                         color: [0.350,0.350,0.350]
             pedestrian:
-                filter: { highway: pedestrian }
+                filter: { kind_detail: pedestrian }
                 draw:
                     lines:
                         color: [[16,[0.749,0.749,0.749]]]
@@ -2306,7 +3323,7 @@ layers:
                         #     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 }
+                filter: { is_bridge: true }
                 draw:
                     lines:
                         width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
@@ -2387,7 +3404,7 @@ layers:
                 filter: { $zoom: { min: 17 } }
                 draw:
                     text-blend-order:
-                        priority: 58
+                        priority: 61
                         visible: *text_visible_path
                         text_source: name
                         font:
@@ -2395,7 +3412,7 @@ layers:
                             size: 12px
                             stroke: { color: *text_stroke, width: 4 }
         track:
-            filter: { kind: path, highway: track }
+            filter: { kind: path, kind_detail: track }
             draw:
                 lines:
                     color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
@@ -2406,7 +3423,7 @@ layers:
                         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 }
+                filter: { is_bridge: true }
                 draw:
                     lines:
                         cap: butt
@@ -2429,10 +3446,10 @@ layers:
             filter:
                 all:
                     - kind: path
-                    - highway: steps
+                    - kind_detail: steps
             draw:
                 dashed:
-                    #order: function() { return feature.sort_key; }
+                    #order: function() { return feature.sort_rank; }
                     order: 1005
                     color: [0.501,0.650,0.650]
                     width: [[15, 0.6], [16, 1px], [17, 1px], [18, 4px], [19, 1.5m]]
@@ -2511,7 +3528,7 @@ layers:
                 filter: { $zoom: { min: 17 } }
                 draw:
                     text-blend-order:
-                        priority: 59
+                        priority: 63
                         visible: *text_visible_steps
                         text_source: name
                         font:
@@ -2571,7 +3588,7 @@ layers:
                     text-blend-order:
                         text_source: function() { if( feature.name ){ return '◆◆ ' + feature.name; } else { return ''; } }
         pier:
-            filter: { kind: path, man_made: pier }
+            filter: { kind: path, kind_detail: pier }
             draw:
                 lines:
                     color: [0.993,0.993,0.993]
@@ -2589,7 +3606,7 @@ layers:
                     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] }
+            filter: { kind: aeroway }
             draw:
                 lines:
                     color: [[11, [0.25,0.25,0.25]], [17, [0.0,0.0,0.0]]]
@@ -2609,7 +3626,7 @@ layers:
                     lines:
                         cap: butt
             taxiway:
-                filter: { aeroway: taxiway }
+                filter: { kind_detail: 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]]]
@@ -2622,6 +3639,14 @@ layers:
                     draw:
                         lines:
                             visible: false
+            runway:
+                filter: { kind_detail: runway }
+                draw:
+                    lines:
+                        color: [[11, [0.885,0.885,0.885]], [13, [0.714,0.733,0.760]], [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.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]]
         ferry:
             filter: { kind: ferry }
             draw:
@@ -2636,7 +3661,7 @@ layers:
                     color: [0.5,0.5,0.5]
                     width: [[14, 0.5px], [15, 1.0px], [16, 2m]]
             gondola_cable_car:
-                filter: { aerialway: [gondola, cable_car] }
+                filter: { kind_detail: [gondola, cable_car] }
                 draw:
                     lines:
                         color: [0.45,0.45,0.45]
@@ -2645,7 +3670,7 @@ layers:
 #                        color: [0.5,0.5,0.5]
 #                        width: [[12, 0px], [13, 5px], [14, 8px], [15, 10px], [16, 12px]]
             chair_lift:
-                filter: { aerialway: chair_lift }
+                filter: { kind_detail: chair_lift }
                 draw:
                     lines:
                         color: [0.45,0.45,0.45]
@@ -2657,7 +3682,7 @@ layers:
                 filter: { $zoom: { min: 14 } }
                 draw:
                     text-blend-order:
-                        priority: 59
+                        priority: 63
                         visible: *text_visible_aerialway
                         text_source: name
                         font:
@@ -2665,12 +3690,12 @@ layers:
                             size: 10px
                             stroke: { color: *text_stroke_park, width: 4 }
                 minor:
-                    filter: { not: { aerialway: [gondola,cable_car,chair_lift] }, $zoom: { max: 17 } }
+                    filter: { not: { kind_detail: [gondola,cable_car,chair_lift] }, $zoom: { max: 17 } }
                     draw:
                         text-blend-order:
                             visible: false
                 early_gondola:
-                    filter: { $zoom: [14], aerialway: [gondola,cable_car] }
+                    filter: { $zoom: [14], kind_detail: [gondola,cable_car] }
                     draw:
                         text-blend-order:
                             font:
@@ -2708,15 +3733,8 @@ layers:
             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: [13], scale_rank: [1,2] }
+                    - { $zoom: [14], scale_rank: [1,2,3] }
                     - { $zoom: [15], area: { min: 5000 }, name: true }
                     - { $zoom: [15], area: { min: 5000 }, kind: true }
                     - { $zoom: [15], area: { min: 3000 }, landuse_kind: true }
@@ -2729,83 +3747,67 @@ layers:
                     #- { $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 } }
+                   - not: { location: underground }
             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:
+            extrude:
                 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 } }
+                        # 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
@@ -2873,14 +3875,14 @@ layers:
                 - { $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], area: { min: 7000 }, kind_detail: [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: [17], area: { min: 2000 }, kind_detail: [university, college, school, kindergarten] }
                 - { $zoom: [18], area: { min: 1000 } }
-                - { $zoom: [18], kind: [university, college, school, kindergarten] }
+                - { $zoom: [18], kind_detail: [university, college, school, kindergarten] }
                 - { $zoom: [19], area: { min: 200 } }
-                - { $zoom: { min: 19 }, kind: [university, college, school, kindergarten] }
+                - { $zoom: { min: 19 }, kind_detail: [university, college, school, kindergarten] }
                 - { $zoom: { min: 20 }, area: true }
         draw:
             text-blend-order:
@@ -2925,7 +3927,7 @@ layers:
             $zoom: { min: 20 }
             any:
                 - kind: address
-                - { label_position: yes, addr_housenumber: true, name: false }
+                - { label_position: true, addr_housenumber: true, name: false }
         draw:
             text-blend-order:
                 interactive: true
@@ -2945,49 +3947,59 @@ layers:
         draw:
             lines:
                 interactive: true
-                order: function() { return (feature.sort_key + 100); }
+                order: function() { return (feature.sort_rank + 100); }
 #                color: red
 #                width: [[9, 1px], [14, 2px], [16, 3px], [17, 8m]]
         country:
             filter:
-                any:
-                    - type: country
-                    - kind: nation
-                    - admin_level: 2
+                kind: country
+                # any:
+                #     - kind: country
+                #     - kind_detail: 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 }
+                filter: { maritime_boundary: true }
                 draw:
                     lines:
                         visible: false
-                        #order: function() { return (feature.sort_key - 2); }
+                        #order: function() { return (feature.sort_rank - 2); }
                         #color: [0.568,0.942,1.000]
+
+        # other_country_boundary_disputed_etc:
+        #     filter: { kind: [disputed, indefinite, indeterminate, lease_limit, line_of_control, overlay_limit] }
+        #     draw:
+        #         dashed:
+        #             interactive: true
+        #             color: *country_boundary
+        #             width: [[1, 0.2px], [2, 0.5px], [4, 1.0px], [9, 1.5px], [14, 2.5px], [16, 3.5px], [17, 10m]]
+
         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
+                kind: region
+                # any:
+                #     - type: state
+                #     # territorial here is probably a hack
+                #     - kind: [state, department, region, provincial, territorial]
+                #     - kind_detail: 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 }
+                filter: { maritime_boundary: true }
                 draw:
                     lines:
                         visible: false
             early:
-                filter: { scalerank: [0,3,4,5,6,7,8,9,10], $zoom: { max: 8 } }
+                filter: { not: { min_zoom: [1,2] }, $zoom: { max: 8 } }
                 draw:
                     lines:
                         visible: false
@@ -3164,7 +4176,7 @@ layers:
                         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"] } }
+            filter: { name: true, kind: [region], $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
@@ -3177,7 +4189,7 @@ layers:
                         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"] } }
+            filter: { name: true, kind: [region], $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
@@ -3190,7 +4202,7 @@ layers:
                         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"] } }
+            filter: { name: true, kind: [region], $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
@@ -3204,7 +4216,7 @@ layers:
                         transform: uppercase
 
         region:
-            filter: { name: true, kind: [state], $zoom: {min: 7, max: 9} }
+            filter: { name: true, kind: [region], $zoom: {min: 7, max: 9} }
             draw:
                 text-blend-order:
                     priority: 14
@@ -3233,16 +4245,19 @@ layers:
                         font: { transform: uppercase }
 
         populated-places:
+            filter:
+                kind: locality
+                name: true
             draw:
                 icons:
                     interactive: true
                     priority: 5
                     text:
                         interactive: true
-                        anchor: bottom
+                        buffer: 3px
 
             populated-places-natural-earth-z2:
-                filter: { name: true, source: naturalearthdata.com, $zoom: [2], scalerank: 0 }
+                filter: { $zoom: [2], min_zoom: 2 }
                 draw:
                     icons:
                         size: 5px
@@ -3256,9 +4271,9 @@ layers:
                                 stroke: { color: *text_stroke, width: 4 }
 
             populated-places-natural-earth-z3:
-                filter: { name: true, source: naturalearthdata.com, $zoom: [3] }
+                filter: { $zoom: [3] }
                 z3places-1:
-                    filter: { scalerank: [0] }
+                    filter: { min_zoom: 2 }
                     draw:
                         icons:
                             size: 5px
@@ -3271,7 +4286,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                 z3places-2:
-                    filter: { scalerank: [1] }
+                    filter: { min_zoom: 3 }
                     draw:
                         icons:
                             priority: 7
@@ -3286,9 +4301,9 @@ layers:
                                     stroke: { color: *text_stroke, width: 4 }
 
             populated-places-natural-earth-z4:
-                filter: { name: true, source: naturalearthdata.com, $zoom: [4] }
+                filter: { $zoom: [4] }
                 z4places-1:
-                    filter: { scalerank: [0] }
+                    filter: { min_zoom: 2 }
                     draw:
                         icons:
                             size: 5px
@@ -3302,7 +4317,7 @@ layers:
                                     stroke: { color: *text_stroke, width: 4 }
 
                 z4places-2:
-                    filter: { scalerank: [1,2] }
+                    filter: { min_zoom: [3,4] }
                     draw:
                         icons:
                             priority: 7
@@ -3317,9 +4332,9 @@ layers:
                                     stroke: { color: *text_stroke, width: 4 }
 
             populated-places-natural-earth-z5:
-                filter: { name: true, source: naturalearthdata.com, $zoom: [5] }
+                filter: { $zoom: [5] }
                 z5places-1:
-                    filter: { scalerank: [0,1] }
+                    filter: { min_zoom: [2,3] }
                     draw:
                         icons:
                             priority: 7
@@ -3333,7 +4348,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 priority: 5
@@ -3343,7 +4358,7 @@ layers:
 #                                    priority: 6
 
                 z5places-2:
-                    filter: { scalerank: [2] }
+                    filter: { min_zoom: 4 }
                     draw:
                         icons:
                             priority: 11
@@ -3357,7 +4372,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 priority: 9
@@ -3367,7 +4382,7 @@ layers:
 #                                    priority: 10
 
                 z5places-3:
-                    filter: { scalerank: [3,4] }
+                    filter: { min_zoom: 5 }
                     draw:
                         icons:
                             priority: 17
@@ -3381,7 +4396,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 priority: 15
@@ -3391,9 +4406,9 @@ layers:
 #                                    priority: 16
 
             populated-places-natural-earth-z6:
-                filter: { name: true, source: naturalearthdata.com, $zoom: [6] }
+                filter: { $zoom: [6] }
                 z6places-1:
-                    filter: { scalerank: [0,1] }
+                    filter: { min_zoom: [2,3] }
                     draw:
                         icons:
                             priority: 7
@@ -3407,7 +4422,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-l
@@ -3417,7 +4432,7 @@ layers:
 #                                    priority: 6
 
                 z6places-2:
-                    filter: { scalerank: [2,3,4] }
+                    filter: { min_zoom: [4,5] }
                     draw:
                         icons:
                             priority: 11
@@ -3431,7 +4446,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 6px
@@ -3441,7 +4456,7 @@ layers:
 #                                    priority: 10
 
                 z6places-3:
-                    filter: { scalerank: [5,6] }
+                    filter: { min_zoom: 6 }
                     draw:
                         icons:
                             size: 5px
@@ -3455,7 +4470,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 6px
@@ -3465,9 +4480,9 @@ layers:
 #                                    priority: 14
 
             populated-places-natural-earth-z7:
-                filter: { name: true, source: naturalearthdata.com, $zoom: [7] }
+                filter: { $zoom: [7] }
                 z7places-1:
-                    filter: { scalerank: [0,1] }
+                    filter: { min_zoom: [2,3] }
                     draw:
                         icons:
                             size: 8px
@@ -3481,7 +4496,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 8px
@@ -3491,7 +4506,7 @@ layers:
 #                                    priority: 6
 
                 z7places-2:
-                    filter: { scalerank: [2,3,4,5] }
+                    filter: { min_zoom: [4,5,6] }
                     draw:
                         icons:
                             size: 6px
@@ -3505,7 +4520,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 8px
@@ -3515,7 +4530,7 @@ layers:
 #                                    priority: 12
 
                 z7places-3:
-                    filter: { scalerank: [6,7] }
+                    filter: { min_zoom: [6,7] }
                     draw:
                         icons:
                             size: 5px
@@ -3529,7 +4544,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 6px
@@ -3565,7 +4580,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 8px
@@ -3591,7 +4606,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 6px
@@ -3618,7 +4633,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 6px
@@ -3645,7 +4660,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 5px
@@ -3658,8 +4673,8 @@ layers:
                         all:
                             - { population: { max: 50000 } }
                         any:
-                            - { capital: yes }
-                            - { state_capital: yes }
+                            - { country_capital: true }
+                            - { region_capital: true }
                     draw:
                         icons:
                             size: 5px
@@ -3674,7 +4689,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 5px
@@ -3684,10 +4699,10 @@ layers:
 #                                    priority: 18
 
             populated-places-natural-earth-z8-backfill:
-                filter: { name: true, source: naturalearthdata.com, $zoom: [8], population: { max: 50000 } }
+                filter: { $zoom: [8], population: { max: 50000 } }
                 draw: { icons: { text: { font: { fill: *text_fill } } } }
                 z8places-1-ne:
-                    filter: { scalerank: [0,1] }
+                    filter: { min_zoom: [2,3] }
                     draw:
                         icons:
                             size: 8px
@@ -3701,7 +4716,7 @@ layers:
                                     size: 17px
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 8px
@@ -3711,7 +4726,7 @@ layers:
 #                                    priority: 22
 
                 z8places-2-ne:
-                    filter: { scalerank: [2,3,4,5] }
+                    filter: { min_zoom: [4,5,6] }
                     draw:
                         icons:
                             size: 6px
@@ -3724,13 +4739,13 @@ layers:
                                     size: 14px
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-m
 
                 z8places-3-ne:
-                    filter: { scalerank: [6,7] }
+                    filter: { min_zoom: [6,7] }
                     draw:
                         icons:
                             size: 5px
@@ -3744,7 +4759,7 @@ layers:
                                     size: 10px
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-s
@@ -3806,7 +4821,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-m
@@ -3831,7 +4846,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-m
@@ -3857,7 +4872,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-s
@@ -3869,8 +4884,8 @@ layers:
                         all:
                             - { population: { max: 50000 } }
                         any:
-                            - { capital: yes }
-                            - { state_capital: yes }
+                            - { country_capital: true }
+                            - { region_capital: true }
                     draw:
                         icons:
                             size: 5px
@@ -3884,7 +4899,7 @@ layers:
                                     fill: *text_fill
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-s
@@ -3900,7 +4915,7 @@ layers:
                         - population: false
                         - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
                         - $zoom: [9]
-                        - kind: [city,town]
+                        - kind_detail: [city,town]
                 draw:
                     icons:
                         size: 5px
@@ -3916,10 +4931,10 @@ layers:
                                 stroke: { color: *text_stroke, width: 4 }
 
             populated-places-natural-earth-z9-backfill:
-                filter: { name: true, source: naturalearthdata.com, $zoom: [9], population: { max: 50000 } }
+                filter: { $zoom: [9], population: { max: 50000 } }
                 draw: { icons: { text: { font: { fill: *text_fill } } } }
                 z9places-1-ne:
-                    filter: { scalerank: [0,1] }
+                    filter: { min_zoom: [2,3] }
                     draw:
                         icons:
                             size: 8px
@@ -3932,7 +4947,7 @@ layers:
                                     size: 17px
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-l
@@ -3941,7 +4956,7 @@ layers:
 #                                    priority: 24
 
                 z9places-2-ne:
-                    filter: { scalerank: [2,3,4,5] }
+                    filter: { min_zoom: [4,5,6] }
                     draw:
                         icons:
                             size: 6px
@@ -3954,7 +4969,7 @@ layers:
                                     size: 14px
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-m
@@ -3963,7 +4978,7 @@ layers:
 #                                    priority: 27
 
                 z9places-3-ne:
-                    filter: { scalerank: [6,7,8,9] }
+                    filter: { min_zoom: [6,7,9] }
                     draw:
                         icons:
                             size: 6px
@@ -3976,7 +4991,7 @@ layers:
                                     size: 12px
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-m
@@ -4078,7 +5093,7 @@ layers:
                         - population: false
                         - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
                         - $zoom: [10]
-                        - kind: [city,town]
+                        - kind_detail: [city,town]
                 draw:
                     icons:
                         size: 5px
@@ -4094,10 +5109,10 @@ layers:
                                 stroke: { color: *text_stroke, width: 4 }
 
             populated-places-natural-earth-z10-backfill:
-                filter: { name: true, source: naturalearthdata.com, $zoom: [10], population: { max: 20000 } }
+                filter: { $zoom: [10], population: { max: 20000 } }
                 draw: { icons: { text: { font: { fill: *text_fill } } } }
                 z10places-1-ne:
-                    filter: { scalerank: [0,1] }
+                    filter: { min_zoom: [2,3] }
                     draw:
                         icons:
                             text:
@@ -4107,7 +5122,7 @@ layers:
                                     stroke: { color: *text_stroke, width: 4 }
 
                 z10places-2-ne:
-                    filter: { scalerank: [2,3,4,5] }
+                    filter: { min_zoom: [4,5,6] }
                     draw:
                         icons:
                             size: 6px
@@ -4120,7 +5135,7 @@ layers:
                                     size: 14px
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 sprite: capital-m
@@ -4129,7 +5144,7 @@ layers:
 #                                    priority: 21
 
                 z10places-3-ne:
-                    filter: { scalerank: [6,7,8,9,10] }
+                    filter: { min_zoom: [6,7,9,10] }
                     draw:
                         icons:
                             size: 5px
@@ -4142,7 +5157,7 @@ layers:
                                     size: 12px
                                     stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             icons:
                                 size: 7px
@@ -4159,7 +5174,7 @@ layers:
                         - population: true
                         - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
                         - $zoom: [11]
-                        - kind: [city,town]
+                        - kind_detail: [city,town]
                 draw:
                     text-blend-order:
                         anchor: center
@@ -4211,7 +5226,7 @@ layers:
                         - population: false
                         - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
                         - $zoom: [11]
-                        - kind: [city,town]
+                        - kind_detail: [city,town]
                 draw:
                     text-blend-order:
                         anchor: center
@@ -4230,7 +5245,7 @@ layers:
                         font:
                             fill: *text_fill
                 z11places-1-ne:
-                    filter: { scalerank: [0,1] }
+                    filter: { min_zoom: [2,3] }
                     draw:
                         text-blend-order:
                             visible: *text_visible_populated_places
@@ -4239,7 +5254,7 @@ layers:
                                 size: 18px
                                 stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             text-blend-order:
                                 priority: 9
@@ -4248,7 +5263,7 @@ layers:
                                     stroke: { color: *text_stroke, width: 4 }
 
                 z11places-2-ne:
-                    filter: { scalerank: [2,3,4,5] }
+                    filter: { min_zoom: [4,5,6] }
                     draw:
                         text-blend-order:
                             visible: *text_visible_populated_places
@@ -4257,7 +5272,7 @@ layers:
                                 size: 14px
                                 stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             text-blend-order:
                                 priority: 11
@@ -4265,7 +5280,7 @@ layers:
                                     size: 14px
                                     stroke: { color: *text_stroke, width: 4 }
                     state_capital:
-                        filter: { state_capital: yes }
+                        filter: { region_capital: true }
                         draw:
                             text-blend-order:
                                 priority: 12
@@ -4274,7 +5289,7 @@ layers:
                                     stroke: { color: *text_stroke, width: 4 }
 
                 z11places-3-ne:
-                    filter: { scalerank: [6,7,8,9,10,11] }
+                    filter: { min_zoom: [6,7,9,10] }
                     draw:
                         text-blend-order:
                             visible: *text_visible_populated_places
@@ -4283,7 +5298,7 @@ layers:
                                 size: 11px
                                 stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             text-blend-order:
                                 priority: 14
@@ -4299,7 +5314,7 @@ layers:
                         - population: true
                         - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
                         - $zoom: [12]
-                        - kind: [city,town]
+                        - kind_detail: [city,town]
                 draw:
                     text-blend-order:
                         anchor: center
@@ -4365,7 +5380,7 @@ layers:
                         - population: false
                         - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
                         - $zoom: [12]
-                        - kind: [city,town]
+                        - kind_detail: [city,town]
                 draw:
                     text-blend-order:
                         anchor: center
@@ -4386,7 +5401,7 @@ layers:
                             fill: *text_fill
 
                 z12places-1-ne:
-                    filter: { scalerank: [0,1] }
+                    filter: { min_zoom: [2,3] }
                     draw:
                         text-blend-order:
                             visible: *text_visible_populated_places
@@ -4395,7 +5410,7 @@ layers:
                                 size: 18px
                                 stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             text-blend-order:
                                 priority: 11
@@ -4404,7 +5419,7 @@ layers:
                                     stroke: { color: *text_stroke, width: 4 }
 
                 z12places-2-ne:
-                    filter: { scalerank: [2,3,4,5] }
+                    filter: { min_zoom: [4,5,6] }
                     draw:
                         text-blend-order:
                             visible: *text_visible_populated_places
@@ -4413,7 +5428,7 @@ layers:
                                 size: 14px
                                 stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             text-blend-order:
                                 priority: 13
@@ -4422,7 +5437,7 @@ layers:
                                     stroke: { color: *text_stroke, width: 4 }
 
                 z12places-3-ne:
-                    filter: { scalerank: [6,7,8,9,10,11,12] }
+                    filter: { min_zoom: [6,7,9,10] }
                     draw:
                         text-blend-order:
                             visible: *text_visible_populated_places
@@ -4431,7 +5446,7 @@ layers:
                                 size: 11px
                                 stroke: { color: *text_stroke, width: 4 }
                     capital:
-                        filter: { capital: yes }
+                        filter: { country_capital: true }
                         draw:
                             text-blend-order:
                                 priority: 15
@@ -4447,7 +5462,7 @@ layers:
                         - population: true
                         - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
                         - $zoom: [13,14]
-                        - kind: [city,town]
+                        - kind_detail: [city,town]
                 draw:
                     text-blend-order:
                         anchor: center
@@ -4516,7 +5531,7 @@ layers:
                         - population: false
                         - not: { kind: [country, county, state, island, neighbourhood, suburb, quarter] }
                         - $zoom: [13, 14]
-                        - kind: [city,town]
+                        - kind_detail: [city,town]
                 draw:
                     text-blend-order:
                         anchor: center
@@ -4536,7 +5551,7 @@ layers:
                             weight: 400
 
                 z13places-1-ne:
-                    filter: { scalerank: [0,1] }
+                    filter: { min_zoom: [2,3] }
                     draw:
                         text-blend-order:
                             priority: 8
@@ -4544,7 +5559,7 @@ layers:
                             visible: false
 
                 z13places-2-ne:
-                    filter: { scalerank: [2,3,4,5] }
+                    filter: { min_zoom: [4,5,6] }
                     draw:
                         text-blend-order:
                             priority: 9
@@ -4554,7 +5569,7 @@ layers:
                                 stroke: { color: *text_stroke, width: 4 }
 
                 z13places-3-ne:
-                    filter: { scalerank: [6,7,8,9,10,11,12] }
+                    filter: { min_zoom: [6,7,9,10] }
                     draw:
                         text-blend-order:
                             visible: *text_visible_populated_places
@@ -4562,21 +5577,19 @@ layers:
                             font:
                                 size: 12px
                                 stroke: { color: *text_stroke, width: 4 }
-
+        neighbourhoods:
+            filter:
+                all:
+                    - name: true
+                    - kind: [macrohood, neighbourhood]
+                    - is_landuse_aoi: false
             neighborhood-z11:
                 filter:
-                    all:
-                        - name: true
-                        - kind: [macrohood, neighbourhood]
+                      all:
                         - $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 }
+                        - min_zoom: [11]
+                        - max_zoom: { min: 12 }
+                        #- kind_tile_rank: { max: 6 }
                 draw:
                     text-blend-order:
                         priority: 18
@@ -4590,18 +5603,11 @@ layers:
                             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 }
+                  all:
+                    - $zoom: [12]
+                    - min_zoom: [11,12]
+                    - max_zoom: { min: 13 }
+                    #- kind_tile_rank: { max: 8 }
                 draw:
                     text-blend-order:
                         priority: 18
@@ -4615,18 +5621,11 @@ layers:
                             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 }
+                  all:
+                    - $zoom: [13]
+                    - min_zoom: [11,12,13]
+                    - max_zoom: { min: 14 }
+                    - kind_tile_rank: { max: 8 }
                 draw:
                     text-blend-order:
                         priority: 18
@@ -4640,18 +5639,11 @@ layers:
                             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 }
+                  all:
+                    - $zoom: [14]
+                    - min_zoom: [11,12,13,14]
+                    - max_zoom: { min: 15 }
+                    - kind_tile_rank: { max: 8 }
                 draw:
                     text-blend-order:
                         priority: 18
@@ -4665,18 +5657,11 @@ layers:
                             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 }
+                  all:
+                    - $zoom: [15]
+                    - min_zoom: [11,12,13,14,15]
+                    - max_zoom: { min: 16 }
+                    - kind_tile_rank: { max: 8 }
                 draw:
                     text-blend-order:
                         priority: 18
@@ -4699,18 +5684,11 @@ layers:
                                 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 }
+                  all:
+                    - $zoom: [16]
+                    - min_zoom: [11,12,13,14,15,16]
+                    - max_zoom: { min: 17 }
+                    - kind_tile_rank: { max: 8 }
                 draw:
                     text-blend-order:
                         priority: 18
@@ -4745,7 +5723,7 @@ layers:
                         weight: 600
     airport-gate:
         data: { source: mapzen, layer: [pois] }
-        filter: { kind: gate, aeroway: gate, $zoom: { min: 16 } }
+        filter: { kind: aeroway_gate, $zoom: { min: 16 } }
         draw:
             icons:
                 visible: false
@@ -4789,12 +5767,12 @@ layers:
                 size: [[13, 18px], [16, 18px], [18, 22px]]
                 interactive: true
                 visible: false
-                priority: 45
+                priority: 65
                 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
+                    buffer: 7px
                     interactive: true
                     font:
                         family: *text_font_family
@@ -4805,7 +5783,6 @@ layers:
             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
@@ -4845,26 +5822,26 @@ layers:
                 filter: { kind: [grass, pitch], $geometry: point, area: true, $zoom: { min: 16 } }
                 draw:
                     icons:
-                        sprite: function() { return feature.sport; }
+                        sprite: function() { return feature.kind_detail; }
                         visible: *icon_visible_poi_landuse_e
                         priority: 49
                 baseball:
-                    filter: { sport: baseball }
+                    filter: { kind_detail: baseball }
                     draw: { icons: { sprite: baseball-field } }
                 basketball:
-                    filter: { sport: basketball }
+                    filter: { kind_detail: basketball }
                     draw: { icons: { sprite: basketball-court } }
                 football:
-                    filter: { sport: football }
+                    filter: { kind_detail: football }
                     draw: { icons: { sprite: football-stadium } }
                 hockey:
-                    filter: { sport: hockey-field }
+                    filter: { kind_detail: hockey-field }
                     draw: { icons: { sprite: hockey-field } }
                 soccer:
-                    filter: { sport: soccer }
+                    filter: { kind_detail: soccer }
                     draw: { icons: { sprite: soccer-field } }
                 tennis:
-                    filter: { sport: tennis }
+                    filter: { kind_detail: tennis }
                     draw: { icons: { sprite: tennis } }
             tree:
                 filter: { kind: tree, $zoom: { min: 18 } }
@@ -5053,7 +6030,7 @@ layers:
                     all:
                         - area: true
                         - $geometry: point
-                        - kind: [national_park, "park or protected land"]
+                        - kind: [national_park]
                     any:
                         # show labels for smaller landuse areas at higher zooms
                         - { $zoom: [4],  area: { min: 3000000000 } }
@@ -5350,11 +6327,11 @@ layers:
                                 #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 } } }
+                early:
+                    filter: { $zoom: { max: 12 } }
+                    draw: { icons: { text: { visible: false } } }
                 early2:
-                    filter: { $zoom: { min: 12, max: 14 } }
+                    filter: { $zoom: { max: 14 } }
                     draw: { icons: { text: { font: { size: 10px } } } }
             school:
                 filter:
@@ -5513,31 +6490,6 @@ layers:
                             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:
@@ -5599,13 +6551,13 @@ layers:
                                 visible: true
                                 text_source: short_name
                 hide-till-later:
-                    filter: { kind: [pedestrian,common,railway,ship,houseboat,common,grass,wetland], $zoom: { max: 17 } }
+                    filter: { kind: [pedestrian,common,railway,ship,houseboat,common,grass,wetland,pitch], $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 } }
+                    filter: { kind: [pedestrian,common,railway,ship,houseboat,common,grass,wetland,pitch], $zoom: { min: 17 } }
                     draw:
                         icons:
                             visible: false
@@ -5616,6 +6568,19 @@ layers:
                         icons:
                             visible: false
                             text:  { visible: false }
+                garden-area-early:
+                   filter:
+                       all:
+                           - kind: [garden, allotments]
+                       any:
+                           # limit show smaller landuse areas to higher zooms
+                           - { $zoom: [12], area: { max: 500000 } }
+                           - { $zoom: [13], area: { max: 100000 } }
+                           - { $zoom: [14], area: { max: 10000 } }
+                           - { $zoom: [15], area: { max: 5000 } }
+                   draw:
+                       icons:
+                           visible: false
             university-poi:
                 filter: { kind: [university, college], area: false, $zoom: { max: 16 } }
                 draw:
@@ -5637,6 +6602,25 @@ layers:
                     icons:
                         visible: false
                         text:  { visible: false }
+            garden-no-area-early2:
+                filter: { kind: [garden, allotments], $zoom: { max: 16 }, area: false }
+                draw:
+                    icons:
+                        visible: false
+            garden-no-area-early:
+                filter: { kind: [garden, allotments], $zoom: [16], area: false }
+                draw:
+                    icons:
+                        priority: 45
+                        size: 14px
+                        text:  { font: { size: 10px, style: italic } }
+            garden-no-area-later:
+                filter: { kind: [garden, allotments], $zoom: { min: 17 }, area: false }
+                draw:
+                    icons:
+                        priority: 45
+                        size: 16px
+                        text:  { font: { size: 11px, style: italic } }
             post-office-early:
                 filter: { kind: [post_office], $zoom: { max: 14 } }
                 draw:
@@ -5664,8 +6648,8 @@ layers:
                     icons:
                         visible: false
                         text:  { visible: false }
-            yes-early:
-                filter: { kind: [yes], $zoom: { max: 18 } }
+            true-early:
+                filter: { kind: [true], $zoom: { max: 18 } }
                 draw:
                     icons:
                         visible: false
@@ -5674,9 +6658,9 @@ layers:
                 filter: { kind: [peak, volcano] }
                 draw:
                     icons:
-                        visible: true
+                        visible: *icon_visible_landuse_green
                         priority: 43
-                        text:  { visible: true }
+                        text:  { visible: *text_visible_landuse_green }
                 low-priority-early-z11:
                     filter: { kind_tile_rank: { min: 3 }, $zoom: [11,12] }
                     draw:
@@ -5699,8 +6683,8 @@ layers:
                 filter: { kind: [waterfall], $zoom: { max: 14 } }
                 draw:
                     icons:
-                        visible: true
-                        text:  { visible: true }
+                        visible: *icon_visible_landuse_green
+                        text:  { visible: *text_visible_landuse_green }
                 low-priority-early-z11:
                     filter: { kind_tile_rank: { min: 3 }, $zoom: [11,12] }
                     draw:
@@ -5797,7 +6781,7 @@ layers:
                             text:
                                 visible: false
             tower:
-                filter: { kind: [tower], label_placement: yes }
+                filter: { kind: [tower], label_placement: true }
                 draw:
                     icons:
                         visible: false
@@ -5913,7 +6897,7 @@ layers:
                             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]
+                    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, true]
                     area: false
                     $zoom: { max: 17 }
                 draw:
@@ -6602,84 +7586,126 @@ layers:
         data: { source: mapzen }
         draw:
             terrain:
-                order: function() { return feature.sort_key; }
+                order: function() { return feature.sort_rank; }
                 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 } }
+            # 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" ] } }
+                filter:
+                    all:
+                        - kind: [national_park, battlefield, protected_area]
+                    any:
+                        - not: { operator: [ "United States Forest Service" ] }
+                        - protect_class: ['2','3','5']
                 draw:
                     terrain:
                         interactive: false
                         color: [0.890,1.00,1.00]
                         # todo: what is this?
-                        order: 18
+                        #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" ] }
+                    filter:
+                        any:
+                            - operator: [ "United States National Park Service" ]
+                            - protect_class: ['2','3','5']
                     draw:
                         terrain:
                             visible: true
+                            color: [0.890,1.00,1.00]
 
         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 } }
+            # 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 } }
+
+            # effectively wilderness
             conservation:
                 filter:
-                    kind: [conservation, protected_area, nature_reserve]
-                    $zoom: { min: 4 }
+                    all:
+                        - $zoom: { min: 4 }
+                        - kind: [protected_area, nature_reserve, national_park]
+                        - not: { protect_class: [2,3,5]}
                 draw:
                     terrain:
                         # color: [1.00,0.974,0.950]
-                        color: [0.945,0.995,0.945]
+                        color: [0.88,0.99,0.88]
+                        visible: true
+                    # outline:
+                    #     style: lines
+                    #     color: *green6
+                    #     width: [[9,0px],[10,2px],[12,4px]]
+
+            national_forest_level_6:
+                filter:
+                    all:
+                        - kind: forest
+                    any:
+                        - protect_class: ['6']
+                        - operator: ['United States Forest Service']
+                draw:
+                    terrain:
+                        color: [0.945,0.995,0.945] #*green7
                         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] }
+            parks-and-national-forests-not-national-park:
+                filter:
+                    all:
+                        - $zoom: { min: 4 }
+                        - kind: [park, national_park]
+                    any:
+                        - not: { operator: [ "United States National Park Service", "United States Forest Service" ] }
+                        - not: { protect_class: ['2','3','5','6'] }
+                # default for national forests and more?
+                draw:
+                    terrain:
+                        color: [0.880,1.000,0.950]
+                        visible: true
+                national_park:
+                    #filter: function() { return feature.name && (feature.name.indexOf('National Park') > -1); }
+                    filter:
+                        all:
+                            - kind: national_park
+                            - not: [ protect_class: ['2','3','5','6'], operator: [ "United States National Park Service"] ]
                     draw:
                         terrain:
-                            color: [0.945,0.995,0.945] #*green7
+                            color: [0.890,1.00,1.00]
                             visible: true
 
+
             # gotta be a protected area to draw green, not just a landcover type
             farm:
                 filter:
@@ -6690,49 +7716,39 @@ layers:
                         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?
+                filter: { kind: [forest, wood, natural_wood, natural_forest, natural_park], $zoom: { min: 10 }, not: { operator: [ "United States Forest Service"] } }
                 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]
+                        color: [0.956,0.99,0.966]
                         visible: true
+
+            # nature_reserve:
+            #     filter: { kind: nature_reserve, $zoom: { min: 7 } }
+            #     draw:
+            #         terrain-grid:
+            #             order: function() { return feature.sort_rank; }
+            #     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
@@ -6741,19 +7757,19 @@ layers:
             #             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 } }
+            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
@@ -6776,17 +7792,17 @@ layers:
                         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 } }
+            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
@@ -6884,25 +7900,25 @@ layers:
                         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
+            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:
@@ -6924,15 +7940,15 @@ layers:
                         # 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 } }
+            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]
@@ -7088,7 +8104,7 @@ layers:
                 kind: tree_row
             draw:
                 lines:
-                    order: 501 # function() { return feature.sort_key; }
+                    order: 501 # function() { return feature.sort_rank; }
                     color: [0.602,0.860,0.722]
                     width: [[16,1px],[17,2px],[19,1.5m]]
                     visible: true
@@ -7099,7 +8115,7 @@ layers:
                 kind: hedge
             draw:
                 lines:
-                    order: 500 # function() { return feature.sort_key; }
+                    order: 500 # function() { return feature.sort_rank; }
                     color: [0.602,0.860,0.722]
                     width: [[16,0.5px],[17,1px],[19,1m]]
                     visible: true
@@ -7157,7 +8173,7 @@ layers:
             all:
                 - kind: path
             not:
-                - man_made: [pier]
+                - kind_detail: [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]]
@@ -7173,9 +8189,9 @@ layers:
         paths:
             filter:
                 any:
-                    - highway: path
+                    - kind_detail: path
                     - all:
-                        - highway: track
+                        - kind_detail: track
                         - motor_vehicle: no
             draw:
                 lines:
@@ -7232,7 +8248,7 @@ layers:
 
         # single hiking path
         footway:
-            filter: { highway: [footway] }
+            filter: { kind_detail: [footway] }
             draw:
                 dots-lines:
                     order: 1002
@@ -7335,9 +8351,9 @@ layers:
                 filter: { footway: [sidewalk, crossing], not: { walking_network: true } }
                 draw:
                     lines:
-                        order: 350 # function() { return feature.sort_key; }
+                        order: 350 # function() { return feature.sort_rank; }
                     dots-lines:
-                        order: 351 # function() { return (feature.sort_key + 1); }
+                        order: 351 # function() { return (feature.sort_rank + 1); }
                     dashedline:
                         visible: false
                 early-z17:
@@ -7372,8 +8388,8 @@ layers:
         cycleway_pedestrian:
             filter:
                 all:
-                    - highway: [cycleway, pedestrian]
-                    - not: { highway: [pedestrian], walking_network: true }
+                    - kind_detail: [cycleway, pedestrian]
+                    - not: { kind_detail: [pedestrian], walking_network: true }
             draw:
                 lines:
 #                    color: blue #[0.120,0.600,0.520]
@@ -7428,7 +8444,7 @@ layers:
         filter:
             all:
                 - kind: path
-                - highway: [track]
+                - kind_detail: [track]
                 - motor_vehicle: false
         draw:
             lines:
@@ -7535,9 +8551,9 @@ layers:
                 - walking_network: true
                 - not:
                     any:
-                        - { kind: [path,ferry], not: { highway: pedestrian } }
+                        - { kind: [path,ferry], not: { kind_detail: pedestrian } }
                         #- motor_vehicle: [no,false]
-                        - highway: [track]
+                        - kind_detail: [track]
         draw:
             lines:
                 color: [0.120,0.600,0.520]