/*
 * This file is part of OsmInEdit, released under ISC license (see LICENSE.md)
 *
 * Copyright (c) Adrien Pavie 2019
 * Copyright (c) Daimler AG 2019
 *
 * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 */

meta {
	title: 'OsmInEdit indoor map stylesheet';
}

/****************************************************************************
 * Labels
 */

*[name],
*[ref] {
	font-family: Arial;
	font-size: 12;
	font-weight: bold;
	text-color: black;
	text-offset: 6; /** Half of the font-size **/
}

line[name],
line[ref] {
	text-position: line;
}


/****************************************************************************
 * Default rules
 */

node, way {
	symbol-size: 24;
	color: #8EBEFF;
	opacity: 1;
	fill-color: white;
	fill-opacity: 0.7;
}

line {
	color: #8EBEFF;
	opacity: 1;
}

relation[type=multipolygon] way {
	width: 0;
	opacity: 0;
}


/****************************************************************************
 * Indoor structures
 */

/*
 * Labelled features
 */

*[indoor][ref],
*[buildingpart][ref],
*[room][ref] {
	text: ref;
}

*[indoor][name],
*[buildingpart][name],
*[room][name],
*[public_transport=platform][name],
*[railway=platform][name],
area[highway][name],
relation[type=multipolygon][highway][name] {
	text: name;
}


/*
 * Surface of objects
 */

/** Rooms **/
area[indoor=room],
area[buildingpart=room],
area[room],
relation[type=multipolygon][indoor=room],
relation[type=multipolygon][buildingpart=room],
relation[type=multipolygon][room] {
	fill-color: #E0E0E0;
	fill-opacity: 0.5;
	z-index: -5;
}

/** Walls **/
area[indoor=wall][area=yes],
relation[type=multipolygon][indoor=wall] {
	fill-color: #444444;
	fill-opacity: 0.9;
	z-index: -2;
}

/** Areas (travelling spaces) **/
area[indoor=~/area|corridor|level/],
area[buildingpart=~/corridor|hall/],
area[room=~/corridor|hall|entry|gallery|collection|entrance/],
area[highway=~/pedestrian|footway|corridor/],
area[railway=platform],
area[public_transport=platform],
area[shop=mall],
relation[type=multipolygon][indoor=~/area|corridor|level/],
relation[type=multipolygon][buildingpart=~/corridor|hall/],
relation[type=multipolygon][room=~/corridor|hall|entry|gallery|collection|entrance/],
relation[type=multipolygon][highway=~/pedestrian|footway|corridor/],
relation[type=multipolygon][railway=platform],
relation[type=multipolygon][public_transport=platform],
relation[type=multipolygon][shop=mall] {
	fill-color: #EEEEEE;
	fill-opacity: 0.5;
	z-index: -6;
}

/** Restricted room/areas **/
area[indoor=~/room|area|corridor/][access=~/private|no/],
area[buildingpart][access=~/private|no/],
area[room=technical],
relation[type=multipolygon][indoor=~/room|area|corridor/][access=~/private|no/],
relation[type=multipolygon][buildingpart][access=~/private|no/],
relation[type=multipolygon][room=technical]{
	fill-color: #A2A2A2;
}


/*
 * Walls of objects
 */

/** Hard wall **/
area[indoor=room],
area[buildingpart=~/room|hall/],
area[room],
*[indoor=column],
*[indoor=wall],
area[building],
area[building:part],
relation[type=multipolygon][indoor=~/room|corridor/],
relation[type=multipolygon][buildingpart=~/room|corridor|hall/],
relation[type=multipolygon][room],
relation[type=multipolygon][building],
relation[type=multipolygon][building:part] {
	color: #444444;
	opacity: 1;
	width: 7;
}

/** No wall **/
area[indoor=~/area|corridor/],
area[buildingpart=corridor],
area[railway=platform],
area[public_transport=platform],
area[indoor=level],
area[highway=~/pedestrian|footway|corridor/],
relation[type=multipolygon][indoor=~/area|corridor/],
relation[type=multipolygon][railway=platform],
relation[type=multipolygon][public_transport=platform],
relation[type=multipolygon][indoor=level],
relation[type=multipolygon][highway=~/pedestrian|footway|corridor/] {
	color: #AAAAAA;
	opacity: 1;
	width: 0.5;
}

/** Pillars **/
*[indoor=column],
*[man_made=pillar],
*[building:part=column] {
	fill-color: #999999;
	fill-opacity: 0.5;
}


/*
 * Room/area icons
 */
area[room],
area[area][area!=yes],
relation[type=multipolygon][room],
relation[type=multipolygon][area][area!=yes] {
	icon-image-aliases: '"amphitheatre": "auditorium", "reception": "administration", "refectory": "restaurant", "checkroom": "locker"';
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
}

area[room],
relation[type=multipolygon][room] {
	icon-image: url('room_$[room].png');
}

area[area][area!=yes],
relation[type=multipolygon][area][area!=yes] {
	icon-image: url('room_$[area].png');
}


/*
 * Doors
 */

node[door][door!=no],
node[entrance] {
	color: #003F05;
	fill-color: #00AB0D;
	opacity: 1;
	fill-opacity: 1;
	width: 5;
	symbol-size: 14;
}

line[door][door!=no],
line[entrance] {
	color: #006804;
	opacity: 1;
	width: 12;
	linecap: none;
}

/** Passages **/
node[door=no] {
	color: #AAAAAA;
	fill-color: #EEEEEE;
	opacity: 1;
	width: 1;
	symbol-size: 14;
	icon-opacity: 0;
}

line[door=no] {
	color: #AAAAAA;
	fill-color: #EEEEEE;
	opacity: 1;
	width: 12;
	linecap: none;
	icon-opacity: 0;
}


/*
 * Vertical passages
 */

/** General definition **/
area[buildingpart=verticalpassage],
area[buildingpart:verticalpassage],
area[room=~/stairs|escalator/],
area[indoor=elevator],
area[highway=~/elevator|lift|steps/],
area[stairs=yes] {
	color: #7495DA;
	fill-color: #AEBDDA;
	opacity: 1;
	fill-opacity: 0.5;
	width: 2.5;
	z-index: -1;
}

/** Icons **/
*[buildingpart=verticalpassage],
*[buildingpart:verticalpassage],
*[room=~/stairs|escalator/],
*[indoor=elevator],
*[highway=elevator],
*[stairs=yes] {
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
}

*[buildingpart:verticalpassage=elevator],
*[indoor=elevator],
*[highway=~/elevator|lift/] {
	icon-image: url('highway_elevator.png');
}

*[buildingpart:verticalpassage=stairway],
*[room=stairs],
*[stairs=yes],
area[highway=steps] {
	icon-image: url('highway_steps.png');
}

*[buildingpart:verticalpassage=escalator],
*[room=escalator],
*[conveying=yes],
area[conveying=~/yes|forward|backward|reversible/] {
	icon-image: url('passage_escalator.png');
}

/** Emergency stairs **/
area[buildingpart=verticalpassage][access=emergency],
area[room=stairs][access=emergency],
area[stairs=yes][access=emergency] {
	color: #009262;
	fill-color: #C0FFCB;
	icon-image: url('emergency_stairs.png');
}


/*
 * Building delimitation
 */

area[building],
area[building:part],
relation[type=multipolygon][building],
relation[type=multipolygon][building:part] {
	fill-color: #D4CACA;
	fill-opacity: 0.6;
	z-index: -10;
	width: 5;
	color: #8F5467;
}

/** Gradins **/
area[building:part=tier],
relation[type=multipolygon][building:part=tier] {
	color: #B4ADB3;
	opacity: 1;
	width: 1;
	fill-color: #BABABA;
	fill-opacity: 0.5;
	z-index: -4;
}


/****************************************************************************
 * Road objects
 */

line[highway] {
	color: #9E8747;
	opacity: 1;
	width: 10;
	linecap: none;
}

line[highway=footway] {
	color: #C97582;
	dashes: 10,3;
}

line[highway=steps] {
	color: #5B8D62;
	dashes: 8,3;
}

/** Escalator **/
line[conveying=~/yes|forward|backward|reversible/] {
	color: #848484;
	dashes: 8,3;
}

line[conveying=~/yes|forward|backward|reversible/][highway!=footway] {
	icon-image: url('passage_escalator.png');
}


/****************************************************************************
 * Barriers
 */

*[barrier] {
	icon-image: url('barrier_$[barrier].png');
	color: #5B5B5B;
	opacity: 1;
	fill-opacity: 0.5;
	fill-color: #5B5B5B;
	linecap: none;
}

node[barrier] {
	fill-color: white;
	fill-opacity: 0.7;
}

line[barrier] {
	width: 6;
	icon-image: none;
}

*[barrier=hedge] {
	color: #8CD16E;
}

*[barrier=shelf] {
	color: #DBA0A0;
	fill-color: #DBA0A0;
}


/****************************************************************************
 * Railway
 */

way[railway=~/rail|subway|light_rail|monorail|narrow_gauge|tram/] {
	color: #888888;
	opacity: 1;
	width: 15;
	linecap: none;
	dashes: 5,5;
}

*[railway=~/platform|subway_entrance/] {
	icon-image: url('railway_$[railway].png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
}

node[railway] {
	color: #888888;
}


/****************************************************************************
 * Aeroways
 */

*[aeroway] {
	icon-image: url('aeroway_$[aeroway].png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
}

node[aeroway] {
	color: #0092DA;
}


/****************************************************************************
 * Labels
 */

*[name][amenity] {
	text-color: #3E3E3E;
}

*[name][shop] {
	text-color: #AC39AC;
}

*[name][tourism] {
	text-color: #0099E4;
}


/****************************************************************************
 * Public transport objects
 */

*[highway=bus_stop] {
	icon-image: url('highway_bus_stop.png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
	color: #0092DA;
}


/****************************************************************************
 * Amenities
 */

/** All amenities **/
*[amenity][amenity!=showcase] {
	fill-color: #FFDAAD;
	opacity: 1;
	fill-opacity: 0.5;
	icon-image: url('amenity_$[amenity].png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
	text: name;
}

node[amenity] {
	color: #734A08;
	fill-opacity: 0.8;
	fill-color: white;
}

/** Comfort amenities **/
*[amenity=toilets],
*[public_transport=waiting_area],
*[room=waiting],
*[area=waiting] {
	fill-color: #E3C8E3;
}

/** Small amenities **/
*[amenity=~/atm|photo_booth|post_box|piano|telephone|parking_space/] {
	color: #FFBA66;
}

/** Large, landuse-like, amenities **/
area[amenity=~/school|college|university|hospital|parking/],
area[leisure=sports_centre],
area[public_transport=station] {
	z-index: -9;
}

/** Independant amenities **/
*[amenity=~/parking|parking_space|taxi|bus_station|shelter/] {
	color: #E0BF96;
	width: 1;
}

/** Parking for disabled people **/
*[amenity=parking_space][wheelchair=yes],
*[amenity=parking_space][capacity:disabled] {
	icon-image: url('parking_disabled.png');
}

/** Toilets **/
*[amenity=toilets][female=~/yes|only|designated/][!male],
*[amenity=toilets][female=~/yes|only|designated/][male=no] {
	icon-image: url('amenity_toilets_women.png');
}

*[amenity=toilets][male=~/yes|only|designated/][!female],
*[amenity=toilets][male=~/yes|only|designated/][female=no] {
	icon-image: url('amenity_toilets_men.png');
}

*[amenity=toilets][wheelchair=~/yes|only|designated/] {
	icon-image: url('amenity_toilets_disabled.png');
}


/****************************************************************************
 * Shops
 */

*[shop] {
	icon-image: url('shop_$[shop].png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
	opacity: 1;
	text: name;
}

node[shop] {
	color: #AC39AC;
}

*[shop][!name][brand] {
	text: brand;
}

area[shop] {
	fill-color: #FFDAAD;
	fill-opacity: 0.5;
}

/** Store departements **/
*[department] {
	fill-color: #FFCFCC;
	color: #D29494;
	fill-opacity: 0.5;
	z-index: -4;
	opacity: 1;
	width: 0.5;
}


/****************************************************************************
 * Tourism-related objects
 */

*[tourism=~/aquarium|artwork|attraction|gallery|hostel|hotel|motel|museum/],
*[information=~/office|map/] {
	icon-image: url('tourism_$[tourism].png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
	color: #BF9962;
	fill-color: #FFF6AD;
	opacity: 1;
	fill-opacity: 0.5;
	text: name;
}

/** Glass cabinet **/
*[indoor=glass_cabinet] {
	color: #A2CCC8;
	fill-color: #E3F3F5;
	opacity: 1;
	fill-opacity: 0.5;
	width: 2;
	z-index: -1;
}

/** Showcase **/
*[amenity=showcase] {
	color: #A2CCC8;
	fill-color: #A2CCC8;
	opacity: 1;
	fill-opacity: 0.5;
	width: 2;
	z-index: -1;
}

/** Historic elements **/
*[historic] {
	text: name;
}

node[historic] {
	color: #8E7409;
}

way[historic],
relation[type=multipolygon][historic] {
	color: #C0B0A2;
	opacity: 0.5;
	width: 0.5;
	fill-color: #C0B0A2;
	z-index: -1;
}

*[historic=tomb] {
	icon-image: url('historic_tomb.png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
}

*[historic=artifact] {
	icon-image: url('tourism_archaeological.png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
}

/** Grass **/
area[landuse=grass],
relation[type=multipolygon][landuse=grass] {
	opacity: 0;
	width: 0;
	fill-color: #CFECA8;
	fill-opacity: 0.5;
	z-index: -1;
}


/****************************************************************************
 * Craft/office
 */

*[craft] {
	color: #FFDAAD;
	fill-color: #FFDAAD;
	fill-opacity: 0.5;
}

*[office] {
	color: #299CEA;
	fill-color: #299CEA;
	fill-opacity: 0.5;
}



/****************************************************************************
 * Railway
 */

*[railway=buffer_stop] {
	icon-image: url('railway_$[railway].png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
}


/****************************************************************************
 * Emergency
 */

*[emergency] {
	icon-image: url('emergency_$[emergency].png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
}

node[emergency] {
	color: #FA0032;
}


/****************************************************************************
 * Man made
 */

*[man_made=~/surveillance|lamp|street_lamp/] {
	icon-image: url('man_made_$[man_made].png');
	icon-image-aliases: '"street_lamp": "lamp"';
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
}

/****************************************************************************
 * Natural
 */

*[natural=~/tree/] {
	icon-image: url('natural_$[natural].png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
}

way[natural] {
	color: #1E6B00;
	width: 5;
}

node[natural] {
	color: #1F6C02;
}

/****************************************************************************
 * Signaletics
 */

*[advertising] {
	color: #5B5B5B;
	opacity: 1;
	icon-image: url('pub_$[advertising].png');
	icon-image-aliases: '"sign": "poster_box", "wall_painting": "poster_box"';
}

*[advertising=billboard][support=pole] {
	icon-image: url('pub_$[advertising]_$[support].png');
}

*[pole=landmark_sign] {
	icon-image: url('pole_landmark_sign.png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
	text: ref;
}

*[highway=milestone] {
	icon-image: url('poi_point_of_interest.png');
	icon-width: 16;
	icon-height: 16;
	icon-opacity: 1;
	text: name;
}

*:active {
	color: red;
	fill-color: red;
}