4b86d2e7a15ce20860da4f59d178d75ee9ecda8b
[potlatch2.git] / resources / potlatch.css
1 /*
2
3         Stylesheet that mimicks, to a certain extent, potlatch 1.x
4         Andy Allan, November 2009
5
6         Based heavily on:
7         MapCSS demonstration stylesheet
8         Richard Fairhurst, October 2009
9         
10 */
11
12 /* This rule applies to all areas (closed ways). Note that rules are applied in the order
13   they appear in the file, so later rules may replace this one for some ways.
14   This is used as a debugger for finding unstyled areas; it's obviously oversimplistic since
15   it picks up closed-loop highways. */
16
17 /* way :area { color: red; width: 1; fill-color: red; fill-opacity: 0.5; } */
18
19 /* A set of fairly standard rules.
20   We use z-index to make sure high-priority roads appear above minor ones.
21   The default z-index is 5. If an object matches multiple rules with the same
22   z-index then the rules are "merged" (but individual properties become one or the other)  */
23
24 way[highway=motorway],way[highway=motorway_link],
25 way[highway=trunk],way[highway=trunk_link],
26 way[highway=primary],way[highway=primary_link],
27 way[highway=secondary],way[highway=secondary_link],
28 way[highway=tertiary],way[highway=tertiary_link],
29 way[highway=residential]                             { text: name; text-color: black; font-size: 10; text-position: line; text-halo-color: white; text-halo-radius: 2; }
30 way[highway=motorway],way[highway=motorway_link]    { z-index: 9; color: #809BC0; width: 7; casing-color: black; casing-width: 8; }
31 way[highway=trunk],way[highway=trunk_link]          { z-index: 9; color: #7FC97F; width: 7; casing-color: black; casing-width: 8; }
32 way[highway=primary],way[highway=primary_link]      { z-index: 8; color: #E46D71; width: 7; casing-color: black; casing-width: 8; }
33 way[highway=secondary],way[highway=secondary_link]  { z-index: 7; color: #FDBF6F; width: 7; casing-width: 8; }
34 way[highway=tertiary],way[highway=unclassified]     { z-index: 6; color: #FEFECB; width: 5; casing-width: 7; }
35 way[highway=residential]                            { z-index: 5; color: #E8E8E8; width: 5; casing-color: gray; casing-width: 7; }
36 way[highway=service][service!=parking_aisle]        { color: white; width: 3; casing-color: gray; casing-width: 5; }
37 way[highway=service][service=parking_aisle]         { color: white; width: 1; casing-color: #aaaaaa; casing-width: 2; }
38
39 /* Pedestrian precincts need to be treated carefully. Only closed-loops with an explicit
40 area=yes tag should be filled. The below doesn't yet work as intended. */
41 way[highway=pedestrian] !:area { color: #ddddee; width: 5; casing-color: #555555; casing-width: 6; casing-dashes: 2,4;}
42 way[highway=pedestrian] :area  { color: #555555; width: 1; fill-color: #ddddee; fill-opacity: 0.8; }
43
44 way[highway=steps]     { color: #FF6644; width: 2; dashes: 4, 2; }
45 way[highway=footway]   { color: #FF6644; width: 2; dashes: 6, 3; }
46 way[highway=footway][bicycle=yes]   { z-index: 4; color: Blue; width: 1; }
47 way[highway=bridleway] { z-index:9; color: #996644; width: 2; dashes: 4, 2, 2, 2; }
48 way[highway=track]     { color: #996644; width: 2; dashes: 4, 2; }
49 way[highway=path]      { color: brown; width: 2; dashes: 2, 2; }
50 way[highway=cycleway]  { color: Blue; width: 2; dashes: 4, 2; text:name; text-color: black; text-position: offset; text-offset: 3;}
51 way[railway=tram]      {z-index: 11; color: #999999; width: 2; casing-color: black; casing-width: 6; }
52
53 way[waterway=river], way[waterway=canal] { color: blue; width: 2; text:name; text-color:blue; font-size:9; text-position: offset; text-offset: 7;}
54 way[waterway=drain][tunnel!=yes] {color: blue; width: 1; text:name; text-color: blue; text-position: offset; text-offset: 3;}
55
56 way[barrier] {color: #000000; width: 1}
57
58 /*add node[power=pylon] etc when there's an icon */
59 way[power=line] {color: darkgrey; width: 1; dashes: 12,2; }
60 way[power=minor_line] {color: grey; width: 1; dashes: 2,4; }
61 way[power=station] :area { color: black; fill-color: grey; fill-opacity: 0.6;} /* fill-color not used? */
62
63 way[golf=hole] {color: darkgreen; width: 5; casing-color: green; casing-width: 10; }
64
65 /* Fills can be solid colour or bitmap images */
66
67
68 way[natural] :area                          { color: #ADD6A5; width: 1; fill-color: #ADD6A5; fill-opacity: 0.2; }
69 way[natural=beach] :area                    { color: #ffdd44; width: 1; fill-color: yellow; fill-opacity: 0.4; }
70 way[landuse] :area                          { color: #444444; width: 2; fill-color: #444444; fill-opacity: 0.3; }
71 way[amenity],way[shop] :area                { color: #ADCEB5; width: 1; fill-color: #ADCEB5; fill-opacity: 0.2; }
72 way[leisure],way[sport] :area               { color: #8CD6B5; width: 1; fill-color: #8CD6B5; fill-opacity: 0.2; }
73 way[tourism] :area                          { color: #F7CECE; width: 1; fill-color: #F7CECE; fill-opacity: 0.2; }
74 way[historic],way[ruins] :area              { color: #F7F7DE; width: 1; fill-color: #F7F7DE; fill-opacity: 0.2; }
75 way[military] :area                         { color: #D6D6D6; width: 1; fill-color: #D6D6D6; fill-opacity: 0.2; }
76 way[building] :area                         { color: #ff6ec7; width: 1; fill-color: #ff6ec7; fill-opacity: 0.2; }
77 way[natural=water],
78 way[waterway] :area               { color: blue;    width: 2; fill-color: blue;    fill-opacity: 0.2; }
79 way[landuse=forest],way[natural=wood] :area { color: green;   width: 2; fill-color: green;   fill-opacity: 0.2; }
80 way[leisure=park]  :area                    { color: #44ff44; width: 1; fill-color: #44ff44; fill-opacity: 0.2; }
81 way[leisure=pitch] :area                                        { z-index: 6; color: #88bb44; width: 2; fill-color: #88ff44; fill-opacity: 0.6; }
82 way[landuse=recreation_ground] :area        { color: green; fill-color: green; }
83 way[amenity=parking] :area                  { color: gray;    width: 1; fill-color: gray;    fill-opacity: 0.2; }
84 way[public_transport=pay_scale_area] :area  { color: gray;    width: 1; fill-color: gray;    fill-opacity: 0.1; }
85
86 way[man_made=pier]                                                      { z-index: 4; color: #777; width: 3; casing-color: black; casing-width: 5;}
87 way[man_made=pier][floating=yes]                        { dashes: 4,2; casing-color: #444;}
88 way[leisure=marina] :area                                       { color: pink; fill-color: pink; fill-opacity: 0.4;}
89 way[leisure=slipway]                                            { color: grey; width: 3; casing-color: blue; casing-width: 7; }
90
91
92 /* Addressing. Nodes with addresses *and* match POIs should have a poi icon, so we put addressing first */ 
93
94 node[addr:housenumber],
95 node[addr:housename] { icon-image: circle; icon-width: 4; color: #B0E0E6; casing-color:blue; casing-width: 1; }
96 way[addr:interpolation] { color: #B0E0E6; width: 3; dashes: 3,3;}
97
98 /* POIs, too, can have bitmap icons - they can even be transparent */
99 node[place] { icon-image: icons/place.png; text-offset: 17; font-family: DejaVu; text: name; font-size: 9; font-weight: bold; text-decoration: underline; z-index: 20; }
100 node[amenity=telephone] { icon-image: icons/telephone.png; z-index: 20; }
101 node[barrier=cattle_grid] { icon-image: icons/cattle_grid.png; z-index: 20; }
102
103 node[tourism=guesthouse] { icon-image: icons/accommodation_bed_and_breakfast.n.16.png; z-index: 20; }
104 node[tourism=alpine_hut] { icon-image: icons/accommodation_alpinehut.n.16.png; z-index: 20; }
105 node[tourism=camp_site] { icon-image: icons/accommodation_camping.n.16.png; z-index: 20; }
106 node[tourism=caravan_site] { icon-image: icons/accommodation_caravan_park.n.16.png; z-index: 20; }
107 node[tourism=guest_house],node[tourism=bed_and_breakfast] { icon-image: icons/accommodation_bed_and_breakfast.n.16.png; z-index: 20; }
108 node[tourism=hotel] { icon-image: icons/accommodation_hotel.n.16.png; text-offset:15; text: name; z-index: 20; }
109 node[tourism=hostel] { icon-image: icons/accommodation_youth_hostel.n.16.png; z-index: 20; }
110 node[amenity=fire_station] { icon-image: icons/amenity_firestation2.n.16.png; z-index: 20; }
111 node[amenity=police] { icon-image: icons/amenity_police2.n.16.png; z-index: 20; }
112 node[amenity=post_box] { icon-image: icons/amenity_post_box.n.16.png; z-index: 20; }
113 node[amenity=recycling] { icon-image: icons/amenity_recycling.n.16.png; z-index: 20; }
114 node[barrier=bollard] { icon-image: icons/barrier_bollard.n.16.png; z-index: 20; }
115 node[barrier=gate], node[highway=gate] { icon-image: icons/barrier_gate.n.16.png; z-index: 20; }
116 node[barrier=stile], node[highway=stile] { icon-image: icons/barrier_stile.n.16.png; z-index: 20; }
117 node[barrier=toll_booth] { icon-image: icons/barrier_toll_booth.n.16.png; z-index: 20; }
118 node[barrier=lift_gate] { icon-image: icons/barrier_lift_gate.n.16.png; z-index: 20; }
119 node[barrier=kissing_gate] { icon-image: icons/barrier_kissing_gate.16.png; z-index: 20; }
120 node[barrier=cycle_barrier] { icon-image: icons/barrier_cycle_barrier.16.png; z-index: 20; }
121 node[barrier=block] { icon-image: icons/barrier_blocks.16.png; z-index: 20; }
122 node[barrier=cattle_grid] { icon-image: icons/barrier_cattle_grid.16.png; z-index: 20; }
123 node[amenity=school] { icon-image: icons/education_school.n.16.png; text-offset:15; text: name; z-index: 20; }
124 way[amenity=school] :area { color: yellow; fill-color: yellow;}
125 node[amenity=bar] { icon-image: icons/food_bar.n.16.png; text-offset:15; text: name; z-index: 20; }
126 node[amenity=cafe] { icon-image: icons/food_cafe.n.16.png; text-offset:15; text: name; z-index: 20; }
127 node[amenity=fast_food] { icon-image: icons/food_fastfood.n.16.png; z-index: 20; }
128 node[amenity=pub] { icon-image: icons/food_pub.n.16.png; text-offset:15; text: name; z-index: 20; }
129 node[amenity=restaurant] { icon-image: icons/food_restaurant.n.16.png; text-offset:15; text: name; z-index: 20; }
130 node[amenity=hospital] { icon-image: icons/health_hospital.n.16.png; z-index: 20; }
131 node[amenity=pharmacy] { icon-image: icons/health_pharmacy.n.16.png; z-index: 20; }
132 node[amenity=atm] { icon-image: icons/money_atm.n.16.png; z-index: 20; }
133 node[amenity=bank] { icon-image: icons/money_bank2.n.16.png; z-index: 20; }
134 node[shop=alcohol] { icon-image: icons/shopping_alcohol.n.16.png; z-index: 20; }
135 node[shop=bakery] { icon-image: icons/shopping_bakery.n.16.png; z-index: 20; }
136 node[shop=bicycle] { icon-image: icons/shopping_bicycle.n.16.png; z-index: 20; }
137 node[shop=book] { icon-image: icons/shopping_book.n.16.png; z-index: 20; }
138 node[shop=butcher] { icon-image: icons/shopping_butcher.n.16.png; z-index: 20; }
139 node[shop=car_repair] { icon-image: icons/shopping_car_repair.n.16.png; z-index: 20; }
140 node[shop=car] { icon-image: icons/shopping_car.n.16.png; z-index: 20; }
141 node[shop=clothes] { icon-image: icons/shopping_clothes.n.16.png; z-index: 20; }
142 node[shop=confectionery] { icon-image: icons/shopping_confectionery.n.16.png; z-index: 20; }
143 node[shop=convenience] { icon-image: icons/shopping_convenience.n.16.png; z-index: 20; }
144 node[shop=doityourself] { icon-image: icons/shopping_diy.n.16.png; z-index: 20; }
145 node[shop=fishmonger] { icon-image: icons/shopping_fish.n.16.png; z-index: 20; }
146 node[shop=garden_centre] { icon-image: icons/shopping_garden_centre.n.16.png; z-index: 20; }
147 node[shop=gift] { icon-image: icons/shopping_gift.n.16.png; z-index: 20; }
148 node[shop=greengrocer] { icon-image: icons/shopping_greengrocer.n.16.png; z-index: 20; }
149 node[shop=hairdresser] { icon-image: icons/shopping_hairdresser.n.16.png; z-index: 20; }
150 node[shop=hifi] { icon-image: icons/shopping_hifi.n.16.png; z-index: 20; }
151 node[shop=jewelry] { icon-image: icons/shopping_jewelry.n.16.png; z-index: 20; }
152 node[shop=laundry] { icon-image: icons/shopping_laundrette.n.16.png; z-index: 20; }
153 node[shop=motorcycle] { icon-image: icons/shopping_motorcycle.n.16.png; z-index: 20; }
154 node[shop=music] { icon-image: icons/shopping_music.n.16.png; z-index: 20; }
155 node[shop=supermarket] { icon-image: icons/shopping_supermarket.n.16.png; z-index: 20; }
156 node[historic=archaeological_site] { icon-image: icons/tourist_archaeological.n.16.png; z-index: 20; }
157 node[historic=battlefield] { icon-image: icons/tourist_battlefield.n.16.png; z-index: 20; }
158 node[historic=castle] { icon-image: icons/tourist_castle.n.16.png; text-offset:15; text: name; z-index: 20; }
159 node[amenity=cinema] { icon-image: icons/tourist_cinema.n.16.png; z-index: 20; }
160 node[historic=memorial] { icon-image: icons/tourist_memorial.n.16.png; text-offset:15; text: name; z-index: 20; }
161 node[historic=monument] { icon-image: icons/tourist_monument.n.16.png; text-offset:15; text: name; z-index: 20; }
162 node[tourism=museum] { icon-image: icons/tourist_museum.n.16.png; text-offset:15; text: name; z-index: 20; }
163 node[tourism=picnic_site] { icon-image: icons/tourist_picnic.n.16.png; z-index: 20; }
164 node[historic=ruin] { icon-image: icons/tourist_ruin.n.16.png; z-index: 20; }
165 node[amenity=theatre] { icon-image: icons/tourist_theatre.n.16.png; z-index: 20; }
166 node[tourism=viewpoint] { icon-image: icons/tourist_view_point.n.16.png; z-index: 20; }
167 node[tourism=zoo] { icon-image: icons/tourist_zoo.n.16.png; z-index: 20; }
168 node[aeroway=aerodrome] { icon-image: icons/transport_aerodrome.n.16.png; z-index: 20; }
169 node[amenity=bus_station] { icon-image: icons/transport_bus_station.n.16.png; z-index: 20; }
170 node[highway=bus_stop] { icon-image: icons/transport_bus_stop2.n.16.png; z-index: 20; }
171 node[amenity=fuel] { icon-image: icons/transport_fuel.n.16.png; z-index: 20; }
172 node[amenity=bicycle_parking] { icon-image: icons/transport_parking_bicycle.n.16.png; text-offset: 15; text: capacity; z-index: 20; }
173 node[amenity=parking] { icon-image: icons/transport_parking_car.n.16.png; z-index: 20; }
174 node[amenity=ferry_terminal] { icon-image: icons/transport_port.n.16.png; z-index: 20; }
175 node[amenity=bicycle_rental] { icon-image: icons/transport_rental_bicycle.n.16.png; z-index: 20; }
176 node[amenity=car_rental] { icon-image: icons/transport_rental_car.n.16.png; z-index: 20; }
177 node[amenity=taxi] { icon-image: icons/transport_taxi_rank.n.16.png; z-index: 20; }
178 node[railway=station] { icon-image: icons/transport_train_station.n.16.png; text-offset:15; text: name; z-index: 20; }
179 node[railway=tram_stop] { icon-image: icons/transport_tram_stop.n.16.png; z-index: 20; }
180 node[leisure=marina] { icon-image: icons/transport_marina.n.16.png; z-index: 20; }
181
182 way[leisure=sports_centre] :area { color: #66ddcc; fill-color: #66ddcc; }
183
184
185 /* We can stack styles at different z-index (depth) */
186
187 way[railway=rail]
188         { z-index: 6; color: black; width: 5; } 
189         { z-index: 7; color: white; width: 3; dashes: 12,12; }
190 way[railway=platform] { color:black; width: 2; }
191 way[railway=subway]
192         { z-index: 6; color: #444444; width: 5; }
193         { z-index: 7; color: white; width: 3; dashes: 8,8; }
194
195 /* Bridge */
196 way[bridge=yes], way[bridge=viaduct], way[bridge=suspension]
197     { z-index: 4; color: white; width: eval('_width+3'); }
198     { z-index: 3; color: black; width: eval('_width+6'); }
199     
200 /* Tunnel */
201 way[tunnel=yes]
202     { z-index: 4; color: white; width: eval('_width+2'); }
203     { z-index: 3; color: black; width: eval('_width+6'); dashes: 4,4; }
204
205 /* Oneway */
206 way[oneway=yes] { z-index: 15; color: #444444; width: 2; dashes: 15,35; line-style: arrows; }
207
208 way[access=private],way[access=no] { z-index: 10; color: red; width: eval('_width+8'); dashes: 2,15;}
209 way[access=permissive] { z-index: 10; color: green; width: eval('_width+6'); dashes: 1,7;}
210
211
212 /* Change the road colour based on dynamically set "highlighted" tag (see earlier) */
213
214 way .highlighted { color: pink; }
215
216 /* Interactive editors may choose different behaviour when a user mouses-over or selects
217    an object. Potlatch 2 supports these but the stand-alone Halcyon viewer does not */
218
219 way :hover      { z-index: 2; width: eval('_width+10'); color: #ffff99; }
220 way :selected { z-index: 2; width: eval('_width+10'); color: yellow; opacity: 0.7;}
221 way :restrictfrom { z-index: -1; width: eval('_width+10'); color: red; opacity: 0.7;}
222 way :restrictto { z-index: -1; width: eval('_width+10'); color: blue; opacity: 0.7;}
223 way !:drawn { z-index:10; width: 0.5; color: gray; } 
224
225 relation[type=restriction] node { z-index:11; icon-image: icons/restriction.png; }
226
227
228 node :hoverway { z-index: 9; icon-image: square; icon-width: 7; color: blue; }
229 node !:drawn :poi { z-index: 2; icon-image: circle; icon-width: 4; color: green; casing-color: black; casing-width: 1; }
230 node !:drawn :hasTags { z-index: 9; icon-image: circle; icon-width: 4; color: black; }
231 node :hasTags :selectedway { z-index: 9; icon-image: square; icon-width: 8; color: black; }
232 node !:drawn :selectedway { z-index: 9; icon-image: square; icon-width: 8; color: red; casing-color: #cc0000; casing-width: 1;}
233 node :selected { z-index: 1; icon-image: square; icon-width: eval('_width+10'); color: yellow; interactive: no; }
234 node :junction :selectedway { z-index: 8; icon-image: square; icon-width: 12; casing-color: black; casing-width: 1; }
235         
236 /* Descendant selectors provide an easy way to style relations: this example means "any way
237    which is part of a relation whose type=route". */
238
239 relation[type=route] way { z-index: 1; width: 13; color: blue; opacity: 0.3; }
240 relation[type=route][route=bicycle][network=ncn] way { z-index: 1; width: 12; color: red; opacity: 0.3; }
241 relation[type=route][route=bicycle][network=rcn] way { z-index: 1; width: 12; color: cyan; opacity: 0.3; }
242 relation[type=route][route=bicycle][network=lcn] way { z-index: 1; width: 12; color: blue; opacity: 0.3; }
243 relation[type=route][route=foot] way { z-index: 1; width: 10; color: #80ff80; opacity: 0.6; }
244
245