apply new tangram
[platform/core/location/maps-plugin-mapzen.git] / scenes / walkabout-style / walkabout-style.yaml
1 # Walkabout is an outdoor style perfect for hiking or getting out and about, with
2 # mountains, ski trails, biking paths, and transit stops.
3 #
4 # Give OpenStreetMap data a professional basemap skin using the Tangram graphics library
5 # and Mapzen's versatile Vector Tiles.
6 #
7 # Please use and adapt the open source scene file in your own projects!
8 #
9 # Authors: Geraldine Sarmiento, Nathaniel V. Kelso
10 # Read more: https://github.com/tangrams/walkabout-style
11 #
12
13 global:
14     # Sign up for a Mapzen API key to enjoy higher rate limits
15     # https://mapzen.com/documentation/overview/#developer-accounts-and-api-keys
16     sdk_mapzen_api_key: ''     # set this value to your Mapzen API key
17
18     #ux/ui
19     ux_language: false             # l10n language code, trusting OSM in v0.10 tiles, fixed in v1.0 tiles
20     ux_language_fallback: false    # l10n language code, trusting OSM in v0.10 tiles, fixed in v1.0 tiles
21     ux_language_text_source: |
22         function() {
23             // 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
24             return (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature.name;
25         }
26     ux_language_text_source_boundary_lines: |
27         function() {
28             var right = (global.ux_language && feature['name:right:'+global.ux_language]) || (global.ux_language_fallback && feature['name:right:'+global.ux_language_fallback]) || feature['name:right'];
29             var left = (global.ux_language && feature['name:left:'+global.ux_language]) || (global.ux_language_fallback && feature['name:left:'+global.ux_language_fallback]) || feature['name:left'];
30             if( right && left ) {
31                 //if( right.includes(' ') || left.includes(' ') ) {
32                     return left + " - " + right;
33                 //} else {
34                 //    return right + '\n' + left;
35                 //}
36             } else {
37                 return (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature.name;
38             }
39         }
40     ux_language_text_source_short: |
41         function() {
42             return (global.ux_language && feature['name:short:'+global.ux_language]) || (global.ux_language_fallback && feature['name:short:'+global.ux_language_fallback]) || feature['name:short'];
43         }
44     ux_language_text_source_short_proxy_name: |
45         function() {
46             var name  = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
47             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'];
48             return short ? name : '';
49         }
50     ux_language_text_source_abbreviation: |
51         function() {
52             var name  = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
53             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'];
54             return abbrev || name;
55         }
56     ux_language_text_source_iata: |
57         function() {
58             var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
59             if(feature.iata) {
60                 if (name) {
61                     return name + ' (' + feature.iata + ')';
62                 }
63                 else {
64                     return feature.iata;
65                 }
66             } else {
67                 return name;
68             }
69         }
70     ux_language_text_source_ocean: |
71         function() {
72             var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
73             name = name.split(' ').join('\n');
74             return name.split('').join('  ');
75         }
76     ux_language_text_source_sea: |
77         function() {
78             var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
79             name = name.split(' ').join('\n');
80             return name.split('').join(' ');
81         }
82     ux_language_text_source_continent_stacked_only: |
83         function() {
84             var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
85             return name.split(' ').join('\n');
86         }
87     ux_language_text_source_continent: |
88         function() {
89             var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || '';
90             name = name.split(' ').join('\n');
91             return name.split('').join(' ');
92         }
93     ux_language_text_source_road_ref_and_name: |
94         function() {
95             // 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
96             return (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature.name;
97
98             /*
99             var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
100             if(feature.ref && name) {
101                 return (feature.ref + ' ' + name);
102             } else {
103                 return name;
104             }
105             */
106         }
107     ux_language_text_source_road_ref_and_name_short: |
108         function() {
109             // 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
110             return (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature.name;
111
112             /*
113             var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
114             if (feature.ref && (feature.ref.length < 6) && name) {
115                 return feature.ref + ' ' + name;
116             } else {
117                 return name;
118             }
119             */
120         }
121     ux_language_text_source_piste_advanced: |
122         function() {
123             var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
124             return name ? ('◆ ' + name) : '◆';
125         }
126     ux_language_text_source_piste_expert: |
127         function() {
128             var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
129             return name ? ('◆◆ ' + name) : '◆◆';
130         }
131     ux_language_text_source_building_and_address: |
132         function() {
133             var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'];
134             if (name && feature.addr_housenumber) {
135                 return name + '\n' + feature.addr_housenumber;
136             } else {
137                 return name;
138             }
139         }
140
141     # To facilitate data visualizations several recommended sort orders are provided
142     #
143     # Your classic raster map overlay.
144     # Over all line and polygon features.
145     # Under map labels (icons and text), under UI elements
146     # (like routeline and search result pins).
147     sdk_order_over_everything_but_text_0: 490
148     sdk_order_over_everything_but_text_1: 491
149     sdk_order_over_everything_but_text_2: 492
150     sdk_order_over_everything_but_text_3: 493
151     sdk_order_over_everything_but_text_4: 494
152     sdk_order_over_everything_but_text_5: 495
153     sdk_order_over_everything_but_text_6: 496
154     sdk_order_over_everything_but_text_7: 497
155     sdk_order_over_everything_but_text_8: 498
156     sdk_order_over_everything_but_text_9: 499
157     #
158     # Your classic "underlay"
159     # Under roads. Above borders, water, landuse, and earth.
160     sdk_order_under_roads_0: 290
161     sdk_order_under_roads_1: 291
162     sdk_order_under_roads_2: 292
163     sdk_order_under_roads_3: 293
164     sdk_order_under_roads_4: 294
165     sdk_order_under_roads_5: 295
166     sdk_order_under_roads_6: 296
167     sdk_order_under_roads_7: 297
168     sdk_order_under_roads_8: 298
169     sdk_order_under_roads_9: 299
170     #
171     # Under water.
172     # Above earth and most landuse.
173     sdk_order_under_water_0: 190
174     sdk_order_under_water_1: 191
175     sdk_order_under_water_2: 192
176     sdk_order_under_water_3: 193
177     sdk_order_under_water_4: 194
178     sdk_order_under_water_5: 195
179     sdk_order_under_water_6: 196
180     sdk_order_under_water_7: 197
181     sdk_order_under_water_8: 198
182     sdk_order_under_water_9: 199
183     #
184     # Under everything.
185     # Tip: disable earth layer.
186     sdk_order_under_everything_0: 0
187     sdk_order_under_everything_1: 1
188     sdk_order_under_everything_2: 2
189     sdk_order_under_everything_3: 3
190     sdk_order_under_everything_4: 4
191     sdk_order_under_everything_5: 5
192     sdk_order_under_everything_6: 6
193     sdk_order_under_everything_7: 7
194     sdk_order_under_everything_8: 8
195     sdk_order_under_everything_9: 9
196     #
197     # TRANSIT OVERLAY
198     # should default to "auto", with SDK overriding it to true or false,
199     # or app logic sets other booleans that triggers auto behavior later
200     sdk_transit_overlay: false
201     #
202     # SHIELDS
203     sdk_shield_color: black
204     sdk_shield_text_color: white
205     #
206     # enable interactivity for key features
207     interactive: false
208     #
209     # default order for basemap features
210     feature_order: function() { return feature.sort_rank; }
211     sdk_building_extrude: true              # building extrusion toggle
212     #
213     #labels-global:
214     text_visible_continent:         true
215     text_visible_island:            true
216     text_visible_admin:             true
217     text_visible_populated_places:  true
218     icon_visible_populated_places:  true
219     text_visible_neighbourhoods:    true
220     text_visible_neighbourhoods_e:  true
221     text_visible_building:          true           # false for default
222     text_visible_address:           true           # false for default
223     text_visible_water_labels:      true
224     label_visible_landuse_green:    true            #this needs work
225     icon_visible_landuse_green:     true            #this needs work
226     icon_size_green:                [[13, '14px'], [16, '18px'], [18, '19px']]    # 0px for no, default, more  [[13, '14px'], [16, '18px'], [18, '19px']]
227     icon_size_green_l:              [[14, '24px'], [16, '32px']]                  # 0px for no, default, more  [[14, '24px'], [16, '32px']]
228     text_visible_landuse_green:     true
229     label_visible_poi_landuse:      true
230     icon_visible_poi_landuse:       true           #false for default
231     text_visible_poi_landuse:       true           #false for default
232     label_visible_poi_landuse_e:    true
233     icon_visible_poi_landuse_e:     true           #false for default
234     text_visible_poi_landuse_e:     true
235     text_visible_landuse_generic:   true
236     label_visible_station:          true           #false for default
237     icon_visible_station:           true           #false for default
238     text_visible_station:           true           #false for default
239     text_visible_highway:           true
240     text_visible_highway_e:         true           #false for default
241     text_visible_trunk_primary:     true
242     text_visible_trunk_primary_e2:  true           #false for default
243     text_visible_trunk_primary_e:   true           #false for default
244     text_visible_secondary:         true
245     text_visible_secondary_e:       true           #false for default
246     text_visible_tertiary:          true
247     text_visible_tertiary_e:        true           #false for default
248     text_visible_minor_road:        true
249     text_visible_minor_road_e:      true
250     text_visible_service_road:      true
251     text_visible_path:              true
252     text_visible_piste:             true
253     text_visible_steps:             true
254     text_visible_aerialway:         true
255     sdk_road_shields:               true
256     text_visible_exits:             true
257     text_visible_exits_e:           true           #false for default
258     text_visible_airport_gate:      true
259
260     #cameras:
261     camera_settings: { type: isometric, axis: [-.2, .2] }
262
263     #lights:
264     light_settings: { type: directional, direction: [1, 1, -.9], diffuse: 0.5, ambient: 0.85 }
265
266     #roads:
267     highway1:                   [1.00,1.00,1.00]
268     highway_link1:              [0.00, 0.00, 0.00]
269     highway_casing1:            [0.894,0.906,0.914]
270     highway_tunnel1:            [0.930,0.930,0.930]
271     highway_tunnel_casing1:     [0.894,0.906,0.914]
272     highway_link_tunnel_casing1: [0.350,0.350,0.350]
273     ferry1:                     [0.410,0.750,0.833]
274     rail1:                      '#999'
275     rail1_e:                    '#bbb'
276     rail2:                      '#777'             # less important rail (service, sidings)
277     major_road1:                [1.0, 1.0, 1.0]
278     major_road1b:               [0.935, 0.935, 0.935]
279     major_road1c:               white    #15%
280     major_road2:                [0.935, 0.935, 0.935]
281     major_road2a:               [0.935, 0.935, 0.935]
282     major_road2b:               [0.935, 0.935, 0.935]
283     major_road3:                [0.935, 0.935, 0.935]
284     major_road4:                [0.00, 0.00, 0.00]
285     major_road5:                white
286     major_casing1:              [0.40, 0.40, 0.40]        # same as highway_casing1
287     major_casing2:              [0.40, 0.40, 0.40]        # zoomed out
288     major_tunnel1:              [0.930,0.930,0.930]
289     major_tunnel_casing1:       [0.695,0.739,0.790]
290     major_route1:               [0.0, 0.0, 0.0]
291     major_route2:               [0.2, 0.2, 0.2]           # zoomed out
292     minor_route:                [0.97, 0.97, 0.97]        # same as major_route
293     minor_road1:                [0.935, 0.935, 0.935]     # natural earth
294     minor_road2:                [1.00,1.00,1.00]     # natural earth, same as major_road2
295     minor_road3:                [0.935, 0.935, 0.935]
296     minor_road4:                [0.935, 0.935, 0.935]     # zoomed out
297     minor_road5:                [0.935, 0.935, 0.935]     # zoomed out, again
298     minor_casing1:              white                     # same as highway_casing1
299     minor_casing2:              white                     # zoomed out
300     minor_tunnel1:              [0.929,0.929,0.929]
301     minor_tunnel_casing1:       [1.00, 1.00, 1.00]
302     service_road1:              [0.935, 0.935, 0.935]
303     service_road2:              white
304     service_road_casing1:       [0.40, 0.40, 0.40]
305     service_road_casing2:       white
306     path1:                      [0.97, 0.97, 0.97]
307     path2:                      [0.97, 0.97, 0.97]        # zoomed out
308     path_casing1:               [0.40, 0.40, 0.40]
309     path_bridge_casing1:        [0.40, 0.40, 0.40]
310     path_bridge_casing2:        [0.40, 0.40, 0.40]        # zoomed out
311     path_steps1:                red
312     path_steps1_b:              '#ccc'
313     piste_easy:                 [0.367,0.750,0.622]
314     piste_intermediate:         [0.420,0.678,0.863]
315     piste_advanced:             [0.450,0.450,0.450]
316     piste_expert:               [0.450,0.450,0.450]
317
318     #boundaries:
319     country_boundary:           [1.00,1.00,1.00]
320     region_boundary:            [1.00,1.00,1.00]
321     subregion_boundary:         [1.00,1.00,1.00]
322     city_wall:                  [0.682,0.682,0.682]
323     retaining_wall:             [0.827,0.808,0.780]
324     snow_fence:                 [0.827,0.808,0.780]
325     fence:                      [0.827,0.808,0.780]
326     dam:                        [0.827,0.808,0.780]
327
328     #areas:
329     scene1:      white                    # map background
330     water1:      [0.870, 0.870, 0.870]    # water wave
331     water2:      [0.760, 0.760, 0.760]    # water wave
332     water3:      [0.5, 0.5, 0.5]          # playa texture
333     water1_o:    '#fff'                   # water stroke (ocean coastline)
334     water2_o:    '#d1d1d1'                # water stroke 2 (streams, lake outlines)
335     earth1:      white                    # land color
336     earth2:      '#e9e4e0'                # urban
337     earth2_v:    false                    # urban
338     green1:      [0.50,0.50,0.50]         # park
339     green1_r:    '#bbbbbb'                # park roads
340     green1_b:    [.65, .65, .65]          # park buildings
341     green1_bo:   [.8, .8, .8]             # park building outlines
342     green2:      [0.90,0.90,0.90]         # cemetery
343     green3:      '#9a9a9a'                # golf course
344     green4:      [0.90,0.90,0.90]         # farm faint
345     green4_v:    false                    # farm faint
346     green5:      [0.75,0.75,0.75]         # farm
347     green6:      [0.40,0.40,0.40]         # nature reserve
348     green7:      [0.85,0.85,0.85]         # forest
349     green8:      [0.80,0.80,0.80]         # conservation
350     green9:      [0.85,0.85,0.85]         # forest (landcover)
351     green9_e:    [0.90,0.90,0.90]         # forest (landcover) early
352     green9_v:    true                     # forest (landcover) visibility
353     green10:     [0.85,0.85,0.85]         # sports_centre
354     green11:     [0.85,0.85,0.85]         # minor zoo related AOIs
355     green11_o:   [0.85,0.85,0.85]         # minor zoo related AOIs outline
356     orange1:     '#aaaaaa'                # stadium
357     orange2:     [0.40,0.40,0.40]         # pitch (play field)
358     brown1:      '#7b7b7b'                # university
359     brown1_r:    '#bbbbbb'                # university roads
360     brown1_b:    [.65, .65, .65]          # university buildings
361     brown1_bo:   [.8, .8, .8]             # university building outlines
362     brown2:      '#aaaaaa'                # school
363     brown3:      [0.40,0.40,0.40]         # playground
364     red1:        '#a2a2a2'                # hospital
365     red1_r:      '#bbbbbb'                # hospital roads
366     red1_b:      [.65, .65, .65]          # hospital buildings
367     red1_bo:     [.8, .8, .8]             # hospital building outlines
368     gray-all:    [0.935,0.960,0.970]      # default gray for landuse outdoor style
369     grey1:       '#cccccc'                # pedestrian, retail, airport apron, parking, church
370     grey1_e:     '#dad6d4'                # pedestrian, retail, airport apron, parking, church early zoom 14
371     grey1_v:     true                     # pedestrian, retail, airport apron, parking, church
372     grey2:       [0.5, 0.5, 0.5]          # airport runway
373     grey3:       '#bbbbbb'                # railway
374     grey4:       '#ffc52a'                # airport taxiway
375     grey5:       '#ffc52a'                # airport taxiway
376     grey6:       '#dddddd'                # industrial
377     grey6_b:     [.65, .65, .65]          # industrial buildings
378     grey6_bo:    [.8, .8, .8]             # industrial building outlines
379     grey7:       '#ecebe9'                # pedestrian, match minor road / path color
380     grey7_v:     true                     # pedestrian visibility
381     grey8:       '#ecebe9'                # winter sports
382     grey8_v:     true                     # winter sports visibility
383     grey9:       [.7, .0, .0, 0.5]        #[.7, .7, .7]        # transit platform
384     grey9_o:     [.5, .5, .5]             # transit platform outline
385     grey9_v:     true                     # transit platform visibility
386     grey10:      '#d4cce6'                # generic major landuse (theme park, resort, aquarium, winery)
387     grey10_o:    '#bcb9c5'                # generic major landuse outline
388     grey11:      '#d7d7d7'                # generic minor landuse (attraction, artwork)
389     grey11_o:    '#cccccc'                # generic minor landuse outline
390     grey12:      '#cfcfcf'                # generic minor amusements (roller coasters, rides, slide, carousel)
391     grey12_o:    '#c5c5c5'                # generic minor amusements
392     purple:      '#f0e1e1'                # airport
393     purple_v:    true                     # airport
394     mystry1:     '#aaaaaa'                # recreation ground (type of park, sometimes around reservoirs)
395     building1:   white                    # building
396     building2:   white                    # building stroke
397     building_o:  25                       # building stroke order
398     building_e:  true                     # building stroke order
399
400     #labels:
401     text_fill:          '#000'                  # WHITE
402     text_fill2:         '#000'                  # WHITE
403     text_fill_road_e:   '#555'                  # WHITE
404     text_fill_exits:    [0.40,0.40,0.40]        # motorway junctions, highway_casing1
405     text_fill_building: '#000'                  # tan
406     text_fill_address:  [0.60,0.60,0.60]        # HUH
407     text_fill_water:    [0.354,0.531,0.620]     # blue
408     text_fill_park:     [0.175,0.175,0.175]     # green
409     text_fill_beach:    [0.35,0.35,0.35]        # black
410     text_fill_piste:    [0.350,0.350,0.350]     # dark gray
411     text_fill_piste_e:  [0.350,0.350,0.350]     # dark gray early
412     text_stroke:        [0.913,0.925,0.933]     # land color
413     text_stroke_park:   [0.913,0.925,0.933]     # land color
414     text_stroke_water:  [0.913,0.925,0.933]
415     text_stroke_address:   [0.913,0.925,0.933]  # address stroke color
416     townspot_sprite:    townspot-m-rev          # depends on land color and text settings
417     text_font_family:   'Open Sans'             # branding in asperational Unicode, yo (or Helvetica)
418
419 cameras:
420     camera1: global.camera_settings
421
422 scene:
423     background:
424         color: [0.894,0.902,0.898]
425     # animated: true
426
427 fonts:
428     Open Sans:
429         - weight: 300 # Light
430           url: fonts/OpenSans-Light.woff
431         - weight: normal # Regular
432           url: fonts/OpenSans-Regular.woff
433         - weight: normal # Regular
434           style: italic
435           url: fonts/OpenSans-Italic.woff
436         - weight: 600 # Semi Bold
437           url: fonts/OpenSans-Semibold.woff
438         - weight: 600 # Semi Bold
439           style: italic
440           url: fonts/OpenSans-SemiboldItalic.woff
441         - weight: bold
442           url: fonts/OpenSans-Bold.woff
443     Montserrat:
444         - weight: normal
445           #url: https://fonts.gstatic.com/s/montserrat/v7/zhcz-_WihjSQC0oHJ9TCYL3hpw3pgy2gAi-Ip7WPMi0.woff
446           url: fonts/Montserrat-Regular.woff
447
448 textures:
449     pois:
450         url: images/walkabout@2x.png
451         #url: https://raw.githubusercontent.com/tangrams/walkabout-style/gh-pages/images/walkabout%402x.png
452         filtering: mipmap
453         sprites:
454             # define sprites: [x origin, y origin, width, height]
455             'US:CA-1char': [688, 786, 82, 92]
456             'US:CA-2char': [588, 786, 92, 92]
457             'US:CA-3char': [468, 786, 112, 92]
458             'US:CA-4char': [336, 786, 124, 92]
459             'US:CA-5char': [200, 786, 128, 92]
460             'US:I-1char': [514, 890, 90, 100]
461             'US:I-2char': [0, 502, 102, 102]
462             'US:I-3char': [856, 370, 134, 100]
463             'US:I-4char': [708, 370, 140, 100]
464             'US:I-5char': [548, 370, 152, 100]
465             'US:NY-1char': [656, 606, 72, 88]
466             'US:NY-2char': [0, 606, 88, 88]
467             'US:NY-3char': [880, 502, 104, 86]
468             'US:NY-4char': [756, 502, 116, 86]
469             'US:NY-5char': [628, 502, 120, 86]
470             'US:PA-1char': [576, 606, 72, 88]
471             'US:PA-2char': [480, 606, 88, 88]
472             'US:PA-3char': [360, 606, 112, 88]
473             'US:PA-4char': [232, 606, 120, 88]
474             'US:PA-5char': [96, 606, 128, 88]
475             'US:US-1char': [420, 890, 88, 94]
476             'US:US-2char': [308, 892, 106, 94]
477             'US:US-3char': [162, 890, 136, 100]
478             'US:US-4char': [0, 890, 156, 100]
479             'US:US-5char': [776, 786, 164, 100]
480             airport: [952, 0, 38, 38]
481             aerodrome: [952, 0, 38, 38]
482             allotments: [460, 252, 38, 38]
483             aquarium: [824, 168, 38, 38]
484             atm: [0, 168, 38, 38]
485             attraction: [458, 210, 38, 38]
486             bakery: [640, 168, 38, 38]
487             bank: [46, 168, 38, 38]
488             category-predicate-money: [46, 168, 38, 38]
489             bar: [322, 168, 38, 38]
490             pub: [322, 168, 38, 38]
491             category-predicate-drink: [322, 168, 38, 38]
492             baseball: [552, 84, 38, 38]
493             basketball: [506, 84, 38, 38]
494             battlefield: [732, 210, 38, 38]
495             bbq: [138, 252, 38, 38]
496             beach: [690, 84, 38, 38]
497             beach_resort: [640, 210, 38, 38]
498             bench: [630, 0, 38, 38]
499             bicycle: [964, 126, 38, 38]
500             bicycle_rental: [964, 126, 38, 38]
501             bicycle_rental_station: [964, 126, 38, 38]
502             bicycle_parking: [736, 126, 38, 38]
503             biergarten: [366, 210, 38, 38]
504             brewery: [366, 210, 38, 38]
505             boat_rental: [506, 252, 38, 38]
506             books: [918, 126, 38, 38]
507             bridge: [966, 84, 38, 38]
508             buddhist: [828, 84, 38, 38]
509             building: [506, 168, 38, 38]
510             hangar: [506, 168, 38, 38]
511             nursing_home: [506, 168, 38, 38]
512             manor: [506, 168, 38, 38]
513             apartments: [506, 168, 38, 38]
514             care_home: [506, 168, 38, 38]
515             bus_station: [860, 0, 38, 38]
516             bus_stop: [860, 0, 38, 38]
517             butcher: [0, 84, 38, 38]
518             cafe: [594, 168, 38, 38]
519             camp_site: [874, 84, 38, 38]
520             capital-l: [268, 294, 32, 32]
521             capital-m: [236, 294, 24, 24]
522             capital-s: [206, 294, 20, 20]
523             capital-xl: [356, 294, 40, 40]
524             capital-xs: [184, 294, 16, 16]
525             car: [872, 126, 38, 38]
526             category-namespace-mobility: [872, 126, 38, 38]
527             category-predicate-mobility: [872, 126, 38, 38]
528             car_repair: [92, 168, 38, 38]
529             car_sharing: [676, 0, 38, 38]
530             caravan_site: [870, 210, 38, 38]
531             castle: [460, 42, 38, 38]
532             fort: [460, 42, 38, 38]
533             cemetery: [782, 84, 38, 38]
534             grave_yard: [782, 84, 38, 38]
535             christian: [276, 126, 38, 38]
536             cinema: [870, 168, 38, 38]
537             clothes: [916, 168, 38, 38]
538             fashion: [916, 168, 38, 38]
539             college: [962, 168, 38, 38]
540             university: [962, 168, 38, 38]
541             confectionery: [90, 210, 38, 38]
542             convenience: [138, 84, 38, 38]
543             county_shield-1char: [736, 606, 72, 72]
544             county_shield-2char: [532, 502, 88, 72]
545             county_shield-3char: [420, 502, 104, 72]
546             county_shield-4char: [276, 502, 136, 72]
547             county_shield-5char: [108, 502, 160, 72]
548             courthouse: [446, 0, 38, 38]
549             dam: [966, 252, 38, 38]
550             dentist: [266, 0, 38, 38]
551             department_store: [826, 126, 38, 38]
552             doctors: [224, 0, 38, 38]
553             clinic: [224, 0, 38, 38]
554             dog_park: [46, 252, 38, 38]
555             dot-black: [92, 294, 38, 38]
556             dot-white: [920, 252, 38, 38]
557             drinking_water: [320, 210, 38, 38]
558             dry_cleaning: [92, 84, 38, 38]
559             electronics: [690, 126, 38, 38]
560             computer: [690, 126, 38, 38]
561             enclosure: [0, 294, 38, 38]
562             estate_agent: [184, 42, 38, 38]
563             factory: [460, 168, 38, 38]
564             industrial: [460, 168, 38, 38]
565             chimney: [460, 168, 38, 38]
566             substation: [460, 168, 38, 38]
567             wastewater_plant: [460, 168, 38, 38]
568             works: [460, 168, 38, 38]
569             water_works: [460, 168, 38, 38]
570             plant: [460, 168, 38, 38]
571             generator: [460, 168, 38, 38]
572             category-predicate-industry: [460, 168, 38, 38]
573             fast_food: [228, 210, 38, 38]
574             ferry: [906, 0, 38, 38]
575             ferry_terminal: [906, 0, 38, 38]
576             fire_station: [400, 0, 38, 38]
577             firepit: [0, 252, 38, 38]
578             fishing: [916, 210, 38, 38]
579             fishing_area: [916, 210, 38, 38]
580             fitness: [966, 42, 38, 38]
581             fitness_station: [966, 42, 38, 38]
582             florist: [230, 126, 38, 38]
583             forest: [136, 210, 38, 38]
584             natural_forest: [136, 210, 38, 38]
585             nature_reserve: [136, 210, 38, 38]
586             conservation: [136, 210, 38, 38]
587             protected_area: [136, 210, 38, 38]
588             grass: [136, 210, 38, 38]
589             fountain: [368, 126, 38, 38]
590             fuel: [44, 210, 38, 38]
591             gallery: [732, 168, 38, 38]
592             garden: [736, 84, 38, 38]
593             gas_canister: [644, 252, 38, 38]
594             gate: [46, 294, 38, 38]
595             generic: [138, 294, 38, 38]
596             category-namespace-other: [138, 294, 38, 38]
597             category-predicate-addressing: [138, 294, 38, 38]
598             generic_shield-1char: [404, 698, 72, 72]
599             generic_shield-2char: [300, 698, 98, 72]
600             generic_shield-3char: [160, 698, 132, 72]
601             generic_shield-4char: [0, 698, 152, 72]
602             generic_shield-5char: [816, 606, 180, 72]
603             geyser: [594, 210, 38, 38]
604             gift: [184, 126, 38, 38]
605             golf_course: [460, 84, 38, 38]
606             government: [230, 168, 38, 38]
607             townhall: [230, 168, 38, 38]
608             public: [230, 168, 38, 38]
609             embassy: [230, 168, 38, 38]
610             category-predicate-civic: [230, 168, 38, 38]
611             hairdresser: [92, 42, 38, 38]
612             hardware: [920, 42, 38, 38]
613             doityourself: [920, 42, 38, 38]
614             painter: [920, 42, 38, 38]
615             historical: [138, 126, 38, 38]
616             hospital: [182, 0, 38, 38]
617             category-namespace-health: [182, 0, 38, 38]
618             category-predicate-health: [182, 0, 38, 38]
619             hot_spring: [322, 84, 38, 38]
620             hotel: [814, 0, 38, 38]
621             motel: [814, 0, 38, 38]
622             hostel: [814, 0, 38, 38]
623             category-predicate-sleep: [814, 0, 38, 38]
624             hunting: [548, 210, 38, 38]
625             ice_cream: [412, 210, 38, 38]
626             information: [504, 210, 38, 38]
627             jewelry: [782, 42, 38, 38]
628             jewish: [44, 0, 38, 38]
629             landmark: [354, 0, 38, 38]
630             memorial: [354, 0, 38, 38]
631             monument: [354, 0, 38, 38]
632             tower: [354, 0, 38, 38]
633             beacon: [354, 0, 38, 38]
634             laundry: [736, 42, 38, 38]
635             library: [0, 0, 38, 38]
636             light_rail: [768, 0, 38, 38]
637             tram_stop: [768, 0, 38, 38]
638             lighthouse: [276, 84, 38, 38]
639             liquor: [598, 126, 38, 38]
640             alcohol: [598, 126, 38, 38]
641             mall: [690, 42, 38, 38]
642             marina: [184, 168, 38, 38]
643             dock: [184, 168, 38, 38]
644             mine: [828, 42, 38, 38]
645             mobile_phone: [552, 42, 38, 38]
646             motorcycle: [276, 252, 38, 38]
647             museum: [92, 126, 38, 38]
648             music: [414, 42, 38, 38]
649             muslim: [90, 0, 38, 38]
650             newspaper: [368, 42, 38, 38]
651             kiosk: [368, 42, 38, 38]
652             observatory: [598, 252, 38, 38]
653             office: [644, 84, 38, 38]
654             insurance: [644, 84, 38, 38]
655             company: [644, 84, 38, 38]
656             category-predicate-service: [644, 84, 38, 38]
657             optician: [322, 42, 38, 38]
658             outdoor: [736, 252, 38, 38]
659             park: [322, 126, 38, 38]
660             national_park: [322, 126, 38, 38]
661             protected_area: [322, 126, 38, 38]
662             category-predicate-nature: [322, 126, 38, 38]
663             parking: [782, 126, 38, 38]
664             peak: [230, 84, 38, 38]
665             pet: [276, 42, 38, 38]
666             pharmacy: [46, 84, 38, 38]
667             photographic_laboratory: [230, 42, 38, 38]
668             photographer: [230, 42, 38, 38]
669             picnic_site: [230, 252, 38, 38]
670             picnic_table: [230, 252, 38, 38]
671             pier: [722, 0, 38, 38]
672             place_of_worship: [368, 168, 38, 38]
673             chapel: [368, 168, 38, 38]
674             wayside_shrine: [368, 168, 38, 38]
675             category-predicate-religion: [368, 168, 38, 38]
676             playground: [506, 42, 38, 38]
677             police: [308, 0, 38, 38]
678             post_office: [414, 168, 38, 38]
679             quarry: [874, 42, 38, 38]
680             mineshaft: [874, 42, 38, 38]
681             adit: [874, 42, 38, 38]
682             ranger_station: [184, 252, 38, 38]
683             recreation_track: [368, 252, 38, 38]
684             recycling: [138, 42, 38, 38]
685             restaurant: [182, 210, 38, 38]
686             category-namespace-eat_and_drink: [182, 210, 38, 38]
687             category-predicate-eat: [182, 210, 38, 38]
688             retail: [644, 42, 38, 38]
689             store: [644, 42, 38, 38]
690             category-namespace-shop_and_service: [644, 42, 38, 38]
691             category-predicate-shop: [644, 42, 38, 38]
692             ruin: [584, 0, 38, 38]
693             ruins: [584, 0, 38, 38]
694             archaeological_site: [584, 0, 38, 38]
695             school: [598, 84, 38, 38]
696             kindergarten: [598, 84, 38, 38]
697             category-namespace-education_and_religion: [598, 84, 38, 38]
698             category-predicate-education: [598, 84, 38, 38]
699             scuba_diving: [690, 252, 38, 38]
700             dive_centre: [690, 252, 38, 38]
701             sdk_shield-1char: [484, 698, 84, 84]
702             sdk_shield-2char: [576, 698, 112, 84]
703             sdk_shield-3char: [696, 698, 144, 84]
704             sdk_shield-4char: [848, 698, 168, 84]
705             sdk_shield-5char: [0, 786, 192, 84]
706             shoemaker: [598, 42, 38, 38]
707             shower: [824, 210, 38, 38]
708             ski: [414, 126, 38, 38]
709             winter_sports: [414, 126, 38, 38]
710             ski_rental: [414, 126, 38, 38]
711             ski_school: [414, 126, 38, 38]
712             ski_jumping: [414, 126, 38, 38]
713             skiing: [414, 126, 38, 38]
714             slipway: [778, 210, 38, 38]
715             soccer: [414, 84, 38, 38]
716             sports: [276, 168, 38, 38]
717             pitch: [276, 168, 38, 38]
718             sports_centre: [276, 168, 38, 38]
719             recreation_ground: [276, 168, 38, 38]
720             spring: [368, 84, 38, 38]
721             stadium: [506, 126, 38, 38]
722             subway_entrance: [538, 0, 38, 38]
723             summer_camp: [414, 252, 38, 38]
724             supermarket: [644, 126, 38, 38]
725             greengrocer: [644, 126, 38, 38]
726             swimming_area: [962, 210, 38, 38]
727             swimming_pool: [552, 126, 38, 38]
728             tailor: [46, 42, 38, 38]
729             telescope: [552, 252, 38, 38]
730             tennis: [460, 126, 38, 38]
731             theatre: [686, 168, 38, 38]
732             category-predicate-fun: [686, 168, 38, 38]
733             theme_park: [46, 126, 38, 38]
734             amusement_ride: [46, 126, 38, 38]
735             toilets: [920, 84, 38, 38]
736             townspot-l: [656, 294, 32, 32]
737             townspot-l-rev: [484, 294, 32, 32]
738             townspot-m: [624, 294, 24, 24]
739             townspot-m-rev: [452, 294, 24, 24]
740             townspot-s: [596, 294, 20, 20]
741             townspot-s-rev: [424, 294, 20, 20]
742             townspot-xl: [696, 294, 40, 40]
743             townspot-xl-rev: [524, 294, 38, 38]
744             townspot-xs: [572, 294, 16, 16]
745             townspot-xs-rev: [404, 294, 12, 12]
746             toys: [0, 42, 38, 38]
747             traffic_signals: [0, 210, 38, 38]
748             trailhead: [782, 252, 38, 38]
749             train_station: [492, 0, 38, 38]
750             station: [492, 0, 38, 38]
751             category-predicate-transport: [492, 0, 38, 38]
752             tree: [828, 252, 38, 38]
753             tree-s: [874, 252, 38, 38]
754             ux-current-location: [294, 370, 88, 88]
755             ux-locate-off: [824, 294, 72, 72]
756             ux-locate-on: [744, 294, 72, 72]
757             ux-route-arrow: [0, 370, 128, 128]
758             ux-route-start: [214, 370, 72, 92]
759             ux-route-stop: [136, 370, 72, 92]
760             ux-search-active: [388, 370, 72, 108]
761             ux-search-inactive: [468, 370, 72, 108]
762             ux-transit-stop: [308, 296, 42, 36]
763             veterinary: [136, 0, 38, 38]
764             viewpoint: [778, 168, 38, 38]
765             category-namespace-do_and_see: [778, 168, 38, 38]
766             category-predicate-attraction: [778, 168, 38, 38]
767             vineyard: [138, 168, 38, 38]
768             volcano: [184, 84, 38, 38]
769             water_park: [686, 210, 38, 38]
770             water_slide: [686, 210, 38, 38]
771             water_tower: [322, 252, 38, 38]
772             waterfall: [92, 252, 38, 38]
773             wine: [274, 210, 38, 38]
774             winery: [548, 168, 38, 38]
775             zoo: [0, 126, 38, 38]
776
777     building-grid:
778         url: images/building-grid.gif
779         #url: https://raw.githubusercontent.com/tangrams/walkabout-style/gh-pages/images/building-grid.png
780         filtering: mipmap
781
782 sources:
783     mapzen:
784         type: TopoJSON
785         # prod
786         url:  https://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson
787         # dev
788         #url:  https://tile.dev.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson
789         url_params:
790             api_key: global.sdk_mapzen_api_key
791         rasters: [normals]
792         max_zoom: 16
793     normals: # normals
794         type: Raster
795         url: https://tile.mapzen.com/mapzen/terrain/v1/normal/{z}/{x}/{y}.png
796         url_params:
797             api_key: global.sdk_mapzen_api_key
798         max_zoom: 15
799
800 #    # Only enable this for local debug, should not be enabled for prod (app inserts these at runtime)
801 #    # These are all in San Francisco, California
802 #    #
803 #    # Current location gem
804 #    mz_current_location:
805 #        type: GeoJSON
806 #        url: https://gist.githubusercontent.com/anonymous/9e9588228b0a604264a2/raw/b28be49bea0b7feb859eb65b588c28e9fee5ae2c/map.geojson
807 #    # Route line
808 #    mz_route_line:
809 #        type: GeoJSON
810 #        # sf to ny
811 #        # url: https://gist.githubusercontent.com/anonymous/30c6c1a75c168d91d90c/raw/92bfe55e622766d250b1f2f5d17bdc7c26acb956/map.geojson
812 #        # local sf trip
813 #        url: https://gist.githubusercontent.com/anonymous/9a610ebda6fe4be7bccc/raw/8d217e43f2412d48d01534ba115f1e42dac72e68/map.geojson
814 #    # Dashed route line
815 #    mz_dash_line:
816 #        type: GeoJSON
817 #        url: https://gist.githubusercontent.com/anonymous/d73b851c64c3e5fbfc2754aa32f44c10/raw/938ae435776e176919c4797bed1465a92e403ef3/map.geojson
818 #    # Transit route line
819 #    mz_route_line_transit:
820 #        type: GeoJSON
821 #        url: https://gist.githubusercontent.com/anonymous/71ae88cbc6d62c4d141ecd6a61060050/raw/2254bbc18243f5dc609e663a580c9412a7447936/map.geojson
822 #    # Pin at start of route
823 #    mz_route_start:
824 #       type: GeoJSON
825 #       url: https://gist.githubusercontent.com/anonymous/5262969cb7549ea69221/raw/be03f233fa323d9b5cf50ef1d8e89a1faa3750f1/map.geojson
826 #    # Pin at end of route
827 #    mz_route_destination:
828 #       type: GeoJSON
829 #       url: https://gist.githubusercontent.com/anonymous/dbae9635dfe46796490e/raw/df55c318635a7d91b309ed40754d4738a292fd38/map.geojson
830 #    # Arrow for current route location
831 #    mz_route_location:
832 #        type: GeoJSON
833 #        url: https://gist.githubusercontent.com/anonymous/36613092be6e2aa004fd/raw/f753d13069425199e1dea1b449ef67d723f6510e/map.geojson
834 #    # Dots for transit stops in route preview
835 #    mz_route_transit_stop:
836 #        type: GeoJSON
837 #        url: https://gist.githubusercontent.com/anonymous/b9f16bca4a804f50faf71277d52ee4ab/raw/db13e4e765fa1ac8844b8ba02f4a0f66fe772907/map.geojson
838 #    # Pins showing search result locations
839 #    mz_search_result:
840 #        type: GeoJSON
841 #        url: https://gist.githubusercontent.com/anonymous/57dc09eeb120919f76de/raw/43426217da3c2bae0522dc4257aaa61e4df3981e/map.geojson
842 #    # Default point styling (SDK)
843 #    mz_default_point:
844 #        type: GeoJSON
845 #        url: https://gist.githubusercontent.com/anonymous/16324c771edfce45be0721390389b878/raw/7dbaebf17da7da8562e6c6f8768bc8cff83efa88/map.geojson
846 #    # Default shield styling (SDK)
847 #    mz_default_shield:
848 #        type: GeoJSON
849 #        url: https://gist.githubusercontent.com/nvkelso/3c08dba1eced4d01df98c1a9a7801162/raw/d83a5a396fc7b22309b8ca89336ad2dcfff6c452/map.geojson
850 #    # Default line styling (SDK)
851 #    mz_default_line:
852 #        type: GeoJSON
853 #        url: https://gist.githubusercontent.com/anonymous/26f4e8b6b34b2617b5d5533d89decb39/raw/df8e180ab4f7f19448014dccc4a755f7cfa20003/map.geojson
854 #    # Default polygon styling (SDK)
855 #    mz_default_polygon:
856 #        type: GeoJSON
857 #        url: https://gist.githubusercontent.com/anonymous/88235c795bb44b8c45150bdd5561f947/raw/71d4fab97b6513833bf1a589167119e6169ef86d/map.geojson
858
859 styles:
860     highlight:
861         base: lines
862     dots-lines:
863         base: lines
864         lighting: false
865         texcoords: true
866         blend: overlay
867         shaders:
868             defines:
869                 dotSize: .1
870             blocks:
871                 color: |
872                     vec2 st = fract(v_texcoord.xy);
873                     st -= .5;
874                     color.a = 1.- step(dotSize, dot(st,st)*2.);
875     dashed:
876         base: lines
877         dash: [1.25, 1.25]
878         dash_background_color: [0.808,0.860,0.851]
879     dashed_small:
880         base: lines
881         dash: [0.5, 0.5]
882         dash_background_color: [0.867, 0.867, 0.867]
883     dashed_big:
884         base: lines
885         dash: [2.0, 1.0]
886         dash_background_color: [0.808,0.860,0.851]
887     dashed_tunnel:
888         base: lines
889         dash: [5, 3]
890         #dash_background_color: red
891     terrain:
892         base: polygons
893         lighting: false
894         raster: custom
895         shaders:
896             uniforms:
897                 # u_envmap: images/relief-shading-environment-map.jpg
898                 u_envmap: images/draw-test10.jpg
899                 # u_envmap: https://raw.githubusercontent.com/tangrams/walkabout-style/gh-pages/images/draw-test10.jpg
900                 u_contrast: 1.
901                 u_brightness: 1.
902             blocks:
903                 global: |
904                     varying vec2 v_tex_coord;
905                     #ifdef TANGRAM_VERTEX_SHADER
906                     uniform vec3 u_raster_offsets[TANGRAM_NUM_RASTER_SOURCES];
907                     #endif
908                     // Simplified view-independent environment map
909                     vec4 terrainEnvmap (in sampler2D _tex, in vec3 _normal) {
910                         const vec3 eye = vec3(0.,0.,-1.);
911                         vec3 r = reflect(eye, _normal);
912                         r.z += 1.;
913                         float m = 2. * length(r);
914                         vec2 uv = r.xy / m + .5;
915                         return texture2D(_tex, uv);
916                     }
917                     const float e = 2.71828;
918                 setup: |
919                     #ifdef TANGRAM_VERTEX_SHADER
920                     v_tex_coord = modelPositionBaseZoom().xy * u_raster_offsets[0].z + u_raster_offsets[0].xy;
921                     #endif
922                 color: |
923                     // scale up normals with a function
924                     // https://www.desmos.com/calculator/bv4mzh8erz
925                     //float scale = 10./(u_map_position.z-.7) + 1.8;
926                     float scale1 = 20./(u_map_position.z) + 1.5;
927
928                     vec3 tex_normal = normalize(texture2D(u_rasters[0], v_tex_coord).xyz * 2.0 - 1.0);
929                     tex_normal.z /= scale1; // turn terrain exaggeration up/down
930
931                     // fade out spheremap normals with a function
932                     // https://www.desmos.com/calculator/ptgkzcnfyc
933                     float m = 3.5 * (u_map_position.z - 0.8) * pow(e, u_map_position.z * -.29);
934                     m = clamp(m, 0., 1.5);
935                     color = terrainEnvmap(u_envmap, tex_normal);
936
937                     // Apply contrast
938                     float contrast = m;
939                     color.rgb = ((color.rgb - 0.5) * max(contrast, 0.)) + 0.5;
940                     // Apply brightness
941                     float brightness = .5 - m * .5;
942                     color.rgb += brightness;
943
944                     color *= v_color; // apply layer color
945
946     # HSV/RGB functions
947     hsv:
948         shaders:
949             blocks:
950                 global: |
951                     vec3 rgb2hsv(vec3 c)
952                     {
953                         vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
954                         vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
955                         vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
956                         float d = q.x - min(q.w, q.y);
957                         float e = 1.0e-10;
958                         return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
959                     }
960                     vec3 hsv2rgb(vec3 c)
961                     {
962                         vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
963                         vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
964                         return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
965                     }
966
967     scale-buildings:
968         shaders:
969             blocks:
970                 position: |
971                     // scale buildings based on zoom
972                     float zoom = u_map_position.z;
973                     float min = .1;       // minimum building scale
974                     float midpoint = 16.; // middle of zoom range
975                     float inspeed = .1;   // number of zooms to scale buildings up
976                     float outspeed = 2.;  // number of zooms to scale buildings back down
977                     float e = 0.;
978
979                     if (zoom >= midpoint) {
980                         e = (zoom - midpoint) / (outspeed * .2);
981                     } else {
982                         e = abs(zoom - midpoint) / inspeed;
983                     }
984                     position.z *= ((1. - min) / (1. + (exp(e)))) + min;
985
986     building-grid:
987         base: polygons
988         lighting: false
989         mix: [hsv, scale-buildings]
990         texcoords: true
991         shaders:
992             uniforms:
993                 u_tex_grid: building-grid
994             defines:
995                 WALL_TINT: vec3(0.950, 0.950, 0.950)
996             blocks:
997                 color: |
998                     if (dot(vec3(0., 0., 1.), worldNormal()) < 1.0 - TANGRAM_EPSILON) {
999                         // If it's a wall
1000                         color.rgb = hsv2rgb(rgb2hsv(color.rgb) * WALL_TINT);
1001                         color.rgb = mix(color.rgb, vec3(0.),
1002                                         texture2D(u_tex_grid, v_texcoord).a);
1003                     }
1004
1005     building-lines:
1006         base: lines
1007         mix: scale-buildings
1008         texcoords: true
1009     icons:
1010         base: points
1011         texture: pois
1012         blend_order: 1
1013     text-blend-order:
1014         base: text
1015         blend_order: 1
1016     lines_transparent:
1017         base: lines
1018         blend: overlay
1019     polygons_transparent:
1020         base: polygons
1021         blend: overlay
1022     ux-route-line-overlay:
1023         base: lines
1024         blend: overlay
1025         blend_order: 0
1026     ux-route-line-dash-overlay:
1027         base: lines
1028         blend: overlay
1029         blend_order: 0
1030         dash: [2, 1]
1031     ux-transit-line-overlay:
1032         base: lines
1033         blend: overlay
1034         blend_order: 0
1035     ux-location-gem-overlay:
1036         base: points
1037         texture: pois
1038         interactive: global.interactive
1039         blend: overlay
1040         blend_order: 2
1041     ux-icons-overlay:
1042         base: points
1043         texture: pois
1044         interactive: global.interactive
1045         blend: overlay
1046         blend_order: 3
1047     sdk-point-overlay:
1048         base: points
1049         texture: pois
1050         interactive: global.interactive
1051         blend: overlay
1052         blend_order: 3
1053     sdk-shield-overlay:
1054         base: points
1055         texture: pois
1056         interactive: global.interactive
1057         blend: overlay
1058         blend_order: 3
1059     sdk-line-overlay:
1060         base: lines
1061         blend: overlay
1062         blend_order: 0
1063     sdk-polygon-overlay:
1064         base: polygons
1065         blend: overlay
1066         blend_order: 0
1067
1068 layers:
1069     # Map overlays for styling the server response (using special source layer names) for route line, current location, and search result pins
1070     mz_route_line:
1071         data: { source: mz_route_line }
1072         draw:
1073             ux-route-line-overlay:
1074                 color: '#06a6d4'
1075                 order: 500
1076                 width: [[0,3.5px],[5,5px],[9,7px],[10,6px],[11,6px],[13,8px],[14,9px],[15,10px],[16,11px],[17,12px],[18,10px]]
1077     mz_route_line_dash:
1078         data: { source: mz_dash_line }
1079         draw:
1080             ux-route-line-dash-overlay:
1081                 color: '#06a6d4'
1082                 order: 500
1083                 width: [[2,2px],[5,2.5px],[11,3px],[16,7px],[17,9px]]
1084     mz_route_line_transit:
1085         data: { source: mz_route_line_transit }
1086         draw:
1087             ux-transit-line-overlay:
1088                 # each transit route segment could be a different "line" each with it's own color
1089                 # but some transit lines don't define a color, in those cases default to blue
1090                 # and since the color is coming from Transit.land they call it "color" instead of "colour"
1091                 color: function() { return feature.color || '#06a6d4'; }
1092                 order: 500
1093                 width: [[0,3.5px],[5,5px],[9,7px],[10,6px],[11,6px],[13,8px],[14,9px],[15,10px],[16,11px],[17,12px],[18,10px]]
1094
1095
1096     mz_current_location_gem:
1097         data: { source: mz_current_location }
1098         draw:
1099             ux-location-gem-overlay:
1100                 sprite: ux-current-location
1101                 size: 36px
1102                 collide: false
1103                 transition: { show: { time: 0s }, hide: { time: 0s } }
1104     mz_route_location:
1105         data: { source: mz_route_location }
1106         draw:
1107             ux-location-gem-overlay:
1108                 sprite: ux-route-arrow
1109                 size: [60px,60px]
1110                 collide: false
1111                 transition: { show: { time: 0s }, hide: { time: 0s } }
1112     mz_route_start:
1113         data: { source: mz_route_start }
1114         draw:
1115             ux-icons-overlay:
1116                 interactive: global.interactive
1117                 priority: 1
1118                 sprite: ux-route-start
1119                 size: [36px,46px]
1120                 collide: false
1121                 anchor: top
1122                 transition: { show: { time: 0s }, hide: { time: 0s } }
1123     mz_route_destination:
1124         data: { source: mz_route_destination }
1125         draw:
1126             ux-icons-overlay:
1127                 interactive: global.interactive
1128                 priority: 1
1129                 sprite: ux-route-stop
1130                 size: [36px,46px]
1131                 collide: false
1132                 anchor: top
1133                 transition: { show: { time: 0s }, hide: { time: 0s } }
1134     mz_route_transit_stop:
1135         data: { source: mz_route_transit_stop }
1136         draw:
1137             ux-icons-overlay:
1138                 interactive: global.interactive
1139                 sprite: ux-transit-stop
1140                 size: [15px,15px]
1141                 collide: false
1142                 transition: { show: { time: 0s }, hide: { time: 0s } }
1143     mz_search_result:
1144         data: { source: mz_search_result }
1145         draw:
1146             ux-icons-overlay:
1147                 interactive: global.interactive
1148                 sprite: ux-search-active
1149                 size: [36px,54px]
1150                 collide: false
1151                 anchor: top
1152                 transition: { show: { time: 0s }, hide: { time: 0s } }
1153         inactive:
1154             filter: { state: inactive }
1155             draw:
1156                 ux-icons-overlay:
1157                     sprite: ux-search-inactive
1158     mz_dropped_pin:
1159         data: { source: mz_dropped_pin }
1160         draw:
1161             ux-icons-overlay:
1162                 interactive: global.interactive
1163                 sprite: ux-search-active
1164                 size: [36px,54px]
1165                 collide: false
1166                 anchor: top
1167                 transition: { show: { time: 0s }, hide: { time: 0s } }
1168
1169     # Used by the SDK to place point, line, and polygon overlays on the map
1170     mz_default_point:
1171         data: { source: mz_default_point }
1172         draw:
1173             sdk-point-overlay:
1174                 interactive: global.interactive
1175                 sprite: ux-search-active
1176                 size: [36px,54px]
1177                 collide: false
1178                 anchor: top
1179                 transition: { show: { time: 0s }, hide: { time: 0s } }
1180     mz_default_shield:
1181         data: { source: mz_default_shield }
1182         draw:
1183             sdk-shield-overlay:
1184                 interactive: global.interactive
1185                 sprite: |
1186                     function() {
1187                         if( feature.shield_text ) {
1188                             return ('sdk_shield-' + feature.shield_text.length + 'char');
1189                         } else {
1190                             return ('sdk_shield-' + feature.name.length + 'char');
1191                         }
1192                     }
1193                 sprite_default: sdk_shield-1char
1194                 color: global.sdk_shield_color
1195                 collide: false
1196                 transition: { show: { time: 0s }, hide: { time: 0s } }
1197                 text:
1198                     # offset: [0px, -1px]
1199                     text_source: |
1200                         function() {
1201                             if( feature.shield_text ) {
1202                                 return feature.shield_text;
1203                             } else {
1204                                 return feature.name;
1205                             }
1206                         }
1207                     anchor: center
1208                     font:
1209                         family: Montserrat
1210                         fill: global.sdk_shield_text_color
1211                         style: bold
1212                         size: [[7,7px],[12,8px],[16,11px]]
1213
1214         width_1char:
1215             filter: |
1216                 function() {
1217                     if( feature.shield_text ) {
1218                         return (feature.shield_text.length === 1);
1219                     } else {
1220                         return (feature.name.length === 1);
1221                     }
1222                 }
1223             draw:
1224                 sdk-shield-overlay:
1225                     size: [[6,[16px,16px]],[13,[18px,18px]],[16,[21px,21px]]]
1226         width_2char:
1227             filter: |
1228                 function() {
1229                     if( feature.shield_text ) {
1230                         return (feature.shield_text.length === 2);
1231                     } else {
1232                         return (feature.name.length === 2);
1233                     }
1234                 }
1235             draw:
1236                 sdk-shield-overlay:
1237                     size: [[6,[21px,16px]],[13,[24px,18px]],[16,[28px,21px]]]
1238         width_3char:
1239             filter: |
1240                 function() {
1241                     if( feature.shield_text ) {
1242                         return (feature.shield_text.length === 3);
1243                     } else {
1244                         return (feature.name.length === 3);
1245                     }
1246                 }
1247             draw:
1248                 sdk-shield-overlay:
1249                     size: [[6,[27px,16px]],[13,[31px,18px]],[16,[36px,21px]]]
1250         width_4char:
1251             filter: |
1252                 function() {
1253                     if( feature.shield_text ) {
1254                         return (feature.shield_text.length === 4);
1255                     } else {
1256                         return (feature.name.length === 4);
1257                     }
1258                 }
1259             draw:
1260                 sdk-shield-overlay:
1261                     size: [[6,[32px,16px]],[13,[36px,18px]],[16,[41px,21px]]]
1262         width_5char:
1263             filter: |
1264                 function() {
1265                     if( feature.shield_text ) {
1266                         return (feature.shield_text.length === 5);
1267                     } else {
1268                         return (feature.name.length === 5);
1269                     }
1270                 }
1271             draw:
1272                 sdk-shield-overlay:
1273                     size: [[6,[37px,16px]],[13,[41px,18px]],[16,[48px,21px]]]
1274         # this is kinda a hack
1275         width_longggggg:
1276             filter: |
1277                 function() {
1278                     if( feature.shield_text ) {
1279                         return (feature.shield_text.length > 5);
1280                     } else {
1281                         return (feature.name.length > 5);
1282                     }
1283                 }
1284             draw:
1285                 sdk-shield-overlay:
1286                     visible: false
1287     mz_default_line:
1288         data: { source: mz_default_line }
1289         draw:
1290             sdk-line-overlay:
1291                 color: '#06a6d4'
1292                 order: 503
1293                 width: 3px
1294     mz_default_polygon:
1295         data: { source: mz_default_polygon }
1296         draw:
1297             sdk-polygon-overlay:
1298                 color: [0.02,0.65,0.82,0.5]  #'#06b1e2'
1299                 order: 501
1300             sdk-line-overlay:
1301                 color: '#06a6d4'
1302                 order: 502
1303                 width: 0px
1304
1305     # Basemap styling
1306     earth:
1307         data: { source: mapzen}
1308         draw:
1309             terrain:
1310                 order: function() { return feature.sort_rank; }
1311                 color: [1.0, 1.0, 1.0]
1312
1313     water:
1314         data: { source: mapzen, layer: water }
1315         draw:
1316             polygons:
1317                 order: function() { return feature.sort_rank; }
1318                 #color: [0.608,0.925,0.965]
1319         later:
1320             filter: { $zoom: { min: 12 } }
1321             draw:
1322                 polygons:
1323                     order: function() { return feature.sort_rank + 1; }
1324                     #color: [0.608,0.925,0.965]
1325
1326         lakes:
1327             filter:
1328                 all:
1329                     - kind: [ocean, lake, water, riverbank, reservoir, swimming_pool]
1330                 # WARNING: any area filters here must match the area filters in the water_boundaries-not-ocean layer
1331                 any:
1332                     # limit show smaller landuse areas to higher zooms
1333                     - { $zoom: { min: 0 },  area: { min: 40000000000 } }
1334                     - { $zoom: { min: 2 },  area: { min: 20000000000 } }
1335                     # some weird natural earth scale set transition
1336                     - { $zoom: { min: 3 },  area: { min: 80000000000 } }
1337                     - { $zoom: { min: 4 },  area: { min: 5000000000 } }
1338                     - { $zoom: { min: 5 },  area: { min: 700000000 } }
1339                     - { $zoom: { min: 6 },  area: { min: 500000000 } }
1340                     - { $zoom: { min: 7 },  area: { min: 160000000 } }
1341                     - { $zoom: { min: 8 },  area: { min: 40000000 } }
1342                     - { $zoom: { min: 9 },  area: { min: 10000000 } }
1343                     - { $zoom: { min: 10 }, area: { min: 8000000 } }
1344                     - { $zoom: { min: 11 }, area: { min: 2000000 } }
1345                     - { $zoom: { min: 12 }, area: { min: 200000 } }
1346                     - { $zoom: { min: 13 }, area: { min: 100000 } }
1347                     - { $zoom: { min: 14 }, area: { min: 2000 } }
1348                     - { $zoom: { min: 15 } }
1349             draw:
1350                 polygons:
1351                     # color: [0.608,0.925,0.965] ## original color
1352                     # color: [0.528,0.902,0.960] ## more saturated
1353                     color: [0.432,0.890,0.960] ## even more saturated
1354         playas:
1355             filter: { kind: playa, $zoom: {min: 6} }
1356             draw:
1357                 dashed_small:
1358                     order: function() { return feature.sort_rank; }
1359                     color: grey
1360                     width: 1px
1361                 polygons_transparent:
1362                     color: [0.85,0.85,0.85, 0.5]
1363         other-water-areas:
1364             filter: { not: { kind: [ocean, lake, water, reservoir, playa] }, $zoom: { min: 11 }, area: { min: 100 } }
1365             draw:
1366                 polygons:
1367                     color: [0.432,0.890,0.960]
1368         swimming_pool:
1369             filter: { kind: swimming_pool }
1370             draw:
1371                 polygons:
1372                     color: [0.432,0.890,0.960]
1373         water-boundary-ocean-early:
1374             filter: { boundary: true, kind: ocean, $zoom: {min: 1, max: 17} }
1375             draw:
1376                 lines:
1377                     order: function() { return feature.sort_rank; }
1378                     color: [0.431,0.806,0.914]
1379                     width: 1px
1380                     join: round
1381         water-boundary-ocean-late:
1382             filter: { boundary: true, kind: ocean, $zoom: {min: 17} }
1383             draw:
1384                 lines:
1385                     order: function() { return feature.sort_rank; }
1386                     color: [0.431,0.806,0.914]
1387                     width: 1px
1388                     join: round
1389         water_boundaries-not-ocean:
1390             # filter: { boundary: true, not: { kind: [ocean,playa] }, $zoom: { min: 8 } }
1391             filter:
1392                 all:
1393                     - boundary: true
1394                     - not: { kind: [ocean,playa] }
1395                     - $zoom: { min: 8}
1396                 # WARNING: any area filters here must match the area filters in the lakes layer
1397                 any:
1398                     # limit show smaller landuse areas to higher zooms
1399                     - { $zoom: { min: 1 },  area: { min: 40000000000 } }
1400                     - { $zoom: { min: 2 },  area: { min: 20000000000 } }
1401                     # some weird natural earth scale set transition
1402                     - { $zoom: { min: 3 },  area: { min: 80000000000 } }
1403                     - { $zoom: { min: 4 },  area: { min: 5000000000 } }
1404                     - { $zoom: { min: 5 },  area: { min: 700000000 } }
1405                     - { $zoom: { min: 6 },  area: { min: 500000000 } }
1406                     - { $zoom: { min: 7 },  area: { min: 160000000 } }
1407                     - { $zoom: { min: 8 },  area: { min: 40000000 } }
1408                     - { $zoom: { min: 9 },  area: { min: 10000000 } }
1409                     - { $zoom: { min: 10 }, area: { min: 8000000 } }
1410                     - { $zoom: { min: 11 }, area: { min: 2000000 } }
1411                     - { $zoom: { min: 12 }, area: { min: 200000 } }
1412                     - { $zoom: { min: 13 }, area: { min: 100000 } }
1413                     - { $zoom: { min: 14 }, area: { min: 2000 } }
1414                     - { $zoom: { min: 15 } }
1415             draw:
1416                 lines:
1417                     order: function() { return feature.sort_rank; }
1418                     # color: [0.625,0.806,0.822]
1419                     color: [0.431,0.806,0.914]
1420                     width: 1px
1421                     join: round
1422             early:
1423                 filter: { $zoom: { min: 14 } }
1424                 draw:
1425                     lines:
1426                         order: 241
1427             swimming-pools-early:
1428                 filter: { kind: swimming_pool, $zoom: { max: 19 } }
1429                 draw:
1430                     lines:
1431                         visible: false
1432             riverbank:
1433                 # river boundaries like the thames in london, la seine in paris
1434                 filter: { kind: riverbank }
1435                 draw:
1436                     lines:
1437                         color: [0.431,0.806,0.914]
1438                         width: 1px
1439         river:
1440             #river center lines, not boundaries for polygons
1441             filter: { kind: [river,canal,stream,dam,ditch,drain], $zoom: { min: 11 }, not: { is_tunnel: true } }
1442             draw:
1443                 lines:
1444                     order: function() { return feature.sort_rank; }
1445                     color: [[10,[0.472,0.834,0.890]],[14,[0.511,0.877,0.930]]]
1446                     # color: [0.592,0.929,0.961]
1447                     #color: [[11,[0.753,0.820,0.835]],[12,[0.710,0.800,0.824]],[13,[0.886,0.937,0.988]]]
1448                     #width: [[14,2.5px],[15,4.0px],[17,8.0px],[18,10.0px]]
1449                     width: [[10,0px],[11,0.75px],[12,1.0px],[13,1.25px],[14,2.25px],[15,3px],[16,4px],[17,5m]]
1450                     cap: round
1451                     outline:
1452                         #color: [[11,[0.671,0.788,0.812]],[13,[0.710,0.800,0.824]],[14,[0.635,0.812,0.843]]]
1453                         width: [[9,0px],[11,0px],[12,0px],[13,0.5px],[14,0.75px],[15,0.75px],[16,0.75px],[17,1px]]
1454             not-river-early:
1455                 filter: { $zoom: [11,12], not: { kind: river } }
1456                 draw:
1457                     lines:
1458                         width: [[11,0px], [12,0.6px]]
1459             intermittent:
1460                 filter:
1461                     any:
1462                         - intermittent: true
1463                         - kind: drain
1464                 draw:
1465                     lines:
1466                         visible: false
1467                     dots-lines:
1468                         order: function() { return feature.sort_rank; }
1469                         color: [[10,[0.472,0.834,0.890]],[14,[0.511,0.877,0.930]]]
1470                         width: [[10,0px],[11,0.5px],[12,1px],[13,2px],[14,3px],[15,4px],[16,5px]]
1471
1472     water-line-labels:
1473         data: { source: mapzen, layer: water }
1474         visible: global.text_visible_water_labels
1475         filter:
1476             all:
1477                 - name: true
1478                 - $geometry: line
1479                 - kind: [river,canal,stream,dam,ditch,drain]
1480                 - $zoom: { min: 11 }
1481         draw:
1482             text-blend-order:
1483                 text_source: global.ux_language_text_source
1484                 font:
1485                     fill: global.text_fill_water
1486                     family: global.text_font_family
1487                     style: italic
1488                     weight: normal
1489                     size: [[12,10px],[17,14px]]
1490         not-river-not-stream:
1491             filter: { kind: [canal,dam,ditch,drain], $zoom: { max: 14 } }
1492             draw:
1493                 text-blend-order:
1494                     visible: false
1495         stream:
1496             filter: { kind: [stream], $zoom: { max: 14 } }
1497             draw:
1498                 text-blend-order:
1499                     visible: false
1500
1501     subway-light-rail:
1502         data: { source: mapzen, layer: transit }
1503         filter: { not: { kind: [platform] }, $zoom: { min: 14 } }
1504         draw:
1505             lines:
1506                 order: function() { return feature.sort_rank || 275; }
1507         railway:
1508             filter: { kind: [railway,train] }
1509             draw:
1510                 lines:
1511                     color: [[14,[0.653,0.758,0.786]], [17,[0.670,0.777,0.807]]]
1512                     width: [[14,0.4px],[15,0.75px],[16,1.1px],[18,2px],[19,1m]]
1513         subway:
1514             filter: { kind: subway }
1515             draw:
1516                 lines:
1517                     color: [[14,[0.653,0.758,0.786]], [17,[0.670,0.777,0.807]]]
1518                     width: [[14,0.4px],[15,0.75px],[16,1.3px],[17,1.5px],[18,2m]]
1519         light_rail:
1520             filter: { kind: [light_rail,tram], $zoom: { min: 15 } }
1521             draw:
1522                 lines:
1523                     order: 415
1524                     color: [[14,[0.653,0.758,0.786]], [17,[0.670,0.777,0.807]]]
1525                     width: [[14,0px],[15,0.6px],[16,0.75px],[17,1.5px],[19,1m]]
1526
1527     railway-late:
1528         data: { source: mapzen, layer: roads }
1529         filter: { kind: rail, not: { railway: [subway,light_rail,tram] } }
1530         draw:
1531             lines:
1532                 order: function() { return feature.sort_rank; }
1533                 color: [0.588,0.671,0.698]
1534                 width: [[12,0px],[13,0.25px],[14,0.4px],[15,0.75px],[16,0.75px],[18,1m]]
1535         service:
1536             filter: { service: true }
1537             draw:
1538                 lines:
1539                     color: [[14,[0.653,0.758,0.786]], [17,[0.670,0.777,0.807]]]
1540                     width: [[14,0px],[15,0.3px],[16,0.5px],[18,0.75px],[19,0.5m]]
1541         z-order:
1542             #filter: { $zoom: {min: 12} }
1543             draw:
1544                 lines:
1545                     # let roads sort themselves past zoom 14
1546                     order: function() { return feature.sort_rank; }
1547                     # but give them all the same outline
1548                     outline:
1549                         order: 354
1550
1551             bridges-tunnels:
1552                 filter: { any: [is_bridge: true, is_tunnel: true] }
1553                 draw:
1554                     lines:
1555                         outline:
1556                             # except bridges and tunnels, their outlines should also self-sort
1557                             order: function() { return feature.sort_rank || 305; }
1558
1559     roads:
1560         data: { source: mapzen, layer: roads }
1561         filter: { not: { kind: rail } }
1562         draw:
1563             lines:
1564                 #color: black
1565                 width: 1px
1566                 order: function() { return feature.sort_rank; }
1567                 # but give them all the same outline
1568                 outline:
1569                     order: 352
1570             text-blend-order:
1571                 visible: false    # labels are enabled by each layer below
1572                 text_source: global.ux_language_text_source
1573                 font:
1574                     family: global.text_font_family
1575                     weight: 500
1576                     fill: global.text_fill
1577
1578         early:
1579             filter: { $zoom: { max: 14 } }
1580             draw:
1581                 lines:
1582                     outline:
1583                         order: function() { return feature.sort_rank; }
1584         bridges-tunnels:
1585             filter: { any: [is_bridge: true, is_tunnel: true] }
1586             draw:
1587                 lines:
1588                     #cap: butt
1589                     outline:
1590                         # except bridges and tunnels, their outlines should also self-sort
1591                         order: function() { return feature.sort_rank; }
1592
1593         # default outlines starting at zoom 16
1594         default-outline-width:
1595             filter: { $zoom: { min: 16 } }
1596             draw:
1597                 lines:
1598                     outline:
1599                         width: function () { return 3/16 * Math.log($zoom); }
1600
1601         natural_earth_highways:
1602             filter: { source: 'naturalearthdata.com', $zoom: { max: 8 } }
1603             draw:
1604                 lines:
1605                     color: [[5, [0.50,0.50,0.50]], [6, [0.350,0.350,0.350]]]
1606                     width: [[5, 0.5px], [8, 1.25px]]
1607                     outline:
1608                         color: global.highway_casing1
1609                         width: 0px
1610             major_road:
1611                 filter: { kind: major_road }
1612                 draw:
1613                     lines:
1614                         color: [[5, [0.75,0.75,0.75]], [8, [0.40,0.40,0.40]]]
1615                         width: [[5, 0.25px], [9, 0.75px]]
1616                         outline:
1617                             width: [[8, 0.0px], [9, 0.0px], [11, .5px], [16, .75px]]
1618             minor_road:
1619                 filter: { kind: minor_road }
1620                 draw:
1621                     lines:
1622                         color: global.minor_road1
1623                         width: 0.5px
1624             ferry:
1625                 filter: { kind: ferry }
1626                 draw:
1627                     lines:
1628                         color: global.ferry1
1629                         width: 0.5px
1630                         outline:
1631                             width: 0px
1632         highway:
1633             filter: { kind: highway, $zoom: { min: 8 } }
1634             draw:
1635                 lines:
1636                     color: [[8, [0.457,0.438,0.457]], [10, [0.548,0.483,0.491]], [11, [1.00,1.00,1.00]]]
1637                     width: [[8, 1.25px], [12, 1.5px], [14, 2.5px], [16, 5.5px], [17, 10px], [18, 10m]]
1638                     outline:
1639                         color: [[8, [0.969,0.969,0.969]], [10, [0.969,0.969,0.969]], [11, [0.548,0.483,0.491]]]
1640                         width: [[8, 1px], [10, 1px], [12, 1.5px], [14, 1.75px], [16, 2.5px], [18, 4px]]
1641             early:
1642                 filter: { $zoom: { max: 15 } }          # was max: 15 (11)
1643                 draw:
1644                     lines:
1645                         outline:
1646                             order: function() { return feature.sort_rank; }
1647             link:
1648                 filter: { is_link: true } # on- and off-ramps, etc
1649                 draw:
1650                     lines:
1651                         color: [[11, [0.627,0.612,0.616]], [13, [0.627,0.612,0.616]], [14, [1.00,1.00,1.00]]]
1652                         width: [[8, 0px], [11, 0.4px], [12, 0.6px], [14, 1.25px], [16, 3px], [18, 5m]]
1653                         outline:
1654                             color: [[11, [0.969,0.969,0.969]], [13, [0.969,0.969,0.969]], [14, [0.548,0.483,0.491]]]
1655                             width: [[8, 0px], [9, 0px], [13, 0px], [14, 0.6px], [16, 1.25px], [18, 2px]]
1656                 early_link:
1657                     filter: { $zoom: { max: 15 } }
1658                     draw:
1659                         lines:
1660                             order: 352
1661                     z12-13:
1662                         filter: { $zoom: { max: 14 } }
1663                         draw:
1664                             lines:
1665                                 order: 351
1666                 tunnel-link:
1667                     filter: { is_tunnel: true, $zoom: { min: 13 } }
1668                     draw:
1669                         lines:
1670                             color: [0.929,0.929,0.929]
1671                             outline:
1672                                 color: [0.695,0.739,0.790]
1673             tunnel:
1674                 filter: { is_tunnel: true, $zoom: { min: 13 } }
1675                 draw:
1676                     lines:
1677                         color: [0.929,0.929,0.929]
1678                         outline:
1679                             color: [0.695,0.739,0.790]
1680             highway_bridge:
1681                 filter: { is_bridge: true }
1682                 draw:
1683                     lines:
1684                         cap: round
1685                         outline:
1686                             cap: butt
1687             labels-highway:
1688                 filter:
1689                     $zoom: { min: 13 }
1690                 draw:
1691                     text-blend-order:
1692                         priority: 50
1693                         visible: global.text_visible_highway
1694                         font:
1695                             fill: [0.408,0.427,0.459]
1696                             weight: 600
1697                             size: [[13, 11px], [15, 12px], [17, 15px], [19, 16px]]
1698                             stroke: { color: [[13, [0.898,0.906,0.910]], [16,[1.000,1.000,1.000]]], width: 4px }
1699
1700         major_road:
1701             filter: { kind: major_road }
1702             # default style
1703             draw:
1704                 lines:
1705                     color: [[8, [0.529,0.556,0.592]], [13, [0.529,0.556,0.592]], [15, [1.00,1.00,1.00]]]
1706                     width: [[10, 0px], [13, 0.5px], [16, 2.5px], [18,3px]]
1707             trunk_primary:
1708                 filter: { kind_detail: [trunk, primary] }
1709                 draw:
1710                     lines:
1711                         color: [[10, [0.603,0.620,0.642]], [11, [1.00,1.00,1.00]]]
1712                         width: [[8, 0.5px], [10, 1px], [12, 1px], [14, 2.5px], [16, 4px], [17, 6px], [18, 9m]]
1713                         outline:
1714                             color: [[8, [0.969,0.969,0.969]], [10, [0.969,0.969,0.969]], [11, [0.629,0.612,0.615]], [14, [0.714,0.694,0.706]]]
1715                             width: [[8, 0.5px], [10, 1px], [14, 1px], [16, 2.25px], [17, 2px], [18, 4px]]
1716                 early:
1717                     filter: { $zoom: { max: 14 } }
1718                     draw:
1719                         lines:
1720                             order: 352
1721                             outline:
1722                                 order: function() { return feature.sort_rank + 2; }
1723                     primary:
1724                         filter: { kind: [primary] }
1725                         draw:
1726                             lines:
1727                                 outline:
1728                                     order: function() { return feature.sort_rank + 1; }
1729                 routes:
1730                     filter: { ref: true }
1731                     draw:
1732                         lines:
1733                             color: [[8, [0.603,0.620,0.642]], [10, [0.603,0.620,0.642]], [11, [1.00,1.00,1.00]]]
1734                             width: [[8, 1px], [12, 1px], [14, 2.5px], [16, 5px], [17, 8px], [18, 9m]]
1735                             outline:
1736                                 color: [[8, [0.969,0.969,0.969]], [10, [0.969,0.969,0.969]], [11, [0.629,0.612,0.615]], [14, [0.670,0.623,0.654]]]
1737                                 width: [[9, 1px], [10, 1px], [12, 1.25px], [16, 2.25px], [17, 4px]]
1738                     early:
1739                         filter: { $zoom: { max: 13 } }
1740                         draw:
1741                             lines:
1742                                 order: function() { return feature.sort_rank + 2; }
1743                                 outline:
1744                                     order: 353
1745                     earlyz-13:
1746                         filter: { $zoom: [13] }
1747                         draw:
1748                             lines:
1749                                 order: 352
1750                                 outline:
1751                                     order: function() { return feature.sort_rank + 1; }
1752                     tunnel:
1753                         filter: { is_tunnel: true, $zoom: { min: 13 } }
1754                         draw:
1755                             lines:
1756                                 color: [0.883,0.904,0.930]
1757                                 outline:
1758                                     color: [0.640,0.703,0.780]
1759                     labels-trunk_primary-route:
1760                         filter: { $zoom: { min: 14 } }
1761                         draw:
1762                             text-blend-order:
1763                                 priority: 51
1764                                 visible: global.text_visible_trunk_primary
1765                                 font:
1766                                     fill: [0.495,0.511,0.532]
1767                                     weight: 600
1768                                     size: [[14, 11px],[15, 12px], [18, 16px]]
1769                                     stroke: { color: [[14, global.text_stroke], [15,[0.969,0.973,0.973]]], width: [[15, 3px], [16, 4px]] }
1770                         z14:
1771                             filter: { $zoom: [14] }
1772                             draw:
1773                                 text-blend-order:
1774                                     visible: global.text_visible_trunk_primary_e2
1775                                     font:
1776                                         weight: normal  # or 500 or 400?
1777                 labels-trunk_primary-z11-up:
1778                     filter:
1779                         $zoom: { min: 11 }
1780                     draw:
1781                         text-blend-order:
1782                             priority: 51
1783                             visible: global.text_visible_trunk_primary_e
1784                             font:
1785                                 fill: [0.495,0.511,0.532]
1786                                 size: [[11, 9px], [12, 10px], [13, 11px], [14, 11px], [15, 12px], [16, 13px],[ 18, 13px],[19, 16px]]
1787                                 stroke: { color: [[11, global.text_stroke], [15, [0.969,0.973,0.973]]], width: [[11, 2px], [15, 4px], [16, 4px], [17, 6px]] }
1788                     z16:
1789                         filter: { $zoom: [16] }
1790                         draw:
1791                             text-blend-order:
1792                                 visible: global.text_visible_trunk_primary
1793                                 font:
1794                                     weight: 600
1795             link:
1796                 filter: { is_link: true } # on- and off-ramps, etc
1797                 draw:
1798                     lines:
1799                         color: [[11, [0.627,0.612,0.616]], [13, [0.627,0.612,0.616]], [14, [1.00,1.00,1.00]]]
1800                         width: [[8, 0px], [11, 0.4px], [12, 0.6px], [14, 1.25px], [16, 3px], [18, 5m]]
1801                         outline:
1802                             color: [[11, [0.969,0.969,0.969]], [13, [0.969,0.969,0.969]], [14, [0.670,0.623,0.654]]]
1803                             width: [[8, 0px], [9, 0px], [13, 0px], [14, 0.6px], [16, 1.25px], [18, 2px]]
1804                 early_link:
1805                     filter: { $zoom: { max: 14 } }
1806                     draw:
1807                         lines:
1808                             order: 351
1809             tunnel:
1810                 filter: { is_tunnel: true, $zoom: { min: 13 } }
1811                 draw:
1812                     lines:
1813                         color: [0.883,0.904,0.930]
1814                         outline:
1815                             color: [0.640,0.703,0.780]
1816             secondary:
1817                 filter: { kind_detail: secondary }
1818                 draw:
1819                     lines:
1820                         color: [1.00,1.00,1.00]
1821                         width: [[10, 0px], [11, 0px], [12, 1px], [14, 2px], [16, 4px], [17, 6px], [18, 9m]]
1822                         outline:
1823                             color: [[9, [0.906,0.906,0.906]], [10, [0.788,0.780,0.800]], [11, [0.787,0.763,0.767]], [14, [0.700,0.665,0.688]]]
1824                             width: [[10, 0px], [11, 0.5px], [12, 1px], [14, 1px], [16, 2.25px], [18, 4px]]
1825                 early:
1826                     filter: { $zoom: { max: 14 } }
1827                     draw:
1828                         lines:
1829                             order: 352
1830                             outline:
1831                                 order: 353 #function() { return feature.sort_rank + 2; }
1832                     earlyz-13:
1833                         filter: { $zoom: [13] }
1834                         draw:
1835                             lines:
1836                                 outline:
1837                                     order: function() { return feature.sort_rank + 1; }
1838                 routes:
1839                     filter: { ref: true, $zoom: { min: 8 } }
1840                     draw:
1841                         lines:
1842                             color: [[10, [0.584,0.604,0.624]], [11, [1.00, 1.00, 1.00]]]
1843                             width: [[8, 0px], [10, 0.7px], [11, 1px], [12, 1px], [14, 2px], [16, 4px], [18, 9m]]
1844                             outline:
1845                                 color: [[9, [0.906,0.906,0.906]], [10, [0.906,0.906,0.906]], [11, [0.787,0.763,0.767]], [14, [0.700,0.665,0.688]]]
1846                                 width: [[9, 0.25px], [10, 0.75px], [11, 0.75px], [12, 1px], [14, 1px], [16, 2.25px], [18, 4px]]
1847                     early:
1848                         filter: { $zoom: { max: 14 } }
1849                         draw:
1850                             lines:
1851                                 order: function() { return feature.sort_rank + 2; }
1852                                 outline:
1853                                     order: 353
1854                         # earlyz-13:
1855                         #     filter: { $zoom: [13] }
1856                         #     draw:
1857                         #         lines:
1858                         #             order: 352
1859                         #             outline:
1860                         #                 order: function() { return feature.sort_rank + 1; }
1861                     tunnel:
1862                         filter: { is_tunnel: true, $zoom: { min: 13 } }
1863                         draw:
1864                             lines:
1865                                 color: [0.929,0.929,0.929]
1866                                 outline:
1867                                     color: [0.695,0.739,0.790]
1868                     labels-secondary-routes-z13-up:
1869                         filter: { $zoom: { min: 13 } }
1870                         draw:
1871                             text-blend-order:
1872                                 priority: 56
1873                                 visible: global.text_visible_secondary_e
1874                                 font:
1875                                     fill: [0.536,0.556,0.581]
1876                                     size: [[13, 11px], [15, 11px], [16, 12px]]
1877                                     stroke: { color: [[13, global.text_stroke], [16, [0.969,0.973,0.973]]], width: 4px }
1878                         z15-up:
1879                             filter: { $zoom: { min: 15 } }
1880                             draw:
1881                                 text-blend-order:
1882                                     visible: global.text_visible_secondary
1883                                     font:
1884                                         weight: 600
1885                 labels-secondary:
1886                     filter:
1887                         $zoom: { min: 13 }
1888                     draw:
1889                         text-blend-order:
1890                             priority: 56
1891                             visible: global.text_visible_secondary_e
1892                             font:
1893                                 fill: [0.536,0.556,0.581]
1894                                 size: [[13, 9px], [14, 9px], [15, 10px], [16, 12px], [17, 13px]]
1895                                 stroke: { color: [[13, global.text_stroke], [15, [0.969,0.973,0.973]]], width: 4px }
1896             tertiary:
1897                 filter: { kind_detail: [tertiary, tertiary_link] }
1898                 draw:
1899                     lines:
1900                         color: [1.00, 1.00, 1.00]
1901                         width: [[11, 0px], [12, 0px], [13, 1px], [14, 2px], [16, 3.5px], [17, 6px], [18, 9m]]
1902                         outline:
1903                             color: [[11, [0.847,0.822,0.826]], [12, [0.797,0.770,0.775]], [14, [0.714,0.694,0.706]]]
1904                             width: [[10, 0px], [11, 0px], [12, 0.3px], [14, 1px], [16, 2px], [17, 2px], [18, 4px]]
1905                 early:
1906                     filter: { $zoom: { max: 14 } }
1907                     draw:
1908                         lines:
1909                             order: 352
1910                             outline:
1911                                 order: function() { return feature.sort_rank + 3; }
1912                 routes:
1913                     filter: { ref: true, $zoom: { min: 12 } }
1914                     draw:
1915                         lines:
1916                             color: [1.00,1.00,1.00]
1917                             width: [[11, 0px], [12, 1px], [14, 2px], [16, 3.5px], [17, 6px], [18, 9m]]
1918                             outline:
1919                                 color: [[11, [0.788,0.780,0.800]], [12, [0.797,0.770,0.775]]]
1920                                 width: [[11, 0.4px], [12, 1px], [14, 1px], [16, 2px], [17, 2px], [18, 4px]]
1921                     early:
1922                         filter: { $zoom: { max: 14 } }
1923                         draw:
1924                             lines:
1925                                 order: function() { return feature.sort_rank + 3; }
1926                                 outline:
1927                                     order: 353
1928                     tunnel:
1929                         filter: {is_tunnel: true, $zoom: { min: 13 } }
1930                         draw:
1931                             lines:
1932                                 color: [0.929,0.929,0.929]
1933                                 outline:
1934                                     color: global.major_tunnel_casing1
1935                 # this was needed in the past, but where is an example map location to debug now? hmm.
1936                 # link:
1937                 #     filter: { is_link: true } # on- and off-ramps, etc
1938                 #     draw:
1939                 #         lines:
1940                 #             color: [[14, [0.714,0.733,0.760]], [15, [0.578,0.608,0.650]], [16, [0.533,0.555,0.586]], [17, [1.00,1.00,1.00]]]
1941                 #             width: [[11, 0.0px], [12, 0.15px], [14, 0.15px], [15, 0.75px], [16, 1.25px], [17, 2px], [18, 2px], [19, 4px]]
1942                 #             outline:
1943                 #                 color: [[11, [1.00,1.00,1.00]], [16, [1.00,1.00,1.00]], [17,[0.578,0.608,0.650]]]
1944                 #                 width: [[11, 0px], [16, 0px], [17, 1px], [18, 1px]]
1945                 labels-tertiary:
1946                     filter:
1947                         $zoom: { min: 13 }
1948                     draw:
1949                         text-blend-order:
1950                             priority: 57
1951                             visible: global.text_visible_tertiary
1952                             font:
1953                                 fill: [0.536,0.556,0.581]
1954                                 size: [[13, 9px], [15, 10px], [16, 12px], [17, 13px]]
1955                                 stroke: { color: [[13, global.text_stroke], [15, [0.969,0.973,0.973]]], width: 4px }
1956         minor_road:
1957             filter: { kind: minor_road, not: { kind_detail: service } }
1958             draw:
1959                 lines:
1960                     color: [1.00,1.00,1.00] #[[12, [0.850,0.850,0.850]], [13, [0.714,0.733,0.760]], [16, [1.00,1.00,1.00]]]
1961                     width: [[11, 0px], [12, 0.5px], [13, 0.5px], [14, 1px], [16, 3px], [18, 9m]]
1962                     outline:
1963                         color: [[12, [0.900,0.900,0.900]], [13, [0.774,0.797,0.823]], [14, [0.798,0.823,0.847]]]
1964                         width: [[11, 0px], [12, 0px], [13, 0px], [14, 1px], [16, 1.5px], [17, 2px], [18, 3px]]
1965             early:
1966                 filter: { $zoom: { max: 14 } }
1967                 draw:
1968                     lines:
1969                         order: 350
1970                         outline:
1971                             order: 351
1972             motor_vehicle_no:
1973                 filter: { kind_detail: unclassified, motor_vehicle: no }
1974                 draw:
1975                     lines:
1976                         visible: false
1977
1978             # Is this junk code?
1979             round:
1980                 filter: { $zoom: { min: 17 } }
1981                 draw:
1982                     lines:
1983                         cap: round
1984                         join: round
1985             tunnel:
1986                 filter: { is_tunnel: true, $zoom: { min: 13 } }
1987                 draw:
1988                     lines:
1989                         color: global.minor_tunnel1
1990                         outline:
1991                             color: global.minor_tunnel_casing1
1992             minor_road_bridge:
1993                 filter: { is_bridge: true }
1994                 draw:
1995                     lines:
1996                         cap: round
1997                         outline:
1998                             cap: butt
1999             labels-minor_road:
2000                 filter:
2001                     $zoom: { min: 15 }
2002                 draw:
2003                     text-blend-order:
2004                         priority: 59
2005                         visible: global.text_visible_minor_road_e
2006                         font:
2007                             fill: [[15, [0.536,0.556,0.581]], [17, [0.40,0.40,0.40]]]
2008                             size: [[15, 9px], [16, 12px], [17, 12px], [18, 13px]]
2009                             stroke: { color: [[15, global.text_stroke], [17,[0.969,0.973,0.973]]], width: 4px }
2010             early-residential:
2011                 filter: { kind_detail: residential, $zoom: { max: 15 } }
2012                 draw:
2013                     lines:
2014                         order: 350
2015                         outline:
2016                             order: 351
2017         service_road:
2018             filter: { kind: minor_road, kind_detail: service }
2019             draw:
2020                 lines:
2021                     color: [1.00,1.00,1.00]
2022                     width: [[14, 1px], [16, 2px], [18, 4m]]
2023                     outline:
2024                         color: [[12, [0.900,0.900,0.900]], [14, [0.791,0.816,0.840]]]
2025                         width: [[13, 0px], [14, 0.5px], [16, 1px], [18, 2px]]
2026             early:
2027                 filter: { $zoom: { max: 15 } }
2028                 draw:
2029                     lines:
2030                         order: 350
2031                         outline:
2032                             order: 351
2033             labels-service_road:
2034                 filter:
2035                     $zoom: { min: 17 }
2036                 draw:
2037                     text-blend-order:
2038                         priority: 60
2039                         visible: global.text_visible_service_road
2040                         font:
2041                             fill: [0.536,0.556,0.581]
2042                             size: [[17, 12px], [18, 13px]]
2043                             stroke: { color: [0.969,0.973,0.973], width: 4px }
2044
2045
2046         shields:
2047             filter:
2048                 $zoom: { min: 6 }
2049                 #
2050                 # United State looks great with shield_text alone, but...
2051                 #
2052                 #shield_text: true    # some roads don't have shield text, deal with that later
2053                 #
2054                 # Europe doesn't have many network relations set, so we could look for either
2055                 # shield_text or ref (with no shield_text) but...
2056                 # that makes United States look a bit funky with `(xxx)` and generic shields
2057                 # showing up in fields of custom state shields like US:CA and US:NY
2058                 #
2059                 any:
2060                     - shield_text: true    # some roads don't have shield text, deal with that later
2061                     - all:
2062                         - shield_text: false    # some roads don't have shield text, deal with that later
2063                         - ref: true
2064                         - kind_detail: [motorway, trunk, primary, secondary, tertiary]
2065             # default
2066             draw:
2067                 icons:
2068                     # you need to match any custom shield to the vector tile `network` values
2069                     sprite: |
2070                         function() {
2071                             if( feature.shield_text ) {
2072                                 return ('generic_shield-' + feature.shield_text.length + 'char');
2073                             } else {
2074                                 return ('generic_shield-' + feature.ref.length + 'char');
2075                             }
2076                         }
2077                     sprite_default: generic_shield_5char
2078                     priority: 58
2079                     repeat_group: shields
2080                     repeat_distance: [[8,90px],[10,40px],[13,30px]]
2081                     placement: midpoint
2082                     placement_min_length_ratio:
2083                         - [8, 0.1]
2084                         - [9, 0.25]
2085                         - [10, 0.25]
2086                         - [11, 0.15]
2087                         - [12, 1]
2088                         - [13, 1.50]
2089                         - [14, 2.0]
2090                     cull_from_tile: true
2091                     visible: false
2092                     text:
2093                         offset: [0px, -0.5px]
2094                         repeat_distance: 200px
2095                         anchor: center
2096                         text_source: |
2097                             function() {
2098                                 if( feature.shield_text ) {
2099                                     return feature.shield_text;
2100                                 } else {
2101                                     return feature.ref;
2102                                 }
2103                             }
2104                         font:
2105                             family: Montserrat
2106                             #fill: [0.308,0.308,0.308]
2107                             fill: [0.320,0.320,0.320]
2108                             size: [[7,7px],[12,8px],[16,11px]]
2109
2110             default_priority_highway:
2111                 filter:
2112                     all:
2113                         - kind_detail: motorway
2114                         - $zoom: { min: 9 }
2115                 draw:
2116                     icons:
2117                         priority: 47
2118                         #color: yellow
2119                         visible: global.sdk_road_shields
2120
2121             default_priority_trunk:
2122                 filter:
2123                     all:
2124                         - kind_detail: [trunk]
2125                         - $zoom: { min: 10 }
2126                 draw:
2127                     icons:
2128                         priority: 48
2129                         #color: red
2130                         visible: global.sdk_road_shields
2131             default_priority_primary:
2132                 filter:
2133                     all:
2134                         - kind_detail: [primary]
2135                         - $zoom: { min: 12 }
2136                 draw:
2137                     icons:
2138                         priority: 49
2139                         #color: aqua
2140                         visible: global.sdk_road_shields
2141             default_priority_trunk_secondary:
2142                 filter:
2143                     all:
2144                         - kind_detail: [secondary]
2145                         - $zoom: { min: 12 }
2146                 draw:
2147                     icons:
2148                         priority: 53
2149                         #color: blue
2150                         visible: global.sdk_road_shields
2151             default_priority_trunk_tertiary:
2152                 filter:
2153                     all:
2154                         - kind_detail: tertiary
2155                         - $zoom: { min: 13 }
2156                 draw:
2157                     icons:
2158                         priority: 55
2159                         #color: green
2160                         visible: global.sdk_road_shields
2161             # not-special:
2162             #     filter:
2163             #         not: { network: ['US:I','US:US'] }
2164             #         $zoom: { max: 9 }
2165             #     draw:
2166             #         icons:
2167             #             visible: false
2168             width_1char:
2169                 filter: |
2170                     function() {
2171                         if( feature.shield_text ) {
2172                             return (feature.shield_text.length === 1)
2173                         } else {
2174                             return (feature.ref.length === 1)
2175                         }
2176                     }
2177                 draw:
2178                     icons:
2179                         size: [[6,[14px,14px]],[13,[16px,16px]],[16,[18px,18px]]]
2180             width_2char:
2181                 filter: |
2182                     function() {
2183                         if( feature.shield_text ) {
2184                             return (feature.shield_text.length === 2)
2185                         } else {
2186                             return (feature.ref.length === 2)
2187                         }
2188                     }
2189                 draw:
2190                     icons:
2191                         size: [[6,[18px,14px]],[13,[20px,15px]],[16,[24px,18px]]]
2192             width_3char:
2193                 filter: |
2194                     function() {
2195                         if( feature.shield_text ) {
2196                             return (feature.shield_text.length === 3)
2197                         } else {
2198                             return (feature.ref.length === 3)
2199                         }
2200                     }
2201                 draw:
2202                     icons:
2203                         size: [[6,[25px,14px]],[13,[27px,15px]],[16,[33px,18px]]]
2204             width_4char:
2205                 filter: |
2206                     function() {
2207                         if( feature.shield_text ) {
2208                             return (feature.shield_text.length === 4)
2209                         } else {
2210                             return (feature.ref.length === 4)
2211                         }
2212                     }
2213                 draw:
2214                     icons:
2215                         size: [[6,[29px,14px]],[13,[31px,15px]],[16,[38px,18px]]]
2216                 # London sucks
2217                 early:
2218                     filter: { $zoom: { max: 14 } }
2219                     draw:
2220                         icons:
2221                             visible: false
2222             width_5char:
2223                 filter: |
2224                     function() {
2225                         if( feature.shield_text ) {
2226                             return (feature.shield_text.length === 5)
2227                         } else {
2228                             return (feature.ref.length === 5)
2229                         }
2230                     }
2231                 draw:
2232                     icons:
2233                         size: [[6,[34px,14px]],[13,[37px,15px]],[16,[45px,18px]]]
2234                 # London sucks
2235                 early:
2236                     filter: { $zoom: { max: 14 } }
2237                     draw:
2238                         icons:
2239                             visible: false
2240             # this is kinda a hack
2241             width_longggggg:
2242                 filter: |
2243                     function() {
2244                         if( feature.shield_text ) {
2245                             return (feature.shield_text.length > 5)
2246                         } else {
2247                             return (feature.ref.length > 5)
2248                         }
2249                     }
2250                 draw:
2251                     icons:
2252                         visible: false
2253             # missing-route-relations:
2254             #     filter: { shield_text: false }
2255             #     draw:
2256             #         lines:
2257             #             order: 1000
2258             #             color: red
2259             #             width: 2px
2260             #
2261             # Now for the good stuff
2262             #
2263             legit-shields:
2264                 filter: { shield_text: true }
2265                 # draw:
2266                 #     icons:
2267                 #         color: red
2268                 # US Interstate roads
2269                 US-I:
2270                     filter:
2271                         network: 'US:I'
2272                     draw:
2273                         icons:
2274                             # you need to match any custom shield to the vector tile `network` values
2275                             sprite: function() { return (feature.network + '-' + feature.shield_text.length + 'char'); }
2276                             priority: 46
2277                             visible: global.sdk_road_shields
2278                             text:
2279                                 offset: [0px, 0.5px]
2280                                 font:
2281                                     fill: [1.0,1.0,1.0]
2282                                     size: [[7,8px],[13,9px],[15,11px]]
2283                     width_1char:
2284                         filter: function() { return (feature.shield_text.length === 1) }
2285                         draw:
2286                             icons:
2287                                 size: [[6,[15px,18px]],[13,[17px,20px]],[15,[22px,25px]]]
2288                     width_2char:
2289                         filter: function() { return (feature.shield_text.length === 2) }
2290                         draw:
2291                             icons:
2292                                 size: [[6,[18px,18px]],[13,[20px,20px]],[15,[25px,25px]]]
2293                     width_3char:
2294                         filter: function() { return (feature.shield_text.length === 3) }
2295                         draw:
2296                             icons:
2297                                 size: [[6,[23px,18px]],[13,[26px,20px]],[15,[33px,25px]]]
2298                     width_4char:
2299                         filter: function() { return (feature.shield_text.length === 4) }
2300                         draw:
2301                             icons:
2302                                 size: [[6,[25px,18px]],[13,[27px,20px]],[15,[35px,25px]]]
2303                     width_5char:
2304                         filter: function() { return (feature.shield_text.length === 5) }
2305                         draw:
2306                             icons:
2307                                 size: [[6,[26px,18px]],[13,[30px,20px]],[15,[38px,25px]]]
2308                 # US Federal Routes
2309                 US-US:
2310                     filter:
2311                         network: ['US:US','US:US:Business', 'US:US:Truck', 'US:US:Alternate']
2312                         $zoom: { min: 7 }
2313                     draw:
2314                         icons:
2315                             # you need to match any custom shield to the vector tile `network` values
2316                             sprite: |
2317                                 function() { return ('US:US-' + feature.shield_text.length + 'char'); }
2318                             priority: 47
2319                             cull_from_tile: true
2320                             visible: global.sdk_road_shields
2321                             text:
2322                                 offset: [0px, -0.7px]
2323                                 font:
2324                                     fill: [0.0,0.0,0.0]
2325                                     size: [[7,8px],[13,9px],[15,11px]]
2326                     # early:
2327                     #     filter: { $zoom: [7] }
2328                     #     icons:
2329                     #         visible: false
2330                     width_1char:
2331                         filter: function() { return (feature.shield_text.length === 1) }
2332                         draw:
2333                             icons:
2334                                 size: [[6,[15px,17px]],[13,[17px,19px]],[15,[22px,24px]]]
2335                     width_2char:
2336                         filter: function() { return (feature.shield_text.length === 2) }
2337                         draw:
2338                             icons:
2339                                 size: [[6,[18px,17px]],[13,[20px,19px]],[15,[26px,24px]]]
2340                     width_3char:
2341                         filter: function() { return (feature.shield_text.length === 3) }
2342                         draw:
2343                             icons:
2344                                 size: [[6,[22px,17px]],[13,[25px,19px]],[15,[34px,25px]]]
2345                     width_4char:
2346                         filter: function() { return (feature.shield_text.length === 4) }
2347                         draw:
2348                             icons:
2349                                 size: [[6,[25px,17px]],[13,[29px,19px]],[15,[39px,25px]]]
2350                     width_5char:
2351                         filter: function() { return (feature.shield_text.length === 5) }
2352                         draw:
2353                             icons:
2354                                 size: [[6,[27px,17px]],[13,[30px,19px]],[15,[41px,25px]]]
2355                 # US State Routes
2356                 # US-states:
2357                 #     # Match state highways: `US:??`
2358                 #     filter: |
2359                 #         function() {
2360                 #             return feature.shield_text &&
2361                 #                 /^US:(?!US)\w\w$/.test(feature.network)
2362                 #         }
2363                 #     draw:
2364                 #         icons:
2365                 #             # you need to match any custom shield to the vector tile `network` values
2366                 #             priority: 18
2367                 #     early:
2368                 #         filter: { $zoom: [7,8,9] }
2369                 #         icons:
2370                 #             visible: false
2371                 US-CA:
2372                     # Match California state highways: `US:CA`
2373                     filter: |
2374                         function() {
2375                             return feature.shield_text &&
2376                                 /^US:CA$/.test(feature.network)
2377                         }
2378                     draw:
2379                         icons:
2380                             sprite: function() { return (feature.network + '-' + feature.shield_text.length + 'char'); }
2381                             text:
2382                                 offset: [0px, 1px]
2383                                 font:
2384                                     fill: [1.0,1.0,1.0]
2385                                     size: [[7,7px],[13,9px],[15,10px]]
2386                     motorway:
2387                         filter: { kind_detail: [motorway], $zoom: [7,8] }
2388                         draw:
2389                             icons:
2390                                 visible: global.sdk_road_shields
2391                     trunk:
2392                         filter: { kind_detail: [trunk], $zoom: [8,9] }
2393                         draw:
2394                             icons:
2395                                 visible: global.sdk_road_shields
2396                     primary:
2397                         filter: { kind_detail: primary, $zoom: [10,11] }
2398                         draw:
2399                             icons:
2400                                 visible: global.sdk_road_shields
2401                     width_1char:
2402                         filter: function() { return (feature.shield_text.length === 1) }
2403                         draw:
2404                             icons:
2405                                 size: [[6,[14px,16px]],[13,[15px,18px]],[15,[18px,21px]]]
2406                     width_2char:
2407                         filter: function() { return (feature.shield_text.length === 2) }
2408                         draw:
2409                             icons:
2410                                 size: [[6,[18px,18px]],[13,[20px,20px]],[15,[23px,23px]]]
2411                     width_3char:
2412                         filter: function() { return (feature.shield_text.length === 3) }
2413                         draw:
2414                             icons:
2415                                 size: [[6,[21px,18px]],[13,[24px,20px]],[15,[28px,23px]]]
2416                     width_4char:
2417                         filter: function() { return (feature.shield_text.length === 4) }
2418                         draw:
2419                             icons:
2420                                 size: [[6,[24px,18px]],[13,[26px,20px]],[15,[31px,23px]]]
2421                     width_5char:
2422                         filter: function() { return (feature.shield_text.length === 5) }
2423                         draw:
2424                             icons:
2425                                 size: [[6,[25px,18px]],[13,[27px,20px]],[15,[32px,23px]]]
2426                 US-NY:
2427                     # Match New York state highways: `US:NY`
2428                     filter: |
2429                         function() {
2430                             return feature.shield_text &&
2431                                 /^US:NY$/.test(feature.network)
2432                                 /* (/^US:NY$/.test(feature.network) || /^NY:US$/.test(feature.network)) */
2433                         }
2434                     draw:
2435                         icons:
2436                             sprite: |
2437                                 function() { return ( 'US:NY-' + feature.shield_text.length + 'char'); }
2438                             text:
2439                                 # offset: [0px, 1px]
2440                                 font:
2441                                     fill: [0.0,0.0,0.0]
2442                                     size: [[7,7px],[13,9px],[15,10px]]
2443                     width_1char:
2444                         filter: function() { return (feature.shield_text.length === 1) }
2445                         draw:
2446                             icons:
2447                                 size: [[6,[13px,17px]],[13,[15px,19px]],[15,[18px,22px]]]
2448                     width_2char:
2449                         filter: function() { return (feature.shield_text.length === 2) }
2450                         draw:
2451                             icons:
2452                                 size: [[6,[17px,17px]],[13,[19px,19px]],[15,[22px,22px]]]
2453                     width_3char:
2454                         filter: function() { return (feature.shield_text.length === 3) }
2455                         draw:
2456                             icons:
2457                                 size: [[6,[20px,17px]],[13,[22px,19px]],[15,[27px,22px]]]
2458                     width_4char:
2459                         filter: function() { return (feature.shield_text.length === 4) }
2460                         draw:
2461                             icons:
2462                                 size: [[6,[21px,17px]],[13,[24px,19px]],[15,[29px,22px]]]
2463                     width_5char:
2464                         filter: function() { return (feature.shield_text.length === 5) }
2465                         draw:
2466                             icons:
2467                                 size: [[6,[22px,17px]],[13,[25px,19px]],[15,[30px,22px]]]
2468                 US-PA:
2469                     # Match Pennsylvania state highways
2470                     filter: |
2471                         function() {
2472                             return feature.shield_text &&
2473                                 /^US:PA$/.test(feature.network)
2474                         }
2475                     draw:
2476                         icons:
2477                             sprite: |
2478                                 function() { return ( 'US:PA-' + feature.shield_text.length + 'char'); }
2479                             text:
2480                                 offset: [0px, 1px]
2481                                 font:
2482                                     fill: [0.0,0.0,0.0]
2483                                     size: [[7,7px],[13,9px],[15,10px]]
2484                     width_1char:
2485                         filter: function() { return (feature.shield_text.length === 1) }
2486                         draw:
2487                             icons:
2488                                 size: [[6,[13px,17px]],[13,[15px,19px]],[15,[18px,22px]]]
2489                     width_2char:
2490                         filter: function() { return (feature.shield_text.length === 2) }
2491                         draw:
2492                             icons:
2493                                 size: [[6,[17px,17px]],[13,[19px,19px]],[15,[22px,22px]]]
2494                     width_3char:
2495                         filter: function() { return (feature.shield_text.length === 3) }
2496                         draw:
2497                             icons:
2498                                 size: [[6,[21px,17px]],[13,[24px,19px]],[15,[28px,22px]]]
2499                     width_4char:
2500                         filter: function() { return (feature.shield_text.length === 4) }
2501                         draw:
2502                             icons:
2503                                 size: [[6,[22px,17px]],[13,[25px,19px]],[15,[30x,22px]]]
2504                     width_5char:
2505                         filter: function() { return (feature.shield_text.length === 5) }
2506                         draw:
2507                             icons:
2508                                 size: [[6,[24px,17px]],[13,[27px,19px]],[15,[32px,22px]]]
2509                 # USA County Routes
2510                 US-counties:
2511                     # Match state highways: `US:??:*`
2512                     #
2513                     # this is very USA specific
2514                     #
2515                     # filter: |
2516                     #     function() {
2517                     #         return feature.shield_text &&
2518                     #             /^US:(?!US)\w\w:.*$/.test(feature.network)
2519                     #     }
2520                     #
2521                     # this generic for any country with 3rd level networks (like county routes in USA)
2522                     # BEWARE:
2523                     # US:US:Business  about 150
2524                     # US:US:Truck
2525                     # US:US:Alternate
2526     #
2527                     # STATE ROUTE
2528                     # ??:??:Loop  about 200
2529                     # ??:??:Spur  about 200
2530                     # ??:??:Business   about 100
2531     #
2532                     # STATE TEXAS SPECIAL ROUTE
2533                     # US:TX:FM -- probably just state? there are 3k of these
2534                     #
2535                     #
2536                     filter: |
2537                         function() {
2538                             return feature.shield_text &&
2539                                 /^\w+:\w+:(!Alternate).+$/.test(feature.network) &&
2540                                 $zoom > 10
2541                         }
2542                     draw:
2543                         icons:
2544                             # you need to match any custom shield to the vector tile `network` values
2545                             sprite: function() { return ('county_shield-' + feature.shield_text.length + 'char'); }
2546                             # priority: 19
2547                             visible: global.sdk_road_shields
2548                             text:
2549                                 font:
2550                                     fill: [0.320,0.320,0.320]
2551                                     #size: [[11,7px],[15,10px]]
2552                     # early:
2553                     #     filter: { $zoom: { max: 11 } }
2554                     #     draw:
2555                     #         icons:
2556                     #             visible: false
2557                     width_1char:
2558                         filter: function() { return (feature.shield_text.length === 1) }
2559                         draw:
2560                             icons:
2561                                 size: [[6,[14px,14px]],[13,[16px,16px]],[15,[18px,18px]]]
2562                     width_2char:
2563                         filter: function() { return (feature.shield_text.length === 2) }
2564                         draw:
2565                             icons:
2566                                 size: [[6,[16px,14px]],[13,[18px,15px]],[15,[22px,18px]]]
2567                     width_3char:
2568                         filter: function() { return (feature.shield_text.length === 3) }
2569                         draw:
2570                             icons:
2571                                 size: [[6,[20px,14px]],[13,[21px,15px]],[15,[26px,18px]]]
2572                     width_4char:
2573                         filter: function() { return (feature.shield_text.length === 4) }
2574                         draw:
2575                             icons:
2576                                 size: [[6,[25px,14px]],[13,[28px,15px]],[15,[34px,18px]]]
2577                     width_5char:
2578                         filter: function() { return (feature.shield_text.length === 5) }
2579                         draw:
2580                             icons:
2581                                 size: [[6,[30px,14px]],[13,[33px,15px]],[15,[40px,18px]]]
2582         path:
2583             filter:
2584                 all:
2585                     - kind: [path, portage_way]
2586                 not:
2587                     - kind_detail: [footway, steps, track, cycleway]
2588                     - kind_detail: [pier]
2589             draw:
2590                 dashed_small:
2591                     order: function() { return feature.sort_rank; }
2592                     visible: false
2593                     color: [0.350,0.350,0.350]
2594                     width: [[14, 0.35px], [15, 0.5px], [16, 1px], [17, 2px], [18, 3px], [19, 4px]]
2595                     # outline:
2596                     #     color: [0.790,0.790,0.790]
2597                     #     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2598             early:
2599                 filter:
2600                     $zoom: { max: 17 }
2601                 draw:
2602                     lines:
2603                         order: 351
2604                         outline:
2605                             order: 350
2606             portage_way:
2607                 filter: { kind: portage_way }
2608                 draw:
2609                     lines:
2610                         color: [0.350,0.350,0.350]
2611             pedestrian:
2612                 filter: { kind_detail: pedestrian }
2613                 draw:
2614                     lines:
2615                         color: [[16,[0.749,0.749,0.749]]]
2616                         width: [[14, 0.35px], [15, 0.35px], [16, 1px], [17, 2px], [18, 3px], [19, 4px]]
2617                         # outline:
2618                         #     color: [0.790,0.790,0.790]
2619                         #     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2620             bridge:
2621                 filter: { is_bridge: true }
2622                 draw:
2623                     lines:
2624                         width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
2625                         cap: round
2626                         outline:
2627                             color: [[15, global.path_bridge_casing2],[16, global.path_bridge_casing1]]
2628                             width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2629                             cap: butt
2630             in_park:
2631                 filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden] }
2632                 draw:
2633                     dashed_small:
2634                         color: [0.350,0.350,0.350]
2635                         # outline:
2636                         #     color: [0.790,0.790,0.790]
2637                         #     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2638             #     golf_course:
2639             #         filter: { landuse_kind: golf_course }
2640             #         draw:
2641             #             lines:
2642             #                 color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
2643             #                 outline:
2644             #                     color: [0.790,0.790,0.790]
2645             #                     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2646             #     nature_reserve:
2647             #         filter: { landuse_kind: nature_reserve }
2648             #         draw:
2649             #             lines:
2650             #                 color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
2651             #                 outline:
2652             #                     color: [0.790,0.790,0.790]
2653             #                     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2654             #     conservation:
2655             #         filter: { landuse_kind: conservation }
2656             #         draw:
2657             #             lines:
2658             #                 color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
2659             #                 outline:
2660             #                     color: [0.790,0.790,0.790]
2661             #                     width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2662             # in_cemetery_garden:
2663             #     filter: { landuse_kind: [cemetery,garden] }
2664             #     draw:
2665             #         lines:
2666             #             color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
2667             #             width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
2668             #             outline:
2669             #                 color: [0.790,0.790,0.790]
2670             #                 width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2671             # in_zoo:
2672             #     filter: { landuse_kind: zoo }
2673             #     draw:
2674             #         lines:
2675             #             color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
2676             #             width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
2677             #             outline:
2678             #                 color: [0.790,0.790,0.790]
2679             #                 width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2680             # in_university:
2681             #     filter: { landuse_kind: university }
2682             #     draw:
2683             #         lines:
2684             #             color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
2685             #             width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
2686             #             outline:
2687             #                 color: [0.790,0.790,0.790]
2688             #                 width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2689             # in_hospital:
2690             #     filter: { landuse_kind: hospital }
2691             #     draw:
2692             #         lines:
2693             #             color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
2694             #             width: [[14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
2695             #             outline:
2696             #                 color: [0.790,0.790,0.790]
2697             #                 width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2698             labels-path:
2699                 filter: { $zoom: { min: 17 } }
2700                 draw:
2701                     text-blend-order:
2702                         priority: 61
2703                         visible: global.text_visible_path
2704                         font:
2705                             fill: [0.536,0.556,0.581]
2706                             size: 12px
2707                             stroke: { color: global.text_stroke, width: 4 }
2708         track:
2709             filter: { kind: path, kind_detail: track }
2710             draw:
2711                 lines:
2712                     color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
2713                     width: [[13, 0px], [14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
2714                     cap: butt
2715                     join: round
2716                     outline:
2717                         color: [0.790,0.790,0.790]
2718                         width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2719             bridge:
2720                 filter: { is_bridge: true }
2721                 draw:
2722                     lines:
2723                         cap: butt
2724                         width: [[13, 0px], [14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
2725                         cap: round
2726                         outline:
2727                             color: [1.0,1.0,1.0]
2728                             width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2729                             cap: butt
2730             in_park:
2731                 filter: { landuse_kind: [park,national_park,nature_reserve,conservation,golf_course,garden,battlefield] }
2732                 draw:
2733                     lines:
2734                         color: [[14, [0.790,0.790,0.790]], [15, [1.00,1.00,1.00]]]
2735                         width: [[13, 0px], [14, 0.35px], [15, 0px], [16, 0.25px], [17, 3px], [18, 3px], [19, 4px]]
2736                         outline:
2737                             color: [0.790,0.790,0.790]
2738                             width: [[14, 0.0px], [15, 0.35px], [16, 0.45px], [17, 0.85px], [18, 1px]]
2739         steps:
2740             filter:
2741                 all:
2742                     - kind: path
2743                     - kind_detail: steps
2744             draw:
2745                 dashed:
2746                     #order: function() { return feature.sort_rank; }
2747                     order: 1005
2748                     color: [0.501,0.650,0.650]
2749                     width: [[15, 0.6], [16, 1px], [17, 1px], [18, 4px], [19, 1.5m]]
2750                 lines:
2751                     visible: false
2752                     order: 1000
2753                     #width: [[13, 0.75px], [14, 0.85px], [15, 1.1px], [16, 2px], [17, 6px], [18, 7px], [19, 10px]]
2754                     #color: [[15,[0.120,0.600,0.520]],[16,[0.623,0.820,0.797]]]
2755                     color: [[14,[0.510,0.752,0.695]],[15,[0.671,0.839,0.820]],[16,[0.671,0.839,0.820]]]
2756                     width: [[13, 0.75px], [14, 0.6px], [15, 1px], [16, 2px], [17, 3px], [18, 4px], [19, 4px]]
2757                     visible: true
2758                     #color: purple
2759             steps-late:
2760                 filter: { $zoom: { min: 17 } }
2761                 draw:
2762                     # lines:
2763                     #     color: [0.707,0.884,0.872]
2764                     #     visible: true
2765                     #     outline:
2766                     #         width: [[17, 0px], [18, 1px], [19, 2px]]
2767                     #         color: [0.850,0.850,0.850]
2768                     dashed:
2769                         width: [[17, 2px], [18, 3px], [19, 3.5px]]
2770                         color: [0.501,0.650,0.650]
2771             early-show-as-lines-z14:
2772                 filter: { $zoom: { max: 16 } }
2773                 draw:
2774                     dashed:
2775                         visible: false
2776                     lines:
2777                         visible: true
2778             networked:
2779                 filter: { walking_network: true }
2780                 draw:
2781                     lines:
2782                         width: [[13, 0.75px], [14, 1px], [15, 2px], [16, 2px], [17, 3px], [18, 4px], [19, 4px]]
2783                     dashed:
2784                         width: [[13, 1.25px],[14, 2px],[15, 1.75px],[16, 2px], [17, 4px], [18, 5px], [19, 8px]]
2785                     highlight:
2786                         order: 980
2787                         color: [[12,[0.900,1.000,0.850]],[14,[0.930,1.000,0.850]],[15,[1.000,1.000,0.870]]]
2788                         width: [[12, 3px], [13, 4px], [14, 5px], [15, 6px], [16, 8px], [17, 10px], [18, 14px], [19, 16px]]
2789                         join: round
2790                 early:
2791                     filter: { $zoom: { max: 15 } }
2792                     draw:
2793                         lines:
2794                             color: [0.120,0.600,0.520]
2795                 networked-steps-late:
2796                     filter: { $zoom: { min: 18 } }
2797                     draw:
2798                         dashed:
2799                             color: [0.120,0.600,0.520]
2800             in_park:
2801                 filter: { landuse_kind: [park,nature_reserve,conservation,golf_course,garden] }
2802                 draw:
2803                     dashed:
2804                         color: [0.120,0.600,0.520]
2805             # in_university:
2806             #     filter: { landuse_kind: university }
2807             #     draw:
2808             #         dashed:
2809             #             color: global.path_steps1_b
2810             #             outline:
2811             #                 color: [1.0,1.0,1.0]
2812             # in_hospital:
2813             #     filter: { landuse_kind: hospital }
2814             #     draw:
2815             #         dashed:
2816             #             color: global.path_steps1_b
2817             #             outline:
2818             #                 color: [1.0,1.0,1.0]
2819             labels-steps:
2820                 filter: { $zoom: { min: 17 } }
2821                 draw:
2822                     text-blend-order:
2823                         priority: 63
2824                         visible: global.text_visible_steps
2825                         font:
2826                             fill: [0.45,0.45,0.45]
2827                             size: 11px
2828                             stroke: { color: global.text_stroke, width: 4 }
2829         winter_sport_pistes:
2830             filter: { kind: piste }
2831             draw:
2832                 lines:
2833                     order: 388   # We override the server value here because Eraser Map is also a special Ski Map
2834                     cap: round
2835                     join: round
2836                     color: '#909090'
2837                     width: [[13,0px],[14,1px],[15, 1.25px], [16, 2px], [18, 3m]]
2838                 text-blend-order:
2839                     priority: 18
2840                     visible: global.text_visible_piste
2841                     font:
2842                         fill: global.text_fill_piste
2843                         size: 12px
2844                         stroke: { color: [0.913,0.925,0.933], width: 4 }
2845             early:
2846                 filter: { $zoom: { max: 15 } }
2847                 draw:
2848                     text-blend-order:
2849                         visible: false
2850             early-z15:
2851                 filter: { $zoom: [15] }
2852                 draw:
2853                     text-blend-order:
2854                         font:
2855                             fill: global.text_fill_piste_e
2856                             size: 11px
2857             easy:
2858                 filter: { piste_difficulty: easy }
2859                 draw:
2860                     lines:
2861                         color: [0.367,0.750,0.622]
2862             intermediate:
2863                 filter: { piste_difficulty: intermediate }
2864                 draw:
2865                     lines:
2866                         color: [0.420,0.678,0.863]
2867             advanced:
2868                 filter: { piste_difficulty: advanced }
2869                 draw:
2870                     lines:
2871                         color: [0.450,0.450,0.450]
2872                     text-blend-order:
2873                         text_source: global.ux_language_text_source_piste_advanced
2874             expert:
2875                 filter: { piste_difficulty: expert }
2876                 draw:
2877                     lines:
2878                         color: [0.450,0.450,0.450]
2879                     text-blend-order:
2880                         text_source: global.ux_language_text_source_piste_expert
2881         pier:
2882             filter: { kind: path, kind_detail: pier }
2883             draw:
2884                 lines:
2885                     color: [0.993,0.993,0.993]
2886                     width: [[13, 0px], [14, 0.5px],[15, 1.5px], [16, 2.5px],[17, 3px],[18, 3m]]
2887                     outline:
2888                         color: [0.431,0.806,0.914]
2889                         width: [[15, 0px],[16,0.65px], [17, 0.75px], [18, 1px], [19, 1.5px]]
2890         racetrack:
2891             filter: { kind: racetrack }
2892             draw:
2893                 lines:
2894                     cap: round
2895                     join: round
2896                     color: [0.400,0.666,0.690]
2897                     width: [[13,0.5px],[14,1px],[15, 1px], [16, 1.5px], [18, 3px], [19, 5px]]
2898         airport-lines:
2899             filter: { kind: aeroway, kind_detail: [runway,taxiway] }
2900             draw:
2901                 lines:
2902                     color: [[11,[0.25,0.25,0.25]],[17,[0.00,0.00,0.00]]]
2903                     cap: butt
2904                     width: [[10,1px],[13,3px],[15,16px],[17,60m]]
2905                     outline:
2906                         color: [1.0,1.0,1.0]
2907             # Features come in at zoom 9, but include mostly minor airports without POIs until z13
2908             early:
2909                 filter: { $zoom: { max: 12 }, not: { landuse_kind: [aerodrome, runway, taxiway] } }
2910                 draw:
2911                     lines:
2912                         visible: false
2913             not-round:
2914                 filter: { $zoom: { min: 17 } }
2915                 draw:
2916                     lines:
2917                         cap: butt
2918             taxiway:
2919                 filter: { kind_detail: taxiway }
2920                 draw:
2921                     lines:
2922                         color: [[11,[0.885,0.885,0.885]],[13,[0.779,0.802,0.828]],[14,[0.779,0.802,0.828]],[15,[1.0,1.0,1.0]]]
2923                         width: [[11,0.5px],[14,1px],[15,0px],[16,1px],[17,6px],[18,9m]]
2924                         outline:
2925                             color: [[11,[0.894,0.906,0.914]],[14,[0.779,0.802,0.828]],[15,[0.714,0.733,0.760]],[17,[0.744,0.764,0.792]]]
2926                             width: [[11, 0px],[14,0px],[15,0.75px],[17,2px],[18,3px]]
2927                 early:
2928                     filter: { $zoom: { max: 13 } }
2929                     draw:
2930                         lines:
2931                             visible: false
2932             runway:
2933                 filter: { kind_detail: runway }
2934                 draw:
2935                     lines:
2936                         color: [[11, [0.885,0.885,0.885]], [13, [0.714,0.733,0.760]], [15, [1.0,1.0,1.0]], [16, [1.0,1.0,1.0]]]
2937                         outline:
2938                             color: [[11, [0.894,0.906,0.914]], [14,[0.779,0.802,0.828]], [15, [0.714,0.733,0.760]], [16, [0.714,0.733,0.760]], [17, [0.744,0.764,0.792]]]
2939                             width: [[11, 0px], [14, 0px], [15, 0.75px], [16, 1.5px], [17, 2px], [18, 3px]]
2940         ferry:
2941             filter: { kind: ferry }
2942             draw:
2943                 lines:
2944                     color: [0.451,0.804,0.878]
2945                     width: [[12, 0.5px], [13, 0.75px], [15, 1.0px]]
2946         aerialway:
2947             filter: { kind: aerialway }
2948             draw:
2949                 lines:
2950                     color: [0.5,0.5,0.5]
2951                     width: [[14, 0.5px], [15, 1.0px], [16, 2m]]
2952             gondola_cable_car:
2953                 filter: { kind_detail: [gondola, cable_car] }
2954                 draw:
2955                     lines:
2956                         color: [0.45,0.45,0.45]
2957                         width: [[12, 0.5px], [13, 0.5px], [14, 1.75px], [15, 2.5px], [16, 2.5px], [18, 3m]]
2958 #                    lines_transparent:
2959 #                        color: [0.5,0.5,0.5]
2960 #                        width: [[12, 0px], [13, 5px], [14, 8px], [15, 10px], [16, 12px]]
2961             chair_lift:
2962                 filter: { kind_detail: chair_lift }
2963                 draw:
2964                     lines:
2965                         color: [0.45,0.45,0.45]
2966                         width: [[12, 0.5px], [13, 0.5px], [14, 1.75px], [15, 2.5px], [16, 2.5px], [18, 3m]]
2967 #                    lines_transparent:
2968 #                        color: [0.5,0.5,0.5]
2969 #                        width: [[12, 0px], [13, 5px], [14, 8px], [15, 10px], [16, 12px], [18, 20px]]
2970             aerialway-labels:
2971                 filter: { $zoom: { min: 14 } }
2972                 draw:
2973                     text-blend-order:
2974                         priority: 63
2975                         visible: global.text_visible_aerialway
2976                         text_source: global.ux_language_text_source
2977                         font:
2978                             fill: global.text_fill
2979                             size: 10px
2980                             stroke: { color: global.text_stroke_park, width: 4 }
2981                 minor:
2982                     filter: { not: { kind_detail: [gondola,cable_car,chair_lift] }, $zoom: { max: 17 } }
2983                     draw:
2984                         text-blend-order:
2985                             visible: false
2986                 early_gondola:
2987                     filter: { $zoom: [14], kind_detail: [gondola,cable_car] }
2988                     draw:
2989                         text-blend-order:
2990                             font:
2991                                 weight: 600
2992                 later:
2993                     filter: { $zoom: { min: 15 } }
2994                     draw:
2995                         text-blend-order:
2996                             font:
2997                                 weight: 600
2998     buildings:
2999         data: { source: mapzen, layer: buildings }
3000         filter:
3001             not: { location: underground }
3002         # set default footprint and extrusion draw properties, but don't draw by default (rules below will turn visibility on)
3003         draw:
3004             polygons:
3005                 visible: false
3006                 order: 329
3007                 color: [[14,[0.930,0.940,0.940]],[15,[0.920,0.930,0.930]],[16,[0.930,0.940,0.940]]]
3008             lines:
3009                 style: lines
3010                 order: 330
3011                 visible: false
3012                 color: [[14,[0.750,0.750,0.750]],[17,[0.85, 0.85, 0.85]]]
3013                 width: [[14, 0px], [15, 0.5px], [16,0.5px], [17,1px], [18, 1.25px]]
3014
3015         # building footprints, pre-extrusion
3016         footprints:
3017             filter:
3018                 any:
3019                     # limit show smaller landuse areas to higher zooms
3020                     - { $zoom: [13], scale_rank: [1,2] }
3021                     - { $zoom: [14], scale_rank: [1,2,3] }
3022                     - { $zoom: [15], area: { min: 5000 }, name: true }
3023                     - { $zoom: [15], area: { min: 5000 }, kind: true }
3024                     - { $zoom: [15], area: { min: 3000 }, landuse_kind: true }
3025                     - { $zoom: [15], height: { min: 100 } }
3026                     - { $zoom: [15], volume: { min: 100000 } }
3027                     - { $zoom: [16], area: { min: 1000 }, name: true }
3028                     - { $zoom: [16], area: { min: 1000 }, kind: true }
3029                     - { $zoom: [16], area: { min: 2000 }, landuse_kind: true }
3030                     - { $zoom: [16], volume: { min: 50000 } }
3031                     #- { $zoom: [16], height: { min: 50 } }
3032                     - { $zoom: { min: 17 } }
3033                 all:
3034                    - not: { location: underground }
3035             draw:
3036                 polygons:
3037                     visible: true
3038                 lines:
3039                     visible: true
3040
3041             extrude:
3042                 filter:
3043                     all:
3044                         - function() { return global.sdk_building_extrude; }
3045                         - any:
3046                             # for the buildings that were visible at zoom 15, extrude those all up a bit at z17
3047                             - { $zoom: [16], area: { min: 20000 }, name: true }
3048                             - { $zoom: [16], area: { min: 20000 }, kind: true }
3049                             - { $zoom: [16], area: { min: 5000 }, landuse_kind: true }
3050                             - { $zoom: [16], height: { min: 150 } }
3051                             - { $zoom: [16], volume: { min: 150000 } }
3052                             - { $zoom: [17], area: { min: 5000 }, name: true }
3053                             - { $zoom: [17], area: { min: 5000 }, kind: true }
3054                             - { $zoom: [17], area: { min: 3000 }, landuse_kind: true }
3055                             - { $zoom: [17], height: { min: 100 } }
3056                             - { $zoom: [17], volume: { min: 100000 } }
3057                             - { $zoom: { min: 18 } }
3058                 draw:
3059                     polygons:
3060                         visible: true
3061                         order: 438
3062                         style: building-grid
3063                         extrude: 100
3064                         color: [0.930,0.940,0.940]
3065                     lines:
3066                         visible: true
3067                         order: 439
3068                         style: building-lines
3069                         extrude: 100
3070                 z16-default:
3071                     filter: { $zoom: [16] }
3072                     draw:
3073                         polygons:
3074                             extrude: 20
3075                         lines:
3076                             extrude: 20
3077                 z18-default:
3078                     filter: { $zoom: { min: 18 } }
3079                     draw:
3080                         polygons:
3081                             extrude: 20
3082                         lines:
3083                             extrude: 20
3084                 z18-special:
3085                     filter:
3086                         any:
3087                             - { $zoom: { min: 18 }, area: { min: 5000 }, name: true }
3088                             - { $zoom: { min: 18 }, area: { min: 5000 }, kind: true }
3089                             - { $zoom: { min: 18 }, area: { min: 3000 }, landuse_kind: true }
3090                             - { $zoom: { min: 18 }, height: { min: 100 } }
3091                             - { $zoom: { min: 18 }, volume: { min: 100000 } }
3092                     draw:
3093                         polygons:
3094                             extrude: 100
3095                         lines:
3096                             extrude: 100
3097
3098         transit-overlay-station-buildings:
3099             filter:
3100                 all:
3101                     - landuse_kind: [station]
3102                     - function() { return global.sdk_transit_overlay; }
3103             draw:
3104                 polygons:
3105                     color: '#bdadbf'
3106                     order: 500
3107                     #extrude: function() { return feature.height || 20; }
3108                 outline:
3109                     style: lines
3110                     order: 501
3111                     color: '#d534df'
3112                     width: [[14,0.1px],[15,0.5px],[17,0.5px],[18,0.75px],[19,0.25m]]
3113                     #extrude: function() { return feature.height || 20; }
3114
3115         buildings-labels:
3116             filter:
3117                 all:
3118                     - { $zoom: { min: 17 } }
3119                     - $geometry: point
3120                     - not: { location: underground, kind: address }
3121                     - name: true
3122                     - function() { return global.text_visible_building; }
3123                 any:
3124                     - { $zoom: [16], area: { min: 5000 } }
3125                     - { $zoom: [16], area: { min: 5000 } }
3126                     - { $zoom: [16], area: { min: 10000 }, landuse_kind: true }
3127                     - { $zoom: [16], area: { min: 7000 }, kind_detail: [university, college, school, kindergarten] }
3128                     - { $zoom: [16], volume: { min: 50000 }, name: true }
3129                     - { $zoom: [17], area: { min: 3000 } }
3130                     - { $zoom: [17], area: { min: 2000 }, kind_detail: [university, college, school, kindergarten] }
3131                     - { $zoom: [18], area: { min: 1000 } }
3132                     - { $zoom: [18], kind_detail: [university, college, school, kindergarten] }
3133                     - { $zoom: [19], area: { min: 200 } }
3134                     - { $zoom: { min: 19 }, kind_detail: [university, college, school, kindergarten] }
3135                     - { $zoom: { min: 20 }, area: true }
3136             draw:
3137                 text-blend-order:
3138                     text_source: global.ux_language_text_source
3139                     #interactive: global.interactive
3140                     move_into_tile: true
3141                     priority: 70
3142                     order: 7
3143                     font:
3144                         fill: '#666'
3145                         family: global.text_font_family
3146                         style: italic
3147                         size: 11px
3148                         stroke: { color: global.text_stroke_address, width: 1 }
3149             building_labels-z15-z16-z17:
3150                 filter: { $zoom: [15,16,17] }
3151                 draw: { text-blend-order: { font: { size: 12px, stroke: { width: 2 } } } }
3152             building_labels-z18:
3153                 filter: { $zoom: [18,19] }
3154                 draw: { text-blend-order: { font: { size: 12px, weight: 600, stroke: { width: 3 } } } }
3155             building_labels-z20-up:
3156                 filter: { $zoom: { min: 20 } }
3157                 draw: { text-blend-order: { font: { size: 14px, weight: 600, stroke: { width: 3 }  } } }
3158             building-labels-z16:
3159                 filter: function() { if( $zoom == 16 && feature.name.length > 20 ) { return true; } else { return false; } }
3160                 draw:
3161                     text-blend-order:
3162                         visible: false
3163             building-labels-z17:
3164                 filter: function() { if( $zoom == 17 && feature.name.length > 30 ) { return true; } else { return false; } }
3165                 draw:
3166                     text-blend-order:
3167                         visible: false
3168             building-labels-z20+:
3169                 filter: { $zoom: { min: 20 } }
3170                 draw:
3171                     text-blend-order:
3172                         text_source: global.ux_language_text_source_building_and_address
3173         address-labels:
3174             filter:
3175                 all:
3176                     - $zoom: { min: 20 }
3177                     - function() { return global.text_visible_address; }
3178                 any:
3179                     - kind: address
3180                     - { label_position: true, addr_housenumber: true, name: false }
3181             draw:
3182                 text-blend-order:
3183                     #interactive: global.interactive
3184                     order: 7
3185                     text_source: addr_housenumber
3186                     font:
3187                         fill: global.text_fill_address
3188                         family: global.text_font_family
3189                         style: italic
3190                         size: 10px
3191                         stroke: { color: global.text_stroke_address, width: 4 }
3192
3193     boundaries:
3194         data: { source: mapzen, layer: boundaries }
3195         draw:
3196             lines:
3197                 order: function() { return (feature.sort_rank + 100); }
3198         country:
3199             filter:
3200                 - kind: country
3201                 - admin_level: 2
3202             draw:
3203                 lines:
3204                     color: global.country_boundary
3205                     width: [[1, 0.5px], [2, 1.0px], [4, 1.5px], [9, 2.5px], [14, 3.5px], [16, 4.5px], [17, 14m]]
3206             water:
3207                 filter: { maritime_boundary: true }
3208                 draw:
3209                     lines:
3210                         visible: false
3211             labels-z9-up:
3212                 filter: { name: true, $zoom: { min: 9 }, not: { maritime_boundary: true } }
3213                 draw:
3214                     text-blend-order:
3215                         priority: 2
3216                         visible: global.text_visible_admin
3217                         text_source: global.ux_language_text_source_boundary_lines
3218                         text_wrap: 100
3219                         font:
3220                             family: global.text_font_family
3221                             size: 9px
3222                             fill: [0.00,0.00,0.00]
3223                             transform: uppercase
3224
3225         other_country_boundary_disputed_etc:
3226             filter: { kind: [disputed, indefinite, indeterminate, lease_limit, line_of_control, overlay_limit] }
3227             draw:
3228                 dashed:
3229                     order: function() { return (feature.sort_rank + 100); }
3230                     color: global.country_boundary
3231                     width: [[1,0.2px],[9,1.5px],[17,10m]]
3232             disputed:
3233                 filter: { kind: [disputed, line_of_control] }
3234                 draw:
3235                     dashed:
3236                         visible: false
3237                     dashed_big:
3238                         order: function() { return (feature.sort_rank + 100); }
3239                         color: global.country_boundary
3240                         width: [[1,0.5px],[9,2.5px],[17,14m]]
3241
3242         region:
3243             filter:
3244                 - kind: [region,macroregion]
3245                 - kind_detail: [3,4]
3246             draw:
3247                 lines:
3248                     color: global.region_boundary
3249                     width: [[0, 0.5px], [2, 1.0px], [5, 1.25px], [6, 1.5px], [7, 1.75px], [9, 2.0px], [14, 4.0px], [16, 5.0px], [17, 10m]]
3250             water:
3251                 filter: { maritime_boundary: true }
3252                 draw:
3253                     lines:
3254                         visible: false
3255             early:
3256                 filter: { not: { min_zoom: [1,2] }, $zoom: { max: 8 } }
3257                 draw:
3258                     lines:
3259                         visible: false
3260             labels-z9-up:
3261                 filter: { name: true, $zoom: { min: 9 }, not: { maritime_boundary: true } }
3262                 draw:
3263                     text-blend-order:
3264                         priority: 3
3265                         visible: global.text_visible_admin
3266                         text_source: global.ux_language_text_source_boundary_lines
3267                         text_wrap: 100
3268                         #offset: [0px, -7px]
3269                         anchor: top
3270                         font:
3271                             family: global.text_font_family
3272                             size: 9px
3273                             fill: [0.35,0.35,0.35]
3274                             transform: uppercase
3275         city_walls:
3276             filter: { kind: city_wall }
3277             draw:
3278                 lines:
3279                     color: global.city_wall
3280                     width: [[12, 0.75px], [13, 1.0px], [14, 1.2px], [15, 2.0px], [16, 2.5px], [19, 6m]]
3281         retaining_wall:
3282             filter: { kind: retaining_wall }
3283             draw:
3284                 lines:
3285                     color: global.retaining_wall
3286                     width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 4m]]
3287         snow_fence:
3288             filter: { kind: snow_fence }
3289             draw:
3290                 lines:
3291                     color: global.snow_fence
3292                     width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 1.5m]]
3293         fence:
3294             filter: { kind: fence }
3295             draw:
3296                 lines:
3297                     color: [[14,[0.770,0.765,0.755]],[18,[0.770,0.765,0.755]],[19,[0.841,0.837,0.824]]]
3298                     width: [[14, 0.5px], [15, 0.75px], [16, 0.75px], [18, 1.5px], [19, 1m]]
3299         dam:
3300             filter: { kind: dam }
3301             draw:
3302                 lines:
3303                     color: global.dam
3304                     width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 1.5m]]
3305
3306     places:
3307         data: { source: mapzen, layer: places }
3308         filter:
3309             name: true
3310         draw:
3311             icons:
3312                 text:
3313                     text_source: global.ux_language_text_source
3314                     visible: false
3315                     buffer: 3px
3316                     font:
3317                         family: global.text_font_family
3318                         fill: global.text_fill
3319             # NOTE: This is a hack for localities because of an icon & text bug, see note below
3320             text-blend-order:
3321                 text_source: global.ux_language_text_source
3322                 visible: false    # labels are enabled by each layer below
3323                 buffer: 3px
3324                 font:
3325                     family: global.text_font_family
3326                     fill: global.text_fill
3327             # END NOTE
3328
3329         country:
3330             filter:
3331                 kind: country
3332                 $zoom: { min: 2, max: 9 }
3333             draw:
3334                 text-blend-order:
3335                     priority: 3
3336                     visible: global.text_visible_admin
3337                     font:
3338                         fill: global.text_fill
3339                         weight: 600
3340                         stroke: { color: global.text_stroke, width: 4 }
3341             country-z2-3:
3342                 filter:
3343                     $zoom: [2,3]
3344                 draw:
3345                     text-blend-order:
3346                         priority: 10
3347                         buffer: 10px
3348                         font:
3349                             weight: 200
3350                             size: 11px
3351                 early-ones-z2:
3352                     filter:
3353                         $zoom: [2]
3354                         not: { name: [United States of America,Brasil,中华人民共和国,Россия,Canada,Kalaallit Nunaat,Ísland,Australia,India,日本,Guam,Indonesia,South Africa,مصر,Nigeria,Kenya] }
3355                     draw:
3356                         text-blend-order:
3357                             visible: false
3358                 early-ones-z3:
3359                     filter:
3360                         $zoom: [3]
3361                         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,Deutschland,España]
3362                     draw:
3363                         text-blend-order:
3364                             visible: false
3365             country-z4:
3366                 filter:
3367                     $zoom: [4]
3368                 draw:
3369                     text-blend-order:
3370                         buffer: 10px
3371                         priority: 8
3372                         font:
3373                             weight: 200
3374                             size: 13px
3375                 early-ones-z4:
3376                     filter:
3377                         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,Deutschland,España,Magyarország,Österreich,Polska,Хуссар Ирыстон,Аҧсны - Абхазия]
3378                     draw:
3379                         text-blend-order:
3380                             visible: false
3381             country-z5:
3382                 filter:
3383                     $zoom: [5]
3384                 draw:
3385                     text-blend-order:
3386                         priority: 8
3387                         font:
3388                             size: 13px
3389                 early-ones-z5:
3390                     filter:
3391                         # South Ossetia and Abkhazia aren't countries (they are disputed areas)
3392                         - name: [Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,El Salvador,Belize,België - Belgique - Belgien,"Хуссар Ирыстон - Южная Осетия","Хуссар Ирыстон","Аҧсны - Абхазия","Լեռնային Ղարաբաղի Հանրապետությու (Nagorno-Karabakh Republic)"]
3393                         - population: { max: 5000000 }
3394                     draw:
3395                         text-blend-order:
3396                             visible: false
3397             country-z6:
3398                 filter:
3399                     $zoom: [6]
3400                 draw:
3401                     text-blend-order:
3402                         priority: 8
3403                         font:
3404                             size: 14px
3405                 small-ones-z6:
3406                     filter:
3407                         # South Ossetia and Abkhazia aren't countries (they are disputed areas)
3408                         - name: [Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,België - Belgique - Belgien,"Хуссар Ирыстон - Южная Осетия","Хуссар Ирыстон","Аҧсны - Абхазия","Լեռնային Ղարաբաղի Հանրապետությու (Nagorno-Karabakh Republic)"]
3409                         - population: { max: 5000000 }
3410                     draw:
3411                         text-blend-order:
3412                             visible: false
3413             country-z7:
3414                 # South Ossetia and Abkhazia aren't countries (they are disputed areas)
3415                 filter: { $zoom: { min: 7, max: 9 } }
3416                 draw:
3417                     text-blend-order:
3418                         font:
3419                             size: 16px
3420                 small-ones-z7:
3421                     filter:
3422                         $zoom: [7]
3423                         # South Ossetia and Abkhazia aren't countries (they are disputed areas)
3424                         name: [Liechtenstein,San Marino,Civitatis Vaticanæ,"Хуссар Ирыстон - Южная Осетия","Хуссар Ирыстон","Аҧсны - Абхазия","Լեռնային Ղարաբաղի Հանրապետությու (Nagorno-Karabakh Republic)"]
3425                     draw:
3426                         text-blend-order:
3427                             visible: false
3428                 small-pop:
3429                     filter:
3430                         - population: { max: 5000000 }
3431                     draw:
3432                         text-blend-order:
3433                             priority: 30
3434                             font:
3435                                 size: 12px
3436
3437         region:
3438             filter:
3439                 kind: region
3440                 $zoom: { min: 4, max: 9 }
3441             draw:
3442                 text-blend-order:
3443                     priority: 14
3444                     visible: false
3445                     font:
3446                         size: 11px
3447                         weight: normal
3448                         fill: [0.5,0.5,0.5,0.5]
3449             region-z4:
3450                 filter:
3451                     $zoom: [4]
3452                     not: { name: [Western Cape,Eastern Cape,Northern Cape,North West,Limpopo,KwaZulu-Natal,Hamburg,Freie und Hansestadt Hamburg,Neuchâtel,Nordrhein-Westfalen,Haute-Normandie,Baden-Württemberg,Bayern,Sachsen-Anhalt,Berlin,Mecklenburg-Vorpommern,Schleswig-Holstein,Brandenburg,Niedersachsen,Saarland,Thüringen,Hessen,Sachsen] }
3453                 draw:
3454                     text-blend-order:
3455                         visible: global.text_visible_admin
3456                         text_source: global.ux_language_text_source_short
3457                         font:
3458                             fill: [0.70,0.70,0.70]
3459                             stroke: { color: global.text_stroke, width: 4 }
3460             region-z5:
3461                 filter:
3462                     $zoom: [5]
3463                     not: { name: [Western Cape,Eastern Cape,Northern Cape,North West,Limpopo,KwaZulu-Natal,Hamburg,Freie und Hansestadt Hamburg,Neuchâtel,Nordrhein-Westfalen,Haute-Normandie,Baden-Württemberg,Bayern,Sachsen-Anhalt,Berlin,Mecklenburg-Vorpommern,Schleswig-Holstein,Brandenburg,Niedersachsen,Saarland,Thüringen,Hessen,Sachsen] }
3464                 draw:
3465                     text-blend-order:
3466                         visible: global.text_visible_admin
3467                         text_source: global.ux_language_text_source_short
3468                         font:
3469                             size: 18px
3470                             weight: 200
3471                             stroke: { color: global.text_stroke, width: 4 }
3472             region-z6:
3473                 filter:
3474                     $zoom: [6]
3475                     not: { name: [Western Cape,Eastern Cape,Northern Cape,North West,Limpopo,KwaZulu-Natal,Hamburg,Freie und Hansestadt Hamburg,Neuchâtel,Nordrhein-Westfalen,Haute-Normandie,Baden-Württemberg,Bayern,Sachsen-Anhalt,Berlin,Mecklenburg-Vorpommern,Schleswig-Holstein,Brandenburg,Niedersachsen,Saarland,Thüringen,Hessen,Sachsen] }
3476                 draw:
3477                     text-blend-order:
3478                         visible: global.text_visible_admin
3479                         text_source: global.ux_language_text_source_short
3480                         font:
3481                             size: 21px
3482                             weight: 200
3483                             transform: uppercase
3484
3485             region-z7-z8:
3486                 filter: { $zoom: [7] }
3487                 draw:
3488                     text-blend-order:
3489                         visible: global.text_visible_admin
3490                         text_source: global.ux_language_text_source_short_proxy_name
3491                         font:
3492                             size: 30px
3493                             weight: 200
3494                             transform: uppercase
3495                 pesky:
3496                     filter:
3497                         $zoom: [7]
3498                         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]
3499                     draw:
3500                         text-blend-order:
3501                             visible: false
3502
3503                 abbrev-small-ones-z7:
3504                     filter:
3505                         $zoom: [7]
3506                         name: [Delaware,New Jersey,Connecticut,Rhode Island,Massachusetts,New Hampshire,Vermont]
3507                     draw:
3508                         text-blend-order:
3509                             text_source: global.ux_language_text_source_abbreviation
3510                             font: { transform: uppercase }
3511                 region-z8:
3512                     filter:
3513                         $zoom: [8]
3514                     draw:
3515                         text-blend-order:
3516                             text_source: global.ux_language_text_source
3517                     no-pop:
3518                         filter:
3519                             any:
3520                                 - population: false
3521                                 - population: { max: 1000000 }
3522                         draw:
3523                             text-blend-order:
3524                                 font:
3525                                     size: 16px
3526
3527
3528         populated-places:
3529             filter:
3530                 kind: locality
3531             draw:
3532                 icons:
3533                     visible: global.icon_visible_populated_places
3534                     size: [[10,4px],[11,0px]]
3535                     sprite: townspot-xs-rev
3536                     buffer: 8px
3537                     priority: 30
3538                     text:
3539                         visible: global.text_visible_populated_places
3540                         buffer: 3px
3541                         font:
3542                             size: [[5,9px],[8,10px],[12,11px]]
3543                             stroke: { color: global.text_stroke, width: 4 }
3544                 text-blend-order:
3545                     visible: global.text_visible_populated_places
3546                     buffer: 10px
3547                     font:
3548                         size: [[5,9px],[8,10px],[12,11px]]
3549                         stroke: { color: global.text_stroke, width: 4 }
3550
3551             #
3552             # NOTE: you'd think no-townspot would be the way to go, but icons with size 0px seems to have a bug to also hide the text :(
3553             #
3554             # no-townspot:
3555             #     filter: { $zoom: { min: 11 } }
3556             #     draw:
3557             #         icons:
3558             #             size: 0px
3559             #             text:
3560             #                 anchor: center
3561             #
3562             # NOTE: So instead we play a shell game with symbolizers per zoom
3563             #
3564             _icons_later:
3565                 filter: { $zoom: { min: 11 } }
3566                 draw:
3567                     icons:
3568                         visible: false
3569                     text-blend-order:
3570                         visible: global.text_visible_populated_places
3571
3572             _text_early:
3573                 filter: { $zoom: { max: 11 } }
3574                 draw:
3575                     text-blend-order:
3576                         visible: false
3577             # END HACK
3578
3579             z8-50k-below:
3580                 filter: { $zoom: [8,9], population: { min: 10000, max: 50000 } }
3581                 draw:
3582                     icons:
3583                         buffer: 25px
3584                         #color: red
3585                         #visible: false
3586             z9-10k-below:
3587                 filter: { $zoom: [8,9], population: { max: 10000 } }
3588                 draw:
3589                     icons:
3590                         buffer: 18px
3591                         #color: blue
3592                         #visible: false
3593             z9-no-population:
3594                 filter: { $zoom: [8,9], population: false }
3595                 draw:
3596                     icons:
3597                         buffer: 10px
3598                         #color: yellow
3599                         #visible: false
3600
3601             sorry-denver:
3602                 filter:
3603                     $zoom: [3]
3604                     name: [Denver]
3605                 draw:
3606                     icons:
3607                         visible: false
3608
3609             # HACK
3610             # NOTE: These should use icon: buffer instead of going visible: false, but there are problems using icon here :(
3611             # This fixes Paris area, but causes problems for small places in the USA eg Table Bluff near Eureka, California.
3612             funky-village:
3613                 filter: { $zoom: [11], population: { max: 1000 }, kind_detail: [village] }
3614                 draw:
3615                     text-blend-order:
3616                         visible: false
3617             funky-isolated_dwelling:
3618                 filter: { $zoom: [13], kind_detail: [isolated_dwelling] }
3619                 draw:
3620                     text-blend-order:
3621                         visible: false
3622             hamlet:
3623                 filter: { $zoom: [13], kind_detail: hamlet }
3624                 draw:
3625                     text-blend-order:
3626                         visible: false
3627             # END HACK
3628
3629             # someone in London and Salt Lake City thought neighbourhoods should be tagged place: locality
3630             # They were wrong
3631             funky-fake-neighbourhoods:
3632                 filter: { $zoom: { min: 13 }, kind_detail: [locality] }
3633                 draw:
3634                     text-blend-order:
3635                         visible: false
3636
3637
3638             population-10m-up:
3639                 filter:
3640                     population: { min: 10000000 }
3641                 draw:
3642                     icons:
3643                         size: [[4,5px],[8,6px],[9,0px]]
3644                         sprite: townspot-m-rev
3645                         priority: 6
3646                         text:
3647                             font:
3648                                 size: [[2,11px],[6,17px],[8,19px],[12,21px],[13,0px]]
3649                     text-blend-order:
3650                         priority: 6
3651                         font:
3652                             size: [[2,11px],[6,17px],[8,19px],[12,21px],[13,0px]]
3653                 capital:
3654                     filter: { country_capital: true, $zoom: { min: 5 } }
3655                     draw:
3656                         icons:
3657                             size: [[10,8px],[11,0px]]
3658                             sprite: capital-l
3659                             priority: 5
3660                         text-blend-order:
3661                             priority: 5
3662             population-5m-10m:
3663                 filter:
3664                     population: { min: 5000000, max: 10000000 }
3665                 draw:
3666                     icons:
3667                         size: [[4,5px],[8,6px],[9,0px]]
3668                         sprite: townspot-m-rev
3669                         priority: 7
3670                         text:
3671                             font:
3672                                 size: [[4,10px],[6,16px],[8,18px],[12,20px],[13,0px]]
3673                     text-blend-order:
3674                         priority: 7
3675                         font:
3676                             size: [[4,10px],[6,16px],[8,18px],[12,20px],[13,0px]]
3677                 capital:
3678                     filter: { country_capital: true, $zoom: { min: 5 } }
3679                     draw:
3680                         icons:
3681                             size: [[10,8px],[11,0px]]
3682                             sprite: capital-l
3683                             priority: 6
3684                         text-blend-order:
3685                             priority: 6
3686             population-1m-5m:
3687                 filter:
3688                     population: { min: 1000000, max: 5000000 }
3689                 draw:
3690                     icons:
3691                         size: [[4,5px],[8,6px],[9,0px]]
3692                         sprite: townspot-m-rev
3693                         priority: 9
3694                         text:
3695                             font:
3696                                 size: [[4,10px],[6,16px],[8,18px],[12,20px],[13,0px]]
3697                     text-blend-order:
3698                         priority: 9
3699                         font:
3700                             size: [[4,10px],[6,16px],[8,18px],[12,20px],[13,0px]]
3701                 capital:
3702                     filter: { country_capital: true, $zoom: { min: 5 } }
3703                     draw:
3704                         icons:
3705                             size: [[10,8px],[11,0px]]
3706                             sprite: capital-l
3707                             priority: 8
3708                         text-blend-order:
3709                             priority: 8
3710             population-500k-1m:
3711                 filter:
3712                     population: { min: 500000, max: 1000000 }
3713                 draw:
3714                     icons:
3715                         size: [[8,6px],[9,0px]]
3716                         sprite: townspot-m-rev
3717                         priority: 11
3718                         text:
3719                             font:
3720                                 size: [[5,10px],[8,12px],[10,14px],[12,16px],[13,0px]]
3721                     text-blend-order:
3722                         priority: 11
3723                         font:
3724                             size: [[5,10px],[8,12px],[10,14px],[12,16px],[13,0px]]
3725                 capital:
3726                     filter: { country_capital: true, $zoom: { min: 5 } }
3727                     draw:
3728                         icons:
3729                             size: [[10,6px],[11,0px]]
3730                             sprite: capital-m
3731                             priority: 10
3732                         text-blend-order:
3733                             priority: 10
3734             population-200k-500k:
3735                 filter:
3736                     population: { min: 200000, max: 500000 }
3737                 draw:
3738                     icons:
3739                         size: [[8,6px],[9,6px],[10,6px],[11,0px]]
3740                         sprite: townspot-m-rev
3741                         priority: 13
3742                         text:
3743                             font:
3744                                 size: [[6,10px],[8,14px],[10,15px],[12,16px],[13,0px]]
3745                     text-blend-order:
3746                         priority: 13
3747                         font:
3748                             size: [[6,10px],[8,14px],[10,15px],[12,16px],[13,0px]]
3749                 capital:
3750                     filter: { country_capital: true, $zoom: { min: 5 } }
3751                     draw:
3752                         icons:
3753                             size: [[10,6px],[11,0px]]
3754                             sprite: capital-m
3755                             priority: 12
3756                         text-blend-order:
3757                             priority: 12
3758             population-100k-200k:
3759                 filter:
3760                     population: { min: 100000, max: 200000 }
3761                 draw:
3762                     icons:
3763                         size: [[8,6px],[9,6px],[10,6px],[11,0px]]
3764                         sprite: townspot-m-rev
3765                         priority: 15
3766                         text:
3767                             font:
3768                                 size: [[6,10px],[8,12px],[14,14px],[15,0px]]
3769                     text-blend-order:
3770                         priority: 15
3771                         font:
3772                             size: [[6,10px],[8,12px],[14,14px],[15,0px]]
3773                 capital:
3774                     filter: { country_capital: true, $zoom: { min: 5 } }
3775                     draw:
3776                         icons:
3777                             size: [[10,6px],[11,0px]]
3778                             sprite: capital-m
3779                             priority: 14
3780                         text-blend-order:
3781                             priority: 14
3782             population-50k-100k:
3783                 filter:
3784                     population: { min: 50000, max: 100000 }
3785                 draw:
3786                     icons:
3787                         size: [[8,5px],[9,5px],[10,6px],[11,0px]]
3788                         sprite: townspot-s-rev
3789                         priority: 17
3790                         text:
3791                             font:
3792                                 size: [[6,10px],[8,12px],[14,14px],[15,0px]]
3793                     text-blend-order:
3794                         priority: 17
3795                         font:
3796                             size: [[6,10px],[8,12px],[14,14px],[15,0px]]
3797                 capital:
3798                     filter: { country_capital: true, $zoom: { min: 5 } }
3799                     draw:
3800                         icons:
3801                             size: [[10,5px],[11,0px]]
3802                             sprite: capital-m
3803                             priority: 16
3804                         text-blend-order:
3805                             priority: 16
3806             population-20k-50k:
3807                 filter:
3808                     population: { min: 20000, max: 50000 }
3809                 draw:
3810                     icons:
3811                         size: [[8,5px],[9,5px],[10,5px],[11,0px]]
3812                         sprite: townspot-s-rev
3813                         priority: 19
3814                         text:
3815                             font:
3816                                 size: [[9,10px],[14,12px],[15,0px]]
3817                     text-blend-order:
3818                         priority: 19
3819                         font:
3820                             size: [[9,10px],[14,12px],[15,0px]]
3821                 capital:
3822                     filter: { country_capital: true, $zoom: { min: 5 } }
3823                     draw:
3824                         icons:
3825                             size: [[10,5px],[11,0px]]
3826                             sprite: capital-s
3827                             priority: 18
3828                         text-blend-order:
3829                             priority: 18
3830             population-10k-20k:
3831                 filter:
3832                     population: { min: 10000, max: 20000 }
3833                 draw:
3834                     icons:
3835                         size: [[8,4px],[9,4px],[10,4px],[11,0px]]
3836                         sprite: townspot-xs-rev
3837                         priority: 21
3838                         text:
3839                             font:
3840                                 fill: [[9,[0.25,0.25,0.25]],[11,[0.00,0.00,0.00]]]
3841                                 size: [[9,10px],[14,12px],[15,0px]]
3842                     text-blend-order:
3843                         priority: 21
3844                         font:
3845                             fill: [[9,[0.25,0.25,0.25]],[11,[0.00,0.00,0.00]]]
3846                             size: [[9,10px],[14,12px],[15,0px]]
3847                 capital:
3848                     filter: { country_capital: true, $zoom: { min: 5 } }
3849                     draw:
3850                         icons:
3851                             size: [[10,5px],[11,0px]]
3852                             sprite: capital-s
3853                             priority: 20
3854                         text-blend-order:
3855                             priority: 20
3856             population-5k-10k:
3857                 filter:
3858                     population: { min: 5000, max: 10000 }
3859                 draw:
3860                     icons:
3861                         size: [[8,4px],[9,4px],[10,4px],[11,0px]]
3862                         sprite: townspot-xs-rev
3863                         priority: 23
3864                         text:
3865                             font:
3866                                 fill: [[9,[0.25,0.25,0.25]],[11,[0.00,0.00,0.00]]]
3867                                 size: [[9,10px],[14,12px],[15,0px]]
3868                     text-blend-order:
3869                         priority: 23
3870                         font:
3871                             fill: [[9,[0.25,0.25,0.25]],[11,[0.00,0.00,0.00]]]
3872                             size: [[9,10px],[14,12px],[15,0px]]
3873                 capital:
3874                     filter: { country_capital: true, $zoom: { min: 5 } }
3875                     draw:
3876                         icons:
3877                             size: [[10,5px],[11,0px]]
3878                             sprite: capital-s
3879                             priority: 22
3880                         text-blend-order:
3881                             priority: 22
3882             population-2k-5k:
3883                 filter:
3884                     population: { min: 2000, max: 5000 }
3885                 draw:
3886                     icons:
3887                         size: [[8,4px],[9,4px],[10,4px],[11,0px]]
3888                         sprite: townspot-xs-rev
3889                         priority: 25
3890                         text:
3891                             font:
3892                                 fill: [[9,[0.25,0.25,0.25]],[11,[0.00,0.00,0.00]]]
3893                                 size: [[9,10px],[14,12px],[15,0px]]
3894                     text-blend-order:
3895                         priority: 25
3896                         font:
3897                             fill: [[9,[0.25,0.25,0.25]],[11,[0.00,0.00,0.00]]]
3898                             size: [[9,10px],[14,12px],[15,0px]]
3899                 capital:
3900                     filter: { country_capital: true, $zoom: { min: 5 } }
3901                     draw:
3902                         icons:
3903                             size: [[10,5px],[11,0px]]
3904                             sprite: capital-s
3905                             priority: 24
3906                         text-blend-order:
3907                             priority: 24
3908             population-1k-2k:
3909                 filter:
3910                     population: { min: 1000, max: 2000 }
3911                 draw:
3912                     icons:
3913                         size: [[8,4px],[9,4px],[10,4px],[11,0px]]
3914                         sprite: townspot-xs-rev
3915                         priority: 27
3916                         text:
3917                             font:
3918                                 fill: [[9,[0.25,0.25,0.25]],[11,[0.00,0.00,0.00]]]
3919                                 size: [[9,10px],[14,12px],[15,0px]]
3920                     text-blend-order:
3921                         priority: 27
3922                         font:
3923                             fill: [[9,[0.25,0.25,0.25]],[11,[0.00,0.00,0.00]]]
3924                             size: [[9,10px],[14,12px],[15,0px]]
3925                 capital:
3926                     filter: { country_capital: true, $zoom: { min: 5 } }
3927                     draw:
3928                         icons:
3929                             size: [[10,5px],[11,0px]]
3930                             sprite: capital-s
3931                             priority: 26
3932                         text-blend-order:
3933                             priority: 26
3934             population-200-1k:
3935                 filter:
3936                     population: { min: 200, max: 1000 }
3937                 draw:
3938                     icons:
3939                         size: [[8,4px],[9,4px],[10,4px],[11,0px]]
3940                         sprite: townspot-xs-rev
3941                         priority: 28
3942                         text:
3943                             font:
3944                                 fill: [[9,[0.25,0.25,0.25]],[11,[0.00,0.00,0.00]]]
3945                                 size: [[9,10px],[14,11px],[15,0px]]
3946                     text-blend-order:
3947                         priority: 28
3948                         font:
3949                             fill: [[9,[0.25,0.25,0.25]],[11,[0.00,0.00,0.00]]]
3950                             size: [[9,10px],[14,11px],[15,0px]]
3951                 capital:
3952                     filter: { country_capital: true, $zoom: { min: 5 } }
3953                     draw:
3954                         icons:
3955                             size: [[10,5px],[11,0px]]
3956                             sprite: capital-s
3957                             priority: 27
3958                         text-blend-order:
3959                             priority: 27
3960
3961
3962         neighbourhoods:
3963             filter:
3964                 kind:
3965                     - macrohood
3966                     - neighbourhood
3967                     - borough
3968                 $zoom: { min: 10 }
3969                 is_landuse_aoi: false
3970             draw:
3971                 text-blend-order:
3972                     visible: false
3973                     priority: 29
3974                     buffer: 8px
3975                     text_wrap: 10
3976                     max_lines: 2
3977                     font:
3978                         fill: [0.600,0.600,0.600]
3979                         weight: normal
3980                         transform: uppercase
3981                         stroke: { color: [0.894,0.906,0.914], width: 4 }
3982             neighborhood-z11:
3983                 filter:
3984                     $zoom: [11]
3985                     min_zoom: [11]
3986                     max_zoom: { min: 12 }
3987                     #- kind_tile_rank: { max: 6 }
3988                 draw:
3989                     text-blend-order:
3990                         text_wrap: 10
3991                         visible: global.text_visible_neighbourhoods_e
3992                         font:
3993                             size: 9px
3994             neighborhood-z12:
3995                 filter:
3996                     $zoom: [12]
3997                     min_zoom: [11,12]
3998                     max_zoom: { min: 13 }
3999                     #- kind_tile_rank: { max: 8 }
4000                 draw:
4001                     text-blend-order:
4002                         text_wrap: 10
4003                         visible: global.text_visible_neighbourhoods_e
4004                         font:
4005                             size: 10px
4006             neighborhood-z13:
4007                 filter:
4008                     $zoom: [13]
4009                     min_zoom: [11,12,13]
4010                     max_zoom: { min: 14 }
4011                     kind_tile_rank: { max: 8 }
4012                 draw:
4013                     text-blend-order:
4014                         text_wrap: 10
4015                         visible: global.text_visible_neighbourhoods_e
4016                         font:
4017                             size: 12px
4018                             weight: 300
4019                             fill: [0.620,0.620,0.620]
4020                             stroke: { color: [0.904,0.916,0.924], width: 4 }
4021             neighborhood-z14:
4022                 filter:
4023                     $zoom: [14]
4024                     min_zoom: [11,12,13,14]
4025                     max_zoom: { min: 15 }
4026                     kind_tile_rank: { max: 8 }
4027                 draw:
4028                     text-blend-order:
4029                         text_wrap: 12
4030                         visible: global.text_visible_neighbourhoods
4031                         font:
4032                             size: 16px
4033                             weight: 300
4034                             fill: [0.600,0.600,0.600]
4035                             stroke: { color: [0.914,0.926,0.934], width: 5 }
4036             neighborhood-z15:
4037                 filter:
4038                     $zoom: [15]
4039                     min_zoom: [11,12,13,14,15]
4040                     max_zoom: { min: 16 }
4041                     kind_tile_rank: { max: 8 }
4042                 draw:
4043                     text-blend-order:
4044                         text_wrap: 12
4045                         visible: global.text_visible_neighbourhoods
4046                         font:
4047                             size: 21px
4048                             weight: 300
4049                             fill: [0.650,0.650,0.650]
4050                             stroke: { color: [0.949,0.953,0.953], width: 6 }
4051                 z15-new:
4052                     filter:
4053                         all:
4054                             - min_zoom: 15
4055                     draw:
4056                         text-blend-order:
4057                             priority: 19
4058                             font:
4059                                 size: 13px
4060             neighborhood-z16:
4061                 filter:
4062                     $zoom: [16]
4063                     min_zoom: [11,12,13,14,15,16]
4064                     max_zoom: { min: 17 }
4065                     kind_tile_rank: { max: 8 }
4066                 draw:
4067                     text-blend-order:
4068                         visible: global.text_visible_neighbourhoods
4069                         font:
4070                             size: 24px
4071                             weight: 300
4072                             fill: [0.00,0.00,0.00,0.50]
4073                             stroke: { color: [0.949,0.953,0.953], width: 6 }
4074
4075
4076     highway-exit:
4077         data: { source: mapzen, layer: [pois] }
4078         filter: { kind: motorway_junction, $zoom: { min: 15 } }
4079         draw:
4080             icons:
4081                 visible: false
4082             text-blend-order:
4083                 visible: global.text_visible_exits
4084                 interactive: global.interactive
4085                 text_source: ref
4086                 priority: 52
4087                 font:
4088                     fill: global.text_fill_exits
4089                     size: [[12,9px],[15,12px],[17,14px]]
4090                     stroke: { color: global.text_stroke, width: [[12,2px],[14,3px],[15,3px]] }
4091         later:
4092             filter: { $zoom: { min: 16 } }
4093             draw:
4094                 text-blend-order:
4095                     font:
4096                         weight: 600
4097     airport-gate:
4098         data: { source: mapzen, layer: [pois] }
4099         filter: { kind: aeroway_gate, $zoom: { min: 16 } }
4100         draw:
4101             icons:
4102                 visible: false
4103             text-blend-order:
4104                 visible: global.text_visible_airport_gate
4105                 interactive: global.interactive
4106                 text_source: ref
4107                 font:
4108                     fill: global.text_fill_exits
4109                     size: [[16,9px],[17,10px],[20,12px]]
4110                     #stroke: { color: global.highway1, width: [[12,2px],[14,3px],[15,3px]] }
4111         later:
4112             filter: { $zoom: { min: 19 } }
4113             draw:
4114                 text-blend-order:
4115                     font:
4116                         weight: 600
4117
4118     pois:
4119         data: { source: mapzen, layer: pois }
4120         #visible: global.label_visible_poi_landuse
4121         filter:
4122             all:
4123                 - not: { kind: [building,address,farm,apron,residential,commercial,industrial] }
4124                 - $geometry: point
4125                 # White list a few kinds to "always" show per the tile zoom inclusion, else test feature's min_zoom
4126                 #- function() { return feature.min_zoom <= $zoom }
4127                 - function() { if( feature.kind == 'attraction' || feature.kind == 'landmark' || feature.kind == 'hunting' || feature.kind == 'dive_centre' || feature.kind == 'gas_canister' || feature.kind == 'hunting' || feature.kind == 'fishing_area' || feature.kind == 'playground' || feature.kind == 'toilets' ) { return true } else { return feature.min_zoom <= $zoom } }
4128         draw:
4129             icons:
4130                 visible: global.icon_visible_poi_landuse
4131                 size: [[13, 18px], [16, 18px], [18, 22px]]
4132                 sprite: function() { return feature.kind; }
4133                 sprite_default: generic
4134                 interactive: global.interactive
4135                 priority: 65 #function() { return (feature.min_zoom && Math.floor(feature.min_zoom * 1000)) || 65; }
4136                 repeat_group: abc
4137                 buffer: 7px
4138                 text:
4139                     visible: global.text_visible_poi_landuse
4140                     text_source: global.ux_language_text_source
4141                     text_wrap: 18
4142                     max_lines: 3
4143                     font:
4144                         family: global.text_font_family
4145                         weight: 600
4146                         fill: [0.10,0.10,0.10]
4147                         size: [[13,10px],[14,10px],[18,11px]]
4148                         stroke: { color: global.text_stroke, width: 3 }
4149             text:
4150                 visible: false    # labels are enabled by each layer below, and these are only for special cases like enclosures
4151                 move_into_tile: false # preserves text alignment w/icons in JS
4152                 interactive: global.interactive
4153                 text_source: global.ux_language_text_source
4154                 font:
4155                     family: global.text_font_family
4156                     weight: 600
4157                     fill: [0.10,0.10,0.10]
4158                     size: [[13,10px],[14,10px],[18,11px]]
4159                     stroke: { color: global.text_stroke, width: 3 }
4160         # improve legibility at high zooms
4161         poi_labels-z18:
4162             filter: { $zoom: { min: 18 } }
4163             draw:
4164                 icons:
4165                     text:
4166                         # some pois have really long names
4167                         max_lines: 5
4168
4169         text-colours:
4170             greens:
4171                 filter:
4172                     kind: [park, national_park, conservation, protected_area, nature_reserve, forest, grass, beach, battlefield]
4173                 draw:
4174                     icons:
4175                         text:
4176                             font:
4177                                 fill: [0.032,0.522,0.530]
4178                                 style: italic
4179                                 size: [[13,11px],[14,11px],[18,12px]]
4180
4181         has-name:
4182             filter: { name: true }
4183             # match 1:1 correlations between data and sprite name
4184             # draw:
4185             #     icons:
4186             #         visible: false
4187             direct-match:
4188                 filter:
4189                     area: false
4190                 draw:
4191                     icons:
4192                         # sprite_source: kind
4193                         sprite: function() { return feature.kind; }
4194                         visible: global.icon_visible_poi_landuse
4195             # add generic icon at high zoom, if direct match fails
4196             generic-icons:
4197                 filter: { $zoom: { min: 18 }, area: false }
4198                 draw:
4199                     icons:
4200                         priority: 47
4201                         sprite_default: generic
4202                         visible: global.icon_visible_poi_landuse
4203
4204             # add generic icon at high zoom
4205             default-label-names:
4206                 filter: { $zoom: { min: 13 }, area: false }
4207                 draw:
4208                     icons:
4209                         text:
4210                             visible: global.text_visible_poi_landuse
4211             peak:
4212                 filter: { kind: [peak, volcano] }
4213                 draw:
4214                     icons:
4215                         visible: global.icon_visible_poi_landuse
4216                         priority: 43
4217                         text:  { visible: global.text_visible_poi_landuse }
4218                 low-priority-early-z11:
4219                     filter: { kind_tile_rank: { min: 3 }, $zoom: [11,12] }
4220                     draw:
4221                         icons:
4222                             visible: false
4223                             text: { visible: false }
4224                 low-priority-early-z13:
4225                     filter: { kind_tile_rank: { min: 4 }, $zoom: [13] }
4226                     draw:
4227                         icons:
4228                             visible: false
4229                             text: { visible: false }
4230                 peak-labels-later:
4231                     filter: { kind: [peak, volcano], $zoom: { min: 14 } }
4232                     draw:
4233                         icons:
4234                             text:
4235                                 text_source: function() { if( feature.name && feature.elevation ) { return feature.name + "\n" + feature.elevation + "m"; } else { if( feature.name ) { return feature.name; } else { return feature.elevation; } } }
4236             waterfall-early:
4237                 filter: { kind: [waterfall], $zoom: { max: 14 } }
4238                 draw:
4239                     icons:
4240                         visible: global.icon_visible_poi_landuse
4241                         text:  { visible: global.text_visible_poi_landuse }
4242                 low-priority-early-z11:
4243                     filter: { kind_tile_rank: { min: 3 }, $zoom: [11,12] }
4244                     draw:
4245                         icons:
4246                             visible: false
4247                             text: { visible: false }
4248                 low-priority-early-z13:
4249                     filter: { kind_tile_rank: { min: 4 }, $zoom: [13] }
4250                     draw:
4251                         icons:
4252                             visible: false
4253                             text: { visible: false }
4254             waterfall-labels:
4255                 filter: { kind: [waterfall], $zoom: { min: 14 } }
4256                 draw:
4257                     icons:
4258                         text:
4259                             text_source: function() { if( feature.name && feature.height ) { return feature.name + "\n" + feature.height + "m"; } else { if( feature.name ) { return feature.name; } else { return feature.height; } } }
4260             playgrounds_allotments_attraction_landmark_supermarket:
4261                 filter:
4262                     all:
4263                         - kind: [playground, allotments, attraction, landmark, supermarket]
4264                         - area: true
4265                         - $geometry: point
4266                     any:
4267                         - { $zoom: [15], area: { min: 600 } }
4268                         - { $zoom: [16], area: { min: 300 } }
4269                         - { $zoom: { min: 17 }, area: true }
4270                 draw:
4271                     icons:
4272                         visible: global.icon_visible_poi_landuse
4273                         priority: 41
4274                         text:
4275                             visible: global.text_visible_poi_landuse
4276                             # font:
4277                             #     size: 10px
4278                             #     stroke: { color: global.text_stroke, width: 4 }
4279             tourism-related:
4280                 filter:
4281                     all:
4282                         - kind: [zoo, theme_park, resort, aquarium, winery, maze, stadium, enclosure, animal]
4283                         - area: true
4284                         - $geometry: point
4285                     any:
4286                         # show labels for smaller landuse areas at higher zooms
4287                         - { $zoom: { min: 11 }, area: { min: 400000 } }
4288                         - { $zoom: { min: 12 }, area: { min: 200000 } }
4289                         - { $zoom: { min: 13 }, area: { min: 50000 } }
4290                         - { $zoom: { min: 14 }, area: { min: 20000 } }
4291                         - { $zoom: { min: 15 }, area: { min: 2000 } }
4292                         - { $zoom: { min: 16 } }
4293                 draw:
4294                     icons:
4295                         sprite: function() { return feature.kind; }
4296                         sprite_default: generic
4297                         visible: global.icon_visible_poi_landuse
4298                         priority: 43
4299                         text:
4300                             visible: global.text_visible_poi_landuse
4301                             # font:
4302                             #     size: 10px
4303                             #     stroke: { color: global.text_stroke, width: 4 }
4304             outdoor-needing-icons:
4305                 filter: { kind: [bicycle_repair_station, cycle_barrier, life_ring, waste_disposal, watering_place, water_point, lifeguard_tower, power_pole, power_tower, petroleum_well, communications_tower, putin, egress, hazard, put_in_egress, rapid, beacon, cross, mineshaft, adit, water_well, saddle, dune, sinkhole, rock, stone, bicycle_junction, walking_junction, dam, boat_storage, windmill, fishing, recreation_track, horse, fire_lookout, fee_station, rest_area] }
4306                 draw:
4307                     icons:
4308                         order: 41
4309                         sprite: generic
4310             outdoor-has-icons:
4311                 filter: { kind: [outdoor, lighthouse, saddle, picnic_area, picnic_table, camp_site, ski, mine, zoo, museum, gas, gas_canister, slipway, mineshaft, adit, recreation_track, playground, allotments, attraction, landmark] }
4312                 draw:
4313                     icons:
4314                         order: 41
4315             not-outdoor-not-landuse:
4316                 filter: { area: false, not: { kind: [park, national_park, outdoor, bicycle_repair_station, life_ring, waste_disposal, watering_place, water_point, lifeguard_tower, power_pole, power_tower, petroleum_well, bicycle_junction, walking_junction, dam, boat_storage, windmill, playground, allotments, attraction, landmark] } }
4317                 draw:
4318                     icons:
4319                         order: 45
4320
4321         # source icon sprite from something other than kind
4322         sports-pitch:
4323             filter: { kind: [grass, pitch] }
4324             draw:
4325                 icons:
4326                     sprite: function() { return feature.kind_detail; }
4327                     # needs a better recreation icon, so just use generic (default) for now
4328                     #sprite_default: sports
4329                     #visible: global.icon_visible_poi_landuse_e
4330                     priority: 69
4331         place_of_worship:
4332             filter:
4333                 kind: [place_of_worship, wayside_chapel]
4334             draw:
4335                 icons:
4336                     sprite: function() { return feature.religion; }
4337                     sprite_default: place_of_worship
4338         # TODO: some or all of this may be unnecessary for the sprite, but is necessary for the early filter
4339         building-icon:
4340             filter:
4341                 kind: [apartments, auditorium, building, hangar, manor, recreation_center, retirement_home, terminal]
4342             draw:
4343                 icons:
4344                     sprite: building
4345             early:
4346                 filter:
4347                     any:
4348                         # show labels for smaller landuse areas at higher zooms
4349                         - { $zoom: [14], area: { max: 200000 } }
4350                         - { $zoom: [15], area: { max: 20000 } }
4351                         - { $zoom: [16], area: { max: 5000 } }
4352                         - { $zoom: [17], area: { max: 1000 } }
4353                 draw:
4354                     icons:
4355                         visible: false
4356         #end different icon sprites
4357
4358         #most POI icons without name should be hidden, except these
4359         no-name:
4360             filter: { name: false }
4361             draw:
4362                 icons:
4363                     visible: false
4364             # eg park polygons in SF that have area but no name, sigh
4365             no-name-no-area:
4366                 filter:
4367                     kind: true
4368                     name: false
4369                 draw:
4370                     icons:
4371                         visible: false
4372             # we agree with server value, always show
4373             always-show:
4374                 filter:
4375                     kind: [bbq,bicycle_junction,firepit,fishing_area,geyser,hot_spring,observatory,picnic_site,picnic_table,playground,power_pole,power_tower,pylon,shower,slipway,swimming_area,toilets,trailhead,walking_junction,water_tower]
4376                 draw:   { icons: { visible: global.icon_visible_poi_landuse_e } }
4377
4378             # probaly difference with server, selectively show by zoom
4379             z15-always-show-but-server-show-later-z15-server-14:
4380                 filter: { kind: [ranger_station, spring], $zoom: { min: 15 } }             # server says min_zoom: 14
4381                 draw:   { icons: { visible: global.icon_visible_poi_landuse_e } }
4382             z17:
4383                 filter:
4384                     $zoom: { min: 17 }
4385                     kind: [parking]
4386                 draw: { icons: { visible: global.icon_visible_poi_landuse_e } }
4387             z18:
4388                 # for different styles, different sets
4389                 # since [picnic_site] doesn't have bubble-wrap icon, it's omitted here
4390                 filter:
4391                     $zoom: { min: 18 }                                     # same as BW, server at 17 now (information is 16)
4392                     kind: [drinking_water, information, playground, toilets, traffic_signals, picnic_site]
4393                 draw: { icons: { visible: global.icon_visible_poi_landuse_e } }
4394             z19:
4395                 filter:
4396                     $zoom: { min: 19 }                                     # same as BW, server at 17 now
4397                     kind: [bicycle_parking, gate]
4398                 draw: { icons: { visible: global.icon_visible_poi_landuse_e } }
4399
4400
4401             # area based show / hide
4402             playgrounds:
4403                 filter:
4404                     all:
4405                         - kind: [playground, allotments, attraction, landmark]
4406                     any:
4407                         - { $zoom: [15], area: { min: 600 } }
4408                         - { $zoom: [16], area: { min: 300 } }
4409                         - { $zoom: { min: 17, area: true } }
4410                 draw:
4411                     icons:
4412                         visible: global.icon_visible_poi_landuse_e
4413
4414             # special icon and text stuff
4415             sports-pitch:
4416                 filter:
4417                     $zoom: { min: 17 }
4418                     kind: [grass, pitch]
4419                     kind_detail: [baseball, basketball, football, hockey, soccer, tennis]
4420                 draw:
4421                     icons:
4422                         visible: global.icon_visible_poi_landuse_e
4423                         priority: 69
4424             tree:
4425                 filter: { kind: tree, $zoom: { min: 18 } }
4426                 draw:
4427                     icons:
4428                         # TODO: put tree icons behind the buildings
4429                         # See SF State University #20/37.72314/-122.47772
4430                         color: [0.145,0.745,0.643]
4431                         visible: global.icon_visible_poi_landuse_e
4432                 z18:
4433                     filter: { $zoom: [18] }
4434                     draw:
4435                         icons:
4436                             color: [0.459,0.765,0.722]
4437                             sprite: tree-s
4438             gate:
4439                 filter: { kind: gate, $zoom: { min: 19 } }
4440                 draw:
4441                     icons:
4442                         text:
4443                             text_source: function() { return 'gate'; }
4444             walking-or-bicycle_junction:
4445                 filter: { kind: [bicycle_junction, walking_junction] }
4446                 draw:
4447                     icons:
4448                         text:
4449                             text_source: ref
4450
4451             z-hide-z15:
4452                 filter:
4453                     $zoom: { max: 15 }
4454                     kind: [rest_area]
4455                 draw: { icons: { visible: false } }
4456
4457             outdoor-special-priority:
4458                 filter: { kind: [beacon,bicycle_junction,bicycle_repair_station,boat_storage,communications_tower,cross,dam,dune,egress,fee_station,fire_lookout,hazard,horse,life_ring,lifeguard_tower,petroleum_well,power_pole,power_tower,put_in_egress,putin,rapid,rest_area,rock,saddle,silo,sinkhole,stone,walking_junction,waste_disposal,water_point,water_well,watering_place,windmill] }
4459                 draw:
4460                     icons:
4461                         priority: 43
4462                         visible: global.icon_visible_poi_landuse_e
4463                 hide-early:
4464                     filter: { kind: [dam,recreation_track] }
4465                     draw:
4466                         icons:
4467                             priority: 50
4468                     early:
4469                         filter: { $zoom: { max: 15 } }
4470                         draw:
4471                             icons:
4472                                 visible: false
4473
4474
4475         # NOTE: all natural_* should only be in landuse layer
4476         suppress-icon-always:
4477             filter:
4478                 kind: [natural_forest, natural_park, natural_wood]
4479             draw:
4480                 icons:
4481                     size: 0px
4482                     priority: 100
4483                     text:
4484                         font:
4485                             fill: '#666'
4486                             family: global.text_font_family
4487                             style: italic
4488                             size: 11px
4489             # This should work, but doesn't. hmmm
4490             no-area:
4491                 filter:
4492                     area: false
4493                     $zoom: { max: 16 }
4494                 draw:
4495                     icons:
4496                         visible: false
4497
4498         # server problem: this should probably only have landuse layer label placements (not appear in pois layer)
4499         suppress-icon-z17:
4500             filter:
4501                 $zoom: { min: 17 }
4502                 kind: [common, grass, houseboat, pedestrian, railway, ship, wetland]
4503             draw:
4504                 icons:
4505                     size: 0px
4506                     #visible: false
4507                     text: { font: { style: italic } }
4508
4509         # the server should be setting better values here
4510         z-server-friend:
4511             hide-until-z12-any:
4512                 filter:
4513                     kind: [landmark, museum, prison]
4514                     $zoom: { max: 12 }
4515                 draw:
4516                     icons:
4517                         visible: false
4518             hide-until-z14-any:
4519                 filter:
4520                     kind: [natural_forest, natural_park, natural_wood]
4521                     $zoom: { max: 14 }
4522                 draw:
4523                     icons:
4524                         visible: false
4525             hide-until-z15-any:
4526                 filter:
4527                     kind: [motorway_junction]
4528                     $zoom: { max: 15 }
4529                 draw:
4530                     icons:
4531                         visible: false
4532             hide-until-z15-no-area:
4533                 filter:
4534                     area: false
4535                     $zoom: { max: 15 }
4536                     kind: [park]
4537                 draw:
4538                     icons:
4539                         visible: false
4540             hide-until-z15-with-area:
4541                 filter:
4542                     area: true
4543                     $zoom: { max: 15 }
4544                     kind: [nursing_home]
4545                 draw:
4546                     icons:
4547                         visible: false
4548             hide-until-z16-any:
4549                 filter:
4550                     kind: [fire_station, grass, tram_stop, post_office]
4551                     $zoom: { max: 16 }
4552                 draw:
4553                     icons:
4554                         visible: false
4555             hide-until-z16-no-area:
4556                 filter:
4557                     area: false
4558                     kind: [allotments, college, garden, university]
4559                     $zoom: { max: 16 }
4560                 draw:
4561                     icons:
4562                         visible: false
4563             # no POIs for commercial, residential
4564             hide-until-z17-any:
4565                 filter:
4566                     $zoom: { max: 17 }
4567                     kind: [bank, bus_stop, car_sharing, wood, platform, cafe, restaurant, fast_food, bar, place_of_worship, police]
4568                 draw:
4569                     icons:
4570                         visible: false
4571             hide-until-z17-with-area:
4572                 filter:
4573                     area: true
4574                     $zoom: { max: 17 }
4575                     kind: [common, grass, houseboat, pedestrian, pitch, railway, ship, wetland]
4576                 draw:
4577                     icons:
4578                         visible: false
4579             hide-until-z17-no-area:
4580                 filter:
4581                     area: false
4582                     $zoom: { max: 17 }
4583                     # note: atm and drinking_water appear hear and in area versions
4584                     kind: [accountant, administrative, advertising_agency, animal, 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, political_party, post_box, religion, research, subway_entrance, tax_advisor, telecommunication, telephone, theatre, therapist, toilets, traffic_signals, travel_agent, water_tower]
4585                 draw:
4586                     icons:
4587                         visible: false
4588             hide-until-z18-any:
4589                 filter:
4590                     kind: [atm, bus_stop, drinking_water]
4591                     $zoom: { max: 18 }
4592                 draw:
4593                     icons:
4594                         visible: false
4595             hide-until-z18-no-area:
4596                 filter:
4597                     $zoom: { max: 18 }
4598                     area: false
4599                     kind: [bench, parking, waste_basket]
4600                 draw:
4601                     icons:
4602                         visible: false
4603             hide-until-z19-any:
4604                 filter:
4605                     $zoom: { max: 19 }
4606                     kind: [bicycle_parking, burial_vault, car_sharing]
4607                 draw:
4608                     icons:
4609                         visible: false
4610
4611             # hide based on kind and area filters
4612             military-early:
4613                 filter:
4614                     kind: [military]
4615                     any:
4616                         # show labels for smaller landuse areas at higher zooms
4617                         - { $zoom: [8], area: { max: 50000000 } }
4618                 draw:
4619                     icons:
4620                         visible: false
4621             university-early:
4622                 filter:
4623                     kind: [university, college]
4624                     any:
4625                         # show labels for smaller landuse areas at higher zooms
4626                         - { $zoom: [11], area: { max: 2000000 } }
4627                         - { $zoom: [12], area: { max: 500000 } }
4628                 draw:
4629                     icons:
4630                         visible: false
4631             school-early:
4632                 filter:
4633                     kind: [school, kindergarten]
4634                     any:
4635                         # show labels for smaller landuse areas at higher zooms
4636                         - { $zoom: [13], area: { max: 100000 } }
4637                         - { $zoom: [14], area: { max: 50000 } }
4638                         - { $zoom: [15], area: { max: 10000 } }
4639                         - { $zoom: [16], area: { max: 5000 } }
4640                         - { $zoom: [17], area: { max: 2000 } }
4641                 draw:
4642                     icons:
4643                         visible: false
4644             garden-area-early:
4645                 filter:
4646                     kind: [garden, allotments]
4647                     any:
4648                         # limit show smaller landuse areas to higher zooms
4649                         - { $zoom: [12], area: { max: 500000 } }
4650                         - { $zoom: [13], area: { max: 100000 } }
4651                         - { $zoom: [14], area: { max: 10000 } }
4652                         - { $zoom: [15], area: { max: 5000 } }
4653                 draw:
4654                     icons:
4655                         visible: false
4656             cemetery-early:
4657                 filter:
4658                     kind: [cemetery]
4659                     # limit show smaller landuse areas to higher zooms
4660                     any:
4661                         - { $zoom: [12], area: { max: 3000000 } }
4662                 draw:
4663                     icons:
4664                         visible: false
4665             golf_course-early:
4666                 filter:
4667                     kind: golf_course
4668                     any:
4669                         - { $zoom: [12], area: { max: 2500000 } }
4670                 draw:
4671                     icons:
4672                         visible: false
4673             office-early:
4674                 filter:
4675                     - { kind: [insurance, office, company], $zoom: [15], area: { max: 10000 } }
4676                     - { kind: [insurance, office, company], $zoom: [16], area: { max: 5000 } }
4677                 draw:
4678                     icons:
4679                         visible: false
4680             landuse-labels-green-areas-not-national-park:
4681                 filter:
4682                     kind: [park, conservation, protected_area, nature_reserve, forest, grass]
4683                     any:
4684                     # show labels for smaller landuse areas at higher zooms
4685                     - { $zoom: { max: 6 }, area: true }
4686                     - { $zoom: [6],    area: { max: 5000000000 } }
4687                     - { $zoom: [7],    area: { max: 5000000000 } }
4688                     - { $zoom: [8],    area: { max: 1000000000 } }
4689                     - { $zoom: [9],    area: { max: 100000000 } }
4690                     - { $zoom: [10],   area: { max: 50000000 } }
4691                     - { $zoom: [11],   area: { max: 20000000 } }
4692                     - { $zoom: [12],   area: { max: 5000000 } }
4693                     - { $zoom: [13],   area: { max: 200000 } }
4694                     - { $zoom: [14],   area: { max: 50000 } }
4695                     - { $zoom: [15],   area: { max: 5000 } }
4696                     - { $zoom: [16],   area: { max: 1000 } }
4697                 draw:
4698                     icons:
4699                         visible: false
4700                 wilderness-areas-early:
4701                     filter: function() { return $zoom < 9 && feature.name && (feature.name.indexOf("Wilderness") > -1 || feature.name.indexOf("BLM") > -1 || feature.protect_class == '1' || feature.protect_class == '1a' || feature.protect_class == '1b' ); }
4702                     draw:
4703                         icons:
4704                             visible: false
4705                 not-national-park:
4706                     filter: function() { return feature.name && !((feature.name.indexOf("National Park") > -1) || feature.name.indexOf("National Monument") > -1); }
4707                     early:
4708                         filter: { $zoom: { max: 8 } }
4709                         draw:
4710                             icons:
4711                                 visible: false
4712             landuse-labels-not-any-above:
4713                 filter:
4714                     $zoom: { max: 6 }
4715                     not: { kind: [aerodrome, airport, allotments, aquarium, attraction, battlefield, beach, cemetery, college, conservation, forest, garden, glacier, golf_course, grass, kindergarten, landmark, maze, national_park, nature_reserve, park, playground, protected_area, resort, school, stadium, station, theme_park, university, winery, winter_sports, zoo] }
4716                 draw:
4717                     icons:
4718                         visible: false
4719             glacier:
4720                 filter: { $zoom: { max: 14 }, kind: glacier, area: false }
4721                 draw:
4722                     icons:
4723                         visible: false
4724
4725
4726         # set special priority, sprite, and text styles per kind
4727         # has-area:
4728         #     filter: { area: true }
4729         #     draw:
4730         #         icons:
4731         #             priority: 41
4732
4733         national-park-protected-areas:
4734             filter:
4735                 kind: national_park
4736             draw:
4737                 icons:
4738                     visible: global.icon_visible_landuse_green
4739                     size: global.icon_size_green
4740                     sprite: park
4741                     priority: 41
4742                     text:
4743                         visible: global.text_visible_landuse_green
4744                         font:
4745                             fill: global.text_fill_park
4746                             style: italic
4747             # large park icon
4748             # z14-parks:
4749             #     filter: { $zoom: { min: 14 } }
4750             #     draw:
4751             #         icons:
4752             #             sprite: park-l
4753             #             size: [[14,24px],[16,32px]]
4754         parks:
4755             filter:
4756                 - kind: [park, conservation, grass]
4757                 - { kind: protected_area, not: { protect_class: [6, '6'] } }
4758             draw:
4759                 icons:
4760                     visible: global.icon_visible_landuse_green
4761                     size: global.icon_size_green
4762                     sprite: park
4763                     priority: 41
4764                     text:
4765                         visible: global.text_visible_landuse_green
4766                         font:
4767                             fill: global.text_fill_park
4768                             style: italic
4769
4770             only-text-later:
4771                 filter: { kind: [grass], $zoom: { min: 16 } }
4772                 draw:
4773                     icons:
4774                         size: 0px
4775                         text:
4776                             font:
4777                                 style: italic
4778         forest:
4779             filter:
4780                 - kind: forest
4781                 - { kind: protected_area, protect_class: [6, '6'] }
4782             draw:
4783                 icons:
4784                     visible: global.icon_visible_landuse_green
4785                     size: global.icon_size_green
4786                     sprite: forest
4787                     priority: 41
4788                     text:
4789                         visible: global.text_visible_landuse_green
4790                         font:
4791                             fill: global.text_fill_park
4792                             style: italic
4793 #        wilderness-nature_reserve:
4794 #            filter:
4795 #                - kind: nature_reserve
4796 #            draw:
4797 #                icons:
4798 #                    visible: global.icon_visible_landuse_green
4799 #                    size: global.icon_size_green
4800 #                    sprite: forest
4801 #                    priority: 41
4802 #                    text:
4803 #                        visible: global.text_visible_landuse_green
4804 #                        font:
4805 #                            fill: global.text_fill_park
4806 #                            style: italic
4807
4808         beach:
4809             filter:
4810                 kind: [beach]
4811             draw:
4812                 icons:
4813                     visible: global.icon_visible_landuse_green
4814                     size: global.icon_size_green
4815                     text:
4816                         visible: global.text_visible_landuse_green
4817                         font:
4818                             fill: global.text_fill_beach
4819         airport:
4820             filter:
4821                 kind: [airport, aerodrome]
4822             draw:
4823                 icons:
4824                     visible: global.icon_visible_landuse_green
4825                     size: global.icon_size_green
4826                     priority: 42
4827                     text:
4828                         visible: global.text_visible_landuse_green
4829                         text_source: global.ux_language_text_source_iata
4830             early:
4831                 filter: { $zoom: [9,10,11] }
4832                 draw: { icons: { text: { text_source: iata } } }
4833             early2:
4834                 filter: { $zoom: { min: 12 } }
4835                 draw: { icons: { text: { font: { size: 11px } } } }
4836         enclosure-related:
4837             filter:
4838                 kind: [enclosure, animal]
4839             draw:
4840                 icons:
4841                     priority: 43
4842                     size: 0px
4843                     #: dot-black
4844                     text:
4845                         text_wrap: 10
4846                         font:
4847                             style: italic
4848                             weight: normal
4849         glacier:
4850             filter:
4851                 kind: glacier
4852             draw:
4853                 icons:
4854                     size: 0px
4855                     #visible: false
4856                     text:
4857                         visible: true
4858                         priority: 44
4859                         text_wrap: 10
4860                         font:
4861                             weight: normal
4862                             style: italic
4863                             fill: global.text_fill_park
4864
4865         # landuse-labels-not-any-above:
4866         #     filter:
4867         #         not: { kind: [aerodrome, airport, allotments, aquarium, attraction, battlefield, beach, cemetery, college, conservation, forest, garden, glacier, golf_course, grass, kindergarten, landmark, maze, national_park, nature_reserve, park, playground, protected_area, resort, school, stadium, station, theme_park, university, winery, winter_sports, zoo] }
4868         #     draw:
4869         #         icons:
4870         #             priority: 43
4871
4872         building-like:
4873             filter: { kind: [commercial,residential,warehouse,public,dormitory], osm_relation: false }
4874             draw:
4875                 icons:
4876                     sprite: building
4877
4878         station-train-subway:
4879             filter: { kind: [station, train_station] }
4880             draw:
4881                 icons:
4882                     visible: global.icon_visible_station
4883                     size: [[13, 12px], [14, 12px], [15, 16px], [17, 18px], [18, 20px]]
4884                     priority: 44
4885                     text:
4886                         visible: global.text_visible_station
4887             station-early:
4888                 filter:
4889                     $zoom: { max: 11 }
4890                 draw:
4891                     icons:
4892                         visible: false
4893             # for a transit style we'd want to see **all**, so don't move this above (it's special to this style)
4894             low-priority-early:
4895                 filter: { kind_tile_rank: { min: 5 }, $zoom: { min: 0, max: 13 } }
4896                 draw:
4897                     icons:
4898                         visible: false
4899             low-priority-early-z13:
4900                 filter: { kind_tile_rank: { min: 5 }, $zoom: [13] }
4901                 draw:
4902                     icons:
4903                         visible: false
4904             low-priority-early-z14:
4905                 filter: { kind_tile_rank: { min: 7 }, $zoom: [14] }
4906                 draw:
4907                     icons:
4908                         text: { visible: false }
4909
4910         tram-stop-early:
4911             filter: { kind: tram_stop, $zoom: { max: 15 } }
4912             draw:
4913                 icons:
4914                     visible: false
4915                     text:
4916                         visible: false
4917         tram-stop:
4918             filter: { kind: tram_stop, $zoom: { min: 15 } }
4919             draw:
4920                 icons:
4921                     size: [[16, 12px], [17, 18px]]
4922
4923         garden-no-area-early:
4924             filter: { kind: [garden, allotments], $zoom: [16], area: false }
4925             draw:
4926                 icons:
4927                     priority: 45
4928                     size: 14px
4929                     text:  { font: { size: 10px, style: italic } }
4930         garden-no-area-later:
4931             filter: { kind: [garden, allotments], $zoom: { min: 17 }, area: false }
4932             draw:
4933                 icons:
4934                     priority: 45
4935                     size: 16px
4936                     text:  { font: { size: 11px, style: italic } }
4937         gate:
4938             filter: { kind: gate, name: true  }
4939             draw: { icons: { sprite: generic } }
4940
4941         parking-labels:
4942             filter:
4943                 kind: [parking]
4944                 $zoom: { min: 18 }
4945             draw:
4946                 icons:
4947                     text:
4948                         visible: global.text_visible_poi_landuse
4949                         font:
4950                             size: 10px
4951         tower:
4952             filter: { kind: [tower], label_placement: true }
4953             draw:
4954                 icons:
4955                     size: 0px
4956                     #visible: false
4957                     text:
4958                         font:
4959                             style: italic
4960
4961         # TODO: this isn't working, should see small icons near the transbay terminal in SF
4962         bus_stop:
4963             filter:
4964                 kind: [bus_stop]
4965             draw:
4966                 icons:
4967                     size: 14px
4968                     text:
4969                         font:
4970                             size: 11px
4971                             weight: normal
4972             later:
4973                 filter: { $zoom: { max: 19 } }
4974                 draw:
4975                     icons:
4976                         text:
4977                             visible: false
4978
4979         airport-gate:
4980             filter: { kind: aeroway_gate }
4981             draw:
4982                 icons:
4983                     visible: false
4984                 text-blend-order:
4985                     visible: global.text_visible_airport_gate
4986                     text_source: ref
4987                     priority: 63
4988                     font:
4989                         fill: global.text_fill_exits
4990                         size: [[16,9px],[17,12px],[20,14px]]
4991             later:
4992                 filter: { $zoom: { min: 19 } }
4993                 draw:
4994                     icons:
4995                         text:
4996                             font:
4997                                 weight: 600
4998
4999         highway-exit:
5000             filter: { kind: motorway_junction, $zoom: { min: 16 } }
5001             draw:
5002                 icons:
5003                     visible: false
5004                 text-blend-order:
5005                     visible: global.text_visible_exits
5006                     text_source: ref
5007                     priority: 63
5008                     font:
5009                         fill: global.text_fill_exits
5010                         size: [[12,9px],[15,12px],[17,14px]]
5011                         stroke: { color: global.text_stroke, width: [[12,2px],[14,3px],[15,3px]] }
5012             later:
5013                 filter: { $zoom: { min: 16 } }
5014                 draw:
5015                     icons:
5016                         text:
5017                             font:
5018                                 weight: 600
5019
5020
5021     water-area-labels:
5022         data: { source: mapzen, layer: [water] }
5023         visible: global.text_visible_water_labels
5024         filter:
5025             all:
5026                 - name: true
5027                 - $geometry: point
5028                 - not: { kind: [riverbank, dock, playa] }
5029                 - area: true
5030             any:
5031                 # show labels for smaller landuse areas at higher zooms
5032                 - { $zoom: { min: 5 },  area: { min: 10000000000 } }
5033                 - { $zoom: { min: 6 },  area: { min: 5000000000 } }
5034                 - { $zoom: { min: 7 },  area: { min: 400000000 } }
5035                 - { $zoom: { min: 8 },  area: { min: 200000000 } }
5036                 - { $zoom: { min: 9 },  area: { min: 100000000 } }
5037                 - { $zoom: { min: 10 }, area: { min: 100000000 } }
5038                 - { $zoom: { min: 11 }, area: { min: 10000000 } }
5039                 - { $zoom: { min: 12 }, area: { min: 2000000 } }
5040                 - { $zoom: { min: 13 }, area: { min: 1000000 } }
5041                 - { $zoom: { min: 14 }, area: { min: 500000 } }
5042                 - { $zoom: { min: 15 }, area: { min: 100000 } }
5043                 - { $zoom: { min: 15 }, area: { min: 50000 } }
5044                 - { $zoom: { min: 16 }, area: { min: 20000 } }
5045                 - { $zoom: { min: 17 } }
5046         default-label-text:
5047             draw:
5048                 text-blend-order:
5049                     text_source: global.ux_language_text_source
5050                     font:
5051                         fill: global.text_fill_water
5052                         family: global.text_font_family
5053                         style: italic
5054                         weight: 400
5055                         size: 12px
5056                         # stroke: { color: [0.878,0.929,0.980], width: 2 }
5057         lakes-z5:
5058             filter: { $zoom: [5] }
5059             draw:
5060                 text-blend-order: { font: { size: 9px } }
5061         lakes-z6:
5062             filter: { $zoom: [6] }
5063             draw:
5064                 text-blend-order: { font: { size: 11px } }
5065         lakes-z8:
5066             filter: { $zoom: [8] }
5067             draw:
5068                 text-blend-order: { font: { size: 12px } }
5069
5070     ocean-sea-labels:
5071         data: { source: mapzen, layer: water }
5072         visible: global.text_visible_water_labels
5073         filter: { name: true, kind: [sea, ocean] }
5074         draw:
5075             text-blend-order:
5076                 text_source: global.ux_language_text_source
5077                 font:
5078                     fill: global.text_fill_water
5079                     family: global.text_font_family
5080                     weight: normal
5081                     size: 12px
5082                     transform: uppercase
5083         ocean-spacer:
5084             filter: { kind: ocean }
5085             ocean-spacer-z1-z4:
5086                 filter: { $zoom: { min: 1, max: 4 } }
5087                 draw:
5088                     text-blend-order:
5089                         text_source: global.ux_language_text_source_sea
5090                         text_wrap: false
5091             ocean-spacer-z4-up:
5092                 filter: { $zoom: { min: 4 } }
5093                 draw:
5094                     text-blend-order:
5095                         text_source: global.ux_language_text_source_ocean
5096                         text_wrap: false
5097         ocean-labels:
5098             draw:
5099                 text-blend-order:
5100                     font:
5101                         size: [[1,8px],[2,10px],[3,13px],[4,16px]]
5102
5103         sea-early:
5104             filter: { $zoom: [3], kind: sea }
5105             draw: { text-blend-order: { visible: false } }
5106         sea-spacer:
5107             filter: { not: { kind: [ocean] }, $zoom: { min: 4 } }
5108             draw:
5109                 text-blend-order:
5110                     text_source: global.ux_language_text_source_sea
5111                     text_wrap: false
5112
5113         sea-labels:
5114             filter: { not: { kind: [ocean] } }
5115             draw:
5116                 text-blend-order:
5117                     font:
5118                         fill: [0.350,0.350,0.350]
5119                         size: [[4,8px],[6,11px],[8,14px]]
5120
5121     earth-labels:
5122         data: { source: mapzen, layer: earth }
5123         filter: { name: true }
5124         draw:
5125             text-blend-order:
5126                 text_source: global.ux_language_text_source
5127         continent:
5128             filter: { kind: [continent], $zoom: {max: 5} }
5129             draw:
5130                 text-blend-order:
5131                     visible: global.text_visible_continent
5132                     text_source: global.ux_language_text_source_continent_stacked_only
5133                     text_wrap: false
5134                     font:
5135                         family: global.text_font_family
5136                         size: [[1,11px],[3,14px]]
5137                         style: italic
5138                         fill: global.text_fill
5139                         weight: normal
5140                         transform: uppercase
5141             continent-spacer:
5142                 filter: { $zoom: { min: 2 } }
5143                 draw:
5144                     text-blend-order:
5145                         text_source: global.ux_language_text_source_continent
5146         island:
5147             filter: { kind: [archipelago, island, islet] }
5148             draw:
5149                 text-blend-order:
5150                     visible: global.text_visible_island
5151                     text_wrap: 10
5152                     font:
5153                         family: global.text_font_family
5154                         size: 12px
5155                         style: italic
5156                         fill: global.text_fill
5157                         weight: normal
5158                         stroke: { color: global.text_stroke, width: 4 }
5159                         #transform: uppercase
5160
5161     landuse:
5162         data: { source: mapzen, layer: landuse }
5163         draw:
5164             terrain:
5165                 order: function() { return feature.sort_rank; }
5166                 visible: false
5167
5168         landuse-labels:
5169             filter:
5170                 all:
5171                     - label_placement: true
5172                     - name: true
5173             draw:
5174                 text-blend-order:
5175                     text_source: global.ux_language_text_source
5176                     interactive: global.interactive
5177                     move_into_tile: true
5178                     priority: 100
5179                     visible: global.text_visible_landuse_generic
5180                     font:
5181                         fill: '#666'
5182                         family: global.text_font_family
5183                         style: italic
5184                         size: 11px
5185                         stroke: { color: global.text_stroke_address, width: 1 }
5186
5187             show-with-icon:
5188                 filter: { kind: [allotments] }
5189                 draw:
5190                     text-blend-order:
5191                         visible: false
5192                     icons:
5193                         visible: global.icon_visible_poi_landuse
5194                         size: [[13, 18px], [16, 18px], [18, 22px]]
5195                         sprite: function() { return feature.kind; }
5196                         sprite_default: generic
5197                         interactive: global.interactive
5198                         priority: 65 #function() { return (feature.min_zoom && Math.floor(feature.min_zoom * 1000)) || 65; }
5199                         repeat_group: abc
5200                         buffer: 7px
5201                         text:
5202                             visible: global.text_visible_poi_landuse
5203                             text_source: global.ux_language_text_source
5204                             text_wrap: 18
5205                             max_lines: 3
5206                             font:
5207                                 family: global.text_font_family
5208                                 weight: 600
5209                                 fill: [0.10,0.10,0.10]
5210                                 size: [[13,10px],[14,10px],[18,11px]]
5211                                 stroke: { color: global.text_stroke, width: 3 }
5212         tier1:
5213             # filter:
5214             #     any:
5215             #         # limit show smaller landuse areas to higher zooms
5216             #         - { $zoom: { min: 3 },  area: { min: 300000000 } }
5217             #         - { $zoom: { min: 4 },  area: { min: 300000000 } }
5218             #         - { $zoom: { min: 5 },  area: { min: 150000000 } }
5219             #         - { $zoom: { min: 6 },  area: { min: 150000000 } }
5220             #         - { $zoom: { min: 7 },  area: { min: 100000000 } }
5221             #         - { $zoom: { min: 8 },  area: { min: 10000000 } }
5222             #         - { $zoom: { min: 9 },  area: { min: 5000000 } }
5223             #         - { $zoom: { min: 10 }, area: { min: 1000000 } }
5224             #         - { $zoom: { min: 11 }, area: { min: 500000 } }
5225             #         - { $zoom: { min: 12 }, area: { min: 500000 } }
5226             #         - { $zoom: { min: 13 }, area: { min: 100000 } }
5227             #         - { $zoom: { min: 14 }, area: { min: 50000 } }
5228             #         - { $zoom: { min: 15 }, area: { min: 20000 } }
5229             #         - { $zoom: { min: 15 }, area: { min: 2000 } }
5230             #         - { $zoom: { min: 16 } }
5231
5232             national_park:
5233                 filter:
5234                     all:
5235                         - kind: [national_park, battlefield, protected_area]
5236                     any:
5237                         - not: { operator: [ "United States Forest Service" ] }
5238                         - protect_class: ['2','3','5']
5239                 draw:
5240                     terrain:
5241                         interactive: false
5242                         color: [0.890,1.00,1.00]
5243                         # todo: what is this?
5244                         #order: 18
5245                         visible: true
5246                 us_national_park:
5247                     # yosemite national park, death valley national park, grand canyon national park
5248                     filter:
5249                         any:
5250                             - operator: [ "United States National Park Service" ]
5251                             - protect_class: ['2','3','5']
5252                     draw:
5253                         terrain:
5254                             visible: true
5255                             color: [0.890,1.00,1.00]
5256
5257         tier2:
5258             # filter:
5259             #     any:
5260             #         # limit show smaller landuse areas to higher zooms
5261             #         - { $zoom: { min: 4 },  area: { min: 1000000000 } }
5262             #         - { $zoom: { min: 5 },  area: { min: 1000000000 } }
5263             #         - { $zoom: { min: 6 },  area: { min: 150000000 } }
5264             #         - { $zoom: { min: 7 },  area: { min: 100000000 } }
5265             #         - { $zoom: { min: 8 },  area: { min: 10000000 } }
5266             #         - { $zoom: { min: 9 },  area: { min: 5000000 } }
5267             #         - { $zoom: { min: 10 }, area: { min: 1000000 } }
5268             #         - { $zoom: { min: 11 }, area: { min: 500000 } }
5269             #         - { $zoom: { min: 12 }, area: { min: 250000 } }
5270             #         - { $zoom: { min: 13 }, area: { min: 100000 } }
5271             #         - { $zoom: { min: 14 }, area: { min: 50000 } }
5272             #         - { $zoom: { min: 15 }, area: { min: 20000 } }
5273             #         - { $zoom: { min: 15 }, area: { min: 2000 } }
5274             #         - { $zoom: { min: 16 } }
5275
5276             # effectively wilderness
5277             conservation:
5278                 filter:
5279                     all:
5280                         - $zoom: { min: 4 }
5281                         - kind: [protected_area, nature_reserve, national_park]
5282                         - not: { protect_class: [2,3,5]}
5283                 draw:
5284                     terrain:
5285                         # color: [1.00,0.974,0.950]
5286                         color: [0.88,0.99,0.88]
5287                         visible: true
5288                     # outline:
5289                     #     style: lines
5290                     #     color: global.green6
5291                     #     width: [[9,0px],[10,2px],[12,4px]]
5292
5293             national_forest_level_6:
5294                 filter:
5295                     all:
5296                         - kind: forest
5297                     any:
5298                         - protect_class: ['6']
5299                         - operator: ['United States Forest Service']
5300                 draw:
5301                     terrain:
5302                         color: [0.945,0.995,0.945] #global.green7
5303                         visible: true
5304
5305             parks-and-national-forests-not-national-park:
5306                 filter:
5307                     all:
5308                         - $zoom: { min: 4 }
5309                         - kind: [park, national_park]
5310                     any:
5311                         - not: { operator: [ "United States National Park Service", "United States Forest Service" ] }
5312                         - not: { protect_class: ['2','3','5','6'] }
5313                 # default for national forests and more?
5314                 draw:
5315                     terrain:
5316                         color: [0.880,1.000,0.950]
5317                         visible: true
5318                 national_park:
5319                     #filter: function() { return feature.name && (feature.name.indexOf('National Park') > -1); }
5320                     filter:
5321                         all:
5322                             - kind: national_park
5323                             - not: [ protect_class: ['2','3','5','6'], operator: [ "United States National Park Service"] ]
5324                     draw:
5325                         terrain:
5326                             color: [0.890,1.00,1.00]
5327                             visible: true
5328
5329
5330             # gotta be a protected area to draw green, not just a landcover type
5331             farm:
5332                 filter:
5333                     kind: [farm, farmland]
5334                     $zoom: { min: 10}
5335                 draw:
5336                     polygons:
5337                         color: [1.00,1.00,1.00]
5338                         visible: global.green4_v
5339             forest:
5340                 filter: { kind: [forest, wood, natural_wood, natural_forest, natural_park], $zoom: { min: 10 }, not: { operator: [ "United States Forest Service"] } }
5341                 draw:
5342                     terrain:
5343                         color: [0.956,0.99,0.966]
5344                         visible: true
5345
5346             # nature_reserve:
5347             #     filter: { kind: nature_reserve, $zoom: { min: 7 } }
5348             #     draw:
5349             #         terrain-grid:
5350             #             order: function() { return feature.sort_rank; }
5351             #     wilderness-areas:
5352             #         filter: function() { return feature.name && feature.name.indexOf("Wilderness") > -1 }
5353             #         draw:
5354             #             terrain:
5355             #                 color: [0.890,0.973,0.886]
5356             #             # outline:
5357             #             #     style: lines
5358             #             #     color: red
5359             #             #     width: [[9,1px],[10,2px],[12,4px]]
5360
5361             # parks-and-national-forests-not-national-park:
5362             #     filter: { $zoom: { min: 4 }, kind: [park, national_park, "park or protected land", battlefield], not: { operator: [ "United States National Park Service", "US National Park Service" ] } }
5363             #     # default for national forests and more?
5364             #     draw:
5365             #         terrain:
5366             #             color: [0.880,1.000,0.950]
5367             #             # color: [0.850,1.000,0.938]
5368             #             # color: [0.860,0.993,1.000]
5369             #             # color: [0.915,0.995,0.995]
5370             #             visible: true
5371
5372
5373             # urban:
5374             #     filter: { kind: [urban, rural, residential] }
5375             #     visible: global.earth2_v
5376             #     draw:
5377             #         polygons:
5378             #             color: [1.00,1.00,1.00]
5379             #             visible: global.earth2_v
5380         tier3:
5381             # filter:
5382             #     any:
5383             #         # limit show smaller landuse areas to higher zooms
5384             #         - { $zoom: { min: 8 },  area: { min: 10000000 } }
5385             #         - { $zoom: { min: 9 },  area: { min: 5000000 } }
5386             #         - { $zoom: { min: 10 }, area: { min: 1000000 } }
5387             #         - { $zoom: { min: 11 }, area: { min: 500000 } }
5388             #         - { $zoom: { min: 12 }, area: { min: 500000 } }
5389             #         - { $zoom: { min: 13 }, area: { min: 100000 } }
5390             #         - { $zoom: { min: 14 }, area: { min: 50000 } }
5391             #         - { $zoom: { min: 15 }, area: { min: 20000 } }
5392             #         - { $zoom: { min: 15 }, area: { min: 2000 } }
5393             #         - { $zoom: { min: 16 } }
5394             airport:
5395                 filter:
5396                     kind: aerodrome
5397                 draw:
5398                     terrain:
5399                         color: global.gray-all
5400                         visible: global.purple_v
5401             military:
5402                 filter:
5403                     kind: military
5404                 draw:
5405                     terrain:
5406                         color: global.gray-all
5407                         visible: true
5408             university:
5409                 filter:
5410                     kind: [university, college]
5411                 draw:
5412                     terrain:
5413                         color: global.gray-all
5414                         visible: true
5415         tier4:
5416             # filter:
5417             #     any:
5418             #         # limit show smaller landuse areas to higher zooms
5419             #         - { $zoom: { min: 10 }, area: { min: 1000000 } }
5420             #         - { $zoom: { min: 11 }, area: { min: 500000 } }
5421             #         - { $zoom: { min: 12 }, area: { min: 500000 } }
5422             #         - { $zoom: { min: 13 }, area: { min: 100000 } }
5423             #         - { $zoom: { min: 14 }, area: { min: 50000 } }
5424             #         - { $zoom: { min: 15 }, area: { min: 20000 } }
5425             #         - { $zoom: { min: 15 }, area: { min: 2000 } }
5426             #         - { $zoom: { min: 16 } }
5427             cemetery:
5428                 filter:
5429                     kind: cemetery
5430                 draw:
5431                     terrain:
5432                         color: [0.982,1.000,0.960]
5433                         visible: true
5434             golf_course:
5435                 filter:
5436                     kind: golf_course
5437                 draw:
5438                     terrain:
5439                         color: [0.890,1.000,0.892]
5440                         # color: [0.840,1.000,0.907]
5441                         visible: true
5442             hospital:
5443                 filter:
5444                     kind: hospital
5445                 draw:
5446                     terrain:
5447                         color: [0.988,0.938,0.953]
5448                         visible: true
5449             industrial:
5450                 filter:
5451                     kind: industrial
5452                 draw:
5453                     terrain:
5454                         color: global.gray-all
5455                         visible: true
5456             power:
5457                 filter: { kind: [plant, generator, substation] }
5458                 draw:
5459                     terrain:
5460                         color: global.gray-all
5461                         visible: true
5462             railway:
5463                 filter:
5464                     kind: railway
5465                 draw:
5466                     terrain:
5467                         color: global.gray-all
5468                         visible: true
5469         # IGNORE THIS FOR NOW
5470         #     sports_centre:
5471         #         filter:
5472         #             kind: sports_centre
5473         #         draw:
5474         #             polygons:
5475         #                 color: [1.0,1.0,1.0]
5476             recreation_ground:
5477                 filter:
5478                     kind: recreation_ground
5479                 draw:
5480                     terrain:
5481                         color: [0.945,0.995,0.945]
5482                         visible: true
5483             stadium:
5484                 filter:
5485                     kind: stadium
5486                 draw:
5487                     terrain:
5488                         color: global.gray-all
5489                         visible: true
5490             zoo:
5491                 filter:
5492                     kind: [zoo, wildlife_park]
5493                 draw:
5494                     terrain:
5495                         color: [0.830,1.000,0.972]
5496                         visible: true
5497             winter_sports:
5498                 filter:
5499                     kind: winter_sports
5500                 draw:
5501                     terrain:
5502                         color: [1.0,1.0,1.0]
5503                         visible: global.grey8_v
5504             man-made:
5505                 filter: { kind: [pier,wastewater_plant,works,bridge,tower,breakwater,water_works,groyne,dike,cutline] }
5506                 draw:
5507                     terrain:
5508                         color: global.gray-all
5509                         visible: true
5510                 pier:
5511                     filter: { kind: [pier,bridge,breakwater,groyne,dike,cutline] }
5512                     draw:
5513                         terrain:
5514                             color: [1.000,0.973,0.930]
5515                             visible: true
5516             camp_site:
5517                 filter: { kind: camp_site }
5518                 draw:
5519                     terrain:
5520                         color: global.gray-all
5521                         visible: true
5522
5523         tier5:
5524             # filter:
5525             #     any:
5526             #         # limit show smaller landuse areas to higher zooms
5527             #         - { $zoom: { min: 10 }, area: { min: 1000000 } }
5528             #         - { $zoom: { min: 11 }, area: { min: 400000 } }
5529             #         - { $zoom: { min: 12 }, area: { min: 200000 } }
5530             #         - { $zoom: { min: 13 }, area: { min: 50000 } }
5531             #         - { $zoom: { min: 14 }, area: { min: 20000 } }
5532             #         - { $zoom: { min: 15 }, area: { min: 10000 } }
5533             #         - { $zoom: { min: 15 }, area: { min: 2000 } }
5534             #         - { $zoom: { min: 16 } }
5535             #     all:
5536             #         - kind:
5537             #             - theme_park
5538             #             - resort
5539             #             - aquarium
5540             #             - winery
5541             #             - maze
5542             #             - beach
5543             tourism-related:
5544                 filter:
5545                     kind:
5546                         - theme_park
5547                         - resort
5548                         - aquarium
5549                         - winery
5550                         - maze
5551                 draw:
5552                     terrain:
5553                         color: global.gray-all
5554                         visible: true
5555             beach:
5556                 filter:
5557                     kind: beach
5558                 draw:
5559                     terrain:
5560                         color: [1.000,0.953,0.900]
5561                         # color: [0.975,0.975,0.828]
5562                         visible: true
5563         tier6:
5564             # filter:
5565             #     any:
5566             #         # limit show smaller landuse areas to higher zooms
5567             #         - { $zoom: { min: 12 }, area: { min: 500000 } }
5568             #         - { $zoom: { min: 13 }, area: { min: 100000 } }
5569             #         - { $zoom: { min: 14 }, area: { min: 50000 } }
5570             #         - { $zoom: { min: 15 }, area: { min: 20000 } }
5571             #         - { $zoom: { min: 15 }, area: { min: 2000 } }
5572             #         - { $zoom: { min: 16 } }
5573             garden:
5574                 filter:
5575                     kind: [garden, allotments]
5576                 draw:
5577                     terrain:
5578                         color: [0.790,0.973,0.896]
5579                         visible: true
5580             parking:
5581                 filter:
5582                     all:
5583                         - kind: parking
5584                         - $zoom: { min: 14 }
5585                     any:
5586                         - { $zoom: { min: 14 }, area: { min: 10000 } }
5587                         - { $zoom: { min: 15 }, area: { min: 5000 } }
5588                 draw:
5589                     terrain:
5590                         color: global.gray-all
5591                         visible: global.grey1_v
5592                 early:
5593                     filter: { $zoom: { max: 15 } }
5594                     draw:
5595                         terrain:
5596                             color: [0.950,0.950,0.950]
5597                             visible: true
5598         pedestrian:
5599             filter:
5600                 kind: [pedestrian,common]
5601             draw:
5602                 terrain:
5603                     color: [0.945,0.995,0.945]
5604                     visible: global.grey1_v
5605             green-stuff:
5606                 filter:
5607                     surface: [grass]
5608                 draw:
5609                     terrain:
5610                         color: [0.791,0.953,0.883]
5611
5612         glacier:
5613             filter:
5614                 kind: glacier
5615             draw:
5616                 terrain:
5617                     color: [0.890,0.970,1.000]
5618                     # color: [0.975,0.975,0.828]
5619                     visible: true
5620
5621         minor_green_stuff:
5622             filter:
5623                 kind: [pitch, meadow, village_green, grass, farmland, playground]
5624             draw:
5625                 terrain:
5626                     color: [0.808,0.962,0.951]
5627                     visible: true
5628             farmland_friends:
5629                 filter: { kind: [farmland] }
5630                 draw:
5631                     terrain:
5632                         color: [0.965,0.996,0.965]
5633                         #visible: false
5634             meadow_friends:
5635                 filter: { kind: [meadow, grass] }
5636                 draw:
5637                     terrain:
5638                         color: [0.825,0.976,0.895]
5639             pitch_later:
5640                 filter: { kind: pitch, $zoom: { min: 17 } }
5641                 draw:
5642                     lines:
5643                         color: [0.526,0.809,0.752]
5644                         order: 500
5645                         width: 0.5m
5646
5647         wetland:
5648             filter:
5649                 kind: [wetland]
5650             draw:
5651                 terrain:
5652                     color: [0.930,0.973,0.980]
5653                     visible: true
5654         scrub:
5655             filter:
5656                 kind: [scrub]
5657             draw:
5658                 terrain:
5659                     color: [1.000,0.973,0.930]
5660                     # color: [0.975,0.975,0.828]
5661                     visible: true
5662             later:
5663                 filter: { $zoom: { min: 15 } }
5664                 draw:
5665                     lines:
5666                         color: blue
5667                         width: 0.5px
5668
5669         minor_other_stuff:
5670             filter:
5671                 kind: [scree, farmyard]
5672             draw:
5673                 terrain:
5674                     color: [1.000,0.953,0.900]
5675                     visible: true
5676             later:
5677                 filter: { $zoom: { min: 15 } }
5678                 draw:
5679                     lines:
5680                         color: red
5681                         width: 0.5px
5682
5683             place_of_worship:
5684                 filter:
5685                     kind: place_of_worship
5686                 draw:
5687                     terrain:
5688                         color: global.gray-all
5689                         visible: global.grey1_v
5690             playground:
5691                 filter:
5692                     kind: playground
5693                 draw:
5694                     terrain:
5695                         color: [0.795,1.000,0.955]
5696                         visible: true
5697             school:
5698                 filter:
5699                     kind: school
5700                 draw:
5701                     terrain:
5702                         color: global.gray-all
5703                         visible: true
5704
5705             minor-landuse:
5706                 filter:
5707                     kind:
5708                         - attraction
5709                         - artwork
5710                         - wilderness_hut
5711                         - hanami
5712                 draw:
5713                     terrain:
5714                         color: [0.795,1.000,0.955]
5715                         visible: true
5716
5717         # GO MELLOW
5718         # 18/41.19776/-8.68722
5719         tree_row:
5720             filter:
5721                 kind: tree_row
5722             draw:
5723                 lines:
5724                     order: 501 # function() { return feature.sort_rank; }
5725                     color: [0.602,0.860,0.722]
5726                     width: [[16,1px],[17,2px],[19,1.5m]]
5727                     visible: true
5728         # GO MELLOW
5729         # 20/37.76779/-122.40096
5730         hedge:
5731             filter:
5732                 kind: hedge
5733             draw:
5734                 lines:
5735                     order: 500 # function() { return feature.sort_rank; }
5736                     color: [0.602,0.860,0.722]
5737                     width: [[16,0.5px],[17,1px],[19,1m]]
5738                     visible: true
5739
5740     natural-overlay:
5741         data: { source: mapzen, layer: earth }
5742         filter: { kind: [cliff, arete, ridge, valley] }
5743         draw:
5744             lines:
5745                 order: 999
5746         #cliff:
5747 #            filter: { kind: cliff }
5748 #            draw:
5749 #                lines:
5750 #                    color: blue
5751 #                    width: 0.2px
5752 #                    order: 1001
5753         #arete:
5754 #            filter: { kind: arete }
5755 #            draw:
5756 #                lines:
5757 #                    color: red
5758 #                    width: 0.2px
5759 #                    order: 1000
5760         ridge_valley:
5761             filter: { kind: [ridge, valley] }
5762             draw:
5763                 lines:
5764                     visible: false
5765                 text-blend-order:
5766                     priority: 50
5767                     font:
5768                         fill: black
5769                         weight: 200
5770                         size: 10px
5771                         style: italic
5772                         stroke: { color: [0.894,0.906,0.914], width: 3 }
5773             ridge:
5774                 filter: { kind: ridge }
5775                 draw:
5776                     lines:
5777                         visible: false
5778                     text-blend-order:
5779                         font:
5780                             fill: black
5781                             weight: 200
5782                             size: 10px
5783                             style: italic
5784                             stroke: { color: [0.894,0.906,0.914], width: 3 }
5785
5786     path-overlay:
5787         data: { source: mapzen, layer: roads }
5788         filter:
5789             all:
5790                 - kind: path
5791             not:
5792                 - kind_detail: [pier]
5793         draw:
5794             lines:
5795                 color: [[11,[0.408,0.741,0.690]],[15,[0.131,0.667,0.575]]] #[11,[0.252,0.509,0.60]],[12,[0.120,0.600,0.520]]
5796             dashed_small:
5797                 color: [0.120,0.600,0.520]
5798             dots-lines:
5799                 color: [0.120,0.600,0.520]
5800                 # color: [0.257,0.520,0.802] ## added red
5801                 # color: [0.302,0.649,0.740] ## more blue
5802                 # color: [0.292,0.650,0.644] ## more green
5803                 # color: [0.416,0.750,0.746]
5804         # bigger path, sometimes paved (walk with friends side-by-side), also tracks that are no vehicles
5805         paths:
5806             filter:
5807                 any:
5808                     - kind_detail: path
5809                     - all:
5810                         - kind_detail: track
5811                         - motor_vehicle: no
5812             draw:
5813                 lines:
5814                     join: round
5815                     cap: round
5816                     color: [[13, [0.510,0.752,0.695]], [14,[0.412,0.710,0.665]], [15, [0.298,0.686,0.627]], [16, [0.860,1.000,0.977]], [17, [0.860,1.000,0.977]]]
5817                     width: [[13, 1px], [14, 1.1px], [15, 1.4px], [16, 0px], [17, 1px], [18, 1.75px], [19, 2.25px]]
5818                     order: 1003
5819                     outline:
5820                         color: [0.120,0.600,0.520]
5821                         width: [[15, 0px], [16, 0.8px], [17, 1.25px], [18, 2.5px]]
5822             networked:
5823                 filter: { walking_network: true }
5824                 draw:
5825                     lines:
5826                         width: [[12, 1px], [13, 1px], [14, 1.1px], [15, 1.5px], [16, 0px], [17, 1.5px], [18, 1.75px], [19, 2.25px]]
5827                     highlight:
5828                         order: 980
5829                         color: [[12,[1.000,1.000,0.870]],[15,[1.000,1.000,0.870]]]
5830                         width: [[12, 3px], [13, 4px], [14, 5px], [15, 6px], [16, 7px], [17, 10px], [18, 14px], [19, 16px]]
5831                         join: round
5832             no_name_early_not_designated:
5833                 filter: { name: false, $zoom: { max: 14 } }
5834                 draw:
5835                     lines:
5836                         width: [[0,1px]]
5837             in_zoo_golf_course:
5838                 filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments] }
5839                 draw:
5840                     lines:
5841                         width: [[13, 0.5px], [15, 0.65px], [16, 0px], [17, 1.5px], [18, 1.75px], [19, 2.25px]]
5842                 early:
5843                     filter: { $zoom: { max: 15 } }
5844                     draw:
5845                         lines:
5846                             visible: false
5847             labels-path:
5848                 #filter: { $zoom: { min: 17 } }
5849                 draw:
5850                     text-blend-order:
5851                         priority: 58
5852                         visible: global.text_visible_path
5853                         font:
5854                             fill: [0.143,0.544,0.481]
5855                             # fill: [0.256,0.570,0.565]
5856                             size: 12px
5857                             stroke: { color: global.text_stroke, width: 4 }
5858                 in_zoo_golf_course:
5859                     filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments], $zoom: { max: 15 } }
5860                     draw:
5861                         text-blend-order:
5862                             visible: false
5863
5864
5865         # single hiking path
5866         footway:
5867             filter: { kind_detail: [footway] }
5868             draw:
5869                 dots-lines:
5870                     order: 1002
5871                     color: [0.120,0.600,0.520]
5872                     #width: [[13, 0.75px], [14, 0.85px], [15, 1.1px], [16, 3px], [17, 6px], [18, 7px], [19, 10px]]
5873                     width: [[13, 0.75px], [14, 1px], [15, 3.5px], [16, 3px], [17, 4px], [18, 5px], [19, 8px]]
5874                     visible: true
5875                     #color: purple
5876                 lines:
5877                     order: 1000
5878                     #width: [[13, 0.75px], [14, 0.85px], [15, 1.1px], [16, 2px], [17, 6px], [18, 7px], [19, 10px]]
5879                     #color: [[15,[0.120,0.600,0.520]],[16,[0.623,0.820,0.797]]]
5880                     color: [[14,[0.510,0.752,0.695]],[15,[0.671,0.839,0.820]],[16,[0.671,0.839,0.820]]]
5881                     width: [[13, 0.75px], [14, 0.6px], [15, 1px], [16, 2px], [17, 3px], [18, 4px], [19, 4px]]
5882                     visible: true
5883                     #color: purple
5884                 dashed_small:
5885                     order: 1005
5886             early-show-as-lines-z14:
5887                 filter: { $zoom: { max: 15 } }
5888                 draw:
5889                     dots-lines:
5890                         visible: false
5891                     lines:
5892                         visible: true
5893             early-show-as-lines-z15:
5894                 filter: { $zoom: [15] }
5895                 draw:
5896                     dots-lines:
5897                         visible: true
5898                     lines:
5899                         visible: true
5900             networked:
5901                 filter: { walking_network: true }
5902                 draw:
5903                     lines:
5904                         #width: [[12, 0.75px], [13, 1px], [14, 1px], [15, 1.25px], [16, 0px], [17, 1.5px], [18, 1.75px], [19, 2.25px]]
5905                         width: [[13, 1.25px],[14, 1.4px],[15, 1.75px],[16, 2px], [17, 4px], [18, 5px], [19, 8px]]
5906                         #color: [[15,[0.120,0.600,0.520]],[16,[0.623,0.820,0.797]]]
5907                     highlight:
5908                         order: 980
5909                         color: [[12,[0.900,1.000,0.850]],[14,[0.930,1.000,0.850]],[15,[1.000,1.000,0.870]]]
5910                         width: [[12, 3px], [13, 4px], [14, 5px], [15, 6px], [16, 8px], [17, 10px], [18, 14px], [19, 16px]]
5911                         join: round
5912                 early:
5913                     filter: { $zoom: { max: 15 } }
5914                     draw:
5915                         lines:
5916                             color: [0.120,0.600,0.520]
5917             # de-emphasize less important trails at early zooms
5918             # where less important are trails without names, trails in less interesting landuse, or just early
5919             in_zoo_golf_course:
5920                 filter:
5921                     all:
5922                         - landuse_kind: [zoo, enclosure, petting_zoo, golf_course, garden, university, parking, pedestrian, attraction, residential, stadium, playground, allotments]
5923                         - $zoom: { max: 17 }
5924                 draw:
5925                     lines:
5926                         visible: true
5927                 early:
5928                     filter: { $zoom: { max: 16 } }
5929                     draw:
5930                         dots-lines:
5931                             visible: false
5932                 early-z15:
5933                     filter: { $zoom: { max: 16 } }
5934                     draw:
5935                         lines:
5936                             color: [0.120,0.600,0.520]
5937                             width: [[14,0.4px],[15,0.5px]]
5938                 garden-early:
5939                     filter: { kind: [garden] }
5940                     draw:
5941                         lines:
5942                             width: [[14,0.1px],[15,0.3px]]
5943             in_cemetery:
5944                 filter:
5945                     all:
5946                         - landuse_kind: [cemetery]
5947                 draw:
5948                     lines:
5949                         visible: true
5950                         color: [0.863,0.941,0.867]
5951                     dots-lines:
5952                         color: [0.510,0.752,0.695]
5953                 early:
5954                     filter: { $zoom: { max: 16 } }
5955                     draw:
5956                         dots-lines:
5957                             visible: false
5958                 early-z15:
5959                     filter: { $zoom: { max: 16 } }
5960                     draw:
5961                         lines:
5962                             color: [0.510,0.752,0.695]
5963                             width: [[14,0.25px],[15,0.5px]]
5964             sidewalk-crossing:
5965                 filter: { footway: [sidewalk, crossing], not: { walking_network: true } }
5966                 draw:
5967                     lines:
5968                         order: 350 # function() { return feature.sort_rank; }
5969                     dots-lines:
5970                         order: 351 # function() { return (feature.sort_rank + 1); }
5971                     dashed_small:
5972                         visible: false
5973                 early-z17:
5974                     filter: { $zoom: { max: 18 } }
5975                     draw:
5976                         lines:
5977                             visible: false
5978                         dots-lines:
5979                             visible: false
5980                 early-z17-lines:
5981                     filter: { $zoom: [17] }
5982                     draw:
5983                         lines:
5984                             visible: true
5985                             width: 1.5px
5986             labels-footpaths:
5987                 filter: { $zoom: { min: 15 } }
5988                 draw:
5989                     text-blend-order:
5990                         priority: 58
5991                         visible: global.text_visible_path
5992                         font:
5993                             fill: [0.143,0.544,0.481]
5994                             size: 12px
5995                             stroke: { color: global.text_stroke, width: 4 }
5996                 in_zoo_golf_course:
5997                     filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments], $zoom: { max: 15 } }
5998                     draw:
5999                         text-blend-order:
6000                             visible: false
6001
6002         cycleway_pedestrian:
6003             filter:
6004                 all:
6005                     - kind_detail: [cycleway, pedestrian]
6006                     - not: { kind_detail: [pedestrian], walking_network: true }
6007             draw:
6008                 lines:
6009 #                    color: blue #[0.120,0.600,0.520]
6010 #                    width: [[13, 1px], [14, 1.45px], [15, 1.1px], [16, 1.5px], [17, 2px], [18, 5px], [19, 6px]]
6011 #                    order: 1004
6012                     color: [[11,[0.120,0.600,0.520]],[14,[0.120,0.600,0.520]],[15,[1.00,1.00,1.00]]]
6013                     #width: [[11, 0.25px], [12, 0.35px], [13, 0.55px],[14,1px],[15,0px]]
6014                     width: [[13, 0.75px], [14, 1.1px], [15, 1.1px], [16, 1.5px], [17, 2.2px], [18, 5px], [19, 6px]]
6015                     # let roads sort themselves past zoom 14
6016                     order: 1004
6017                     outline:
6018                         color: [0.120,0.600,0.520]
6019                         width: [[11, 0px],[14, 0px],[15, 0.5px],[16, 1px]]
6020             networked:
6021                 filter: { walking_network: true }
6022                 draw:
6023                     lines:
6024                         color: [[11,[0.120,0.600,0.520]],[14,[0.120,0.600,0.520]],[15,[1.00,1.00,1.00]]]
6025                         width: [[13, 0.75px], [14, 1.1px], [15, 1.1px], [16, 1.5px], [17, 2.2px], [18, 5px], [19, 6px]]
6026                     highlight:
6027                         order: 980
6028                         color: [[12,[0.900,1.000,0.850]],[14,[0.930,1.000,0.850]],[15,[1.000,1.000,0.880]]]
6029                         width: [[12, 0px], [13, 4px], [14, 5px], [15, 7px], [16, 10px], [17, 12px], [18, 14px], [19, 16px]]
6030                         join: round
6031             late:
6032                 filter: { $zoom: { min: 15 } }
6033                 draw:
6034                     lines:
6035                         color: [1.00,1.00,1.00]#[0.145,0.745,0.643] #[[17,'#c8ecf7'],[18,'#a9d9e8']] #white
6036                         join: round
6037                         cap: round
6038                         outline:
6039                             #color: [0.120,0.600,0.520]
6040                             join: round
6041                             cap: round
6042                             width: [[15, 1px], [16, 1.5px], [17, 1.6px], [18, 2px], [19, 2px]]
6043                             order: 999
6044             labels-cycleway:
6045                 filter: { $zoom: { min: 14 } }
6046                 draw:
6047                     text-blend-order:
6048                         priority: 58
6049                         visible: global.text_visible_path
6050                         font:
6051                             fill: [0.120,0.600,0.520]
6052                             size: 12px
6053                             stroke: { color: global.text_stroke, width: 4 }
6054
6055     track-overlay:
6056         data: { source: mapzen, layer: roads }
6057         filter:
6058             all:
6059                 - kind: path
6060                 - kind_detail: [track]
6061                 - motor_vehicle: false
6062         draw:
6063             lines:
6064                 color: [[13,[0.773,0.705,0.605]],[14,[0.630,0.519,0.418]]]
6065                 # color: [0.756,0.563,0.499]
6066                 width: [[13, 0.6px], [14, 1px], [15, 1.1px], [16, 1.25px], [17, 1.5px], [18, 5px], [19, 6px]]
6067                 order: 990
6068         late:
6069             filter: { $zoom: { min: 16 } }
6070             draw:
6071                 lines:
6072                     color: white
6073                     join: round
6074                     cap: round
6075                     outline:
6076                         color: [0.630,0.519,0.418]
6077                         # color: [0.756,0.563,0.499]
6078                         join: round
6079                         cap: round
6080                         width: [[16, 1px], [17, 1.5px], [18, 2px], [19, 2px]]
6081                         order: 999
6082         in_zoo_golf_course:
6083             filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments] }
6084             draw:
6085                 lines:
6086                     width: [[13, 1px], [14, 1.45px], [15, 1.1px], [16, 1.5px], [17, 2px], [18, 5px], [19, 6px]]
6087             early:
6088                 filter: { $zoom: { max: 15 } }
6089                 draw:
6090                     lines:
6091                         visible: false
6092         networked:
6093             filter: { walking_network: true }
6094             draw:
6095                 lines:
6096                     width: [[13, 1px], [14, 1.2px], [15, 1.5px], [16, 1.25px], [17, 1.5px], [18, 3px], [19, 4px]]
6097                 highlight:
6098                     order: 980
6099                     color: [[12,[1.000,1.000,0.870]],[15,[1.000,1.000,0.870]]]
6100                     width: [[12, 2.5px], [13, 4px], [14, 5px], [15, 6px], [16, 8px], [17, 10px], [18, 14px], [19, 16px]]
6101                     join: round
6102             early:
6103                 filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments], $zoom: { max: 15 } }
6104                 draw:
6105                     lines:
6106                         visible: true
6107         labels-track:
6108             #filter: { $zoom: { min: 17 } }
6109             draw:
6110                 text-blend-order:
6111                     priority: 58
6112                     visible: global.text_visible_path
6113                     font:
6114                         fill: [0.536,0.451,0.378]
6115                         size: 12px
6116                         stroke: { color: global.text_stroke, width: 4 }
6117             in_zoo_golf_course-early:
6118                 filter: { landuse_kind: [zoo, golf_course, garden, university, cemetery, allotments], $zoom: { max: 15 } }
6119                 draw:
6120                     text-blend-order:
6121                         visible: false
6122     other-roads-no-motorvehicle-overlay:
6123         data: { source: mapzen, layer: roads }
6124         filter:
6125             all:
6126                 - not: { kind: [path,ferry] }
6127                 - motor_vehicle: no
6128         draw:
6129             lines:
6130                 color: [0.710,0.553,0.522]
6131                 width: [[11, 0.25px], [12, 0.35px], [13, 0.55px], [14, 1px], [15, 0px], [16, 1.5px], [17, 3px], [18, 3m]]
6132                 order: 990
6133         late:
6134             filter: { $zoom: { min: 15 } }
6135             draw:
6136                 lines:
6137                     color: [0.940,0.940,0.940]
6138                     join: round
6139                     cap: round
6140                     outline:
6141                         color: [0.710,0.553,0.522]
6142                         join: round
6143                         cap: round
6144                         width: [[15, 0.5px], [16, 1.25px], [17, 1.5px], [18, 1.5px], [19, 3px]]
6145                         order: 999
6146         labels-track:
6147             #filter: { $zoom: { min: 17 } }
6148             draw:
6149                 text-blend-order:
6150                     priority: 58
6151                     visible: global.text_visible_path
6152                     font:
6153                         fill: [0.536,0.451,0.378]
6154                         size: 12px
6155                         stroke: { color: global.text_stroke, width: 4 }
6156
6157
6158     other-roads-walking-network-only:
6159         data: { source: mapzen, layer: roads }
6160         filter:
6161             all:
6162                 - walking_network: true
6163                 - not:
6164                     any:
6165                         - { kind: [path,ferry], not: { kind_detail: pedestrian } }
6166                         #- motor_vehicle: [no,false]
6167                         - kind_detail: [track]
6168         draw:
6169             lines:
6170                 color: [0.120,0.600,0.520]
6171                 width: [[11, 0.25px], [12, 0.35px], [13, 0.55px], [14, 1px], [15, 0px], [16, 1px], [17, 6px], [18, 9m]]
6172                 order: 990
6173         double-lines:
6174             filter: { $zoom: { min: 16 } }
6175             draw:
6176                 lines:
6177                     color: [1.000,1.000,0.870]
6178                     width: [[15,0px],[16,1px],[17,4px],[18,6m]]
6179                     outline:
6180                         color: [0.120,0.600,0.520]
6181                         width: [[15, 0.5px],[16, 1.5px],[17, 1.5px],[18, 2.5px],[19, 1m]]
6182         the_network:
6183             draw:
6184                 lines:
6185                     width: [[13, 0.9px], [14, 1.2px], [15, 2.0px], [16, 1px], [17, 2px], [18, 6m]]
6186                 highlight:
6187                     order: 980
6188                     color: [[12,[0.900,1.000,0.850]],[14,[0.930,1.000,0.850]],[15,[1.000,1.000,0.870]]]
6189                     width: [[12, 3px], [13, 4px], [14, 5px], [15, 6px], [16, 10px], [17, 12px], [18, 14px], [19, 16px]]
6190                     join: round
6191         hide-most-till-mid-zooms:
6192             filter:
6193                 all:
6194                     - $zoom: { max: 12 }
6195                     - walking_network: [lwn,rwn]
6196             draw:
6197                 lines:
6198                     visible: false
6199                 highlight:
6200                     visible: false
6201
6202     transit-overlay-rail-lines:
6203         data: { source: mapzen, layer: transit }
6204         filter:
6205             all:
6206                 - not: { kind: [platform, railway] }
6207                 - function() { return global.sdk_transit_overlay; }
6208         draw:
6209             lines:
6210                 order: 499
6211                 color: purple
6212                 width: [[5,1.5px],[6,2px],[11,3px],[18,4px]]
6213                 outline:
6214                     color: [1.,1.,1.,.8]
6215                     width: [[7,0px],[8,0.25px],[9,0.5px],[12,1.0px],[13,1.75px],[14,2px]]
6216                     #width: [[12,1.0px],[13,1.75px],[14,2px]]
6217         train-sizing-color:
6218             filter: { kind: train }
6219             draw:
6220                 lines:
6221                     color: purple
6222                     width: [[5,1.0px],[6,1.0px],[7,1.25px],[11,2.0px],[13,2.5px],[18,3.5px]]
6223                     outline:
6224                         width: [[12,1.0px],[13,1.75px],[14,2px]]
6225             stack-below-other-transit-later-zooms:
6226                 filter: { $zoom: { min: 9 } }
6227                 draw:
6228                     lines:
6229                         order: 511
6230         subway-sizing:
6231             filter: { kind: subway }
6232             draw:
6233                 lines:
6234                     width: [[9,1px],[11,2px],[12,3px],[13,4px],[15,5px],[16,7px],[17,9px]]
6235                     outline:
6236                         #color: [[10,white],[11,black]]
6237                         width: [[9,0px],[10,0.5px],[12,1.25px],[13,1.5px],[15,2px]]
6238                         #width: [[12,1.5px],[13,2.0px],[14,2.5px]]
6239         light-rail-and-tram-sizing:
6240             filter: { kind: [light_rail, tram] }
6241             draw:
6242                 lines:
6243                     width: [[10,1px],[12,1.5px],[15,2px],[18,3.5px]]
6244                     outline:
6245                         #color: [[11,white],[12,black]]
6246                         width: [[12,0.25px],[13,0.5px],[14,1px],[16,2px]]
6247         has-data-color:
6248             filter: { colour: true }
6249             draw:
6250                 lines:
6251                     order: 510
6252                     width: [[9,2px],[11,3px],[12,4px]]
6253                     color: function() { return feature.colour || 'purple'; }
6254                     #outline:
6255                         #color: function() { if(feature.colour == 'silver') { return 'black'; } else { return [0.,0.,0.,.1]; } }
6256                         #width: [[12,1.0px],[13,1.75px],[14,2px]]
6257             train-with-color:
6258                 filter: { kind: train }
6259                 draw:
6260                     lines:
6261                         order: 514
6262             subway-with-color:
6263                 filter: { kind: subway }
6264                 draw:
6265                     lines:
6266                         order: 513
6267             light-rail-and-tram-with-color:
6268                 filter: { kind: [light_rail, tram] }
6269                 draw:
6270                     lines:
6271                         order: 512
6272         missing-colour:
6273             filter: { colour: false }
6274             train-missing-color:
6275                 filter: { kind: train, colour: false }
6276                 draw:
6277                     lines:
6278                         #width: [[5,1.25px],[6,1.75px],[11,2.0px],[13,2.5px],[18,2.5m]]
6279                         order: 506
6280             subway-missing-color:
6281                 filter: { kind: subway, colour: false }
6282                 draw:
6283                     lines:
6284                         order: 505
6285                         #outline:
6286 #                            width: [[12,1.5px],[13,2.0px],[14,2.5px]]
6287             light-rail-and-tram-missing-color:
6288                 filter: { kind: [light_rail, tram], colour: false }
6289                 draw:
6290                     lines:
6291                         order: 504
6292         labels-transit-lines:
6293             filter:
6294                 all:
6295                     - function() { return global.sdk_transit_overlay; }
6296                     - all:
6297                         - $zoom: { min: 13 }
6298                         - ref: true
6299             draw:
6300                 icons:
6301                     priority: 20
6302                     # you need to match any custom shield to the vector tile `network` values
6303                     sprite: function() { return ('sdk_shield-' + feature.ref.length + 'char'); }
6304                     sprite_default: sdk_shield_5char
6305                     color: function() { if ( feature.kind === 'train') { return 'purple' } else { return feature.colour || 'purple'; } }
6306                     # Size is specified below, and limited to 5 char in another filter
6307                     repeat_group: shields
6308                     repeat_distance: [[8,90px],[10,40px],[13,30px]]
6309                     placement: midpoint
6310                     placement_min_length_ratio:
6311                         - [8, 0.1]
6312                         - [9, 0.25]
6313                         - [10, 0.25]
6314                         - [11, 0.15]
6315                         - [12, 1]
6316                         - [13, 1.50]
6317                         - [14, 2.0]
6318                     cull_from_tile: true
6319 #                    visible: false
6320                     text:
6321                         offset: [0px, -0.5px]
6322                         repeat_distance: 200px
6323                         anchor: center
6324                         text_source: function() { if( feature.ref.length < 6 ) { return feature.ref; } else { return ''; } }
6325                         font:
6326                             family: Montserrat
6327                             fill: function() { if(feature.colour == 'yellow') { return '#555'; } else { return 'white'; } }
6328                             style: bold
6329                             size: [[7,7px],[12,8px],[16,11px]]
6330
6331             width_1char:
6332                 filter: function() { return (feature.ref.length === 1); }
6333                 draw:
6334                     icons:
6335                         size: [[6,[16px,16px]],[13,[18px,18px]],[16,[21px,21px]]]
6336             width_2char:
6337                 filter: function() { return (feature.ref.length === 2); }
6338                 draw:
6339                     icons:
6340                         size: [[6,[21px,16px]],[13,[24px,18px]],[16,[28px,21px]]]
6341             width_3char:
6342                 filter: function() { return (feature.ref.length === 3); }
6343                 draw:
6344                     icons:
6345                         size: [[6,[27px,16px]],[13,[31px,18px]],[16,[36px,21px]]]
6346             width_4char:
6347                 filter: function() { return (feature.ref.length === 4); }
6348                 draw:
6349                     icons:
6350                         size: [[6,[32px,16px]],[13,[36px,18px]],[16,[41px,21px]]]
6351                 # London sucks
6352                 early:
6353                     filter: { $zoom: { max: 14 } }
6354                     draw:
6355                         icons:
6356                             visible: false
6357             width_5char:
6358                 filter: function() { return (feature.ref.length === 5); }
6359                 draw:
6360                     icons:
6361                         size: [[6,[37px,16px]],[13,[41px,18px]],[16,[48px,21px]]]
6362                 # London sucks
6363                 early:
6364                     filter: { $zoom: { max: 14 } }
6365                     draw:
6366                         icons:
6367                             visible: false
6368             # this is kinda a hack
6369             width_longggggg:
6370                 filter: function() { return (feature.ref.length > 5); }
6371                 draw:
6372                     icons:
6373                         visible: false
6374
6375         z19-show-long-route-name:
6376                 filter:
6377                     all:
6378                         - function() { return global.sdk_transit_overlay; }
6379                         - $zoom: { min: 19 }
6380                 draw:
6381                     text:
6382                         font:
6383                             fill: black
6384                             style: italic
6385                             stroke: { color: white, width: 3px }
6386
6387 #    transit-bus-roads:
6388 #        data: { source: mapzen, layer: roads }
6389 #        filter: { is_bus_route: true }
6390 #        draw:
6391 #            lines:
6392 #                visible: global.sdk_transit_overlay
6393 #                interactive: false
6394 #                color: [[13,[0,0,1,0.5]],[15,blue]]
6395 #                width: [[11,0.5px],[12,0.8px],[16,1.25px],[18,1m]]
6396 #                # let roads sort themselves past zoom 14
6397 #                order: 488
6398 #                # but give them all the same outline
6399 #                outline:
6400 #                    order: 487
6401
6402     transit-overlay-station-labels:
6403         data: { source: mapzen, layer: [pois] }
6404         filter:
6405             kind: [station, tram_stop, bus_station, subway_entrance, halt, stop, platform, bus_stop, stop_position ]
6406             any:
6407                 - area: false
6408                   all:
6409                 - area: true
6410                   all:
6411                       - $geometry: point
6412                       - kind: true
6413         draw:
6414             icons:
6415                 visible: global.sdk_transit_overlay
6416                 size: [[13, 12px], [16, 16px], [19, 20px]]
6417                 interactive: global.interactive
6418                 priority: 15
6419                 text:
6420                     buffer: 4px
6421                     move_into_tile: false # preserves text alignment w/icons in JS
6422                     #anchor: bottom
6423                     #offset: [[13, [0, 6px]], [16, [0, 8px]], [19, [0, 10px]]] # offset tracks alongside icon size (half icon height)
6424                     interactive: global.interactive
6425                     priority: 16
6426                     font:
6427                         fill: black
6428                         weight: normal
6429                         size: 11px
6430                         stroke: { color: white, width: 3 }
6431         poi_labels-z14:
6432             filter: { $zoom: [14] }
6433             draw: { icons: { text: { font: { size: 11px } } } }
6434         poi_labels-z15:
6435             filter: { $zoom: [15,16,17] }
6436             draw: { icons: { text: { font: { size: 12px, stroke: { width: 2 } } } } }
6437         poi_labels-z18:
6438             filter: { $zoom: [18,19] }
6439             draw: { icons: { text: { font: { size: 12px, weight: 600, stroke: { width: 3 } } } } }
6440         poi_labels-z20-up:
6441             filter: { $zoom: { min: 20 } }
6442             draw: { icons: { text: { font: { size: 14px, weight: 600, stroke: { width: 3 }  } } } }
6443         station-train-subway:
6444             filter: { kind: [station, train-station, train_station] } #, $zoom: { min: 13 }
6445             draw:
6446                 icons:
6447                     sprite: train_station
6448                     size: [[13, 12px], [14, 14px], [15, 16px], [17, 20px]]
6449                     priority: 11
6450                     text:
6451                         #offset: [[13, [0, 6px]], [14, [0, 7px]],[15, [0, 8px]], [17, [0, 10px]]]
6452                         priority: 12
6453             low-priority-early:
6454                 filter: { kind_tile_rank: { min: 3 }, $zoom: { min: 0, max: 12 } }
6455                 draw:
6456                     icons:
6457                         size: [[12, 5px], [14, 6px], [15, 16px]]
6458                         text:
6459                             visible: false
6460                 long-tail:
6461                     filter: { kind_tile_rank: { min: 10 }, $zoom: [10] }
6462                     draw:
6463                         icons:
6464                             visible: false
6465             low-priority-early-z12:
6466                 filter: { kind_tile_rank: { min: 8 }, $zoom: [12] }
6467                 draw:
6468                     icons:
6469 #                        visible: false
6470                         size: [[12, 5px], [14, 6px], [15, 16px]]
6471                         text:
6472                             visible: false
6473             low-priority-early-z13:
6474                 filter: { kind_tile_rank: { min: 8 }, $zoom: [13] }
6475                 draw:
6476                     icons:
6477                         #visible: false
6478                         size: [[12, 8px], [14, 6px], [15, 16px]]
6479                         text:
6480                             visible: false
6481             low-priority-early-z14:
6482                 filter: { kind_tile_rank: { min: 7 }, $zoom: [14] }
6483                 draw:
6484                     icons:
6485                         size: [[12, 10px], [14, 11px], [15, 16px]]
6486                         #visible: false
6487                         text:
6488                             visible: false
6489             late:
6490                 filter: { $zoom: { min: 16 } }
6491                 draw:
6492                     icons:
6493                         text:
6494                             font:
6495                                 weight: 600
6496                                 size: 12px
6497         subway-early:
6498             filter: { is_subway: true, is_train: false, $zoom: { max: 12 } }
6499             draw:
6500                 icons:
6501                     visible: false
6502                     text:
6503                         visible: false
6504         halt-early:
6505             filter: { kind: [halt,stop], $zoom: { max: 15 } }
6506             draw:
6507                 icons:
6508                     size: [[15, 8px], [16, 18px]]
6509                     visible: global.sdk_transit_overlay
6510                     sprite: light_rail
6511                     text:
6512                         visible: false
6513         platform-early:
6514             filter: { kind: [platform] }
6515             draw:
6516                 icons:
6517                     size: [[15, 8px], [16, 18px]]
6518                     visible: global.sdk_transit_overlay
6519                     sprite: generic
6520                     text:
6521                         visible: false
6522         tram-stop-early:
6523             filter: { kind: [tram_stop], $zoom: { max: 16 } }
6524             draw:
6525                 icons:
6526                     size: [[13, 0px], [14, 7px], [15, 8px]]
6527                     visible: global.sdk_transit_overlay
6528                     sprite: light_rail
6529                     text:
6530                         visible: false
6531         tram-stop:
6532             filter: { kind: tram_stop, $zoom: { min: 16 } }
6533             draw:
6534                 icons:
6535                     size: [[16, 12px], [17, 14px], [18, 18px]]
6536                     sprite: light_rail
6537                     #text:
6538                         #offset: [[13, [0, 6px]], [16, [0, 9px]]]
6539         bus-like-labels:
6540             filter:
6541                 kind: [platform, stop_position]
6542             draw:
6543                 icons:
6544                     size: [[13, 8px], [16, 10px], [17, 12px], [18, 18px]]
6545                     sprite: bus_station
6546                     text:
6547                         interactive: global.interactive
6548                         font:
6549                             fill: black
6550                             size: 12px
6551                             stroke: { color: white, width: 4 }
6552         bus-station-labels:
6553             filter:
6554                 kind: [bus_station, bus_stop]
6555                 $zoom: { min: 16 }
6556             draw:
6557                 icons:
6558                     size: [[13, 12px], [16, 18px]]
6559                     sprite: bus_station
6560                     priority: 17
6561                     text:
6562                         interactive: global.interactive
6563                         priority: 18
6564                         font:
6565                             fill: black
6566                             size: 12px
6567                             stroke: { color: white, width: 4 }
6568             bus_stop:
6569                 filter:
6570                     kind: [bus_stop]
6571                     $zoom: { max: 19 }
6572                 draw:
6573                     icons:
6574                         size: [[13, 8px], [19, 18px]]
6575                         text:
6576                             visible: false
6577         subway-entrance:
6578             filter:
6579                 kind: [subway_entrance]
6580             draw:
6581                 icons:
6582                     sprite: subway_entrance
6583                     size: [[17, 12px], [19, 14px]]
6584                     priority: 19
6585                     text:
6586                         #offset: [[17, [0, 6px]], [19, [0, 7px]]] # offset tracks alongside icon size (half icon height)
6587                         priority: 20
6588                         interactive: global.interactive
6589                         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"; } }
6590                         font:
6591                             fill: black
6592                             size: 12px
6593                             stroke: { color: white, width: 4 }
6594
6595 #    transit-platforms:
6596 #        data: { source: mapzen, layer: transit }
6597 #        filter: { kind: platform, $zoom: { min: 15 }, $geometry: [polygon,line] }
6598 #        draw:
6599 #            lines:
6600 #                visible: global.sdk_transit_overlay
6601 #                color: '#bc8f96'
6602 #                width: 10m          # something fishy here with the #include syntax in v0.7 tangram?
6603 #                order: 1000         # this selection should sort above basemap, but grey Zinc color still applies
6604 #                outline:
6605 #                    order: 1002
6606 #            polygons:
6607 #                visible: global.sdk_transit_overlay
6608 #                order: 1001
6609 #        polygon_geom:
6610 #            filter: { $geometry: polygon }
6611 #            draw:
6612 #                polygons:
6613 #                    color: '#bc8f96'
6614 #                    outline:
6615 #                        color: '#bc8f96'
6616 #                        width: [[15,0px],[16,0.5px],[17,1px],[19,2px]]
6617 #                lines:
6618 #                    visible: false