Updated scene file with language, building toggle and public transit toggles 93/88393/1
authorVarun <tallytalwar@gmail.com>
Sat, 17 Sep 2016 05:26:09 +0000 (01:26 -0400)
committerVarun <tallytalwar@gmail.com>
Sat, 17 Sep 2016 05:26:09 +0000 (01:26 -0400)
- also updated tangram library with some fixes to cater to these scene toggles

Change-Id: If67be0287133c8335548299b584b326b7c5e6827

lib/arm/libtangram.so
lib/i586/libtangram.so
scenes/bubble-wrap/bubble-wrap.yaml

index 60116a1..5e4a73d 100755 (executable)
Binary files a/lib/arm/libtangram.so and b/lib/arm/libtangram.so differ
index 2f36e9f..7608951 100755 (executable)
Binary files a/lib/i586/libtangram.so and b/lib/i586/libtangram.so differ
index c798ddc..9f1f806 100644 (file)
 Author: Geraldine Sarmiento, Nathaniel V. Kelso, Patricio Gonzalez Vivo, Brett Camper, Peter Richardson
 
-labels-global:
-    - &text_visible_continent         true
-    - &text_visible_admin             true
-    - &text_visible_populated_places  true
-    - &icon_visible_populated_places  true
-    - &text_visible_neighbourhoods    true
-    - &text_visible_neighbourhoods_e  true
-    - &text_visible_building          true
-    - &text_visible_address           true
-    - &text_visible_water_labels      true
-    - &label_visible_landuse_green    true
-    - &icon_visible_landuse_green     true
-    - &text_visible_landuse_green     true
-    - &label_visible_poi_landuse      true
-    - &icon_visible_poi_landuse       true
-    - &text_visible_poi_landuse       true
-    - &label_visible_poi_landuse_e    true
-    - &icon_visible_poi_landuse_e     true
-    - &text_visible_poi_landuse_e     true
-    - &label_visible_station          true
-    - &icon_visible_station           true
-    - &text_visible_station           true
-    - &text_visible_highway           true
-    - &text_visible_highway_e         true
-    - &text_visible_trunk_primary     true
-    - &text_visible_trunk_primary_e2  false
-    - &text_visible_trunk_primary_e   true
-    - &text_visible_secondary         true
-    - &text_visible_secondary_e       true
-    - &text_visible_tertiary          true
-    - &text_visible_tertiary_e        true
-    - &text_visible_minor_road        true
-    - &text_visible_minor_road_e      true
-    - &text_visible_service_road      true
-    - &text_visible_path              true
-    - &text_visible_piste             true
-    - &text_visible_steps             true
-    - &text_visible_aerialway         true
-    - &text_visible_shields           true
-    - &text_visible_exits             true
-
-settings:
-    cameras:
-        - &camera_settings            { type: isometric, axis: [0, 1] }
-
-    lights:
-        - &light_settings             { type: directional, direction: [1, 1, -.9], diffuse: 0.5, ambient: 0.85 }
-
-    roads:
-        - &highway1                   [0.988,0.495,0.439]
-        - &highway1_e                 [0.988,0.495,0.439]
-        - &highway_link1              [1.000,0.631,0.590]
-        - &highway_casing1            [0.859,0.859,0.859]
-        - &highway_tunnel1            [0.800,0.800,0.800]
-        - &highway_tunnel_casing1     [0.870,0.870,0.870]
-        - &highway_link_tunnel_casing1 [0.8, 0.8, 0.7]
-        - &ferry1                     '#8bb5e4'
-        - &rail1                      '#999'
-        - &rail1_e                    '#bbb'
-        - &rail2                      '#777'             # less important rail (service, sidings)
-        - &major_road1                [1, 1, 1]
-        - &major_road1b               [1.0,1.0,1.0]
-        - &major_road1c               white    #15%
-        - &major_road2                [1.0,1.0,1.0]
-        - &major_road2a               [1.0,1.0,1.0]
-        - &major_road2b               [1.0,1.0,1.0]
-        - &major_road3                [1.0,1.0,1.0]
-        - &major_road4                white
-        - &major_road5                white
-        - &major_casing1              [0.859,0.859,0.859] # same as highway_casing1
-        - &major_casing2              [0.859,0.859,0.859] # zoomed out
-        - &major_tunnel1              [.870,0.870,0.870]  # light orange (major_route1)
-        - &major_tunnel_casing1       [0.780,0.780,0.780]
-        - &major_route1               [1.000,0.631,0.590]
-        - &major_route2               [1.000,0.752,0.730] # zoomed out
-        - &minor_route                [1.000,0.631,0.590] # same as major_route
-        - &minor_road1                [0.9,0.9,0.9]       # natural earth
-        - &minor_road2                [0.9,0.9,0.9]       # natural earth, same as major_road2
-        - &minor_road3                [0.9,0.9,0.9]
-        - &minor_road4                [0.9,0.9,0.9]       # zoomed out
-        - &minor_road5                [0.9,0.9,0.9]       # zoomed out, again
-        - &minor_casing1              white               # same as highway_casing1
-        - &minor_casing2              white               # zoomed out
-        - &minor_tunnel1              [0.8, 0.8, 0.7]
-        - &minor_tunnel_casing1       white
-        - &service_road1              white
-        - &service_road2              white
-        - &service_road_casing1       [0.770,0.770,0.770]
-        - &service_road_casing2       white
-        - &path1                      [0.91,0.91,0.91]
-        - &path2                      [0.91,0.91,0.91]    # zoomed out
-        - &path_casing1               [0.875,0.875,0.875]
-        - &path_bridge_casing1        [0.870,0.870,0.870]
-        - &path_bridge_casing2        [0.870,0.870,0.870] # zoomed out
-        - &path_steps1                [0.91,0.91,0.91]
-        - &path_steps1_b              '#f0ebeb'
-        - &piste_easy                 [0.367,0.750,0.622]
-        - &piste_intermediate         [0.420,0.678,0.863]
-        - &piste_advanced             [0.450,0.450,0.450]
-        - &piste_expert               [0.450,0.450,0.450]
-
-    boundaries:
-        - &country_boundary           [1.0,1.0,1.0]
-        - &region_boundary            [1.0,1.0,1.0]
-        - &subregion_boundary         '#bbb'
-        - &city_wall                  [0.682,0.682,0.682]
-        - &retaining_wall             [0.827,0.808,0.780]
-        - &snow_fence                 [0.827,0.808,0.780]
-        - &fence                      [0.827,0.808,0.780]
-
-    areas:
-        - &scene1      '#eee'                   # map background, water
-        - &water1      [0.83, 0.83, 0.83]       # water
-        - &water2      [.75,.75,.75]            # playa
-        - &water1_o    '#9dc3de'                # water stroke
-        - &water2_o    '#9dc3de'                # water stroke 2
-        - &earth1      '#666'                   # land color
-        - &earth1_r    '#666'                   # land color road
-        - &earth2      '#e9e4e0'                # urban
-        - &earth2_v    false                    # urban
-        - &earth2_e    '#b3b3b3'                # urban early
-        - &earth2_e2   '#b3b3b3'                # urban early fade in
-        - &earth2_e3   '#bbbbbb'                # urban early fade in 3
-        - &earth2_ev   true                     # urban early visibility
-        - &green1      [0.140,0.843,0.824]      # park
-        - &green1_r    [0.140,0.843,0.824]      # roads in parks
-        - &green1_b    '#94d8d6'                # buildings in parks
-        - &green1_bo   '#7fc3c1'                # buildings in parks, outlines
-        - &green1_w    '#b7d7bf'                # wilderness area
-        - &green1_ws   '#aed0b6'                # wilderness area stroke
-        - &green1b     [0.80,0.80,0.80]         # park
-        - &green2      [0.547,0.760,0.590]      # cemetery
-        - &green2_r    [0.7,0.7,0.7]            # cemetery road
-        - &green3      [0.000,0.779,0.328]      # golf course
-        - &green4      '#526054'                # farm faint
-        - &green4_v    false                    # farm faint
-        - &green5      '#5a695c'                # farm
-        - &green6      '#648560'                # nature reserve
-        - &green7      [0.169,0.651,0.631]      # forest
-        - &green8      [0.123,0.770,0.587]      # conservation
-        - &green9      '#cfe3d4'                # forest (landcover)
-        - &green9_e    '#cfe3d4'                # forest (landcover) early
-        - &green9_v    true                     # forest (landcover) visibility
-        - &green10     '#c7d4c0'                # sports_centre
-        - &green11     '#d8ddd0'                # minor zoo related AOIs
-        - &green11_o   '#aec7b5'                # minor zoo related AOIs outline
-        - &orange1     '#bfb08e'                # stadium
-        - &orange2     '#d8ccb0'                # pitch (play field)
-        - &orange3     '#b9a597'                # racetrack (play field)
-        - &brown1      [0.814,0.692,0.570]      # university
-        - &brown1_r    [0.814,0.692,0.570]      # roads in university
-        - &brown1_b    [.65, .65, .65]          # university buildings
-        - &brown1_bo   [.8, .8, .8]             # university building outlines
-        - &brown2      '#ada497'                # school
-        - &brown3      '#c7b7a2'                # playground
-        - &red1        [0.840,0.503,0.541]      # hospital
-        - &red1_r      [0.840,0.503,0.541]      # roads in hospital
-        - &red1_b      [.65, .65, .65]          # hospital buildings
-        - &red1_bo     [.8, .8, .8]             # hospital building outlines
-        - &grey1       '#717171'                # pedestrian, retail, airport apron, parking, church
-        - &grey1_e     '#cac6c4'                # pedestrian, retail, airport apron, parking, church early zoom 14
-        - &grey1_v     true                     # pedestrian, retail, airport apron, parking, church
-        - &grey2       [0.5, 0.5, 0.5]          # airport runway
-        - &grey3       grey                     # railway
-        - &grey4       '#ffc52a'                # airport taxiway
-        - &grey5       '#ffc52a'                # airport taxiway
-        - &grey6       '#c6c6c6'                # industrial
-        - &grey6_b     [.65, .65, .65]          # industrial buildings
-        - &grey6_bo    [.8, .8, .8]             # industrial building outlines
-        - &grey7       '#ecebe9'                # pedestrian, match minor road / path color
-        - &grey7_v     true                     # pedestrian visibility
-        - &grey8       '#ecebe9'                # winter sports
-        - &grey8_v     true                     # winter sports visibility
-        - &grey9       [.7, .0, .0, 0.5]        #[.7, .7, .7]        # transit platform
-        - &grey9_o     [.5, .5, .5]             # transit platform outline
-        - &grey9_v     true                     # transit platform visibility
-        - &grey10      '#d4cce6'                # generic major landuse (theme park, resort, aquarium, winery)
-        - &grey10_o    '#bcb9c5'                # generic major landuse outline
-        - &grey11      '#d7d7d7'                # generic minor landuse (attraction, artwork)
-        - &grey11_o    '#cccccc'                # generic minor landuse outline
-        - &grey12      '#cfcfcf'                # generic minor amusements (roller coasters, rides, slide, carousel)
-        - &grey12_o    '#c5c5c5'                # generic minor amusements
-        - &purple      '#f0e1e1'                # airport
-        - &purple_v    false                    # airport
-        - &purple_b    '#c2c3c4'                # airport buildings
-        - &purple_bo   '#969798'                # airport buildings outline
-        - &mystry1     '#bfb08e'                # recreation ground
-        - &yellow1     '#e7eda8'                # beach
-        - &building1   [0.784, 0.784, 0.784]    # building
-        - &building2   [.860, .860, .860]       # building stroke
-        - &building_o  5                        # building stroke order
-        - &building_e  true                     # building stroke order
-
-    labels:
-        - &text_fill          black
-        - &text_fill2        '#555'             # WHITE
-        - &text_fill_road_e   '#555'            # WHITE
-        - &text_fill_exits    [0.920,0.398,0.340]         # motorway junctions, highway_casing1
-        - &text_fill_building '#ccc'            # WHITE
-        - &text_fill_address  '#aaa'            # HUH
-        - &text_fill_water   '#4c89b5'          # blue
-        - &text_fill_park    [0.35,0.35,0.35]   # black
-        - &text_fill_beach    [0.35,0.35,0.35]  # black
-        - &text_fill_piste    '#444'             # dark gray
-        - &text_fill_piste_e  '#666'             # dark gray early
-        - &text_fill_shield   white              # road shield fill color
-        - &text_stroke [0.870,0.870,0.870]      # land color
-        - &text_stroke_water [0.9, 0.9, 0.9]    # water stroke color
-        - &text_stroke_park  '#bddec5'          # park stroke color
-        - &text_stroke_building  [0.83, 0.83, 0.83] # building stroke color
-        - &text_stroke_address   [0.85, 0.85, 0.85]    # address stroke color
-        - &text_stroke_road1  [0.9, 0.9, 0.9]   # road stroke color highway
-        - &text_stroke_road2  [0.9, 0.9, 0.9]   # road stroke color major road
-        - &text_stroke_road3  [0.9, 0.9, 0.9]   # road stroke color major road route
-        - &text_stroke_road4  [0.9, 0.9, 0.9]   # road stroke color minor road
-        - &text_stroke_shield  '#D16768'        # road shield stroke color &highway_casing1
-        - &townspot_sprite   townspot-m-rev     # depends on land color and text settings
-        - &text_font_family  'Open Sans'        # branding in asperational Unicode, yo (or Helvetica)
-
+global:
+    #ux/ui
+    ux_language: false             # l10n language code, trusting OSM in v0.10 tiles, fixed in v1.0 tiles
+    ux_language_fallback: false    # l10n language code, trusting OSM in v0.10 tiles, fixed in v1.0 tiles
+    ux_language_text_source: |
+        function() {
+            // if a ux_langauge has been defined use that, else if there is feature name in the fallback_ux_language then use that, else use the feature's default name in the local language
+            return (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature.name;
+        }
+    ux_language_text_source_short: |
+        function() {
+            return (global.ux_language && feature['name:short:'+global.ux_language]) || (global.ux_language_fallback && feature['name:short:'+global.ux_language_fallback]) || feature['name:short'];
+        }
+    ux_language_text_source_short_proxy_name: |
+        function() {
+            var name  = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
+            var short = (global.ux_language && feature['name:short:'+global.ux_language]) || (global.ux_language_fallback && feature['name:short:'+global.ux_language_fallback]) || feature['name:short'];
+            return short ? name : '';
+        }
+    ux_language_text_source_abbreviation: |
+        function() {
+            var name  = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
+            var abbrev = (global.ux_language && feature['name:abbreviation:'+global.ux_language]) || (global.ux_language_fallback && feature['name:abbreviation:'+global.ux_language_fallback]) || feature['name:abbreviation'];
+            return abbrev || name;
+        }
+    ux_language_text_source_iata: |
+        function() {
+            var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
+            if(feature.iata) {
+                if (name) {
+                    return name + ' (' + feature.iata + ')';
+                }
+                else {
+                    return feature.iata;
+                }
+            } else {
+                return name;
+            }
+        }
+    ux_language_text_source_ocean: |
+        function() {
+            var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
+            return name.split('').join('  ');
+        }
+    ux_language_text_source_sea: |
+        function() {
+            var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
+            return name.split('').join(' ');
+        }
+    ux_language_text_source_continent: |
+        function() {
+            var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
+            return name.split('').join(' ');
+        }
+    ux_language_text_source_road_ref_and_name: |
+        function() {
+            var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
+            if(feature.ref && name) {
+                return (feature.ref + ' ' + name);
+            } else {
+                return name;
+            }
+        }
+    ux_language_text_source_road_ref_and_name_short: |
+        function() {
+            var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
+            if (feature.ref && (feature.ref.length < 6) && name) {
+                return feature.ref + ' ' + name;
+            } else {
+                return name;
+            }
+        }
+    ux_language_text_source_piste_advanced: |
+        function() {
+            var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
+            return name ? ('◆ ' + name) : '◆';
+        }
+    ux_language_text_source_piste_expert: |
+        function() {
+            var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
+            return name ? ('◆◆ ' + name) : '◆◆';
+        }
+    ux_language_text_source_building_and_address: |
+        function() {
+            var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
+            if (name && feature.addr_housenumber) {
+                return name + '\n' + feature.addr_housenumber;
+            } else {
+                return name;
+            }
+        }
+
+    # 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
+    #
+    # TRANSIT OVERLAY
+    # should default to "auto", with SDK overriding it to true or false,
+    # or app logic sets other booleans that triggers auto behavior later
+    sdk_transit_overlay: false
+    #
+    # default order for basemap features
+    feature_order: function() { return feature.sort_key; }
+    #
+    #label visibility
+    text_visible_continent: true
+    text_visible_admin: true
+    text_visible_populated_places: true
+    icon_visible_populated_places: true
+    text_visible_neighbourhoods: true
+    text_visible_neighbourhoods_e: true
+    text_visible_building: true
+    text_visible_address: true
+    text_visible_water_labels: true
+    text_visible_island: true
+    label_visible_landuse_green: true
+    icon_visible_landuse_green: true
+    text_visible_landuse_green: true
+    label_visible_poi_landuse: true
+    icon_visible_poi_landuse: true
+    text_visible_poi_landuse: true
+    label_visible_poi_landuse_e: true
+    icon_visible_poi_landuse_e: true
+    text_visible_poi_landuse_e: true
+    label_visible_station: true
+    icon_visible_station: true
+    text_visible_station: true
+    text_visible_highway: true
+    text_visible_highway_e: true
+    text_visible_trunk_primary: true
+    text_visible_trunk_primary_e2: true
+    text_visible_trunk_primary_e: true
+    text_visible_secondary: true
+    text_visible_secondary_e: true
+    text_visible_tertiary: true
+    text_visible_tertiary_e: true
+    text_visible_minor_road: true
+    text_visible_minor_road_e: true
+    text_visible_service_road: true
+    text_visible_path: true
+    text_visible_piste: true
+    text_visible_steps: true
+    text_visible_aerialway: true
+    text_visible_airport_gate: true
+    text_visible_shields: true
+    text_visible_exits: true
+    #
+    #label styling
+    text_fill: black                         # BLACK
+    text_fill2: '#555'                       # WHITE
+    text_fill_road_e: '#555'                 # WHITE
+    text_fill_exits: [0.920,0.398,0.340]     # motorway junctions, highway_casing1
+    text_fill_building: '#ccc'               # WHITE
+    text_fill_address: '#aaa'                # HUH
+    text_fill_water: '#4c89b5'               # blue
+    text_fill_park: [0.35,0.35,0.35]         # black
+    text_fill_beach: [0.35,0.35,0.35]        # black
+    text_fill_piste: '#444'                  # dark gray
+    text_fill_piste_e: '#666'                # dark gray early
+    text_fill_shield: white                  # road shield fill color
+    text_stroke: [0.870,0.870,0.870]         # land color
+    text_stroke_water: [0.9, 0.9, 0.9]       # water stroke color
+    text_stroke_park: '#bddec5'              # park stroke color
+    text_stroke_building: [0.83, 0.83, 0.83] # building stroke color
+    text_stroke_address:  [0.85, 0.85, 0.85] # address stroke color
+    text_stroke_road1: [0.9, 0.9, 0.9]       # road stroke color highway
+    text_stroke_road2: [0.9, 0.9, 0.9]       # road stroke color major road
+    text_stroke_road3: [0.9, 0.9, 0.9]       # road stroke color major road route
+    text_stroke_road4: [0.9, 0.9, 0.9]       # road stroke color minor road
+    text_stroke_shield: '#D16768'            # road shield stroke color &highway_casing1
+    townspot_sprite: townspot-m-rev          # depends on land color and text settings
+    text_font_family: 'Open Sans'            # branding in asperational Unicode, yo (or Helvetica)
+    #
+    #roads
+    highway1: [0.988,0.495,0.439]
+    highway1_e: [0.988,0.495,0.439]
+    highway_link1: [1.000,0.631,0.590]
+    highway_casing1: [0.859,0.859,0.859]
+    highway_tunnel1: [0.800,0.800,0.800]
+    highway_tunnel_casing1: [0.870,0.870,0.870]
+    highway_link_tunnel_casing1: [0.8, 0.8, 0.7]
+    ferry1: '#8bb5e4'
+    rail1: '#999'
+    rail1_e: '#bbb'
+    rail2: '#777'                           # less important rail (service, sidings)
+    major_road1: [1, 1, 1]
+    major_road1b: [1.0,1.0,1.0]
+    major_road1c: white                     #15%
+    major_road2: [1.0,1.0,1.0]
+    major_road2a: [1.0,1.0,1.0]
+    major_road2b: [1.0,1.0,1.0]
+    major_road3: [1.0,1.0,1.0]
+    major_road4: white
+    major_road5: white
+    major_casing1: [0.859,0.859,0.859]      # same as highway_casing1
+    major_casing2: [0.859,0.859,0.859]      # zoomed out
+    major_tunnel1: [.870,0.870,0.870]       # light orange (major_route1)
+    major_tunnel_casing1: [0.780,0.780,0.780]
+    major_route1: [1.000,0.631,0.590]
+    major_route2: [1.000,0.752,0.730]       # zoomed out
+    minor_route: [1.000,0.631,0.590]        # same as major_route
+    minor_road1: [0.9,0.9,0.9]              # natural earth
+    minor_road2: [0.9,0.9,0.9]              # natural earth, same as major_road2
+    minor_road3: [0.9,0.9,0.9]
+    minor_road4: [0.9,0.9,0.9]              # zoomed out
+    minor_road5: [0.9,0.9,0.9]              # zoomed out, again
+    minor_casing1: white                    # same as highway_casing1
+    minor_casing2: white                    # zoomed out
+    minor_tunnel1: [0.8, 0.8, 0.7]
+    minor_tunnel_casing1: white
+    service_road1: white
+    service_road2: white
+    service_road_casing1: [0.770,0.770,0.770]
+    service_road_casing2: white
+    path1: [0.91,0.91,0.91]
+    path2: [0.91,0.91,0.91]                 # zoomed out
+    path_casing1: [0.875,0.875,0.875]
+    path_bridge_casing1: [0.870,0.870,0.870]
+    path_bridge_casing2: [0.870,0.870,0.870] # zoomed out
+    path_steps1: [0.91,0.91,0.91]
+    path_steps1_b: '#f0ebeb'
+    piste_easy: [0.367,0.750,0.622]
+    piste_intermediate: [0.420,0.678,0.863]
+    piste_advanced: [0.450,0.450,0.450]
+    piste_expert: [0.450,0.450,0.450]
+    #
+    #boundaries
+    country_boundary: [1.0,1.0,1.0]
+    region_boundary: [1.0,1.0,1.0]
+    subregion_boundary: '#bbb'
+    city_wall: [0.682,0.682,0.682]
+    retaining_wall: [0.827,0.808,0.780]
+    snow_fence: [0.827,0.808,0.780]
+    fence: [0.827,0.808,0.780]
+    #
+    #landuse
+    scene1: '#eee'                          # map background, water
+    water1: [0.83, 0.83, 0.83]              # water
+    water2: [.75,.75,.75]                   # playa
+    water1_o: '#9dc3de'                     # water stroke
+    water2_o: '#9dc3de'                     # water stroke 2
+    earth1: '#666'                          # land color
+    earth1_r: '#666'                        # land color road
+    earth2: '#e9e4e0'                       # urban
+    earth2_v: false                         # urban
+    earth2_e: '#b3b3b3'                     # urban early
+    earth2_e2: '#b3b3b3'                    # urban early fade in
+    earth2_e3: '#bbbbbb'                    # urban early fade in 3
+    earth2_ev: true                         # urban early visibility
+    green1: [0.140,0.843,0.824]             # park
+    green1_r: [0.140,0.843,0.824]           # roads in parks
+    green1_b: '#94d8d6'                     # buildings in parks
+    green1_bo: '#7fc3c1'                    # buildings in parks, outlines
+    green1_w: '#b7d7bf'                     # wilderness area
+    green1_ws: '#aed0b6'                    # wilderness area stroke
+    green1b: [0.80,0.80,0.80]               # park
+    green2: [0.547,0.760,0.590]             # cemetery
+    green2_r: [0.7,0.7,0.7]                 # cemetery road
+    green3: [0.000,0.779,0.328]             # golf course
+    green4: '#526054'                       # farm faint
+    green4_v: false                         # farm faint
+    green5: '#5a695c'                       # farm
+    green6: '#648560'                       # nature reserve
+    green7: [0.169,0.651,0.631]             # forest
+    green8: [0.123,0.770,0.587]             # conservation
+    green9: '#cfe3d4'                       # forest (landcover)
+    green9_e: '#cfe3d4'                     # forest (landcover) early
+    green9_v: true                          # forest (landcover) visibility
+    green10: '#c7d4c0'                      # sports_centre
+    green11: '#d8ddd0'                      # minor zoo related AOIs
+    green11_o: '#aec7b5'                    # minor zoo related AOIs outline
+    orange1: '#bfb08e'                      # stadium
+    orange2: '#d8ccb0'                      # pitch (play field)
+    orange3: '#b9a597'                      # racetrack (play field)
+    brown1: [0.814,0.692,0.570]             # university
+    brown1_r: [0.814,0.692,0.570]           # roads in university
+    brown1_b: [.65, .65, .65]               # university buildings
+    brown1_bo: [.8, .8, .8]                 # university building outlines
+    brown2: '#ada497'                       # school
+    brown3: '#c7b7a2'                       # playground
+    red1: [0.840,0.503,0.541]               # hospital
+    red1_r: [0.840,0.503,0.541]             # roads in hospital
+    red1_b: [.65, .65, .65]                 # hospital buildings
+    red1_bo: [.8, .8, .8]                   # hospital building outlines
+    grey1: '#717171'                        # pedestrian, retail, airport apron, parking, church
+    grey1_e: '#cac6c4'                      # pedestrian, retail, airport apron, parking, church early zoom 14
+    grey1_v: true                           # pedestrian, retail, airport apron, parking, church
+    grey2: [0.5, 0.5, 0.5]                  # airport runway
+    grey3: grey                             # railway
+    grey4: '#ffc52a'                        # airport taxiway
+    grey5: '#ffc52a'                        # airport taxiway
+    grey6: '#c6c6c6'                        # industrial
+    grey6_b: [.65, .65, .65]                # industrial buildings
+    grey6_bo: [.8, .8, .8]                  # industrial building outlines
+    grey7: '#ecebe9'                        # pedestrian, match minor road / path color
+    grey7_v: true                           # pedestrian visibility
+    grey8: '#ecebe9'                        # winter sports
+    grey8_v: true                           # winter sports visibility
+    grey9: [.7, .0, .0, 0.5]                # [.7, .7, .7]        # transit platform
+    grey9_o: [.5, .5, .5]                   # transit platform outline
+    grey9_v: true                           # transit platform visibility
+    grey10: '#d4cce6'                       # generic major landuse (theme park, resort, aquarium, winery)
+    grey10_o: '#bcb9c5'                     # generic major landuse outline
+    grey11: '#d7d7d7'                       # generic minor landuse (attraction, artwork)
+    grey11_o: '#cccccc'                     # generic minor landuse outline
+    grey12: '#cfcfcf'                       # generic minor amusements (roller coasters, rides, slide, carousel)
+    grey12_o: '#c5c5c5'                     # generic minor amusements
+    purple: '#f0e1e1'                       # airport
+    purple_v: false                         # airport
+    purple_b: '#c2c3c4'                     # airport buildings
+    purple_bo: '#969798'                    # airport buildings outline
+    mystry1: '#bfb08e'                      # recreation ground
+    yellow1: '#e7eda8'                      # beach
+    building1: [0.784, 0.784, 0.784]        # building
+    building2: [.860, .860, .860]           # building stroke
+    building_o:  5                          # building stroke order
+    building_e: true                        # building stroke order early
+    building_extrude: true                  # building extrusion toggle
+    building_extrude_height: |              # building extrude height logic
+        function() { return feature.height || 20; }
 
 
 textures:
@@ -382,13 +535,13 @@ textures:
         filtering: mipmap
 
 sources:
-    osm:
+    mapzen:
         # EraserMaps the app only supports MVT format tiles
-        type:  GeoJSON #TopoJSONTiles topojson
+        type:  MVT #TopoJSONTiles topojson
         #url:  http://vector.dev.mapzen.com/osm/all/{z}/{x}/{y}.mvt
         #enforce_winding: true  #because Tangram v0.4 and tiles v0.5-pre don't play nice
         #url:  //localhost:8080/osm/all/{z}/{x}/{y}.mvt
-        url:  https://vector.mapzen.com/osm/all/{z}/{x}/{y}.json?api_key=vector-tiles-HqUVidw
+        url:  https://vector.mapzen.com/osm/all/{z}/{x}/{y}.mvt?api_key=vector-tiles-P6dkVl4
         # road labels in Tangram JS are broken when overzooming, set max_zoom: 18 to preview fix
         max_zoom: 16
 
@@ -406,6 +559,10 @@ sources:
 #        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
@@ -705,7 +862,7 @@ styles:
                 WALL_TINT: vec3(1., 3., .800)
             blocks:
                 color: |
-                    if (dot(vec3(0., 0., 1.), worldNormal()) < 1.0 - TANGRAM_EPSILON) {
+                    if (dot(vec3(0., 0., 1.), worldNormal()) < .5) {
                         // If it's a wall
                         color.rgb = hsv2rgb(rgb2hsv(color.rgb) * WALL_TINT);
                         color.rgb = mix(color.rgb, vec3(0.),
@@ -764,6 +921,11 @@ styles:
         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
@@ -797,7 +959,7 @@ styles:
 
 scene:
     background:
-        color: *scene1
+        color: global.scene1
 
 layers:
     # Map overlays for styling the server response (using special source layer names) for route line, current location, and search result pins
@@ -808,6 +970,13 @@ layers:
                 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:
@@ -940,24 +1109,24 @@ layers:
 
     # Basemap styling
     earth:
-        data: { source: osm, layer: earth }
+        data: { source: mapzen, layer: earth }
         draw:
             polygons:
-                order: function() { return feature.sort_key; }
+                order: global.feature_order
                 color: [0.870,0.870,0.870]
 
     water:
-        data: { source: osm, layer: water }
+        data: { source: mapzen, layer: water }
         draw:
             grid:
-                order: function() { return feature.sort_key; }
-                #color: *water1
+                order: global.feature_order
+                #color: global.water1
         ocean:
             filter:
                 kind: ocean
             draw:
                 grid:
-                    color: *water1
+                    color: global.water1
         inland-water:
             filter:
                 all:
@@ -982,24 +1151,24 @@ layers:
                     - { $zoom: { min: 15 } }
             draw:
                 grid:
-                    color: *water1
+                    color: global.water1
         other-water-areas:
             filter: { not: { kind: [ocean, lake, water, reservoir, playa, swimming_pool] }, $zoom: { min: 11 }, area: { min: 100 } }
             draw:
                 grid:
-                    color: *water1
+                    color: global.water1
         playas:
             filter: { kind: playa, $zoom: {min: 6} }
             draw:
                 polygons:
-                    order: function() { return feature.sort_key; }
+                    order: global.feature_order
                     color: [0.870,0.870,0.870]
         water-boundary-ocean-early:
             filter: { boundary: yes, kind: ocean, $zoom: {min: 1, max: 17} }
             draw:
                 line2:
                     style: lines
-                    order: function() { return feature.sort_key; }
+                    order: global.feature_order
                     color: [[9,[0.396,0.833,0.920]],[10,[0.886,0.937,0.988]]]
                     width: [[9,0.25px],[10,2px],[11,3px],[13,4px],[15,6px]]
                 lines:
@@ -1017,7 +1186,7 @@ layers:
             filter: { boundary: yes, not: { kind: ocean }, $zoom: { min: 8 } }
             draw:
                 lines:
-                    order: function() { return feature.sort_key; }
+                    order: global.feature_order
                     # color: [[8,[0.635,0.737,0.753]],[13,[0.635,0.737,0.753]],[14,[0.569,0.722,0.749]],[15,[0.397,0.743,0.809]]]
                     color: [[8,[0.749,0.831,0.867]],[12,[0.698,0.788,0.816]],[13,[0.698,0.784,0.812]],[14,[0.627,0.788,0.831]],[17,[0.643,0.824,0.851]]]
                     width: [[8,0.5px],[10,0.5px],[11,0.5px],[12,0.75px],[13,1px],[14,1px],[15,1px],[16,1px],[17,1px]]
@@ -1043,7 +1212,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: global.feature_order
                     color: [[11,[0.753,0.820,0.835]],[12,[0.710,0.800,0.824]],[13,[0.886,0.937,0.988]]]
                     width: [[8,0px],[10,0px],[11,0.75px],[12,1px],[13,1px],[14,2px],[15,3px],[16,4px],[17,5px]]
                     join: round
@@ -1051,8 +1220,44 @@ layers:
                         color: [[11,[0.671,0.788,0.812]],[13,[0.710,0.800,0.824]],[14,[0.635,0.812,0.843]]]
                         width: [[9,0px],[11,0px],[12,0px],[13,0.5px],[14,0.75px],[15,0.75px],[16,0.75px],[17,1px]]
 
+    water-line-labels:
+        data: { source: mapzen, layer: [water] }
+        filter:
+            all:
+                - name: true
+                - $geometry: line
+                - kind: [river,canal,stream,dam,ditch,drain]
+                - $zoom: { min: 14 }
+        draw:
+            text-blend-order:
+                text_source: global.ux_language_text_source
+                font:
+                    fill: [0.314,0.591,0.640]
+                    family: global.text_font_family
+                    style: italic
+                    weight: 400
+                    size: 12px
+        water-line-labels-z14:
+            filter: { $zoom: [14] }
+            draw:
+                text-blend-order: { font: { size: 10px } }
+        water-line-labels-z17:
+            filter: { $zoom: [17] }
+            draw:
+                text-blend-order: { font: { size: 14px } }
+        not-river-not-stream:
+            filter: { kind: [canal,dam,ditch,drain], $zoom: { max: 16 } }
+            draw:
+                text-blend-order:
+                    visible: false
+        stream:
+            filter: { kind: [stream], $zoom: { max: 17 } }
+            draw:
+                text-blend-order:
+                    visible: false
+
     subway-light-rail:
-        data: { source: osm, layer: transit }
+        data: { source: mapzen, layer: transit }
         filter: { not: { kind: [platform] }, $zoom: { min: 14 } }
         draw:
             lines:
@@ -1079,12 +1284,12 @@ layers:
                     width: [[14,0px],[15,0.6px],[16,0.75px],[17,1.5px],[19,1m]]
 
     railway-late:
-        data: { source: osm, layer: roads }
+        data: { source: mapzen, layer: roads }
         filter: { kind: rail, not: { railway: [subway,light_rail,tram] } }
         draw:
             lines:
                 interactive: true
-                order: function() { return feature.sort_key; }
+                order: global.feature_order
                 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:
@@ -1098,7 +1303,7 @@ layers:
             draw:
                 lines:
                     # let roads sort themselves past zoom 14
-                    order: function() { return feature.sort_key; }
+                    order: global.feature_order
                     # but give them all the same outline
                     outline:
                         order: 354
@@ -1112,23 +1317,23 @@ layers:
                             order: function() { return feature.sort_key || 305; }
 
     platforms:
-        data: { source: osm, layer: transit }
+        data: { source: mapzen, layer: transit }
         filter: { kind: platform }
         draw:
             lines_transparent:
                 color: [0.569,0.690,0.722,0.5]
                 width: 5m
-                visible: *grey9_v
+                visible: global.grey9_v
         polygon_geom:
             filter: { $geometry: polygon }
             draw:
                 polygons_transparent:
                     color: [0.592,0.671,0.694,0.5]
-                    visible: *grey9_v
+                    visible: global.grey9_v
                 lines_transparent:
                     visible: false
                 outline_transparent:
-                    color: *grey9_o
+                    color: global.grey9_o
                     width: [[16,0px],[17,0.5px],[19,2px]]
         z-order:
             draw:
@@ -1140,22 +1345,23 @@ layers:
                     order: function() { if($zoom<17) { return feature.sort_key; } else { return 436; } }
 
     roads:
-        data: { source: osm, layer: roads }
+        data: { source: mapzen, layer: roads }
         filter: { not: { kind: rail } }
         draw:
             lines:
                 interactive: true
                 # let roads sort themselves past zoom 14 (using server value)
-                order: function() { return feature.sort_key; }
+                order: global.feature_order
                 # but give them all the same outline
                 outline:
                     order: 352
             text-blend-order:
+                text_source: global.ux_language_text_source
                 visible: false    # labels are enabled by each layer below
                 font:
-                    family: *text_font_family
+                    family: global.text_font_family
                     weight: 400
-                    fill: *text_fill
+                    fill: global.text_fill
 
         natural_earth_highways:
             filter: { source: 'naturalearthdata.com' }
@@ -1164,7 +1370,7 @@ layers:
                     # Perf impact (too many vertices)
                     #cap: round
                     #join: round
-                    color: *highway1
+                    color: global.highway1
                     width: [[5, 1px], [7, 1.4px], [9, 1.5px], [14, 3px], [16, 4px], [17, 10m]]
             major_road:
                 filter: { type: ['Secondary Highway','Road'] }
@@ -1176,7 +1382,7 @@ layers:
                 filter: { type: 'Unknown' }
                 draw:
                     lines:
-                        color: [[12, *minor_road1], [17, *minor_road2]]
+                        color: [[12, global.minor_road1], [17, global.minor_road2]]
                         width: [[12, 1.0px], [14, 1.5px], [15, 3px], [16, 5m]]
             ferry:
                 filter: { kind: Ferry }
@@ -1188,10 +1394,10 @@ layers:
             filter: { kind: highway }
             draw:
                 lines:
-                    color: [[8, *highway1], [14, *highway1], [15, [1.0,1.0,1.0]], [17, [1.0,1.0,1.0]]]
+                    color: [[8, global.highway1], [14, global.highway1], [15, [1.0,1.0,1.0]], [17, [1.0,1.0,1.0]]]
                     width: [[8, 1px], [9, 1.25px], [11, 1.2px], [12, 1.3px], [13, 1.5px], [14, 2.25px], [15, 0.15px], [16, 5.5px], [17, 12m]]
                     outline:
-                        color: [[11, *highway_casing1], [15,[0.988,0.495,0.439]], [17, [0.988,0.495,0.439]]]
+                        color: [[11, global.highway_casing1], [15,[0.988,0.495,0.439]], [17, [0.988,0.495,0.439]]]
                         width: [[11, 0], [12, 1px], [13, 1.33px], [15, 2px], [16, 2.25px], [17, 3px], [18, 3px]]
             early:
                 filter: { $zoom: { max: 15 } }
@@ -1203,12 +1409,12 @@ layers:
                 filter: { is_link: yes } # on- and off-ramps, etc
                 draw:
                     lines:
-                        color: [[9, *highway_link1], [14, *highway_link1], [15, [1.0,1.0,1.0]], [17, [1.0,1.0,1.0]]]
+                        color: [[9, global.highway_link1], [14, global.highway_link1], [15, [1.0,1.0,1.0]], [17, [1.0,1.0,1.0]]]
                         width: [[9, 0px], [11, 0.5px], [13, 1px], [14, 1px], [15, 0.15px], [16, 3px], [17, 4m], [18, 5m]]
                         cap: butt
                         outline:
 #                            order: 355
-                            color: [[10, *highway_casing1], [16, [0.988,0.495,0.439]], [17, [0.988,0.495,0.439]]]
+                            color: [[10, global.highway_casing1], [16, [0.988,0.495,0.439]], [17, [0.988,0.495,0.439]]]
                             width: [[14, 0px], [15, 0.85px], [17, 1.125px], [18, 1.5px]]
                 early:
                     filter: { $zoom: { max: 15 } }
@@ -1219,9 +1425,9 @@ layers:
                     filter: {is_tunnel: yes, $zoom: {min: 13} }
                     draw:
                         lines:
-                            color: *highway_tunnel1
+                            color: global.highway_tunnel1
                             outline:
-                                color: *highway_tunnel_casing1
+                                color: global.highway_tunnel_casing1
             tunnel:
                 filter: {is_tunnel: yes, $zoom: {min: 13} }
                 draw:
@@ -1237,12 +1443,16 @@ layers:
                         cap: round
                         outline:
                             cap: butt
+            labels-highway-default:
+                draw:
+                    text-blend-order:
+                        text_source: global.ux_language_text_source_road_ref_and_name
             labels-highway-early:
                 filter: { $zoom: [7,8,9] }
                 draw:
                     text-blend-order:
                         priority: 50
-                        visible: *text_visible_shields
+                        visible: global.text_visible_shields
                         text_source: ref
                         font:
                             fill: [1.0,1.0,1.0]
@@ -1254,7 +1464,7 @@ layers:
                     $zoom: 10
                 draw:
                     text-blend-order:
-                        visible: *text_visible_shields
+                        visible: global.text_visible_shields
                         text_source: ref
                         font:
                             fill: [1.0,1.0,1.0]
@@ -1266,7 +1476,7 @@ layers:
                     $zoom: 11
                 draw:
                     text-blend-order:
-                        visible: *text_visible_shields
+                        visible: global.text_visible_shields
                         text_source: ref
                         font:
                             fill: [1.0,1.0,1.0]
@@ -1278,7 +1488,7 @@ layers:
                     $zoom: 12
                 draw:
                     text-blend-order:
-                        visible: *text_visible_shields
+                        visible: global.text_visible_shields
                         text_source: ref
                         font:
                             fill: [1.0,1.0,1.0]
@@ -1291,9 +1501,8 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 50
-                        visible: *text_visible_highway
+                        visible: global.text_visible_highway
                         #text_source: ref
-                        text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
                         font:
                             fill: [0.0,0.0,0.0]
                             weight: 600
@@ -1305,41 +1514,40 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 50
-                        visible: *text_visible_highway
+                        visible: global.text_visible_highway
                         #text_source: ref
-                        text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
                         font:
                             fill: [0.0,0.0,0.0]
                             weight: 600
-                            size: 13px
+                            size: 12px
                             # stroke: { color: [0.976,0.541,0.490], width: 4 }
             labels-highway-z15:
                 filter:
                     $zoom: 15
                 draw:
                     text-blend-order:
-                        visible: *text_visible_highway
+                        visible: global.text_visible_highway
                         font:
                             fill: [0.0,0.0,0.0]
                             weight: 600
-                            size: 15px
+                            size: 14px
                             stroke: { color: [1.000,1.000,1.000], width: 2 }
             labels-highway-z16:
                 filter: { $zoom: { min: 16, max: 18 } }
                 draw:
                     text-blend-order:
                         priority: 50
-                        visible: *text_visible_highway
+                        visible: global.text_visible_highway
                         font:
                             fill: [0.0,0.0,0.0]
-                            size: 16px
+                            size: 15px
                             stroke: { color: [1.000,1.000,1.000], width: 4 }
             labels-highway-z18:
                 filter: { $zoom: { min: 18 } }
                 draw:
                     text-blend-order:
                         priority: 50
-                        visible: *text_visible_highway
+                        visible: global.text_visible_highway
                         font:
                             fill: [0.0,0.0,0.0]
                             size: 17px
@@ -1350,7 +1558,7 @@ layers:
             # default style
             draw:
                 lines:
-                    color: [[8, *major_road4], [13, *major_road2], [17, *major_road1]]
+                    color: [[8, global.major_road4], [13, global.major_road2], [17, global.major_road1]]
                     width: [[13, 0px], [14, 2px], [16, 2.5px], [19, 8m]]
             trunk_primary:
                 filter: { highway: [trunk, primary] }
@@ -1379,7 +1587,7 @@ layers:
                     filter: { ref: true }
                     draw:
                         lines:
-                            color: [[9,*major_route1], [14,*major_route1], [15,[1.0,1.0,1.0]], [16,[1.0,1.0,1.0]]]
+                            color: [[9, global.major_route1], [14, global.major_route1], [15,[1.0,1.0,1.0]], [16,[1.0,1.0,1.0]]]
                             #order: function() { return feature.sort_key + 1; }
                             # todo confirm widths
                             width: [[9, 1.0px], [10, 1.0px], [11, 1.2px], [12, 1.25px], [13, 1.5px], [14, 1.6px], [15, 0.15px], [16, 5.25px], [17, 12m]]
@@ -1398,53 +1606,71 @@ layers:
                         filter: {is_tunnel: yes, $zoom: {min: 13} }
                         draw:
                             lines:
-                                color: *major_tunnel1
+                                color: global.major_tunnel1
                                 outline:
-                                    color: *major_tunnel_casing1
+                                    color: global.major_tunnel_casing1
                                     width: [[13, 0.5px], [15, 2px], [16, 2px], [17, 3px]]
+                    labels-trunk_primary-route-default:
+                        draw:
+                            text-blend-order:
+                                text_source: global.ux_language_text_source_road_ref_and_name
+                    labels-trunk_primary-route-z13:
+                        filter: { $zoom: { max: 14 } }
+                        draw:
+                            text-blend-order:
+                                text_source: ref
+                                font:
+                                    fill: [1.0,1.0,1.0]
+                                    weight: 600
+                                    size: 11px
+                                    stroke: { color: [0.976,0.541,0.490], width: 2 }
                     labels-trunk_primary-route-z14:
                         filter: { $zoom: [14] }
                         draw:
                             text-blend-order:
                                 priority: 53
-                                visible: *text_visible_trunk_primary_e2
-                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                visible: global.text_visible_trunk_primary_e2
+                                #text_source: ref
                                 font:
                                     fill: [0.0,0.0,0.0]
-                                    size: 13px
+                                    #size: 12px
                                     stroke: { color: [0.95,0.95,0.95], width: 0.1px }
                     labels-trunk_primary-route-z15:
                         filter: { $zoom: [15] }
                         draw:
                             text-blend-order:
                                 priority: 53
-                                visible: *text_visible_trunk_primary
-                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                visible: global.text_visible_trunk_primary
+                                #text_source: global.ux_language_text_source_road_ref_and_name
                                 font:
                                     fill: [0.0,0.0,0.0]
                                     weight: 600
-                                    size: 15px
+                                    size: 14px
                                     stroke: { color: [0.95,0.95,0.95], width: 0.1px }
                     labels-trunk_primary-route-z16:
                         filter: { $zoom: { min: 16 } }
                         draw:
                             text-blend-order:
                                 priority: 53
-                                visible: *text_visible_trunk_primary
-                                text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                                visible: global.text_visible_trunk_primary
+                                #text_source: global.ux_language_text_source_road_ref_and_name
                                 font:
                                     fill: [0.0,0.0,0.0]
                                     weight: 600
-                                    size: 16px
+                                    size: 15px
                                     stroke: { color: [1.000,1.000,1.000], width: 4px }
+                labels-trunk_primary-default:
+                    draw:
+                        text-blend-order:
+                            text_source: global.ux_language_text_source_road_ref_and_name_short
                 labels-trunk_primary-z11:
                     filter:
                         $zoom: [11]
                     draw:
                         text-blend-order:
                             priority: 53
-                            visible: *text_visible_trunk_primary_e
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_trunk_primary_e
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.4,0.4,0.4]
                                 size: 10px
@@ -1455,8 +1681,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 53
-                            visible: *text_visible_trunk_primary_e
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_trunk_primary_e
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.4,0.4,0.4]
                                 size: 11px
@@ -1467,20 +1693,20 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 53
-                            visible: *text_visible_trunk_primary
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_trunk_primary
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.25,0.25,0.25]
                                 size: 12px
-                                stroke: { color: *text_stroke, width: 2 }
+                                stroke: { color: global.text_stroke, width: 2 }
                 labels-trunk_primary-z14:
                     filter:
                         $zoom: [14]
                     draw:
                         text-blend-order:
                             priority: 53
-                            visible: *text_visible_trunk_primary
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_trunk_primary
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.10,0.10,0.10]
                                 size: 13px
@@ -1490,8 +1716,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 53
-                            visible: *text_visible_trunk_primary
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_trunk_primary
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.0,0.0,0.0]
                                 size: 14px
@@ -1501,8 +1727,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 53
-                            visible: *text_visible_trunk_primary
-                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            visible: global.text_visible_trunk_primary
+                            #text_source: global.ux_language_text_source_road_ref_and_name
                             font:
                                 fill: [0.0,0.0,0.0]
                                 size: 15px
@@ -1512,8 +1738,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 53
-                            visible: *text_visible_trunk_primary
-                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            visible: global.text_visible_trunk_primary
+                            #text_source: global.ux_language_text_source_road_ref_and_name
                             font:
                                 fill: [0.0,0.0,0.0]
                                 size: 16px
@@ -1523,8 +1749,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 53
-                            visible: *text_visible_trunk_primary
-                            text_source: function() { if( feature.ref && feature.name ) { return feature.ref + " " + feature.name; } else { return feature.name; } }
+                            visible: global.text_visible_trunk_primary
+                            #text_source: global.ux_language_text_source_road_ref_and_name
                             font:
                                 fill: [0.0,0.0,0.0]
                                 size: 17px
@@ -1541,9 +1767,9 @@ layers:
                 filter: {is_tunnel: yes, $zoom: {min: 13} }
                 draw:
                     lines:
-                        color: *major_tunnel1
+                        color: global.major_tunnel1
                         outline:
-                            color: *major_tunnel_casing1
+                            color: global.major_tunnel_casing1
             secondary:
                 filter: { highway: secondary }
                 draw:
@@ -1581,32 +1807,36 @@ layers:
                         filter: {is_tunnel: yes, $zoom: {min: 13} }
                         draw:
                             lines:
-                                color: *major_tunnel1
+                                color: global.major_tunnel1
                                 outline:
-                                    color: *major_tunnel_casing1
+                                    color: global.major_tunnel_casing1
+                    labels-secondary-routes-default:
+                        draw:
+                            text-blend-order:
+                                text_source: global.ux_language_text_source_road_ref_and_name_short
                     labels-secondary-routes:
                         filter: { $zoom: [13] }
                         draw:
                             text-blend-order:
                                 priority: 54
-                                visible: *text_visible_secondary_e
-                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                visible: global.text_visible_secondary_e
+                                #text_source: global.ux_language_text_source_road_ref_and_name_short
                                 font:
                                     # need fill here?
                                     size: 12px
-                                    stroke: { color: *text_stroke, width: 4 }
+                                    stroke: { color: global.text_stroke, width: 4 }
                     labels-secondary-routes-z15:
                         filter: { $zoom: { min: 15 } }
                         draw:
                             text-blend-order:
                                 priority: 54
-                                visible: *text_visible_secondary_e
-                                text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                                visible: global.text_visible_secondary_e
+                                #text_source: global.ux_language_text_source_road_ref_and_name_short
                                 font:
                                     # need fill here?
                                     weight: 600
                                     size: 14px
-                                    stroke: { color: *text_stroke, width: 4 }
+                                    stroke: { color: global.text_stroke, width: 4 }
                 in_park:
                     filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden] }
                     draw:
@@ -1639,26 +1869,30 @@ layers:
                             lines:
                                 outline:
                                     color: pink
+                labels-secondary-default:
+                    draw:
+                        text-blend-order:
+                            text_source: global.ux_language_text_source_road_ref_and_name_short
                 labels-secondary-z13:
                     filter:
                         $zoom: [13]
                     draw:
                         text-blend-order:
                             priority: 54
-                            visible: *text_visible_secondary_e
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_secondary_e
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.5,0.5,0.5]
                                 size: 11px
-                                stroke: { color: *text_stroke, width: 2 }
+                                stroke: { color: global.text_stroke, width: 2 }
                 labels-secondary-z14:
                     filter:
                         $zoom: [14]
                     draw:
                         text-blend-order:
                             priority: 54
-                            visible: *text_visible_secondary_e
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_secondary_e
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.30,0.30,0.30]
                                 size: 12px
@@ -1669,8 +1903,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 54
-                            visible: *text_visible_secondary
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_secondary
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.10,0.10,0.10]
                                 size: 13px
@@ -1680,8 +1914,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 54
-                            visible: *text_visible_secondary
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_secondary
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.0,0.0,0.0]
                                 size: 14.5px
@@ -1691,9 +1925,9 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 54
-                            visible: *text_visible_secondary
+                            visible: global.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: global.ux_language_text_source_road_ref_and_name
                             font:
                                 # need a fill color here?
                                 fill: [0.15,0.15,0.15]
@@ -1736,17 +1970,17 @@ layers:
                         filter: {is_tunnel: yes, $zoom: {min: 13} }
                         draw:
                             lines:
-                                color: *major_tunnel1
+                                color: global.major_tunnel1
                                 outline:
-                                    color: *major_tunnel_casing1
+                                    color: global.major_tunnel_casing1
                 link:
                     filter: { is_link: yes } # on- and off-ramps, etc
                     draw:
                         lines:
-                            color: *major_road1
+                            color: global.major_road1
                             width: [[10, 0.5px], [14, 2px], [16, 4m], [17, 5m], [18, 6m]]
                             outline:
-                                color: [[12,*major_casing2]]
+                                color: [[12, global.major_casing2]]
                                 width: [[12, 0], [14, 1px], [16, 1.5px], [17, 2px]]
                 in_park:
                     filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden] }
@@ -1781,13 +2015,17 @@ layers:
                             lines:
                                 outline:
                                     color: pink
+                labels-tertiary-default:
+                    draw:
+                        text-blend-order:
+                            text_source: global.ux_language_text_source_road_ref_and_name_short
                 labels-tertiary-z13:
                     filter: { $zoom: [13] }
                     draw:
                         text-blend-order:
                             priority: 55
-                            visible: *text_visible_tertiary_e
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_tertiary_e
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.5,0.5,0.5]
                                 size: 10px
@@ -1797,8 +2035,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 55
-                            visible: *text_visible_tertiary_e
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_tertiary_e
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.5,0.5,0.5]
                                 size: 12px
@@ -1808,8 +2046,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 55
-                            visible: *text_visible_tertiary
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_tertiary
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.3,0.3,0.3]
                                 size: 12px
@@ -1819,8 +2057,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 55
-                            visible: *text_visible_tertiary
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_tertiary
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.3,0.3,0.3]
                                 size: 14px
@@ -1830,8 +2068,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 55
-                            visible: *text_visible_tertiary
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_tertiary
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.15,0.15,0.15]
                                 size: 15px
@@ -1841,8 +2079,8 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 55
-                            visible: *text_visible_tertiary
-                            text_source: function() { if( feature.ref && feature.name ) { if( feature.ref.length < 6 ) { return feature.ref + " " + feature.name; } else { return feature.name; } } else { return feature.name; } }
+                            visible: global.text_visible_tertiary
+                            #text_source: global.ux_language_text_source_road_ref_and_name_short
                             font:
                                 fill: [0.15,0.15,0.15]
                                 size: 15px
@@ -1951,8 +2189,8 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 56
-                        visible: *text_visible_minor_road_e
-                        text_source: name
+                        visible: global.text_visible_minor_road_e
+                        text_source: global.ux_language_text_source
                         font:
                             fill: [0.30,0.30,0.30]
                             size: 12px
@@ -1962,8 +2200,8 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 56
-                        visible: *text_visible_minor_road_e
-                        text_source: name
+                        visible: global.text_visible_minor_road_e
+                        text_source: global.ux_language_text_source
                         font:
                             fill: [0.35,0.35,0.35]
                             size: 14px
@@ -1973,8 +2211,8 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 56
-                        visible: *text_visible_minor_road_e
-                        text_source: name
+                        visible: global.text_visible_minor_road_e
+                        text_source: global.ux_language_text_source
                         font:
                             fill: [0.25,0.25,0.25]
                             size: 14px
@@ -1984,8 +2222,8 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 56
-                        visible: *text_visible_minor_road
-                        text_source: name
+                        visible: global.text_visible_minor_road
+                        text_source: global.ux_language_text_source
                         font:
                             # needs a fill color?
                             fill: [0.15,0.15,0.15]
@@ -2065,8 +2303,8 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 57
-                        visible: *text_visible_service_road
-                        text_source: name
+                        visible: global.text_visible_service_road
+                        text_source: global.ux_language_text_source
                         font:
                             # need fill color?
                             fill: [0.25,0.25,0.25]
@@ -2077,8 +2315,8 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 57
-                        visible: *text_visible_service_road
-                        text_source: name
+                        visible: global.text_visible_service_road
+                        text_source: global.ux_language_text_source
                         font:
                             # need fill color?
                             fill: [0.15,0.15,0.15]
@@ -2087,7 +2325,7 @@ layers:
         path:
             filter:
                 all:
-                    - kind: [path,portage_way]
+                    - kind: [path, portage_way]
                 not:
                     - highway: [steps, track]
                     - man_made: [pier]
@@ -2115,7 +2353,7 @@ layers:
                         width: [[15, 1.5px], [16, 4m], [17, 2m], [18, 2m]]
                         cap: round
                         outline:
-                            color: [[15,*path_bridge_casing2],[16,*path_bridge_casing1]]
+                            color: [[15, global.path_bridge_casing2],[16, global.path_bridge_casing1]]
                             width: [[15, 0px], [16, 1.0px], [18, 3px]]
                             cap: butt
             in_park:
@@ -2182,8 +2420,8 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 58
-                        visible: *text_visible_path
-                        text_source: name
+                        visible: global.text_visible_path
+                        text_source: global.ux_language_text_source
                         font:
                             # need a fill color?
                             fill: [0.25,0.25,0.25]
@@ -2193,15 +2431,15 @@ layers:
             filter: { kind: path, highway: track }
             draw:
                 lines:
-                    color: [[13, *minor_road4], [15, *minor_road3]]
+                    color: [[13, global.minor_road4], [15, global.minor_road3]]
                     width: [[13, 0.5px], [14, 1.0px], [15, 1.0px], [16, 6m]]
-                    #color: [[13,*minor_road4],[16,*minor_road3]]
+                    #color: [[13, global.minor_road4],[16, global.minor_road3]]
                     #width: [[13, 1.0], [15, 1.5], [17, 3m]]
                     cap: butt
                     join: round
                     outline:
                         order: 354
-                        color: *minor_casing1
+                        color: global.minor_casing1
                         width: [[15, 0px], [16, 0.5px], [17, 1.0px], [18, 2.0px]]
             bridge:
                 filter: { is_bridge: yes }
@@ -2210,7 +2448,7 @@ layers:
                         width: [[15, 3.5], [17, 3m]]
                         cap: round
                         outline:
-                            color: [[15,*minor_casing2],[16,*minor_casing1]]
+                            color: [[15, global.minor_casing2],[16, global.minor_casing1]]
                             width: [[15, 0.5px], [16, 1.0px], [18, 2px]]
                             cap: butt
             in_park:
@@ -2219,7 +2457,7 @@ layers:
                     lines:
                         width: [[13, 0.5px], [14, 0.5px], [15, 1.0px], [16, 6m]]
                         outline:
-                            color: [[16,*green1_r],[17,*major_casing1]]
+                            color: [[16, global.green1_r],[17, global.major_casing1]]
                             width: [[15, 0px], [16, 0.25px], [17, 0.5px], [18, 1.0px], [19, 2.0px]]
         steps:
             filter:
@@ -2228,7 +2466,7 @@ layers:
                     - highway: steps
             draw:
                 dashedline:
-                    order: function() { return feature.sort_key; }
+                    order: global.feature_order
                     color: [0.97,0.97,0.97]
                     width: [[14,0.6px],[16,2px],[17,4px],[18,5px],[19,8px],[20,10px]]
                     outline:
@@ -2260,8 +2498,8 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 59
-                        visible: *text_visible_steps
-                        text_source: name
+                        visible: global.text_visible_steps
+                        text_source: global.ux_language_text_source
                         font:
                             # need fill color?
                             size: 12px
@@ -2279,9 +2517,9 @@ layers:
                     priority: 18
                     visible: true
                     font:
-                        fill: *text_fill_piste
+                        fill: global.text_fill_piste
                         size: 12px
-                        stroke: { color: *grey8, width: 4 }
+                        stroke: { color: global.grey8, width: 4 }
             early:
                 filter: { $zoom: { max: 15 } }
                 draw:
@@ -2292,32 +2530,32 @@ layers:
                 draw:
                     text-blend-order:
                         font:
-                            fill: *text_fill_piste_e
+                            fill: global.text_fill_piste_e
                             size: 11px
             easy:
                 filter: { piste_difficulty: easy }
                 draw:
                     lines:
-                        color: *piste_easy
+                        color: global.piste_easy
             intermediate:
                 filter: { piste_difficulty: intermediate }
                 draw:
                     lines:
-                        color: *piste_intermediate
+                        color: global.piste_intermediate
             advanced:
                 filter: { piste_difficulty: advanced }
                 draw:
                     lines:
-                        color: *piste_advanced
+                        color: global.piste_advanced
                     text-blend-order:
-                        text_source: function() { if( feature.name ){ return '◆ ' + feature.name; } else { return '◆'; } }
+                        text_source: global.ux_language_text_source_piste_advanced
             expert:
                 filter: { piste_difficulty: expert }
                 draw:
                     lines:
-                        color: *piste_expert
+                        color: global.piste_expert
                     text-blend-order:
-                        text_source: function() { if( feature.name ){ return '◆◆ ' + feature.name; } else { return '◆◆'; } }
+                        text_source: global.ux_language_text_source_piste_expert
         pier:
             filter: { kind: path, man_made: pier }
             draw:
@@ -2408,12 +2646,12 @@ layers:
                 draw:
                     text-blend-order:
                         priority: 59
-                        visible: *text_visible_aerialway
-                        text_source: name
+                        visible: global.text_visible_aerialway
+                        text_source: global.ux_language_text_source
                         font:
-                            fill: *text_fill
+                            fill: global.text_fill
                             size: 12px
-                            stroke: { color: *grey8, width: 4 }
+                            stroke: { color: global.grey8, width: 4 }
                 minor:
                     filter: { not: { aerialway: [gondola,cable_car,chair_lift] }, $zoom: { max: 17 } }
                     draw:
@@ -2437,10 +2675,10 @@ layers:
                 lines:
                     outline:
                         # except bridges and tunnels, their outlines should also self-sort
-                        order: function() { return feature.sort_key; }
+                        order: global.feature_order
 
     buildings:
-        data: { source: osm, layer: buildings }
+        data: { source: mapzen, layer: buildings }
         filter:
             not: { location: underground }
         # set default footprint and extrusion draw properties, but don't draw by default (rules below will turn visibility on)
@@ -2448,7 +2686,7 @@ layers:
             polygons:
                 visible: false
                 order: 329
-                color: *building2
+                color: global.building2
             lines:
                 style: lines
                 order: 330
@@ -2464,52 +2702,48 @@ layers:
         # building footprints, pre-extrusion
         footprints:
             filter:
-                $zoom: { max: 18 }
-                any:
-                    # show footprints for buildings at least one zoom level before they will be extruded
-                    - { $zoom: [13], area: { min: 50000 } }
-                    - { $zoom: [13], height: { min: 250 } }
-                    - { $zoom: [13], volume: { min: 200000 } }
-                    - { $zoom: [14], area: { min: 5000 } }
-                    - { $zoom: [14], height: { min: 190 } }
-                    - { $zoom: [14], volume: { min: 150000 } }
-                    - { $zoom: [15], height: { min: 100 } }
-                    - { $zoom: [15], area: { min: 500 } }
-                    - { $zoom: [15], volume: { min: 100000 } }
-                    - { $zoom: [16], area: { min: 100 } }
-                    - { $zoom: [16], volume: { min: 50000 } }
-                    - { $zoom: { min: 17 } }
+                # show footprints for buildings at least one zoom level before they will be extruded
+                - { $zoom: 13, height: { min: 250 } }
+                - { $zoom: 13, area: { min: 50000 } }
+                - { $zoom: 13, volume: { min: 200000 } }
+                - { $zoom: 14, height: { min: 190 } }
+                - { $zoom: 14, area: { min: 5000 } }
+                - { $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 }, area: true }
             draw:
-                polygons:
-                    visible: true
-                lines:
-                    visible: true
+                polygons: { visible: true }
+                lines: { visible: true }
 
-        # 3d buildings
-        extrude:
-            filter:
-                any:
-                    - { $zoom: [15], height: { min: 190 } }
-                    - { $zoom: [15], area: { min: 5000 } }
-                    - { $zoom: [15], volume: { min: 100000 } }
-                    - { $zoom: [16], height: { min: 100 } }
-                    - { $zoom: [16], area: { min: 3500 } }
-                    - { $zoom: [16], volume: { min: 50000 } }
-                    - { $zoom: [17], area: { min: 500 } }
-                    - { $zoom: [17], volume: { min: 15000 } }
-                    - { $zoom: { min: 18 } }
-            draw:
-                polygons:
-                    visible: true
-                    order: 438
-                    style: building-grid
-                    extrude: function() { return feature.height || 20; }
-                    color: [0.892,0.880,0.878]
-                lines:
-                    visible: true
-                    order: 439
-                    style: building-lines
-                    extrude: function() { return feature.height || 20; }
+            # 3d buildings
+            extrude:
+                filter:
+                    all:
+                        - function() { return global.building_extrude; }
+                        - any:
+                            - { $zoom: 15, height: { min: 190 } }
+                            - { $zoom: 15, area: { min: 5000 } }
+                            - { $zoom: 15, volume: { min: 100000 } }
+                            - { $zoom: 16, height: { min: 100 } }
+                            - { $zoom: 16, area: { min: 3500 } }
+                            - { $zoom: 16, volume: { min: 50000 } }
+                            - { $zoom: 17, area: { min: 500 } }
+                            - { $zoom: 17, volume: { min: 15000 } }
+                            - { $zoom: { min: 18 } }
+                draw:
+                    polygons:
+                        order: 438
+                        style: building-grid
+                        extrude: global.building_extrude_height
+                        color: [0.892,0.880,0.878]
+                    lines:
+                        order: 439
+                        style: building-lines
+                        extrude: global.building_extrude_height
 
         # landuse-specific rules
         in_park:
@@ -2522,29 +2756,29 @@ layers:
             #     filter: { landuse_kind: golf_course }
             #     draw:
             #         polygons:
-            #             color: *building2
+            #             color: global.building2
             # nature_reserve:
             #     filter: { landuse_kind: nature_reserve }
             #     draw:
             #         polygons:
-            #             color: *building2
+            #             color: global.building2
             # conservation:
             #     filter: { landuse_kind: conservation }
             #     draw:
             #         polygons:
-            #             color: *building2
+            #             color: global.building2
             # zoo:
             #     filter: { landuse_kind: zoo }
             #     draw:
             #         polygons:
-            #             color: *building2
+            #             color: global.building2
         in_university:
             filter: { landuse_kind: [university,school] }
             draw:
                 polygons:
                     color: [0.950,0.917,0.883]
                 lines:
-                    color: *brown1_bo
+                    color: global.brown1_bo
         in_hospital:
             filter: { landuse_kind: hospital }
             draw:
@@ -2554,9 +2788,9 @@ layers:
             filter: { landuse_kind: [aerodrome, runway, taxiway] }
             draw:
                 polygons:
-                    color: *purple_b
+                    color: global.purple_b
                 lines:
-                    color: *purple_bo
+                    color: global.purple_bo
                     width: [[14,0.5px],[15,0.5px],[17,0.5px],[18,0.75px],[19,0.25m]]
         in_retail:
            filter: { landuse_kind: retail }
@@ -2565,7 +2799,7 @@ layers:
                     color: [0.945, 0.898, 0.878]
 
     buildings-labels:
-        data: { source: osm, layer: buildings }
+        data: { source: mapzen, layer: buildings }
         filter:
             all:
                 - { $zoom: { min: 17 } }
@@ -2588,16 +2822,18 @@ layers:
                 - { $zoom: { min: 20 }, area: true }
         draw:
             text-blend-order:
+                text_source: global.ux_language_text_source
                 interactive: true
                 move_into_tile: true
                 priority: 70
+                visible: global.text_visible_building
                 order: 7
                 font:
                     fill: '#666'
-                    family: *text_font_family
+                    family: global.text_font_family
                     style: italic
                     size: 11px
-                    stroke: { color: *text_stroke_address, width: 1 }
+                    stroke: { color: global.text_stroke_address, width: 1 }
         building_labels-z15-z16-z17:
             filter: { $zoom: [15,16,17] }
             draw: { text-blend-order: { font: { size: 12px, stroke: { width: 2 } } } }
@@ -2621,9 +2857,9 @@ layers:
             filter: { $zoom: { min: 20 } }
             draw:
                 text-blend-order:
-                    text_source: function() { if( feature.addr_housenumber ) { return feature.name + '\n' + feature.addr_housenumber; } else { return feature.name; } }
+                    text_source: global.ux_language_text_source_building_and_address
     address-labels:
-        data: { source: osm, layer: buildings }
+        data: { source: mapzen, layer: buildings }
         filter:
             $zoom: { min: 20 }
             any:
@@ -2631,24 +2867,25 @@ layers:
                 - { label_position: yes, addr_housenumber: true, name: false }
         draw:
             text-blend-order:
+                text_source: global.ux_language_text_source
                 interactive: true
                 order: 7
-                visible: *text_visible_address
+                visible: global.text_visible_address
                 text_source: addr_housenumber
                 font:
-                    fill: *text_fill_address
-                    family: *text_font_family
+                    fill: global.text_fill_address
+                    family: global.text_font_family
                     style: italic
                     size: 10px
-                    stroke: { color: *text_stroke_address, width: 4 }
+                    stroke: { color: global.text_stroke_address, width: 4 }
 
     boundaries:
-        data: { source: osm, layer: boundaries }
+        data: { source: mapzen, layer: boundaries }
         # country subdivisions (states, provinces)
         draw:
             lines:
                 interactive: true
-                order: function() { return feature.sort_key; }
+                order: global.feature_order
 #                color: red
 #                width: [[9, 1px], [14, 2px], [16, 3px], [17, 8m]]
         country:
@@ -2660,7 +2897,7 @@ layers:
             draw:
                 lines:
                     interactive: true
-                    color: *country_boundary
+                    color: global.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 }
@@ -2674,10 +2911,13 @@ layers:
                     # territorial here is probably a hack
                     - kind: [state, department, region, provincial, territorial, macroregion]
                     - admin_level: 4
+                not:
+                    # deal with bogus Hungary data
+                    - scalerank: 0
             draw:
                 lines:
                     interactive: true
-                    color: *region_boundary
+                    color: global.region_boundary
                     width: [[0, 0.5px], [2, 1.0px], [5, 1.25px], [6, 1.5px], [7, 1.75px], [9, 3.5px], [14, 5.5px], [16, 6.5px], [17, 16m]]
             water:
                 filter: { maritime_boundary: yes }
@@ -2693,47 +2933,56 @@ layers:
             filter: { kind: city_wall }
             draw:
                 lines:
-                    color: *city_wall
+                    color: global.city_wall
                     width: [[12, 0.75px], [13, 1.0px], [14, 1.2px], [15, 2.0px], [16, 2.5px], [19, 6m]]
         retaining_wall:
             filter: { kind: retaining_wall }
             draw:
                 lines:
-                    color: *retaining_wall
+                    color: global.retaining_wall
                     width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 4m]]
         snow_fence:
             filter: { kind: snow_fence }
             draw:
                 lines:
-                    color: *snow_fence
+                    color: global.snow_fence
                     width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 1.5m]]
         fence:
             filter: { kind: fence }
             draw:
                 lines:
-                    color: *fence
+                    color: global.fence
                     width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 1.5m]]
 
     places:
-        data: { source: osm, layer: places }
+        data: { source: mapzen, layer: places }
         filter: { not: { kind: [ocean, sea] } }
         draw:
+            icons:
+                text:
+                    text_source: global.ux_language_text_source
+                    visible: false    # labels are enabled by each layer below
+                    font:
+                        family: global.text_font_family
+                        # weight: 500
+                        fill: global.text_fill
             text-blend-order:
+                text_source: global.ux_language_text_source
                 visible: false    # labels are enabled by each layer below
                 font:
-                    family: *text_font_family
+                    family: global.text_font_family
                     # weight: 500
-                    fill: *text_fill
+                    fill: global.text_fill
 
         continent:
             filter: { name: true, kind: [continent], $zoom: {max: 5} }
             draw:
                 text-blend-order:
-                    visible: *text_visible_continent
+                    visible: global.text_visible_continent
                     font:
                         size: 14px
                         weight: 700
-                        # stroke: { color: *text_stroke, width: 4 }
+                        # stroke: { color: global.text_stroke, width: 4 }
                         transform: uppercase
 
         country-z2:
@@ -2745,8 +2994,8 @@ layers:
             draw:
                 text-blend-order:
                     priority: 3
-                    visible: *text_visible_admin
-                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    visible: global.text_visible_admin
+                    text_source: global.ux_language_text_source
                     font:
                         fill: [0.30,0.30,0.30]
                         weight: 400
@@ -2757,18 +3006,18 @@ layers:
             draw:
                 text-blend-order:
                     priority: 3
-                    visible: *text_visible_admin
-                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    visible: global.text_visible_admin
+                    text_source: global.ux_language_text_source
                     font:
                         fill: [0.20,0.20,0.20]
                         size: 11px
                         weight: 600
-                        # stroke: { color: *text_stroke, width: 4 }
+                        # stroke: { color: global.text_stroke, width: 4 }
                         transform: uppercase
     #            icons:
     #                size: [[13, 12px], [15, 18px]]
     #                interactive: true
-    #                sprite: *townspot_sprite
+    #                sprite: global.townspot_sprite
             early-ones:
                 # US, Brazil, China, Russia, Canada, Greenland, Iceland, Australia, India, Japan, Guam, Indonesia, South Africa, Egypt, Nigeria, Kenya
                 filter: { not: { name: ["United States of America","Brasil","中华人民共和国","Россия","Canada","Kalaallit Nunaat","Ísland","Australia","India","日本","Guam","Indonesia","South Africa","مصر","Nigeria","Kenya"] }, $zoom: {min: 3, max: 4} }
@@ -2780,18 +3029,18 @@ layers:
             draw:
                 text-blend-order:
                     priority: 3
-                    visible: *text_visible_admin
-                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    visible: global.text_visible_admin
+                    text_source: global.ux_language_text_source
                     font:
                         size: 12px
                         weight: 600
                         fill: [0.40,0.40,0.40]
-                        # stroke: { color: *text_stroke, width: 4 }
+                        # stroke: { color: global.text_stroke, width: 4 }
                         transform: uppercase
     #            icons:
     #                size: [[13, 12px], [15, 18px]]
     #                interactive: true
-    #                sprite: *townspot_sprite
+    #                sprite: global.townspot_sprite
             early-ones-z4:
                 filter: { name: [Nederland,Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,Crna Gora,Македонија,The Gambia,Burundi,Swaziland,الإمارات العربية المتحدة,العراق,Singapore,El Salvador,Belize,Trinidad and Tobago, Saint Lucia, Montserrat,Anguilla,República Dominicana,Bahamas,British Virgin Islands,Antigua and Barbuda,Grenada,Sint Maarten,Saint Kitts and Nevis,Cayman Islands,België - Belgique - Belgien], $zoom: {min: 4, max: 5} }
                 draw:
@@ -2809,18 +3058,18 @@ layers:
             draw:
                 text-blend-order:
                     priority: 3
-                    visible: *text_visible_admin
-                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    visible: global.text_visible_admin
+                    text_source: global.ux_language_text_source
                     font:
                         size: 13px
                         weight: 400
                         fill: [0.25,0.25,0.25]
-                        # stroke: { color: *text_stroke, width: 4 }
+                        # stroke: { color: global.text_stroke, width: 4 }
                         transform: uppercase
     #            icons:
     #                size: [[13, 12px], [15, 18px]]
     #                interactive: true
-    #                sprite: *townspot_sprite
+    #                sprite: global.townspot_sprite
             early-ones-z5:
                 filter: { name: [Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,El Salvador,Belize,België - Belgique - Belgien], $zoom: {min: 5, max: 6} }
                 draw:
@@ -2832,13 +3081,13 @@ layers:
             draw:
                 text-blend-order:
                     priority: 3
-                    visible: *text_visible_admin
-                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    visible: global.text_visible_admin
+                    text_source: global.ux_language_text_source
                     font:
                         size: 14px
                         weight: 600
                         fill: [0.25,0.25,0.25]
-                        # stroke: { color: *text_stroke, width: 4 }
+                        # stroke: { color: global.text_stroke, width: 4 }
                         transform: uppercase
             small-ones-z6:
                 filter: { name: [Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,België - Belgique - Belgien,Хуссар Ирыстон,Аҧсны - Абхазия], $zoom: {min: 6, max: 7} }
@@ -2851,13 +3100,13 @@ layers:
             draw:
                 text-blend-order:
                     priority: 3
-                    visible: *text_visible_admin
-                    text_source: function() { return feature["name:en"] || feature["name"]; }
+                    visible: global.text_visible_admin
+                    text_source: global.ux_language_text_source
                     font:
                         size: 16px
                         weight: 600
                         fill: [0.25,0.25,0.25]
-                        # stroke: { color: *text_stroke, width: 4 }
+                        # stroke: { color: global.text_stroke, width: 4 }
                         transform: uppercase
             small-ones-z7:
                 filter: { name: [Liechtenstein,San Marino,Civitatis Vaticanæ,Хуссар Ирыстон,Аҧсны - Абхазия], $zoom: {min: 7, max: 8} }
@@ -2870,8 +3119,8 @@ layers:
             draw:
                 text-blend-order:
                     priority: 14
-                    visible: *text_visible_admin
-                    text_source: 'name:short'
+                    visible: global.text_visible_admin
+                    text_source: global.ux_language_text_source_short
                     font:
                         size: 10px
                         weight: 300
@@ -2882,8 +3131,8 @@ layers:
             draw:
                 text-blend-order:
                     priority: 14
-                    visible: *text_visible_admin
-                    text_source: 'name:short'
+                    visible: global.text_visible_admin
+                    text_source: global.ux_language_text_source_short
                     font:
                         size: 13px
                         weight: 300
@@ -2894,40 +3143,45 @@ layers:
             draw:
                 text-blend-order:
                     priority: 14
-                    visible: *text_visible_admin
-                    text_source: 'name:short'
+                    visible: global.text_visible_admin
+                    text_source: global.ux_language_text_source_short
                     font:
                         size: 15px
                         weight: 300
                         fill: [0.4,0.4,0.4]
 
         region:
-            filter: { name: true, kind: [state], $zoom: {min: 7, max: 9} }
+            filter: { name: true, kind: [state], $zoom: [7,8] }  # someday: province
             draw:
                 text-blend-order:
                     priority: 14
-                    visible: *text_visible_admin
-                    text_source: function() { if(feature["name:short"]) { return feature["name"]; } else { return ""; } }
+                    visible: global.text_visible_admin
+                    text_source: global.ux_language_text_source_short_proxy_name
                     font:
                         size: 14px
                         weight: 300
                         fill: [0.3,0.3,0.3]
-                        #stroke: { color: *text_stroke, width: 4 }
+                        #stroke: { color: global.text_stroke, width: 4 }
                         transform: uppercase
     #            icons:
     #                size: [[13, 12px], [15, 18px]]
     #                interactive: true
-    #                sprite: *townspot_sprite
+    #                sprite: global.townspot_sprite
             pesky:
-                filter: { name: ["Western Cape","Eastern Cape","Northern Cape","North West","Limpopo","KwaZulu-Natal","Hamburg","Freie und Hansestadt Hamburg","Neuchâtel","Nordrhein-Westfalen","Haute-Normandie","Baden-Württemberg","Bayern","Sachsen-Anhalt","Berlin","Mecklenburg-Vorpommern","Schleswig-Holstein","Brandenburg","Niedersachsen","Saarland","Thüringen","Hessen","Sachsen"], $zoom: {min: 7, max: 8} }
+                filter: { name: ["Western Cape","Eastern Cape","Northern Cape","North West","Limpopo","KwaZulu-Natal","Hamburg","Freie und Hansestadt Hamburg","Neuchâtel","Nordrhein-Westfalen","Haute-Normandie","Baden-Württemberg","Bayern","Sachsen-Anhalt","Berlin","Mecklenburg-Vorpommern","Schleswig-Holstein","Brandenburg","Niedersachsen","Saarland","Thüringen","Hessen","Sachsen"], $zoom: [7] }
                 draw:
                     text-blend-order:
                         visible: false
+#            early-provinces:
+#                filter: { kind: province, $zoom: [7] }
+#                draw:
+#                    text-blend-order:
+#                        visible: false
             small-ones:
-                filter: { name: ["Delaware","New Jersey","Connecticut","Rhode Island","Massachusetts","New Hampshire","Vermont"], $zoom: {min: 7, max: 8} }
+                filter: { name: ["Delaware","New Jersey","Connecticut","Rhode Island","Massachusetts","New Hampshire","Vermont"], $zoom: [7] }
                 draw:
                     text-blend-order:
-                        text_source: function() { return feature["name:abbreviation"] || feature["name"]; }
+                        text_source: global.ux_language_text_source_abbreviation
                         font: { transform: uppercase }
 
         populated-places:
@@ -2935,113 +3189,100 @@ layers:
                 icons:
                     interactive: true
                     priority: 5
-                text-blend-order:
-                    interactive: true
-                    anchor: bottom
-                    priority: 6
+                    text:
+                        interactive: true
 
             populated-places-natural-earth-z2:
                 filter: { name: true, source: naturalearthdata.com, $zoom: [2], scalerank: 0 }
                 draw:
-                    text-blend-order:
-                        visible: *text_visible_populated_places
-                        offset: [0, 3px] # half icon size
-                        font:
-                            size: 10px
-                            fill: *text_fill
-                            # stroke: { color: *text_stroke, width: 4 }
                     icons:
                         size: 5px
-                        visible: *icon_visible_populated_places
+                        visible: global.icon_visible_populated_places
                         sprite: townspot-s-rev
+                        text:
+                            visible: global.text_visible_populated_places
+                            font:
+                                size: 10px
+                                fill: global.text_fill
+                                # stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-natural-earth-z3:
                 filter: { name: true, source: naturalearthdata.com, $zoom: [3] }
                 z3places-1:
                     filter: { scalerank: [0] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            font:
-                                size: 11px
-                                fill: *text_fill
-                                # stroke: { color: *text_stroke, width: 4 }
                         icons:
                             size: 5px
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 11px
+                                    fill: global.text_fill
+                                    # stroke: { color: global.text_stroke, width: 4 }
                 z3places-2:
                     filter: { scalerank: [1] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 8
-                            font:
-                                size: 9px
-                                fill: *text_fill
-                                # stroke: { color: *text_stroke, width: 4 }
                         icons:
                             priority: 7
                             size: 5px
                             sprite: townspot-s-rev
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 9px
+                                    fill: global.text_fill
+                                    # stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-natural-earth-z4:
                 filter: { name: true, source: naturalearthdata.com, $zoom: [4] }
                 z4places-1:
                     filter: { scalerank: [0] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            font:
-                                size: 13px
-                                fill: *text_fill
-                                # stroke: { color: *text_stroke, width: 4 }
                         icons:
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 13px
+                                    fill: global.text_fill
+                                    # stroke: { color: global.text_stroke, width: 4 }
 
                 z4places-2:
                     filter: { scalerank: [1,2] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 8
-                            font:
-                                size: 10px
-                                fill: *text_fill
-                                # stroke: { color: *text_stroke, width: 4 }
                         icons:
                             priority: 7
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 10px
+                                    fill: global.text_fill
+                                    # stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-natural-earth-z5:
                 filter: { name: true, source: naturalearthdata.com, $zoom: [5] }
                 z5places-1:
                     filter: { scalerank: [0,1] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 8
-                            font:
-                                size: 13px
                         icons:
                             priority: 7
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 13px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 4px] # half icon size
-                                priority: 6
                             icons:
                                 priority: 5
                                 size: 8px
@@ -3050,23 +3291,18 @@ layers:
                 z5places-2:
                     filter: { scalerank: [2] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 12
-                            font:
-                                size: 11px
                         icons:
                             priority: 11
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 11px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 3px] # half icon size
-                                priority: 10
                             icons:
                                 priority: 9
                                 size: 6px
@@ -3075,23 +3311,18 @@ layers:
                 z5places-3:
                     filter: { scalerank: [3,4] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 18
-                            font:
-                                fill: [0.25,0.25,0.25]
-                                size: 10px
                         icons:
                             priority: 17
                             size: 5px
                             sprite: townspot-s-rev
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.25,0.25,0.25]
+                                    size: 10px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 3px] # half icon size
-                                priority: 16
                             icons:
                                 priority: 15
                                 size: 6px
@@ -3102,24 +3333,19 @@ layers:
                 z6places-1:
                     filter: { scalerank: [0,1] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 4px] # half icon size
-                            priority: 8
-                            font:
-                                fill: *text_fill
-                                size: 15px
                         icons:
                             priority: 7
                             size: 8px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-l-rev
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: global.text_fill
+                                    size: 15px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 4px] # half icon size
-                                priority: 6
                             icons:
                                 sprite: capital-l
                                 size: 8px
@@ -3128,24 +3354,19 @@ layers:
                 z6places-2:
                     filter: { scalerank: [2,3,4] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 12
-                            font:
-                                fill: *text_fill
-                                size: 12px
                         icons:
                             priority: 11
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: global.text_fill
+                                    size: 12px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 3px] # half icon size
-                                priority: 10
                             icons:
                                 size: 6px
                                 sprite: capital-m
@@ -3154,24 +3375,19 @@ layers:
                 z6places-3:
                     filter: { scalerank: [5,6] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 16
-                            font:
-                                fill: [0.25,0.25,0.25]
-                                size: 10px
                         icons:
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
                             priority: 15
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.25,0.25,0.25]
+                                    size: 10px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 3px] # half icon size
-                                priority: 14
                             icons:
                                 size: 6px
                                 sprite: capital-m
@@ -3182,24 +3398,19 @@ layers:
                 z7places-1:
                     filter: { scalerank: [0,1] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 4px] # half icon size
-                            priority: 8
-                            font:
-                                fill: *text_fill
-                                size: 16px
                         icons:
                             size: 8px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-l-rev
                             priority: 7
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: global.text_fill
+                                    size: 16px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 4px] # half icon size
-                                priority: 6
                             icons:
                                 size: 8px
                                 sprite: capital-l
@@ -3208,24 +3419,19 @@ layers:
                 z7places-2:
                     filter: { scalerank: [2,3,4,5] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 14
-                            font:
-                                fill: *text_fill
-                                size: 13px
                         icons:
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
                             priority: 13
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: global.text_fill
+                                    size: 13px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 4px] # half icon size
-                                priority: 12
                             icons:
                                 size: 8px
                                 sprite: capital-l
@@ -3234,24 +3440,19 @@ layers:
                 z7places-3:
                     filter: { scalerank: [6,7] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 18
-                            font:
-                                fill: [0.25,0.25,0.25]
-                                size: 11px
                         icons:
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
                             priority: 17
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.25,0.25,0.25]
+                                    size: 11px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 3px] # half icon size
-                                priority: 16
                             icons:
                                 size: 6px
                                 sprite: capital-m
@@ -3271,23 +3472,18 @@ layers:
                         any:
                             - { population: { min: 1000000 } }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 8
-                            font:
-                                size: 16px
                         icons:
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
                             priority: 7
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 16px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 4px] # half icon size
-                                priority: 6
                             icons:
                                 size: 8px
                                 sprite: capital-l
@@ -3297,23 +3493,18 @@ layers:
                         any:
                             - { population: { min: 150000, max: 999999 } }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 12
-                            font:
-                                size: 13px
                         icons:
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
                             priority: 11
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 13px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 3px] # half icon size
-                                priority: 10
                             icons:
                                 size: 6px
                                 sprite: capital-m
@@ -3324,24 +3515,19 @@ layers:
                         any:
                             - { population: { min: 85000, max: 149999 } }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 16
-                            font:
-                                fill: [0.25,0.25,0.25]
-                                size: 11px
                         icons:
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
                             priority: 15
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.25,0.25,0.25]
+                                    size: 11px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 3px] # half icon size
-                                priority: 14
                             icons:
                                 size: 6px
                                 sprite: capital-m
@@ -3352,24 +3538,19 @@ layers:
                         any:
                             - { population: { min: 50000, max: 84999 } }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 20
-                            font:
-                                fill: [0.30,0.30,0.30]
-                                size: 10px
                         icons:
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
                             priority: 19
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.30,0.30,0.30]
+                                    size: 10px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 3px] # half icon size
-                                priority: 18
                             icons:
                                 size: 5px
                                 sprite: capital-m
@@ -3382,24 +3563,19 @@ layers:
                             - { capital: yes }
                             - { state_capital: yes }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 20
-                            font:
-                                fill: [0.30,0.30,0.30]
-                                size: 10px
                         icons:
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
                             priority: 19
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.30,0.30,0.30]
+                                    size: 10px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 3px] # half icon size
-                                priority: 18
                             icons:
                                 size: 5px
                                 sprite: capital-s
@@ -3407,27 +3583,22 @@ layers:
 
             populated-places-natural-earth-z8-backfill:
                 filter: { name: true, source: naturalearthdata.com, $zoom: [8], population: { max: 50000 } }
-                draw: { text-blend-order: { font: { fill: *text_fill } } }
+                draw: { icons: { text: { font: { fill: global.text_fill } } } }
                 z8places-1-ne:
                     filter: { scalerank: [0,1] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 4px] # half icon size
-                            priority: 24
-                            font:
-                                size: 16px
                         icons:
                             size: 8px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-l-rev
                             priority: 23
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 16px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                offset: [0, 4px] # half icon size
-                                priority: 22
                             icons:
                                 size: 8px
                                 sprite: capital-l
@@ -3436,15 +3607,14 @@ layers:
                 z8places-2-ne:
                     filter: { scalerank: [2,3,4,5] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            font:
-                                size: 13px
                         icons:
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 13px
                     capital:
                         filter: { capital: yes }
                         draw:
@@ -3454,22 +3624,18 @@ layers:
                 z8places-3-ne:
                     filter: { scalerank: [6,7] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 28
-                            font:
-                                size: 11px
                         icons:
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
                             priority: 27
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 11px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                priority: 26
                             icons:
                                 sprite: capital-s
                                 priority: 25
@@ -3490,10 +3656,12 @@ layers:
                     draw:
                         text-blend-order:
                             anchor: center
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 6
                             font:
                                 size: 17px
+#                                fill: global.text_fill
+#                                stroke: { color: global.text_stroke, width: 4 }
 
                 z9places-2a:
                     filter:
@@ -3502,31 +3670,29 @@ layers:
                     draw:
                         text-blend-order:
                             anchor: center
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 8
                             font:
                                 size: 13px
+#                                fill: global.text_fill
+#                                stroke: { color: global.text_stroke, width: 4 }
 
                 z9places-2b:
                     filter:
                         any:
                             - { population: { min: 150000, max: 350000 } }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 12
-                            font:
-                                size: 13px
                         icons:
                             size: 6px
                             sprite: townspot-m-rev
                             priority: 11
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 13px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                priority: 10
                             icons:
                                 sprite: capital-m
                                 priority: 9
@@ -3536,51 +3702,44 @@ layers:
                         any:
                             - { population: { min: 85000, max: 149999 } }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 16
-                            font:
-                                fill: [0.25,0.25,0.25]
-                                size: 11px
                         icons:
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
                             priority: 15
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.25,0.25,0.25]
+                                    size: 11px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                priority: 14
-                                font:
-                                    size: 15px
                             icons:
                                 sprite: capital-m
                                 priority: 13
+                                text:
+                                    font:
+                                        size: 15px
 
                 z9places-4:
                     filter:
                         any:
                             - { population: { min: 50000, max: 84999 } }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 20
-                            font:
-                                fill: [0.30,0.30,0.30]
-                                size: 9px
                         icons:
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
                             priority: 19
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.30,0.30,0.30]
+                                    size: 9px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                priority: 18
                             icons:
                                 sprite: capital-s
                                 priority: 17
@@ -3592,23 +3751,19 @@ layers:
                             - { capital: yes }
                             - { state_capital: yes }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 20
-                            font:
-                                fill: [0.30,0.30,0.30]
-                                size: 9px
                         icons:
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
                             priority: 19
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.30,0.30,0.30]
+                                    size: 9px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                priority: 18
                             icons:
                                 sprite: capital-s
                                 priority: 17
@@ -3623,40 +3778,34 @@ layers:
                         - $zoom: [9]
                         - kind: [city,town]
                 draw:
-                    text-blend-order:
-                        visible: *text_visible_populated_places
-                        offset: [0, 3px] # half icon size
-                        priority: 22
-                        font:
-                            size: 10px
                     icons:
                         size: 5px
-                        visible: *icon_visible_populated_places
+                        visible: global.icon_visible_populated_places
                         sprite: townspot-s-rev
                         priority: 21
+                        text:
+                            visible: global.text_visible_populated_places
+                            font:
+                                size: 10px
 
             populated-places-natural-earth-z9-backfill:
                 filter: { name: true, source: naturalearthdata.com, $zoom: [9], population: { max: 50000 } }
-                draw: { text-blend-order: { font: { fill: *text_fill } } }
+                draw: { icons: { text: { font: { fill: global.text_fill } } } }
                 z9places-1-ne:
                     filter: { scalerank: [0,1] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 4px] # half icon size
-                            priority: 26
-                            font:
-                                size: 16px
                         icons:
                             size: 8px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-l-rev
                             priority: 25
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 16px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                priority: 24
                             icons:
                                 sprite: capital-l
                                 priority: 23
@@ -3664,22 +3813,18 @@ layers:
                 z9places-2-ne:
                     filter: { scalerank: [2,3,4,5] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 30
-                            font:
-                                size: 13px
                         icons:
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
                             priority: 29
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 13px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                priority: 27
                             icons:
                                 sprite: capital-m
                                 priority: 28
@@ -3687,22 +3832,18 @@ layers:
                 z9places-3-ne:
                     filter: { scalerank: [6,7,8,9] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 34
-                            font:
-                                size: 11px
                         icons:
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
                             priority: 33
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 11px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                priority: 32
                             icons:
                                 sprite: capital-m
                                 priority: 31
@@ -3723,7 +3864,8 @@ layers:
                     draw:
                         text-blend-order:
                             anchor: center
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
+                            # TODO: Why is this here?
                             priority: 5
                             font:
                                 size: 17px
@@ -3735,62 +3877,59 @@ layers:
                     draw:
                         text-blend-order:
                             anchor: center
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
+                            # TODO: Why is this here?
                             priority: 6
                             font:
                                 size: 13px
+#                                fill: global.text_fill
+#                                stroke: { color: global.text_stroke, width: 4 }
 
                 z10places-2b:
                     filter:
                         any:
                             - { population: { min: 150000, max: 350000 } }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 8
-                            font:
-                                size: 13px
                         icons:
                             size: 6px
                             sprite: townspot-m-rev
                             priority: 7
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 13px
 
                 z10places-3:
                     filter:
                         any:
                             - { population: { min: 50000, max: 149999 } }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 12
-                            font:
-                                fill: [0.25,0.25,0.25]
-                                size: 11px
                         icons:
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
                             priority: 11
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.25,0.25,0.25]
+                                    size: 11px
 
                 z10places-4:
                     filter:
                         any:
                             - { population: { min: 20000, max: 49999 } }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 14
-                            font:
-                                fill: [0.35,0.35,0.35]
-                                size: 9px
                         icons:
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
                             priority: 13
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    fill: [0.35,0.35,0.35]
+                                    size: 9px
 
             populated-places-osm-z10-no-population:
                 filter:
@@ -3802,50 +3941,43 @@ layers:
                         - $zoom: [10]
                         - kind: [city,town]
                 draw:
-                    text-blend-order:
-                        visible: *text_visible_populated_places
-                        offset: [0, 3px] # half icon size
-                        priority: 16
-                        font:
-                            size: 10px
                     icons:
                         size: 5px
-                        visible: *icon_visible_populated_places
+                        visible: global.icon_visible_populated_places
                         sprite: townspot-s-rev
                         priority: 15
+                        text:
+                            visible: global.text_visible_populated_places
+                            font:
+                                size: 10px
 
             populated-places-natural-earth-z10-backfill:
                 filter: { name: true, source: naturalearthdata.com, $zoom: [10], population: { max: 20000 } }
-                draw: { text-blend-order: { font: { fill: *text_fill } } }
+                draw: { icons: { text: { font: { fill: global.text_fill } } } }
                 z10places-1-ne:
                     filter: { scalerank: [0,1] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 2px] # half icon size
-                            priority: 17
-                            font:
-                                size: 16px
+                        icons:
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 16px
 
                 z10places-2-ne:
                     filter: { scalerank: [2,3,4,5] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 22
-                            font:
-                                size: 13px
                         icons:
                             size: 6px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-m-rev
                             priority: 21
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 13px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                priority: 21
                             icons:
                                 sprite: capital-m
                                 priority: 20
@@ -3853,22 +3985,18 @@ layers:
                 z10places-3-ne:
                     filter: { scalerank: [6,7,8,9,10] }
                     draw:
-                        text-blend-order:
-                            visible: *text_visible_populated_places
-                            offset: [0, 3px] # half icon size
-                            priority: 26
-                            font:
-                                size: 12px
                         icons:
                             size: 5px
-                            visible: *icon_visible_populated_places
+                            visible: global.icon_visible_populated_places
                             sprite: townspot-s-rev
                             priority: 25
+                            text:
+                                visible: global.text_visible_populated_places
+                                font:
+                                    size: 12px
                     capital:
                         filter: { capital: yes }
                         draw:
-                            text-blend-order:
-                                priority: 24
                             icons:
                                 size: 7px
                                 sprite: capital-m
@@ -3893,10 +4021,12 @@ layers:
                             - { population: { min: 1000000 } }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 5
                             font:
                                 size: 18px
+#                                fill: global.text_fill
+#                                stroke: { color: global.text_stroke, width: 4 }
 
                 z11places-2:
                     filter:
@@ -3904,10 +4034,12 @@ layers:
                             - { population: { min: 50000, max: 999999 } }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 6
                             font:
                                 size: 14px
+#                                fill: global.text_fill
+#                                stroke: { color: global.text_stroke, width: 4 }
 
                 z11places-3:
                     filter:
@@ -3915,10 +4047,12 @@ layers:
                         - { population: { min: 5000, max: 49999 } }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 7
                             font:
                                 size: 12px
+#                                fill: global.text_fill
+#                                stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-osm-z11-no-population:
                 filter:
@@ -3932,10 +4066,12 @@ layers:
                 draw:
                     text-blend-order:
                         anchor: center
-                        visible: *text_visible_populated_places
+                        visible: global.text_visible_populated_places
                         priority: 8
                         font:
                             size: 11px
+                            #fill: global.text_fill
+#                            stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-natural-earth-z11-backfill:
                 filter: { name: true, source: naturalearthdata.com, $zoom: [11], population: { max: 5000 } }
@@ -3943,15 +4079,16 @@ layers:
                     text-blend-order:
                         anchor: center
                         font:
-                            fill: *text_fill
+                            fill: global.text_fill
                 z11places-1-ne:
                     filter: { scalerank: [0,1] }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 10
                             font:
                                 size: 16px
+                                #stroke: { color: global.text_stroke, width: 4 }
                     capital:
                         filter: { capital: yes }
                         draw:
@@ -3959,15 +4096,17 @@ layers:
                                 priority: 9
                                 font:
                                     size: 16px
+                                    #stroke: { color: global.text_stroke, width: 4 }
 
                 z11places-2-ne:
                     filter: { scalerank: [2,3,4,5] }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 13
                             font:
                                 size: 13px
+                                #stroke: { color: global.text_stroke, width: 4 }
                     capital:
                         filter: { capital: yes }
                         draw:
@@ -3975,6 +4114,7 @@ layers:
                                 priority: 11
                                 font:
                                     size: 16px
+                                    #stroke: { color: global.text_stroke, width: 4 }
                     state_capital:
                         filter: { state_capital: yes }
                         draw:
@@ -3982,15 +4122,17 @@ layers:
                                 priority: 12
                                 font:
                                     size: 14px
+                                    #stroke: { color: global.text_stroke, width: 4 }
 
                 z11places-3-ne:
                     filter: { scalerank: [6,7,8,9,10,11] }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 15
                             font:
                                 size: 11px
+                                #stroke: { color: global.text_stroke, width: 4 }
                     capital:
                         filter: { capital: yes }
                         draw:
@@ -3998,6 +4140,7 @@ layers:
                                 priority: 14
                                 font:
                                     size: 14px
+                                    #stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-osm-z12:
                 filter:
@@ -4019,10 +4162,12 @@ layers:
 
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 5
                             font:
                                 size: 18px
+                                #fill: global.text_fill
+#                                stroke: { color: global.text_stroke, width: 4 }
 
                 z12places-2:
                     filter:
@@ -4030,10 +4175,12 @@ layers:
                             - { population: { min: 50000, max: 999999 } }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 6
                             font:
                                 size: 14px
+                                #fill: global.text_fill
+#                                stroke: { color: global.text_stroke, width: 4 }
 
                 z12places-3:
                     filter:
@@ -4041,10 +4188,12 @@ layers:
                         - { population: { min: 5000, max: 49999 } }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 7
                             font:
                                 size: 11px
+                                #fill: global.text_fill
+#                                stroke: { color: global.text_stroke, width: 4 }
 
                 z12places-4:
                     filter:
@@ -4052,10 +4201,12 @@ layers:
                         - { population: { max: 5000 } }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 8
                             font:
                                 size: 10px
+                                #fill: global.text_fill
+#                                stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-osm-z12-no-population:
                 filter:
@@ -4069,10 +4220,12 @@ layers:
                 draw:
                     text-blend-order:
                         anchor: center
-                        visible: *text_visible_populated_places
+                        visible: global.text_visible_populated_places
                         priority: 9
                         font:
                             size: 11px
+                            #fill: global.text_fill
+#                            stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-natural-earth-z12-backfill:
                 filter: { name: true, source: naturalearthdata.com, $zoom: [12], population: { max: 5000 } }
@@ -4081,16 +4234,17 @@ layers:
                         anchor: center
                         priority: 10
                         font:
-                            fill: *text_fill
+                            fill: global.text_fill
 
                 z12places-1-ne:
                     filter: { scalerank: [0,1] }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 12
                             font:
                                 size: 16px
+                                #stroke: { color: global.text_stroke, width: 4 }
                     capital:
                         filter: { capital: yes }
                         draw:
@@ -4098,15 +4252,17 @@ layers:
                                 priority: 11
                                 font:
                                     size: 16px
+                                    #stroke: { color: global.text_stroke, width: 4 }
 
                 z12places-2-ne:
                     filter: { scalerank: [2,3,4,5] }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 14
                             font:
                                 size: 13px
+                                #stroke: { color: global.text_stroke, width: 4 }
                     capital:
                         filter: { capital: yes }
                         draw:
@@ -4114,15 +4270,17 @@ layers:
                                 priority: 13
                                 font:
                                     size: 16px
+                                    #stroke: { color: global.text_stroke, width: 4 }
 
                 z12places-3-ne:
                     filter: { scalerank: [6,7,8,9,10,11,12] }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 16
                             font:
                                 size: 11px
+                                #stroke: { color: global.text_stroke, width: 4 }
                     capital:
                         filter: { capital: yes }
                         draw:
@@ -4130,6 +4288,7 @@ layers:
                                 priority: 15
                                 font:
                                     size: 14px
+                                    #stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-osm-z13-z14:
                 filter:
@@ -4143,10 +4302,10 @@ layers:
                 draw:
                     text-blend-order:
                         anchor: center
-                        visible: *text_visible_populated_places
+                        visible: global.text_visible_populated_places
                         font:
                             weight: 600
-                            fill: *text_fill
+                            fill: global.text_fill
                 z14:
                     filter:
                         $zoom: [14]
@@ -4169,10 +4328,11 @@ layers:
                             - { population: { min: 50000, max: 199999 } }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 5
                             font:
                                 size: 14px
+                                #stroke: { color: global.text_stroke, width: 4 }
 
                 z13places-3:
                     filter:
@@ -4180,10 +4340,11 @@ layers:
                         - { population: { min: 5000, max: 49999 } }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 6
                             font:
                                 size: 12px
+                                #stroke: { color: global.text_stroke, width: 4 }
 
                 z13places-4:
                     filter:
@@ -4196,6 +4357,7 @@ layers:
                         text-blend-order:
                             font:
                                 size: 12px
+                                #stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-osm-z13-z14-no-population:
                 filter:
@@ -4209,10 +4371,11 @@ layers:
                 draw:
                     text-blend-order:
                         anchor: center
-                        visible: *text_visible_populated_places
+                        visible: global.text_visible_populated_places
                         priority: 7
                         font:
                             size: 11px
+                            #stroke: { color: global.text_stroke, width: 4 }
 
             populated-places-natural-earth-z13-z14-backfill:
                 filter: { name: true, source: naturalearthdata.com, $zoom: [13,14], population: { max: 5000 } }
@@ -4220,7 +4383,7 @@ layers:
                     text-blend-order:
                         anchor: center
                         font:
-                            fill: *text_fill
+                            fill: global.text_fill
                             weight: 400
 
                 z13places-1-ne:
@@ -4236,18 +4399,20 @@ layers:
                     draw:
                         text-blend-order:
                             priority: 9
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             font:
                                 size: 13px
+                                #stroke: { color: global.text_stroke, width: 4 }
 
                 z13places-3-ne:
                     filter: { scalerank: [6,7,8,9,10,11,12] }
                     draw:
                         text-blend-order:
-                            visible: *text_visible_populated_places
+                            visible: global.text_visible_populated_places
                             priority: 10
                             font:
                                 size: 12px
+                                #stroke: { color: global.text_stroke, width: 4 }
 
             neighborhood-z11:
                 filter:
@@ -4267,13 +4432,13 @@ layers:
                     text-blend-order:
                         priority: 18
                         text_wrap: 10
-                        visible: *text_visible_neighbourhoods_e
+                        visible: global.text_visible_neighbourhoods_e
                         font:
                             size: 9px
                             weight: 400
-                            fill: *text_fill
+                            fill: global.text_fill
                             transform: uppercase
-                            stroke: { color: *text_stroke, width: 4 }
+                            stroke: { color: global.text_stroke, width: 4 }
             neighborhood-z12:
                 filter:
                     all:
@@ -4292,13 +4457,13 @@ layers:
                     text-blend-order:
                         priority: 18
                         text_wrap: 10
-                        visible: *text_visible_neighbourhoods_e
+                        visible: global.text_visible_neighbourhoods_e
                         font:
                             size: 10px
                             weight: 400
                             fill: [0.300,0.300,0.300]
                             transform: uppercase
-                            # stroke: { color: *text_stroke, width: 2 }
+                            # stroke: { color: global.text_stroke, width: 2 }
             neighborhood-z13:
                 filter:
                     all:
@@ -4317,13 +4482,13 @@ layers:
                     text-blend-order:
                         priority: 18
                         text_wrap: 10
-                        visible: *text_visible_neighbourhoods_e
+                        visible: global.text_visible_neighbourhoods_e
                         font:
                             size: 11px
                             weight: 400
                             fill: [0.35,0.35,0.35]
                             transform: uppercase
-                            # stroke: { color: *text_stroke, width: 2 }
+                            # stroke: { color: global.text_stroke, width: 2 }
             neighborhood-z14:
                 filter:
                     all:
@@ -4342,13 +4507,13 @@ layers:
                     text-blend-order:
                         priority: 18
                         text_wrap: 12
-                        visible: *text_visible_neighbourhoods
+                        visible: global.text_visible_neighbourhoods
                         font:
                             size: 13px
                             weight: 400
                             fill: [0.000,0.000,0.000,0.500]
                             transform: uppercase
-                            # stroke: { color: *text_stroke, width: 3 }
+                            # stroke: { color: global.text_stroke, width: 3 }
             neighborhood-z15:
                 filter:
                     all:
@@ -4367,13 +4532,13 @@ layers:
                     text-blend-order:
                         priority: 18
                         text_wrap: 12
-                        visible: *text_visible_neighbourhoods
+                        visible: global.text_visible_neighbourhoods
                         font:
                             size: 16px
                             weight: 300
                             fill: [0.000,0.000,0.000,0.480]
                             transform: uppercase
-                            # stroke: { color: *text_stroke, width: 3 }
+                            # stroke: { color: global.text_stroke, width: 3 }
                 z15-new:
                     filter:
                         all:
@@ -4399,109 +4564,84 @@ layers:
                             - kind_tile_rank: { max: 8 }
                 draw:
                     text-blend-order:
-                        visible: *text_visible_neighbourhoods
+                        visible: global.text_visible_neighbourhoods
                         priority: 18
                         font:
                             size: 17px
                             weight: 300
                             fill: [0.000,0.000,0.000,0.400]
                             transform: uppercase
-                            # stroke: { color: *text_stroke, width: 3 }
-
-    highway-exit:
-        data: { source: osm, layer: [pois] }
-        filter: { kind: motorway_junction, $zoom: { min: 14 } }
-        draw:
-            icons:
-                visible: false
-            text-blend-order:
-                visible: *text_visible_exits
-                interactive: true
-                text_source: ref
-                priority: 52
-                font:
-                    fill: *text_fill_exits
-                    size: [[12,9px],[15,12px],[17,14px]]
-                    stroke: { color: *text_stroke, width: [[12,2px],[14,3px],[15,3px]] }
-        later:
-            filter: { $zoom: { min: 16 } }
-            draw:
-                text-blend-order:
-                    font:
-                        weight: 600
-    airport-gate:
-        data: { source: osm, layer: [pois] }
-        filter: { kind: gate, aeroway: gate }
-        draw:
-            icons:
-                visible: false
-            text-blend-order:
-                visible: true
-                interactive: true
-                text_source: ref
-                font:
-                    fill: *text_fill
-                    size: [[16,9px],[17,12px],[20,14px]]
-                    #stroke: { color: *highway1, width: [[12,2px],[14,3px],[15,3px]] }
-        later:
-            filter: { $zoom: { min: 19 } }
-            draw:
-                text-blend-order:
-                    font:
-                        weight: 600
+                            # stroke: { color: global.text_stroke, width: 3 }
 
     pois_and_landuse_labels:
-        data: { source: osm, layer: [pois,landuse] }
-        visible: *label_visible_poi_landuse
+        data: { source: mapzen, layer: [pois,landuse] }
+        visible: global.label_visible_poi_landuse
         filter:
-            not: { kind: [building,farm,tree,gate,apron] }
-            any:
-                - area: false
-                  all:
-                      - $zoom: { min: 12 }
-                - area: true
-                  all:
-                      - $geometry: point
-                      - kind: true
+            all:
+                - not: { kind: [building,address,farm,tree,apron,residential,commercial,industrial] }
+                - $geometry: point
+                # White list a few kinds to "always" show per the tile zoom inclusion, else test feature's min_zoom
+                #- function() { return feature.min_zoom <= $zoom }
+                - function() { if( feature.kind == 'restaurant' || feature.kind == 'landmark' || feature.kind == 'cafe' ) { return true } else { return feature.min_zoom <= $zoom } }
+                - any:
+                    - area: false
+                      all:
+                          - $zoom: { min: 12 }
+                    - area: true
+                      all:
+                          - kind: true
         draw:
             icons:
                 size: [[13, 12px], [16, 16px], [18, 19px]]
                 interactive: true
                 visible: false
                 priority: 65
+                repeat_group: abc
+                text:
+                    text_source: global.ux_language_text_source
+                    visible: false    # labels are enabled by each layer below
+                    move_into_tile: false # preserves text alignment w/icons in JS
+                    interactive: true
+                    priority: 66
+                    font:
+                        family: global.text_font_family
+                        weight: 400
+                        fill: [0.20,0.20,0.20]
+                        size: 10px
+                        stroke: { color: global.text_stroke, width: 1 }
             text-blend-order:
+                text_source: global.ux_language_text_source
                 visible: false    # labels are enabled by each layer below
                 move_into_tile: false # preserves text alignment w/icons in JS
-                anchor: bottom
-                offset: [[13, [0, 6px]], [16, [0, 8px]], [18, [0, 10px]]] # offset tracks alongside icon size (half icon height)
                 interactive: true
                 priority: 66
                 font:
-                    family: *text_font_family
+                    family: global.text_font_family
                     weight: 400
                     fill: [0.20,0.20,0.20]
                     size: 10px
-                    stroke: { color: *text_stroke, width: 1 }
+                    stroke: { color: global.text_stroke, width: 1 }
         poi_labels-z14:
             filter: { $zoom: [14] }
-            draw: { text-blend-order: { font: { size: 11px } } }
+            draw: { icons: { text: { font: { size: 11px } } } }
         poi_labels-z15:
             filter: { $zoom: [15,16,17] }
-            draw: { text-blend-order: { font: { size: 12px, stroke: { width: 2 } } } }
+            draw: { icons: { text: { font: { size: 12px, stroke: { width: 2 } } } } }
         poi_labels-z18:
             filter: { $zoom: [18,19] }
-            draw: { text-blend-order: { font: { size: 12px, weight: 600, stroke: { width: 3 } } } }
+            draw: { icons: { text: { font: { size: 12px, weight: 600, stroke: { width: 3 } } } } }
         poi_labels-z20-up:
             filter: { $zoom: { min: 20 } }
-            draw: { text-blend-order: { font: { size: 14px, weight: 600, stroke: { width: 3 }  } } }
+            draw: { icons: { text: { font: { size: 14px, weight: 600, stroke: { width: 3 }  } } } }
+
         no-name:
             filter: { name: false }
             sports-pitch:
                 filter: { kind: [grass, pitch], $geometry: point, area: true, $zoom: { min: 17 } }
                 draw:
                     icons:
-                        sprite: function() { return feature.sport }
-                        visible: *icon_visible_poi_landuse_e
+                        sprite: function() { return feature.sport; }
+                        visible: global.icon_visible_poi_landuse_e
                         priority: 69
                 baseball:
                     filter: { sport: baseball }
@@ -4523,55 +4663,58 @@ layers:
                     draw: { icons: { sprite: tennis } }
             toilets:
                 filter: { kind: toilets, $zoom: { min: 18 }  }
-                draw: { icons: { sprite: toilets, visible: *icon_visible_poi_landuse_e } }
+                draw: { icons: { sprite: toilets, visible: global.icon_visible_poi_landuse_e } }
             playground:
                 filter: { kind: playground, $zoom: { min: 18 }  }
-                draw: { icons: { sprite: playground, visible: *icon_visible_poi_landuse_e } }
+                draw: { icons: { sprite: playground, visible: global.icon_visible_poi_landuse_e } }
             picnic_site:
                 filter: { kind: picnic_site, $zoom: { min: 18 }  }
-                draw: { icons: { sprite: picnic-spot, visible: *icon_visible_poi_landuse_e } }
+                draw: { icons: { sprite: picnic-spot, visible: global.icon_visible_poi_landuse_e } }
             information:
                 filter: { kind: information, $zoom: { min: 18 }  }
-                draw: { icons: { sprite: information, visible: *icon_visible_poi_landuse_e } }
+                draw: { icons: { sprite: information, visible: global.icon_visible_poi_landuse_e } }
             drinking-water:
                 filter: { kind: drinking_water, $zoom: { min: 18 }  }
-                draw: { icons: { sprite: drinking-water, visible: *icon_visible_poi_landuse_e } }
+                draw: { icons: { sprite: drinking-water, visible: global.icon_visible_poi_landuse_e } }
             traffic-signal:
                 filter: { kind: traffic_signals, $zoom: { min: 18 } }
-                draw:   { icons: { sprite: traffic-signal, visible: *icon_visible_poi_landuse_e } }
+                draw:   { icons: { sprite: traffic-signal, visible: global.icon_visible_poi_landuse_e } }
             bicycle-parking:
                 filter: { kind: [bicycle_parking], $zoom: { min: 19 } }
-                draw:   { icons: { sprite: bicycle-parking, visible: *icon_visible_poi_landuse_e } }
+                draw:   { icons: { sprite: bicycle-parking, visible: global.icon_visible_poi_landuse_e } }
             car-parking:
                 filter: { kind: [parking], $zoom: { min: 17 } }
-                draw:   { icons: { sprite: parking, visible: *icon_visible_poi_landuse_e } }
+                draw:   { icons: { sprite: parking, visible: global.icon_visible_poi_landuse_e } }
         has-name:
             filter: { name: true }
             # match 1:1 correlations between data and sprite name
             direct-match:
-                filter: { area: false }
+                filter:
+                    all:
+                        - area: false
                 draw:
                     icons:
                         # sprite_source: kind
                         sprite: function() { return feature.kind; }
-                        visible: *icon_visible_poi_landuse
+                        visible: global.icon_visible_poi_landuse
 
             # add generic icon at high zoom, if direct match fails
             generic-icons:
                 filter: { $zoom: { min: 18 }, area: false }
                 draw:
                     icons:
-                        sprite_default: generic
-                        visible: *icon_visible_poi_landuse
                         priority: 67
+                        sprite_default: generic
+                        visible: global.icon_visible_poi_landuse
 
             # add generic icon at high zoom
             default-label-names:
                 filter: { $zoom: { min: 13 }, area: false }
                 draw:
-                    text-blend-order:
-                        visible: *text_visible_poi_landuse
-                        priority: 68
+                    icons:
+                        text:
+                            visible: global.text_visible_poi_landuse
+#                            priority: 68
 
             landuse-labels-green-areas-national-park:
                 filter:
@@ -4593,45 +4736,48 @@ layers:
                         - { $zoom: { min: 15 } }
                 national-park:
                     # yosemite national park, joshua tree national park
-                    filter: function() { return feature.name && feature.name.indexOf("National Park") > -1; }
-                    visible: *label_visible_landuse_green
+                    filter: function() { return feature.name && ((feature.name.indexOf("National Park") > -1) || feature.name.indexOf("National Monument") > -1); }
+                    visible: global.label_visible_landuse_green
                     draw:
                         icons:
-                            visible: *icon_visible_landuse_green
+                            visible: global.icon_visible_landuse_green
                             sprite: park
                             priority: 41
-                        text-blend-order:
-                            visible: *text_visible_landuse_green
-                            priority: 42
-                            font:
-                                fill: [0.200,0.409,0.398] #*text_fill_park
-                                style: italic
-                                # stroke: { color: [0.870,0.870,0.870], width: 3px }
+                            text:
+                                visible: global.text_visible_landuse_green
+                                #priority: 42
+                                font:
+                                    fill: [0.200,0.409,0.398] #*text_fill_park
+                                    style: italic
+                                    # stroke: { color: [0.870,0.870,0.870], width: 3px }
                     natl-park-labels-z4-z6:
                         filter: { $zoom: [4,5,6] }
                         draw:
                             icons:
                                 visible: false
-                            text-blend-order: { font: { size: 10px, stroke: { width: 2px } } }
+                                text: { font: { size: 10px, stroke: { width: 2px } } }
                     natl-park-labels-z7:
                         filter: { $zoom: [7] }
                         draw:
-                            text-blend-order: { font: { size: 10px, stroke: { width: 2px } } }
+                            icons:
+                                text: { font: { size: 10px, stroke: { width: 2px } } }
                     natl-park-labels-z8:
                         filter: { $zoom: [8,9] }
                         draw:
-                            text-blend-order: { font: { size: 11px, stroke: { width: 2px } } }
+                            icons:
+                                text: { font: { size: 11px, stroke: { width: 2px } } }
                     natl-park-labels-z10:
                         filter: { $zoom: {min: 10, max: 14 } }
                         draw:
-                            text-blend-order: { font: { size: 12px } }
+                            icons:
+                                text: { font: { size: 12px } }
 
             landuse-labels-green-areas-not-national-park:
                 filter:
                     all:
                         - area: true
                         - $geometry: point
-                        - kind: [park, national_park, "park or protected land",conservation, protected_area, nature_reserve, forest, grass]
+                        - kind: [park, national_park, "park or protected land", conservation, protected_area, nature_reserve, forest, grass]
                     any:
                         # show labels for smaller landuse areas at higher zooms
                         - { $zoom: [5],    area: { min: 10000000000 } }
@@ -4645,73 +4791,113 @@ layers:
                         - { $zoom: [14],   area: { min: 50000 } }
                         - { $zoom: [15],   area: { min: 10000 } }
                         - { $zoom: [16],   area: { min: 1000 } }
-                        - { $zoom: { min: 17 } }
+                        - { $zoom: { min: 17 }, area: true }
                 not-national-park:
-                    filter: function() { return !( feature.name.indexOf("National Park") > -1 ); }
+                    filter: function() { return feature.name && !((feature.name.indexOf("National Park") > -1) || feature.name.indexOf("National Monument") > -1); }
                     draw:
                         icons:
-                            visible: *icon_visible_landuse_green
+                            visible: global.icon_visible_landuse_green
                             sprite: park
                             priority: 41
-                        text-blend-order:
-                            visible: *text_visible_landuse_green
-                            priority: 42
-                            font:
-                                fill: [0.181,0.370,0.361]
-#                                size: 12px
-#                                weight: 400
-                                style: italic
-                                # stroke: { color: [0.870,0.870,0.870], width: 2 }
+                            text:
+                                visible: global.text_visible_landuse_green
+                                priority: 42
+                                font:
+                                    fill: [0.181,0.370,0.361]
+    #                                size: 12px
+    #                                weight: 400
+                                    style: italic
+                                    # stroke: { color: [0.870,0.870,0.870], width: 2 }
                     green-areas-z6:
                         # mojave national preserve
                         filter: { $zoom: [6] }
                         draw:
-                            icons: { visible: false }
-                            text-blend-order: { font: { size: 10px, stroke: { width: 2px } } }
+                            icons:
+                                visible: false
+                                text: { font: { size: 10px, stroke: { width: 2px } } }
                     green-areas-z7:
                         filter: { $zoom: [7] }
                         draw:
-                            icons: { visible: false }
-                            text-blend-order: { font: { size: 10px } }
+                            icons:
+                                visible: false
+                                text: { font: { size: 10px } }
                     green-areas-z8-z9:
                         filter: { $zoom: { min: 8, max: 14 } }
                         draw:
-                            text-blend-order: { font: { size: 11px } }
+                            icons:
+                                text: { font: { size: 11px } }
                     wilderness-areas-early:
-                       filter: function() { return $zoom < 10 && feature.name && (feature.name.indexOf("Wilderness") > -1 || feature.name.indexOf("BLM") > -1) }
-                       draw:
-                           text-blend-order: { visible: false }
-                           icons: { visible: false }
+                        filter: function() { return $zoom < 10 && feature.name && (feature.name.indexOf("Wilderness") > -1 || feature.name.indexOf("BLM") > -1) }
+                        draw:
+                            icons:
+                                visible: false
+                                text: { visible: false }
                     early-not-national-park:
-                        filter: { not: { kind: national_park }, $zoom: { max: 6 } }
+                        filter: { not: { kind: [national_park] }, $zoom: { max: 6 } }
                         draw:
-                            text-blend-order: { visible: false }
-                            icons: { visible: false }
+                            icons:
+                                visible: false
+                                text: { visible: false }
                     not-national-park:
-                        filter: function() { return feature.name && feature.name.indexOf("Park") > -1 }
+                        filter: function() { return feature.name && !((feature.name.indexOf("National Park") > -1) || feature.name.indexOf("National Monument") > -1); }
                         # draw:
                         #     icons:
                         #         sprite: park
                         early:
                             filter: { $zoom: { max: 8 } }
                             draw:
-                                text-blend-order: { visible: false }
-                                icons: { visible: false }
+                                icons:
+                                    visible: false
+                                    text: { visible: false }
                     forest:
-                        filter: function() { return $zoom < 8 && ((feature.name && feature.name.indexOf("Forest") > -1) || feature.protect_class >=6) }
+                        filter: function() { return ( (feature.name && feature.name.indexOf("Forest") > -1) || ((feature.protect_class == 6 || feature.protect_class == '6') && feature.name.indexOf("Park") < 0) ) }
                         draw:
-                            text-blend-order: { visible: false }
-                            icons: { visible: false }
+                            icons:
+                                sprite: forest
                     hide-till-later:
                         filter: { kind: [grass], $zoom: { max: 16 } }
                         draw:
-                            text-blend-order: { visible: false }
-                            icons: { visible: false }
+                            icons:
+                                visible: false
+                                text: { visible: false }
                     only-text-later:
                         filter: { kind: [grass], $zoom: { min: 16 } }
                         draw:
-                            text-blend-order: { font: { style: italic } }
-                            icons: { visible: false }
+                            icons:
+                                visible: false
+                                text: { font: { style: italic } }
+
+            battlefield:
+                filter:
+                    all:
+                        - area: true
+                        - $geometry: point
+                        - kind: [battlefield]
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [4],  area: { min: 3000000000 } }
+                        - { $zoom: [5],  area: { min: 3000000000 } }
+                        - { $zoom: [6],  area: { min: 500000000 } }
+                        - { $zoom: [7,8,9],  area: { min: 10000000 } }
+                        - { $zoom: [10], area: { min: 5000000 } }
+                        - { $zoom: [11], area: { min: 5000000 } }
+                        - { $zoom: [12], area: { min: 5000000 } }
+                        - { $zoom: [13], area: { min: 200000 } }
+                        - { $zoom: [14], area: { min: 50000 } }
+                        - { $zoom: { min: 15 }, area: true }
+                draw:
+                    icons:
+                        visible: global.icon_visible_landuse_green
+                        sprite: battlefield
+                        priority: 41
+                        text:
+                            visible: global.text_visible_landuse_green
+                            font:
+                                #fill: [0.058,0.605,0.615]
+                                # fill: [0.093,0.473,0.408]
+                                style: italic
+                                stroke: { color: global.text_stroke_park, width: 4 }
+
             beach:
                 filter:
                     all:
@@ -4730,16 +4916,16 @@ layers:
                         - { $zoom: { min: 17 } }
                 draw:
                     icons:
-                        visible: *icon_visible_landuse_green
+                        visible: global.icon_visible_landuse_green
                         interactive: true
                         sprite: beach
-                    text-blend-order:
-                        visible: *text_visible_landuse_green
-                        interactive: true
-                        font:
-                            fill: *text_fill_beach
-                            stroke:
-                                color: *text_stroke_park
+                        text:
+                            visible: global.text_visible_landuse_green
+                            interactive: true
+                            font:
+                                fill: global.text_fill_beach
+                                stroke:
+                                    color: global.text_stroke_park
             airport:
                 filter:
                     all:
@@ -4762,23 +4948,22 @@ layers:
                 draw:
                     icons:
                         sprite: airport
-                        visible: *icon_visible_landuse_green
+                        visible: global.icon_visible_landuse_green
                         priority: 42
-                    text-blend-order:
-                        visible: *text_visible_landuse_green
-                        priority: 41
-                        text_source: function() { if(feature.iata) { return feature.name + ' (' + feature.iata + ')'; } else { return feature.name; } }
-                        font:
-                            fill: [0.20,0.20,0.20] # *text_fill
-                            #size: 11px
-                            stroke: { color: *text_stroke, width: 4 }
+                        text:
+                            visible: global.text_visible_landuse_green
+                            priority: 41
+                            text_source: global.ux_language_text_source_iata
+                            font:
+                                fill: [0.20,0.20,0.20] # *text_fill
+                                #size: 11px
+                                stroke: { color: global.text_stroke, width: 4 }
                 early:
                     filter: { $zoom: [9,10,11] }
-                    # todo: huh?
-                    draw: { text-blend-order: { text_source: iata, font: { size: 11px } } }
+                    draw: { icons: { text: { text_source: iata, font: { size: 11px } } } }
                 early2:
                     filter: { $zoom: { min: 12, max: 14 } }
-                    draw: { text-blend-order: { font: { size: 11px } } }
+                    draw: { icons: { text: { font: { size: 11px } } } }
             university:
                 filter:
                     all:
@@ -4799,26 +4984,25 @@ layers:
                         - { $zoom: [16], area: { min: 5000 } }
                         - { $zoom: [17], area: { min: 2000 } }
                         - { $zoom: { min: 18 } }
-                visible: *label_visible_landuse_green
+                visible: global.label_visible_landuse_green
                 draw:
                     icons:
                         sprite: college-university
-                        visible: *icon_visible_landuse_green
+                        visible: global.icon_visible_landuse_green
                         priority: 41
-                    text-blend-order:
-                        visible: *text_visible_landuse_green
-                        priority: 42
-                        font:
-                            weight: 600
-                            fill: [0.20,0.20,0.20]
-                            #size: 10px
-                            # stroke: { color: *text_stroke, width: 4 }
+                        text:
+                            visible: global.text_visible_landuse_green
+                            font:
+                                weight: 600
+                                fill: [0.20,0.20,0.20]
+                                #size: 10px
+                                # stroke: { color: global.text_stroke, width: 4 }
                 early:
                     filter: { $zoom: { max: 12 } }
                     draw: { text-blend-order: { visible: false } }
                 early2:
                     filter: { $zoom: { min: 12, max: 14 } }
-                    draw: { text-blend-order: { size: 11px } }
+                    draw: { icons: { text: { font: { size: 11px } } } }
             school:
                 filter:
                     all:
@@ -4834,21 +5018,21 @@ layers:
                         - { $zoom: [15], area: { min: 10000 } }
                         - { $zoom: [16], area: { min: 5000 } }
                         - { $zoom: [17], area: { min: 2000 } }
-                        - { $zoom: { min: 18 } }
+                        - { $zoom: { min: 18 }, area: true }
                 draw:
                     icons:
                         sprite: school
-                        visible: *icon_visible_landuse_green
+                        visible: global.icon_visible_landuse_green
                         priority: 41
-                    text-blend-order:
-                        visible: *text_visible_landuse_green
-                        font:
-                            fill: *text_fill
-                            size: 12px
-                            stroke: { color: *text_stroke, width: 4 }
-                early:
-                    filter: { $zoom: { max: 14 } }
-                    draw: { text-blend-order: { font: { size: 11px } } }
+                        text:
+                            visible: global.text_visible_landuse_green
+                            font:
+                                fill: global.text_fill
+                                #size: 12px
+                                stroke: { color: global.text_stroke, width: 4 }
+                #early:
+#                    filter: { $zoom: { max: 14 } }
+#                    draw: { icons: { text: { font: { size: 11px } } } }
             winter_sports:
                 filter:
                     all:
@@ -4868,23 +5052,23 @@ layers:
                         - { $zoom: [17], area: { min: 2000 } }
                         - { $zoom: { min: 18 } }
                 draw:
-                    text-blend-order:
-                        visible: *text_visible_landuse_green
-                        font:
-                            fill: *text_fill
-                            size: 12px
-                            stroke: { color: *text_stroke, width: 4 }
                     icons:
                         sprite: ski-area
-                        visible: *icon_visible_landuse_green
+                        visible: global.icon_visible_landuse_green
                         priority: 41
+                        text:
+                            visible: global.text_visible_landuse_green
+                            font:
+                                fill: global.text_fill
+                                size: 12px
+                                stroke: { color: global.text_stroke, width: 4 }
                 early:
                     filter: { $zoom: { max: 14 } }
-                    draw: { text-blend-order: { font: { size: 10px } } }
+                    draw: { icons: { text: { font: { size: 10px } } } }
             tourism-related:
                 filter:
                     all:
-                        - kind: [zoo, theme_park, resort, aquarium, winery, maze, stadium]
+                        - kind: [zoo, theme_park, resort, aquarium, winery, maze, stadium, enclosure, animal]
                         - area: true
                         - $geometry: point
                     any:
@@ -4895,30 +5079,135 @@ layers:
                         - { $zoom: { min: 14 }, area: { min: 20000 } }
                         - { $zoom: { min: 15 }, area: { min: 10000 } }
                         - { $zoom: { min: 15 }, area: { min: 2000 } }
-                        - { $zoom: { min: 16 } }
+                        - { $zoom: { min: 16 }, area: true }
                 draw:
                     icons:
                         sprite: function() { return feature.kind; }
                         sprite_default: generic
-                        visible: *icon_visible_poi_landuse
+                        visible: global.icon_visible_poi_landuse
                         priority: 43
+                        text:
+                            visible: global.text_visible_poi_landuse
+                            priority: 44
+                            font:
+                                fill: global.text_fill
+                                #size: 12px
+                                stroke: { color: global.text_stroke, width: 4 }
+                enclosure:
+                    filter: { kind: [enclosure, animal] }
+                    draw:
+                        icons:
+                            visible: false
+                            sprite_default: dot-black
+                        text-blend-order:
+                            text_wrap: 10
+                            font:
+                                style: italic
+                                weight: 400
+                early-sizing:
+                    filter: { $zoom: { max: 14 } }
+                    draw: { icons: { text: { font: { size: 11px } } } }
+            playgrounds_allotments_attraction_landmark_supermarket:
+                filter:
+                    all:
+                        - kind: [playground, allotments, attraction, landmark, supermarket]
+                        - area: true
+                        - $geometry: point
+                    any:
+                        - { $zoom: [15], area: { min: 600 } }
+                        - { $zoom: [16], area: { min: 300 } }
+                        - { $zoom: { min: 17 } }
+                draw:
+                    icons:
+                        visible: global.icon_visible_landuse_green
+                        priority: 41
+                        text:
+                            visible: global.text_visible_landuse_green
+                            font:
+                                size: 10px
+                                stroke: { color: global.text_stroke, width: 4 }
+                attraction:
+                    filter: { kind: [attraction] }
+                    draw:
+                        icons:
+                            sprite: attraction
+                landmark:
+                    filter: { kind: [landmark] }
+                    draw:
+                        icons:
+                            sprite: landmark
+            glacier:
+                filter:
+                    all:
+                        - kind: glacier
+                        - area: true
+                        - $geometry: point
+                    any:
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: [10],    area: { min: 20000000 } }
+                        - { $zoom: [11],    area: { min: 5000000 } }
+                        - { $zoom: [12],    area: { min: 2000000 } }
+                        - { $zoom: [13],    area: { min: 500000 } }
+                        # show labels for smaller landuse areas at higher zooms
+                        - { $zoom: { min: 14 } }
+                draw:
+                    icons:
+                        visible: false
                     text-blend-order:
-                        visible: *text_visible_poi_landuse
+                        visible: true
                         priority: 44
+                        interactive: true
+                        text_wrap: 10
                         font:
-                            fill: *text_fill
-                            size: 12px
-                            stroke: { color: *text_stroke, width: 4 }
-                early-sizing:
-                    filter: { $zoom: { max: 14 } }
-                    draw: { text-blend-order: { size: 11px } }
-            landuse-labels-not-green-areas:
+                            weight: 400
+                            style: italic
+                            fill: '#4ba3c5'
+
+            station-train-subway:
+                filter: { kind: [station, train-station, train_station], $zoom: { min: 11 } }
+                visible: global.label_visible_station
+                draw:
+                    icons:
+                        visible: global.icon_visible_station
+                        sprite: train-station
+                        size: [[13, 12px], [14, 12px], [15, 16px], [17, 18px], [18, 20px]]
+                        priority: 42
+                        text:
+                            visible: global.text_visible_station
+                            font:
+                                fill: [0.20,0.20,0.20] # *text_fill
+                                # size: 10px
+                                weight: 600
+                                stroke: { color: global.text_stroke, width: 4 }
+                low-priority-early:
+                    filter: { kind_tile_rank: { min: 5 }, $zoom: { min: 0, max: 13 } }
+                    draw:
+                        icons:
+                            visible: false
+                            #size: [[12, 10px], [14, 10px], [15, 16px]]
+                            text: { visible: false }
+                low-priority-early-z13:
+                    filter: { kind_tile_rank: { min: 5 }, $zoom: [13] }
+                    draw:
+                        icons:
+                            visible: false
+                            #size: [[12, 10px], [14, 10px], [15, 16px]]
+                            text: { visible: false }
+                low-priority-early-z14:
+                    filter: { kind_tile_rank: { min: 7 }, $zoom: [14] }
+                    draw:
+                        icons:
+                            #size: [[14, 11px], [15, 16px], [17, 18px], [18, 20px]]
+                            #visible: false
+                            text: { visible: false }
+
+            landuse-labels-not-any-above:
                 filter:
                     all:
                         - $zoom: { min: 6 }
                         - area: true
                         - $geometry: point
-                        - not: { kind: [park, national_park, "park or protected land", conservation, protected_area, nature_reserve, airport, aerodrome, university, college, school, kindergarten, winter_sports, zoo, theme_park, resort, aquarium, winery, maze, stadium] }
+                        - not: { kind: [park, national_park, "park or protected land", battlefield, conservation, protected_area, nature_reserve, forest, grass, beach, airport, aerodrome, university, college, school, kindergarten, winter_sports, zoo, theme_park, resort, aquarium, winery, maze, stadium, playground, allotments, attraction, landmark, glacier, station] }
                     any:
                         # show labels for smaller landuse areas at higher zooms
                         - { $zoom: [5,6,7], area: { min: 5000000000 } }
@@ -4932,21 +5221,20 @@ layers:
                         # show labels for smaller landuse areas at higher zooms
                         - { $zoom: [15],    area: { min: 5000 } }
                         - { $zoom: [16],    area: { min: 2000 } }
-                        - { $zoom: { min: 17 } }
+                        - { $zoom: { min: 17 }, area: true }
                 draw:
                     icons:
                         sprite: function() { return feature.kind; }
                         sprite_default: generic
-                        visible: *icon_visible_poi_landuse
+                        visible: global.icon_visible_poi_landuse
                         priority: 43
-                    text-blend-order:
-                        visible: *text_visible_poi_landuse
-                        priority: 44
-                        font:
-                            fill: [0.20,0.20,0.20] # *text_fill
-#                            size: 10px
-                            weight: 600
-                            stroke: { color: *text_stroke, width: 4 }
+                        text:
+                            visible: global.text_visible_poi_landuse
+                            font:
+                                fill: [0.20,0.20,0.20] # *text_fill
+    #                            size: 10px
+                                weight: 600
+                                stroke: { color: global.text_stroke, width: 4 }
                 early-sizing:
                     filter: { $zoom: { max: 14 } }
                     draw: { text-blend-order: { size: 11px } }
@@ -4959,111 +5247,128 @@ layers:
 #                    filter: { kind: [residential], osm_relation: true }
 #                    draw:
 #                        icons:
-#                            text-blend-order: { visible: true, text_source: short_name, font: { fill: red } }
+#                            text: { visible: true, text_source: short_name, font: { fill: red } }
 #                            icons: { sprite: park, visible: true }
                 hide-till-later:
                     filter: { kind: [pedestrian,common,railway,ship,houseboat,common,grass,wetland,pitch], $zoom: { max: 17 } }
                     draw:
-                        text-blend-order: { visible: false }
-                        icons: { visible: false }
+                        icons:
+                            visible: false
+                            text: { visible: false }
                 only-text-later:
                     filter: { kind: [pedestrian,common,railway,ship,houseboat,common,grass,wetland,pitch], $zoom: { min: 17 } }
                     draw:
-                        text-blend-order: { font: { style: italic } }
-                        icons: { visible: false }
+                        icons:
+                            visible: false
+                            text: { font: { style: italic } }
                 burial_vault-early:
                     filter: { kind: [burial_vault], $zoom: { max: 19 } }
                     draw:
-                        text-blend-order:  { visible: false }
-                        icons: { visible: false }
+                        icons:
+                            visible: false
+                            text:  { visible: false }
             university-poi:
                 filter: { kind: [university, college], area: false, $zoom: { max: 16 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             office-early:
                 filter:
                     any:
                         - { kind: [insurance, office, company], $zoom: [15], area: { max: 10000 } }
                         - { kind: [insurance, office, company], $zoom: [16], area: { max: 5000 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             bank-early:
                 filter: { kind: [bank], $zoom: { max: 17 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             post-office-early:
                 filter: { kind: [post_office], $zoom: { max: 14 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             atm-early:
                 filter: { kind: [atm], $zoom: { max: 18 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             bicycle-parking-early:
                 filter: { kind: [bicycle_parking], $zoom: { max: 19 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             yes-early:
                 filter: { kind: [yes], $zoom: { max: 18 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             peak-early:
                 filter: { kind: [peak], $zoom: { max: 16 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             drinking-water-early:
                 filter: { kind: [drinking_water], $zoom: { max: 18 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             memorial-early:
                 filter: { kind: [memorial], $zoom: { max: 13 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             animal-points-early:
                 filter: { kind: [animal], area: false, $zoom: { max: 18 } }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
 #            animal-areas-early:
 #                filter: { kind: [animal], area: { min: 500 }, $zoom: { max: 18 } }
 #                draw:
-#                    text-blend-order:  { visible: false }
-#                    icons: { visible: false }
+#                    icons:
+#                       visible: false
+#                       text:  { visible: false }
             parking-labels-early:
                 filter:
                     kind: [parking]
                     $zoom: { max: 18 }
                 draw:
-                    text-blend-order:
-                        visible: false
                     icons:
                         visible: false
+                        text:
+                            visible: false
             parking-labels:
                 filter:
                     kind: [parking]
                     $zoom: { min: 18 }
                 draw:
-                    text-blend-order:
-                        visible: *text_visible_poi_landuse
-                        font:
-                            fill: [0.20,0.20,0.20] #*text_fill
-                            size: 10px
-                            stroke: { color: *text_stroke, width: 4 }
+                    icons:
+                        text:
+                            visible: global.text_visible_poi_landuse
+                            font:
+                                fill: [0.20,0.20,0.20] #*text_fill
+                                size: 10px
+                                stroke: { color: global.text_stroke, width: 4 }
             landuse-funky:
                 filter: { kind: [commercial, residential, wood], $zoom: { max: 17 } }
                 draw:
-                    text-blend-order:
-                        visible: false
+                    icons:
+                        text:
+                            visible: false
             car-sharing:
                 filter: { kind: car_sharing }
                 icons-early:
@@ -5074,50 +5379,17 @@ layers:
                 text-labels-early:
                     filter: { $zoom: { max: 19 } }
                     draw:
-                        text-blend-order:
-                            visible: false
+                        icons:
+                            text:
+                                visible: false
             tower:
                 filter: { kind: [tower], label_placement: yes }
                 draw:
                     icons:
                         visible: false
-                    text-blend-order:
-                        font:
-                            style: italic
-            station-train-subway:
-                filter: { kind: [station, train-station, train_station], $zoom: { min: 11 } }
-                visible: *label_visible_station
-                draw:
-                    icons:
-                        visible: *icon_visible_station
-                        sprite: train-station
-                        size: [[13, 12px], [14, 12px], [15, 16px], [17, 18px], [18, 20px]]
-                        priority: 61
-                    text-blend-order:
-                        visible: *text_visible_station
-                        offset: [[13, [0, 6px]], [14, [0, 6px]],[15, [0, 8px]], [17, [0, 9px]], [18, [0, 10px]]]
-                        priority: 62
-                low-priority-early:
-                    filter: { kind_tile_rank: { min: 5 }, $zoom: { min: 0, max: 13 } }
-                    draw:
-                        icons:
-                            visible: false
-                            #size: [[12, 10px], [14, 10px], [15, 16px]]
-                        text-blend-order: { visible: false }
-                low-priority-early-z13:
-                    filter: { kind_tile_rank: { min: 5 }, $zoom: [13] }
-                    draw:
-                        icons:
-                            visible: false
-                            #size: [[12, 10px], [14, 10px], [15, 16px]]
-                        text-blend-order: { visible: false }
-                low-priority-early-z14:
-                    filter: { kind_tile_rank: { min: 7 }, $zoom: [14] }
-                    draw:
-                        #icons:
-                            #size: [[14, 11px], [15, 16px], [17, 18px], [18, 20px]]
-                            #visible: false
-                        text-blend-order: { visible: false }
+                        text:
+                            font:
+                                style: italic
             tram-stop-early:
                 filter: { kind: tram_stop, $zoom: { max: 15 } }
                 draw:
@@ -5126,51 +5398,77 @@ layers:
             tram-stop-early-z15:
                 filter: { kind: tram_stop, $zoom: [15] }
                 draw:
-                    text-blend-order:
-                        visible: false
+                    icons:
+                        text:
+                            visible: false
             tram-stop:
                 filter: { kind: tram_stop, $zoom: { min: 15 } }
                 draw:
                     icons:
                         size: [[13, 12px], [16, 18px]]
+                        #text:
+                        #    offset: [[13, [0, 6px]], [16, [0, 9px]]]
+            glaciers-pois:
+                filter: { $zoom: { min: 14 }, kind: glacier, area: false }
+                draw:
+                    icons:
+                        visible: false
+                        text:
+                            visible: false
                     text-blend-order:
-                        offset: [[13, [0, 6px]], [16, [0, 9px]]]
+                        visible: false
+                        priority: 45
+                        interactive: true
+                        text_wrap: 10
+                        font:
+                            weight: 400
+                            style: italic
+                            fill: '#4ba3c5'
             bus-stop-bus-station-labels:
                 filter:
                     kind: [bus_stop, bus_station]
-                    $zoom: { min: 18 }
                 draw:
-                    text-blend-order:
-                        visible: *text_visible_poi_landuse
-                        font:
-                            fill: [0.20,0.20,0.20] # *text_fill
-                            size: 11px
-                            stroke: { color: *text_stroke, width: 4 }
-                bus_stop:
+                    icons:
+                        text:
+                            visible: global.text_visible_poi_landuse
+                            font:
+                                fill: [0.20,0.20,0.20] # *text_fill
+                                size: 11px
+                                stroke: { color: global.text_stroke, width: 4 }
+                bus-stop-early1:
+                    filter:
+                        kind: [bus_stop]
+                        $zoom: { max: 18 }
+                    draw:
+                        icons:
+                            visible: false
+                bus_stop-early2:
                     filter:
                         kind: [bus_stop]
                         $zoom: { max: 19 }
                     draw:
                         icons:
                             size: [[13, 8px], [19, 18px]]
-                        text-blend-order:
-                            visible: false
+                            text:
+                                visible: false
             minor-z17-early:
                 filter:
-                    kind: [accountant, administrative, advertising_agency, architect, association, atm, bakery, bed_and_breakfast, bicycle, bicycle_parking, bicycle_rental, books, bus_stop, bus_stop, butcher, car, car_repair, chalet, clothes, company, computer, consulting, convenience, doityourself, drinking_water, dry_cleaning, educational_institution, emergency_phone, employment_agency, estate_agent, fashion, financial, florist, foundation, gate, gift, government, greengrocer, guest_house, hairdresser, hostel, hotel, insurance, it, jewelry, lawyer, mast, memorial, mobile_phone, motel, newspaper, ngo, notary, optician, parking, pet, physician, playground, political_party, post_box, religion, research, slipway, subway_entrance, tax_advisor, telecommunication, telephone, theatre, therapist, toilets, traffic_signals, travel_agent, water_tower, yes]
+                    kind: [accountant, administrative, advertising_agency, architect, association, atm, bakery, bed_and_breakfast, bicycle, bicycle_parking, bicycle_rental_station, books, 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, gift, government, greengrocer, guest_house, hairdresser, hostel, hotel, insurance, it, jewelry, lawyer, mast, memorial, mobile_phone, motel, newspaper, ngo, notary, optician, parking, pet, physician, playground, political_party, post_box, religion, research, subway_entrance, tax_advisor, telecommunication, telephone, theatre, therapist, toilets, traffic_signals, travel_agent, water_tower, yes]
                     area: false
                     $zoom: { max: 17 }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
             minor-z18-early:
                 filter:
                     kind: [bench, waste_basket]
                     area: false
                     $zoom: { max: 18 }
                 draw:
-                    text-blend-order:  { visible: false }
-                    icons: { visible: false }
+                    icons:
+                        visible: false
+                        text:  { visible: false }
 
             icons:
                 adult-boutique:
@@ -5207,7 +5505,7 @@ layers:
                     filter: { kind: [biergarten, beer-garden, brewery] }
                     draw:   { icons: { sprite: beer-garden } }
                 bike-shop:
-                    filter: { kind: [bicycle, bicycle_rental, bike, bike_shop] }
+                    filter: { kind: [bicycle, bicycle_rental, bike, bike_shop, bicycle_rental_station] }
                     draw:   { icons: { sprite: bike-shop } }
                 bicycle-parking:
                     filter: { kind: [bicycle_parking] }
@@ -5239,10 +5537,10 @@ layers:
                                 - { $zoom: [16], area: { max: 5000 } }
                                 - { $zoom: [17], area: { max: 1000 } }
                         draw:
-                            text-blend-order:
-                                visible: false
                             icons:
                                 visible: false
+                                text:
+                                    visible: false
                 burger:
                     filter: { kind: [fast_food, burger] }
                     draw:   { icons: { sprite: burger } }
@@ -5297,9 +5595,12 @@ layers:
                 department-store:
                     filter: { kind: [department_store, department-store] }
                     draw:   { icons: { sprite: department-store } }
-                dog-run:
+                doctors:
+                    filter: { kind: [doctors, clinic] }
+                    draw:   { icons: { sprite: doctors } }
+                dog-park:
                     filter: { kind: [dog_park, dog_run, dog-run] }
-                    draw:   { icons: { sprite: dog-run } }
+                    draw:   { icons: { sprite: dog-park } }
                 drinking-water:
                     filter: { kind: drinking_water }
                     draw: { icons: { sprite: drinking-water } }
@@ -5321,9 +5622,9 @@ layers:
                 fish-market:
                     filter: { kind: [fish, fish-market, seafood, fishmonger] }
                     draw:   { icons: { sprite: fish-market } }
-                fishing-spot:
-                    filter: { kind: [fishing_spot, fishing-spot, fishing] }
-                    draw:   { icons: { sprite: fishing-spot } }
+                fishing-area:
+                    filter: { kind: [fishing_area, fishing-spot, fishing] }
+                    draw:   { icons: { sprite: fishing-area } }
                 fitness:
                     filter: { kind: [gym, fitness, fitness_center] }
                     draw:   { icons: { sprite: fitness } }
@@ -5342,6 +5643,9 @@ layers:
                 garden-center:
                     filter: { kind: [garden_centre, garden_center] }
                     draw:   { icons: { sprite: garden-center } }
+                gas:
+                    filter: { kind: [gas, gas_canister] }
+                    draw:   { icons: { sprite: gas } }
                 gas-station:
                     filter: { kind: [fuel, gas-station] }
                     draw:   { icons: { sprite: gas-station } }
@@ -5369,15 +5673,15 @@ layers:
                 hardware-store:
                     filter: { kind: [hardware, hardware-store, doityourself, paint] }
                     draw:   { icons: { sprite: hardware-store } }
-                hiking-trail:
-                    filter: { kind: [trailhead, hiking_trail] }
-                    draw:   { icons: { sprite: hiking-trail } }
                 hotel:
                     filter: { kind: [hotel, motel, hostel] }
                     draw:   { icons: { sprite: hotel } }
-                hunting-supply:
-                    filter: { kind: [hunting, fishing] }
-                    draw:   { icons: { sprite: hunting-supply } }
+                hot_spring:
+                    filter: { kind: [hot_spring] }
+                    draw:   { icons: { sprite: hot-spring } }
+                hunting:
+                    filter: { kind: [hunting] }
+                    draw:   { icons: { sprite: hunting } }
                 ice-cream-shop:
                     filter: { kind: [ice_cream] }
                     draw:   { icons: { sprite: ice-cream-shop } }
@@ -5406,7 +5710,7 @@ layers:
                     filter: { kind: [market, variety_store, boutique, dairy, retail] }
                     draw:   { icons: { sprite: market } }
                 mine:
-                    filter: { kind: [mind, quarry, mineshaft, adit] }
+                    filter: { kind: [mine, quarry, mineshaft, adit] }
                     draw:   { icons: { sprite: mine } }
                 miscellaneous-shop:
                     filter: { kind: [houseware, miscellaneous-shop] }
@@ -5444,6 +5748,9 @@ layers:
                 optical-shop:
                     filter: { kind: [optician, optical_shop, optical-shop] }
                     draw:   { icons: { sprite: optical-shop } }
+                outdoor:
+                    filter: { kind: [outdoor] }
+                    draw:   { icons: { sprite: outdoor } }
                 performing-arts:
                     filter: { kind: [theater, theatre, performing-arts] }
                     draw:   { icons: { sprite: performing-arts } }
@@ -5457,7 +5764,7 @@ layers:
                     filter: { kind: [photo_studio, photography_lab, photographer] }
                     draw:   { icons: { sprite: photography-lab } }
                 picnic-spot:
-                    filter: { kind: [picnic_site, picnic_spot, picnic-spot] }
+                    filter: { kind: [picnic_site, picnic_spot, picnic-spot, picnic_table] }
                     draw:   { icons: { sprite: picnic-spot } }
                 pool:
                     filter: { kind: [pool, swimming_pool, water_park] }
@@ -5474,6 +5781,9 @@ layers:
                 real-estate:
                     filter: { kind: [estate_agent, real_estate] }
                     draw:   { icons: { sprite: real-estate } }
+                recreation-track:
+                    filter: { kind: [recreation_track] }
+                    draw:   { icons: { sprite: recreation-track } }
                 recycling-facility:
                     filter: { kind: [recycling, recycling-facility] }
                     draw:   { icons: { sprite: recycling-facility } }
@@ -5492,38 +5802,47 @@ layers:
                 salon-barber:
                     filter: { kind: [hairdresser, salon-barber, salon, beauty_salon] }
                     draw:   { icons: { sprite: salon-barber } }
+                scuba-diving:
+                    filter: { kind: [scuba_diving,dive_centre] }
+                    draw:   { icons: { sprite: scuba-diving } }
                 ship-wreck:
                     filter: { kind: [wreck] }
                     draw:   { icons: { sprite: ship-wreck } }
                 shoe-store:
                     filter: { kind: [shoes, shoe-store, shoe_store] }
                     draw:   { icons: { sprite: shoe-store } }
+                slipway:
+                    filter: { kind: [slipway] }
+                    draw:   { icons: { sprite: slipway } }
                 smoke-shop:
                     filter: { kind: [smoke_shop, tobacco] }
                     draw:   { icons: { sprite: smoke-shop } }
                 spa-massage:
                     filter: { kind: [spa, spa-massage, sauna, massage] }
                     draw:   { icons: { sprite: spa-massage } }
-                spiritual-center:
-                    filter: { kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel] }
+                # prefix with "a-" here to allow Tangram to sort the generic style 1st, allowing more specific religion tags to win later
+                a-spiritual-center:
+                    filter:
+                        all:
+                            - kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel]
                     draw:   { icons: { sprite: spiritual-center } }
                 church:
-                    filter: { kind: place_of_worship, religion: christian }
+                    filter: { kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel], religion: christian }
                     draw:   { icons: { sprite: church } }
                 synagogue:
-                    filter: { kind: place_of_worship, religion: jewish }
+                    filter: { kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel], religion: jewish }
                     draw:   { icons: { sprite: synagogue } }
                 buddhist:
-                    filter: { kind: place_of_worship, religion: buddhist }
+                    filter: { kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel], religion: buddhist }
                     draw:   { icons: { sprite: buddhism } }
                 mosque:
-                    filter: { kind: place_of_worship, religion: muslim }
+                    filter: { kind: [spiritual_center, spiritual-center, place_of_worship, wayside_chapel], religion: muslim }
                     draw:   { icons: { sprite: mosque } }
                 sporting-goods-shop:
-                    filter: { kind: [sporting_goods, sporting-goods-shop, sports, outdoor] }
+                    filter: { kind: [sporting_goods, sporting-goods-shop, sports] }
                     draw:   { icons: { sprite: sporting-goods-shop } }
                 stable:
-                    filter: { kind: [stable, horse_riding] }
+                    filter: { kind: [stable, horse_riding, horse] }
                     draw:   { icons: { sprite: stable } }
                 storage-facility:
                     filter: { kind: [storage, storage-facility] }
@@ -5531,12 +5850,18 @@ layers:
                 subway-entrance:
                     filter: { kind: [subway_entrance] }
                     draw:   { icons: { sprite: subway-entrance } }
+                summer-camp:
+                    filter: { kind: [summer_camp] }
+                    draw:   { icons: { sprite: summer-camp } }
                 tailor-shop:
                     filter: { kind: [tailor, tailor-shop] }
                     draw:   { icons: { sprite: tailor-shop } }
                 tattoo-parlor:
                     filter: { kind: [tattoo, tattoo_parlor, tattoo-parlor] }
                     draw:   { icons: { sprite: tattoo-parlor } }
+                telescope:
+                    filter: { kind: [telescope] }
+                    draw:   { icons: { sprite: telescope } }
                 theme-park:
                     filter: { kind: [theme_park, theme-park, miniature_golf] }
                     draw:   { icons: { sprite: theme-park } }
@@ -5552,6 +5877,13 @@ layers:
                 toilets:
                     filter: { kind: [toilets] }
                     draw:   { icons: { sprite: toilets } }
+                trailhead:
+                    filter: { kind: [trailhead, hiking_trail] }
+                    draw:   { icons: { sprite: trailhead } }
+                # because: JAPAN
+                traffic-signal:
+                    filter: { kind: traffic_signals }
+                    draw:   { icons: { sprite: traffic-signal } }
                 veterinarian:
                     filter: { kind: [pet_care, veterinarian, veterinary] }
                     draw:   { icons: { sprite: veterinarian } }
@@ -5564,6 +5896,12 @@ layers:
                 view-point:
                     filter: { kind: [viewpoint, view_point, view-point, vista] }
                     draw:   { icons: { sprite: view-point } }
+                waterfall:
+                    filter: { kind: [waterfall] }
+                    draw:   { icons: { sprite: waterfall } }
+                waterpark:
+                    filter: { kind: [water_park] }
+                    draw:   { icons: { sprite: waterpark } }
                 well:
                     filter: { kind: [well, water_well] }
                     draw:   { icons: { sprite: well } }
@@ -5577,10 +5915,51 @@ layers:
                     filter: { kind: [ski, ski_rental, ski_school, ski_jumping, skiing] }
                     draw:   { icons: { sprite: ski-area } }
 
-    # todo: ocean and sea features are hiding in the places layer
+        airport-gate:
+            filter: { kind: gate, aeroway: gate }
+            draw:
+                icons:
+                    visible: false
+                text-blend-order:
+                    visible: global.text_visible_airport_gate
+                    interactive: true
+                    text_source: ref
+                    font:
+                        fill: global.text_fill_exits
+                        size: [[16,9px],[17,12px],[20,14px]]
+                        #stroke: { color: global.highway1, width: [[12,2px],[14,3px],[15,3px]] }
+            later:
+                filter: { $zoom: { min: 19 } }
+                draw:
+                    text-blend-order:
+                        font:
+                            weight: 600
+
+        highway-exit:
+            filter: { kind: motorway_junction, $zoom: { min: 14 } }
+            draw:
+                icons:
+                    visible: false
+                text-blend-order:
+                    visible: global.text_visible_exits
+                    interactive: true
+                    text_source: ref
+                    priority: 1
+                    font:
+                        fill: global.text_fill_exits
+                        size: [[12,9px],[15,12px],[17,14px]]
+                        stroke: { color: global.text_stroke, width: [[12,2px],[14,3px],[15,3px]] }
+            later:
+                filter: { $zoom: { min: 16 } }
+                draw:
+                    text-blend-order:
+                        font:
+                            weight: 600
+
+
     water-area-labels:
-        data: { source: osm, layer: [water] }
-        visible: *text_visible_water_labels
+        data: { source: mapzen, layer: [water] }
+        visible: global.text_visible_water_labels
         filter:
             all:
                 - name: true
@@ -5606,9 +5985,10 @@ layers:
         default-label-text:
             draw:
                 text-blend-order:
+                    text_source: global.ux_language_text_source
                     font:
-                        fill: [0.314,0.591,0.640] #*text_fill_water
-                        family: *text_font_family
+                        fill: [0.314,0.591,0.640] #global.text_fill_water
+                        family: global.text_font_family
                         style: italic
                         weight: 400
                         size: 12px
@@ -5627,14 +6007,15 @@ layers:
                 text-blend-order: { font: { size: 12px } }
 
     ocean-sea-labels:
-        data: { source: osm, layer: places }
-        visible: *text_visible_water_labels
+        data: { source: mapzen, layer: water }
+        visible: global.text_visible_water_labels
         filter: { name: true, kind: [sea, ocean] }
         draw:
             text-blend-order:
+                text_source: global.ux_language_text_source
                 font:
-                    fill: [0.314,0.591,0.640] #*text_fill_water
-                    family: *text_font_family
+                    fill: [0.314,0.591,0.640] #global.text_fill_water
+                    family: global.text_font_family
                     weight: 400
                     size: 12px
                     transform: uppercase
@@ -5647,13 +6028,13 @@ layers:
                 filter: { $zoom: { min: 1, max: 4 } }
                 draw:
                     text-blend-order:
-                        text_source: function() { return feature.name.split('').join(' ') }
+                        text_source: global.ux_language_text_source_ocean
                         text_wrap: false
             ocean-spacer-z4-up:
                 filter: { $zoom: { min: 4 } }
                 draw:
                     text-blend-order:
-                        text_source: function() { return feature.name.split('').join('  ') }
+                        text_source: global.ux_language_text_source_ocean
                         text_wrap: false
         ocean-labels-z1:
             filter: { $zoom: [1] }
@@ -5676,35 +6057,35 @@ layers:
             filter: { not: { kind: [ocean] }, $zoom: { min: 5 } }
             draw:
                 text-blend-order:
-                    text_source: function() { return feature.name.split('').join(' ') }
+                    text_source: global.ux_language_text_source_sea
                     text_wrap: false
 
         sea-labels:
             filter: { not: { kind: [ocean] } }
             sea-labels-z4:
-                    filter: { $zoom: [4] }
-                    draw:
-                        text-blend-order: { font: { size: 9px } }
+                filter: { $zoom: [4] }
+                draw:
+                    text-blend-order: { font: { size: 9px } }
             sea-labels-z5:
-                    filter: { $zoom: [5] }
-                    draw:
-                        text-blend-order: { font: { size: 10px } }
+                filter: { $zoom: [5] }
+                draw:
+                    text-blend-order: { font: { size: 10px } }
             sea-labels-z6:
-                    filter: { $zoom: [6] }
-                    draw:
-                        text-blend-order: { font: { size: 11px } }
+                filter: { $zoom: [6] }
+                draw:
+                    text-blend-order: { font: { size: 11px } }
             sea-labels-z7:
-                    filter: { $zoom: [7] }
-                    draw:
-                        text-blend-order: { font: { size: 12px } }
+                filter: { $zoom: [7] }
+                draw:
+                    text-blend-order: { font: { size: 12px } }
             sea-labels-z8:
-                    filter: { $zoom: { min: 8} }
-                    draw:
-                        text-blend-order: { font: { size: 14px } }
+                filter: { $zoom: { min: 8} }
+                draw:
+                    text-blend-order: { font: { size: 14px } }
 
     playa-labels:
-        data: { source: osm, layer: [water] }
-        visible: *text_visible_water_labels
+        data: { source: mapzen, layer: [water] }
+        visible: global.text_visible_water_labels
         filter:
             all:
                 - name: true
@@ -5727,64 +6108,68 @@ layers:
                 - { $zoom: { min: 17 } }
         draw:
             text-blend-order:
+                text_source: global.ux_language_text_source
                 font:
                     fill: grey
-                    family: *text_font_family
+                    family: global.text_font_family
                     style: italic
                     weight: 400
                     size: 12px
-                    stroke: { color: *text_stroke_water, width: 3 }
+                    stroke: { color: global.text_stroke_water, width: 3 }
         # debug only
 #        icons:
 #            size: [[13, 12px], [15, 18px]]
 #            interactive: true
-#            sprite: *townspot_sprite
-    water-line-labels:
-        data: { source: osm, layer: [water] }
-        filter:
-            all:
-                - name: true
-                - $geometry: line
-                - kind: [river,canal,stream,dam,ditch,drain]
-                - $zoom: { min: 14 }
-        draw:
-            text-blend-order:
-                font:
-                    fill: [0.314,0.591,0.640]
-                    family: *text_font_family
-                    style: italic
-                    weight: 400
-                    size: 12px
-        water-line-labels-z14:
-            filter: { $zoom: [14] }
-            draw:
-                text-blend-order: { font: { size: 10px } }
-        water-line-labels-z17:
-            filter: { $zoom: [17] }
-            draw:
-                text-blend-order: { font: { size: 14px } }
-        not-river-not-stream:
-            filter: { kind: [canal,dam,ditch,drain], $zoom: { max: 16 } }
+#            sprite: global.townspot_sprite
+
+    earth-labels:
+        data: { source: mapzen, layer: earth }
+        filter: { name: true }
+        continent:
+            filter: { name: true, kind: [continent], $zoom: {max: 5} }
             draw:
                 text-blend-order:
-                    visible: false
-        stream:
-            filter: { kind: [stream], $zoom: { max: 17 } }
+                    visible: global.text_visible_continent
+                    font:
+                        size: 14px
+                        style: italic
+                        fill: global.text_fill
+                        weight: 600
+                        # stroke: { color: global.text_stroke, width: 4 }
+                        transform: uppercase
+        continent-spacer:
+            filter: { kind: continent }
+            continent-spacer-z1-z5:
+                filter: { $zoom: { min: 1, max: 5 } }
+                draw:
+                    text-blend-order:
+                        text_source: global.ux_language_text_source_continent
+                        text_wrap: false
+        island:
+            filter: { kind: [archipelago, island, islet] }
             draw:
                 text-blend-order:
-                    visible: false
+                    visible: global.text_visible_island
+                    text_wrap: 10
+                    font:
+                        size: 12px
+                        style: italic
+                        fill: global.text_fill
+                        weight: 400
+                        stroke: { color: global.text_stroke, width: 4 }
+                        #transform: uppercase
 
     landuse:
-        data: { source: osm }
+        data: { source: mapzen }
         draw:
             dots2:
-                order: function() { return feature.sort_key; }
+                order: global.feature_order
                 visible: false
             dots-rev:
-                order: function() { return feature.sort_key; }
+                order: global.feature_order
                 visible: false
             polygons:
-                order: function() { return feature.sort_key; }
+                order: global.feature_order
         tier1:
             filter:
                 any:
@@ -5803,9 +6188,9 @@ layers:
                     - { $zoom: { min: 14 }, area: { min: 50000 } }
                     - { $zoom: { min: 15 }, area: { min: 20000 } }
                     - { $zoom: { min: 15 }, area: { min: 2000 } }
-                    - { $zoom: { min: 16 } }
+                    - { $zoom: { min: 16 }, area: true }
             national_park:
-                filter: { kind: [national_park, "park or protected land"], not: { operator: [ "United States Forest Service", "US Forest Service", "U.S. Forest Service", "USDA Forest Service" ] } }
+                filter: { kind: [national_park, "park or protected land", battlefield], not: { operator: [ "United States Forest Service", "US Forest Service", "U.S. Forest Service", "USDA Forest Service" ] } }
                 draw:
                     dots2:
                         color: [[4,[0.655,0.800,0.796]],[8,[0.588,0.780,0.773]]]
@@ -5838,7 +6223,7 @@ layers:
                     - { $zoom: { min: 14 }, area: { min: 50000 } }
                     - { $zoom: { min: 15 }, area: { min: 20000 } }
                     - { $zoom: { min: 15 }, area: { min: 2000 } }
-                    - { $zoom: { min: 16 } }
+                    - { $zoom: { min: 16 }, area: true }
             conservation:
                 filter:
                     kind: [conservation, protected_area, nature_reserve]
@@ -5870,7 +6255,7 @@ layers:
                 draw:
                     dots2:
                         color: [0.600,0.790,0.714]
-                        visible: *green4_v
+                        visible: global.green4_v
             forest:
                 filter: { kind: [forest,wood], $zoom: { min: 6 } }
                 national-forest:
@@ -5878,7 +6263,7 @@ layers:
                         operator: [ "United States Forest Service", "US Forest Service", "U.S. Forest Service", "USDA Forest Service" ]
                     draw:
                         dots2:
-                            color: *green7
+                            color: global.green7
                             visible: true
 
                 landuse-forest:
@@ -5900,7 +6285,7 @@ layers:
                     filter: function() { return feature.name && feature.name.indexOf("Wilderness") > -1 }
                     draw:
                         dots2:
-                            color: *green7
+                            color: global.green7
                             visible: true
 
             parks-and-national-forests-not-national-park:
@@ -5913,11 +6298,11 @@ layers:
                         visible: true
             urban:
                 filter: { kind: [urban, rural, residential] }
-                visible: *earth2_v
+                visible: global.earth2_v
                 draw:
                     dots2:
-                        color: [[0,*earth2],[9,*earth2]]
-                        visible: *earth2_v
+                        color: [[0, global.earth2],[9, global.earth2]]
+                        visible: global.earth2_v
         tier3:
             filter:
                 any:
@@ -5931,14 +6316,14 @@ layers:
                     - { $zoom: { min: 14 }, area: { min: 50000 } }
                     - { $zoom: { min: 15 }, area: { min: 20000 } }
                     - { $zoom: { min: 15 }, area: { min: 2000 } }
-                    - { $zoom: { min: 16 } }
+                    - { $zoom: { min: 16 }, area: true }
             airport:
                 filter:
                     kind: aerodrome
                 draw:
                     dots2:
                         color: [0.805,0.805,0.825]
-                        visible: *purple_v
+                        visible: global.purple_v
             military:
                 filter:
                     kind: military
@@ -5964,13 +6349,13 @@ layers:
                     - { $zoom: { min: 14 }, area: { min: 50000 } }
                     - { $zoom: { min: 15 }, area: { min: 20000 } }
                     - { $zoom: { min: 15 }, area: { min: 2000 } }
-                    - { $zoom: { min: 16 } }
+                    - { $zoom: { min: 16 }, area: true }
             cemetery:
                 filter:
                     kind: cemetery
                 draw:
                     dots2:
-                        color: *green2
+                        color: global.green2
                         visible: true
             commercial:
                 filter:
@@ -5978,7 +6363,7 @@ layers:
                 draw:
                     dots2:
                         color: [0.855,0.748,0.667]
-                        visible: *grey1_v
+                        visible: global.grey1_v
             golf_course:
                 filter:
                     kind: golf_course
@@ -6018,13 +6403,13 @@ layers:
                     kind: sports_centre
                 draw:
                     dots2:
-                        color: *green10
+                        color: global.green10
             recreation_ground:
                 filter:
                     kind: recreation_ground
                 draw:
                     dots2:
-                        color: *green1
+                        color: global.green1
                         visible: true
             retail:
                 filter:
@@ -6032,7 +6417,7 @@ layers:
                 draw:
                     dots2:
                         color: [0.955,0.752,0.650]
-                        visible: *grey1_v
+                        visible: global.grey1_v
             stadium:
                 filter:
                     kind: stadium
@@ -6052,8 +6437,8 @@ layers:
                     kind: winter_sports
                 draw:
                     dots2:
-                        color: *grey8
-                        visible: *grey8_v
+                        color: global.grey8
+                        visible: global.grey8_v
             man-made:
                 filter: { kind: [pier,wastewater_plant,works,bridge,tower,breakwater,water_works,groyne,dike,cutline] }
                 draw:
@@ -6096,7 +6481,7 @@ layers:
                         - maze
                 draw:
                     dots2:
-                        color: *grey10
+                        color: global.grey10
                         visible: true
             beach:
                 filter:
@@ -6114,10 +6499,10 @@ layers:
                     - { $zoom: { min: 14 }, area: { min: 50000 } }
                     - { $zoom: { min: 15 }, area: { min: 20000 } }
                     - { $zoom: { min: 15 }, area: { min: 2000 } }
-                    - { $zoom: { min: 16 } }
+                    - { $zoom: { min: 16 }, area: true }
             garden:
                 filter:
-                    kind: garden
+                    kind: [garden, allotments]
                 draw:
                     dots2:
                         color: [0.604,0.973,0.722]
@@ -6133,12 +6518,12 @@ layers:
                 draw:
                     dots2:
                         color: [0.765,0.765,0.765]
-                        visible: *grey1_v
+                        visible: global.grey1_v
                 early:
                     filter: { $zoom: { max: 15 } }
                     draw:
                         dots2:
-                            color: *grey1_e
+                            color: global.grey1_e
                             visible: true
             pedestrian:
                 filter:
@@ -6146,13 +6531,22 @@ layers:
                 draw:
                     dots2:
                         color: [0.740,0.740,0.740]
-                        visible: *grey1_v
+                        visible: global.grey1_v
                 green-stuff:
                     filter:
                         surface: [grass]
                     draw:
                         dots2:
                             color: [0.584,0.843,0.792]
+            # glacier:
+            #     filter:
+            #         kind: glacier
+            #     draw:
+            #         terrain:
+            #             color: [0.890,0.970,1.000]
+            #             # color: [0.975,0.975,0.828]
+            #             visible: true
+
             pitch:
                 filter: { kind: pitch }
                 draw:
@@ -6165,7 +6559,7 @@ layers:
                 draw:
                     dots2:
                         color: [0.910,0.972,1.000]
-                        visible: *grey1_v
+                        visible: global.grey1_v
             playground:
                 filter:
                     kind: playground
@@ -6192,8 +6586,32 @@ layers:
                         color: [0.765,0.765,0.765]
                         visible: true
 
+            # GO MELLOW
+            # 18/41.19776/-8.68722
+            tree_row:
+                filter:
+                    kind: tree_row
+                draw:
+                    lines:
+                        order: 501 # function() { return feature.sort_key; }
+                        color: [0.602,0.860,0.722]
+                        width: [[16,1px],[17,2px],[19,1.5m]]
+                        visible: true
+            # GO MELLOW
+            # 20/37.76779/-122.40096
+            hedge:
+                filter:
+                    kind: hedge
+                draw:
+                    lines:
+                        order: 500 # function() { return feature.sort_key; }
+                        color: [0.602,0.860,0.722]
+                        width: [[16,0.5px],[17,1px],[19,1m]]
+                        visible: true
+
+
     landuse-not-filtered:
-        data: { source: osm, layer: landuse }
+        data: { source: mapzen, layer: landuse }
         # runways and taxiways are also in the roads layer as lines
         # these ones are probably duplicate features, but have AREA (a good thing)
         filter:
@@ -6213,14 +6631,14 @@ layers:
                 - aviary
         draw:
             dots2:
-                order: function() { return feature.sort_key; }
+                order: global.feature_order
                 visible: false
             dots-rev:
-                order: function() { return feature.sort_key; }
+                order: global.feature_order
                 visible: false
             polygons:
                 visible: false
-                order: function() { return feature.sort_key; }
+                order: global.feature_order
         runway:
             filter:
                 kind: runway
@@ -6247,7 +6665,7 @@ layers:
                     - carousel
             draw:
                 dots2:
-                    color: *grey12
+                    color: global.grey12
                     visible: true
         minor-zoo-landuse:
             filter:
@@ -6258,22 +6676,417 @@ layers:
                     - aviary
             draw:
                 dots2:
-                    color: *green11
+                    color: global.green11
                     visible: true
     landuse_urban_area-early:
-        data: { source: osm, layer: landuse }
+        data: { source: mapzen, layer: landuse }
         filter:
             # This is from Natural Earth and only shows up from zoom(0,9)
-            kind: ['urban area']
+            kind: [urban_area, 'urban area']
         draw:
             dots2:
-                visible: *earth2_ev
-                order: function() { return feature.sort_key; }
+                visible: global.earth2_ev
+                order: global.feature_order
                 color: [[4,[0.965,0.600,0.882]],[6,[0.965,0.600,0.882]],[7,[0.882,0.639,0.827]],[8,[0.757,0.729,0.753]]]
 
+    transit-rail-lines:
+        data: { source: mapzen, layer: transit }
+        filter:
+            not: { kind: [platform, railway] }
+        draw:
+            lines:
+                order: 499
+                visible: global.sdk_transit_overlay
+                color: purple
+                width: [[5,1.5px],[6,2px],[11,3px],[18,4px]]
+                interactive: true
+                outline:
+                    color: [1.,1.,1.,.8]
+                    width: [[7,0px],[8,0.25px],[9,0.5px],[12,1.0px],[13,1.75px],[14,2px]]
+                    #width: [[12,1.0px],[13,1.75px],[14,2px]]
+        train-sizing-color:
+            filter: { kind: train }
+            draw:
+                lines:
+                    color: purple
+                    width: [[5,1.0px],[6,1.0px],[7,1.25px],[11,2.0px],[13,2.5px],[18,3.5px]]
+                    outline:
+                        width: [[12,1.0px],[13,1.75px],[14,2px]]
+            stack-below-other-transit-later-zooms:
+                filter: { $zoom: { min: 9 } }
+                draw:
+                    lines:
+                        order: 511
+        subway-sizing:
+            filter: { kind: subway }
+            draw:
+                lines:
+                    width: [[9,1px],[11,2px],[12,3px],[13,4px],[15,5px],[16,7px],[17,9px]]
+                    outline:
+                        #color: [[10,white],[11,black]]
+                        width: [[9,0px],[10,0.5px],[12,1.25px],[13,1.5px],[15,2px]]
+                        #width: [[12,1.5px],[13,2.0px],[14,2.5px]]
+        light-rail-and-tram-sizing:
+            filter: { kind: [light_rail, tram] }
+            draw:
+                lines:
+                    width: [[10,1px],[12,1.5px],[15,2px],[18,3.5px]]
+                    outline:
+                        #color: [[11,white],[12,black]]
+                        width: [[12,0.25px],[13,0.5px],[14,1px],[16,2px]]
+        has-data-color:
+            filter: { colour: true }
+            draw:
+                lines:
+                    order: 510
+                    width: [[9,2px],[11,3px],[12,4px]]
+                    color: function() { return feature.colour || 'purple'; }
+                    #outline:
+                        #color: function() { if(feature.colour == 'silver') { return 'black'; } else { return [0.,0.,0.,.1]; } }
+                        #width: [[12,1.0px],[13,1.75px],[14,2px]]
+            train-with-color:
+                filter: { kind: train }
+                draw:
+                    lines:
+                        order: 514
+            subway-with-color:
+                filter: { kind: subway }
+                draw:
+                    lines:
+                        order: 513
+            light-rail-and-tram-with-color:
+                filter: { kind: [light_rail, tram] }
+                draw:
+                    lines:
+                        order: 512
+        missing-colour:
+            filter: { colour: false }
+            train-missing-color:
+                filter: { kind: train, colour: false }
+                draw:
+                    lines:
+                        #width: [[5,1.25px],[6,1.75px],[11,2.0px],[13,2.5px],[18,2.5m]]
+                        order: 506
+            subway-missing-color:
+                filter: { kind: subway, colour: false }
+                draw:
+                    lines:
+                        order: 505
+                        #outline:
+#                            width: [[12,1.5px],[13,2.0px],[14,2.5px]]
+            light-rail-and-tram-missing-color:
+                filter: { kind: [light_rail, tram], colour: false }
+                draw:
+                    lines:
+                        order: 504
+        labels-transit-lines-early:
+            filter: { $zoom: [13,14], ref: true }
+            draw:
+                text:
+                    visible: global.sdk_transit_overlay
+                    priority: 20
+                    text_source: function() { if( feature.ref.length < 4 ) { return feature.ref; } else { return ''; } }
+                    font:
+                        fill: black
+                        size: 12px
+                        weight: bold
+                        stroke: { color: white, width: 2 }
+        labels-transit-lines:
+            filter: { $zoom: { min: 15 } }
+            draw:
+                text:
+                    visible: global.sdk_transit_overlay
+                    priority: 20
+                    text_source: ref
+                    font:
+                        fill: black
+                        size: 14px
+                        weight: bold
+                        stroke: { color: white, width: 2 }
+            z19-show-long-route-name:
+                filter: { $zoom: { min: 19 } }
+                draw:
+                    text:
+                        text_source: function() { return feature.route_name || feature.ref; }
+                        font:
+                            stroke: { color: white, width: 3px }
+
+#    transit-bus-roads:
+#        data: { source: mapzen, layer: roads }
+#        filter: { is_bus_route: true }
+#        draw:
+#            lines:
+#                visible: global.sdk_transit_overlay
+#                interactive: false
+#                color: [[13,[0,0,1,0.5]],[15,blue]]
+#                width: [[11,0.5px],[12,0.8px],[16,1.25px],[18,1m]]
+#                # let roads sort themselves past zoom 14
+#                order: 488
+#                # but give them all the same outline
+#                outline:
+#                    order: 487
+
+    transit-station-labels:
+        data: { source: mapzen, layer: [pois,landuse] }
+        filter:
+            kind: [station, tram_stop, bus_station, subway_entrance, halt, stop, platform, bus_stop, stop_position ]
+            any:
+                - area: false
+                  all:
+                - area: true
+                  all:
+                      - $geometry: point
+                      - kind: true
+        draw:
+            icons:
+                visible: global.sdk_transit_overlay
+                size: [[13, 12px], [16, 16px], [19, 20px]]
+                interactive: true
+                priority: 15
+                text:
+                    buffer: 4px
+                    move_into_tile: false # preserves text alignment w/icons in JS
+                    #anchor: bottom
+                    #offset: [[13, [0, 6px]], [16, [0, 8px]], [19, [0, 10px]]] # offset tracks alongside icon size (half icon height)
+                    interactive: true
+                    priority: 16
+                    font:
+                        weight: 500
+                        fill: black
+                        weight: 400
+                        size: 11px
+                        stroke: { color: white, width: 3 }
+        poi_labels-z14:
+            filter: { $zoom: [14] }
+            draw: { icons: { text: { font: { size: 11px } } } }
+        poi_labels-z15:
+            filter: { $zoom: [15,16,17] }
+            draw: { icons: { text: { font: { size: 12px, stroke: { width: 2 } } } } }
+        poi_labels-z18:
+            filter: { $zoom: [18,19] }
+            draw: { icons: { text: { font: { size: 12px, weight: 600, stroke: { width: 3 } } } } }
+        poi_labels-z20-up:
+            filter: { $zoom: { min: 20 } }
+            draw: { icons: { text: { font: { size: 14px, weight: 600, stroke: { width: 3 }  } } } }
+        station-train-subway:
+            filter: { kind: [station, train-station, train_station] } #, $zoom: { min: 13 }
+            draw:
+                icons:
+                    sprite: train-station
+                    size: [[13, 12px], [14, 14px], [15, 16px], [17, 20px]]
+                    priority: 11
+                    text:
+                        #offset: [[13, [0, 6px]], [14, [0, 7px]],[15, [0, 8px]], [17, [0, 10px]]]
+                        priority: 12
+            low-priority-early:
+                filter: { kind_tile_rank: { min: 3 }, $zoom: { min: 0, max: 12 } }
+                draw:
+                    icons:
+                        size: [[12, 5px], [14, 6px], [15, 16px]]
+                        text:
+                            visible: false
+                long-tail:
+                    filter: { kind_tile_rank: { min: 10 }, $zoom: [10] }
+                    draw:
+                        icons:
+                            visible: false
+            low-priority-early-z12:
+                filter: { kind_tile_rank: { min: 8 }, $zoom: [12] }
+                draw:
+                    icons:
+#                        visible: false
+                        size: [[12, 5px], [14, 6px], [15, 16px]]
+                        text:
+                            visible: false
+            low-priority-early-z13:
+                filter: { kind_tile_rank: { min: 8 }, $zoom: [13] }
+                draw:
+                    icons:
+                        #visible: false
+                        size: [[12, 8px], [14, 6px], [15, 16px]]
+                        text:
+                            visible: false
+            low-priority-early-z14:
+                filter: { kind_tile_rank: { min: 7 }, $zoom: [14] }
+                draw:
+                    icons:
+                        size: [[12, 10px], [14, 11px], [15, 16px]]
+                        #visible: false
+                        text:
+                            visible: false
+            late:
+                filter: { $zoom: { min: 16 } }
+                draw:
+                    icons:
+                        text:
+                            font:
+                                weight: 600
+                                size: 12px
+        subway-early:
+            filter: { is_subway: true, is_train: false, $zoom: { max: 12 } }
+            draw:
+                icons:
+                    visible: false
+                    text:
+                        visible: false
+        halt-early:
+            filter: { kind: [halt,stop], $zoom: { max: 15 } }
+            draw:
+                icons:
+                    size: [[15, 8px], [16, 18px]]
+                    visible: global.sdk_transit_overlay
+                    sprite: light-rail
+                    text:
+                        visible: false
+        platform-early:
+            filter: { kind: [platform] }
+            draw:
+                icons:
+                    size: [[15, 8px], [16, 18px]]
+                    visible: global.sdk_transit_overlay
+                    sprite: generic
+                    text:
+                        visible: false
+        tram-stop-early:
+            filter: { kind: [tram_stop], $zoom: { max: 16 } }
+            draw:
+                icons:
+                    size: [[13, 0px], [14, 7px], [15, 8px]]
+                    visible: global.sdk_transit_overlay
+                    sprite: light-rail
+                    text:
+                        visible: false
+        tram-stop:
+            filter: { kind: tram_stop, $zoom: { min: 16 } }
+            draw:
+                icons:
+                    size: [[16, 12px], [17, 14px], [18, 18px]]
+                    sprite: light-rail
+                    text:
+                        #offset: [[13, [0, 6px]], [16, [0, 9px]]]
+        bus-like-labels:
+            filter:
+                kind: [platform, stop_position]
+            draw:
+                icons:
+                    size: [[13, 8px], [16, 10px], [17, 12px], [18, 18px]]
+                    sprite: bus-station
+                    text:
+                        interactive: true
+                        font:
+                            fill: black
+                            size: 12px
+                            stroke: { color: white, width: 4 }
+        bus-station-labels:
+            filter:
+                kind: [bus_station, bus_stop]
+                $zoom: { min: 16 }
+            draw:
+                icons:
+                    size: [[13, 12px], [16, 18px]]
+                    sprite: bus-station
+                    priority: 17
+                    text:
+                        interactive: true
+                        priority: 18
+                        font:
+                            fill: black
+                            size: 12px
+                            stroke: { color: white, width: 4 }
+            bus_stop:
+                filter:
+                    kind: [bus_stop]
+                    $zoom: { max: 19 }
+                draw:
+                    icons:
+                        size: [[13, 8px], [19, 18px]]
+                        text:
+                            visible: false
+        subway-entrance:
+            filter:
+                kind: [subway_entrance]
+            draw:
+                icons:
+                    sprite: subway-entrance
+                    size: [[17, 12px], [19, 14px]]
+                    priority: 19
+                    text:
+                        #offset: [[17, [0, 6px]], [19, [0, 7px]]] # offset tracks alongside icon size (half icon height)
+                        priority: 20
+                        interactive: true
+                        text_source: function() { if( feature.ref || feature.name ) { if( feature.ref && feature.name ) { return '[' + feature.ref + ']\n' + feature.name; } else { return feature.name; } } else { return "Entrance"; } }
+                        font:
+                            fill: black
+                            size: 12px
+                            stroke: { color: white, width: 4 }
+
+    transit-station-buildings:
+        data: { source: mapzen, layer: [buildings] }
+        filter:
+            any:
+                - landuse_kind: [station]
+        draw:
+            polygons:
+                visible: global.sdk_transit_overlay
+                color: '#bdadbf'
+                order: 500
+                #extrude: function() { return feature.height || 20; }
+            outline:
+                visible: global.sdk_transit_overlay
+                style: lines
+                order: 501
+                color: '#d534df'
+                width: [[14,0.1px],[15,0.5px],[17,0.5px],[18,0.75px],[19,0.25m]]
+                #extrude: function() { return feature.height || 20; }
+
+#    transit-platforms:
+#        data: { source: mapzen, layer: transit }
+#        filter: { kind: platform, $zoom: { min: 15 }, $geometry: [polygon,line] }
+#        draw:
+#            lines:
+#                visible: global.sdk_transit_overlay
+#                color: '#bc8f96'
+#                width: 10m          # something fishy here with the #include syntax in v0.7 tangram?
+#                order: 1000         # this selection should sort above basemap, but grey Zinc color still applies
+#                outline:
+#                    order: 1002
+#            polygons:
+#                visible: global.sdk_transit_overlay
+#                order: 1001
+#        polygon_geom:
+#            filter: { $geometry: polygon }
+#            draw:
+#                polygons:
+#                    color: '#bc8f96'
+#                    outline:
+#                        color: '#bc8f96'
+#                        width: [[15,0px],[16,0.5px],[17,1px],[19,2px]]
+#                lines:
+#                    visible: false
+
+    transit-basemap-railway-late:
+        data: { source: mapzen, layer: roads }
+        filter: { kind: rail, $zoom: { min: 16 }, not: { railway: [subway,light_rail,tram] } }
+        draw:
+            lines:
+                visible: global.sdk_transit_overlay
+                interactive: true
+                color: black
+                width: [[15,0.5px],[16,0.75px],[18,1m]]
+                # let roads sort themselves past zoom 14
+                order: 491
+                # but give them all the same outline
+                outline:
+                    order: 490
+        service:
+            filter: { service: true }
+            draw:
+                lines:
+                    color: black
+                    width: [[14,0px],[15,0.4px],[16,0.6px],[18,0.7m]]
 
     debug:
-        data: { source: osm }
+        data: { source: mapzen }
         draw:
             flat_lines:
                 width: 2px