/* 
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
.open-close {
	background-color: #D5D5D5;
	padding: 3px 5px;
	border-top-left-radius: 5px;
	border-top-right-radius: 5px;
	height: 20;
	cursor: pointer;
}

.ot-hide > .open-close {
	pointer-events: none;
}

.ot-hide .glyphicon {
	pointer-events: auto;
	filter: alpha(opacity=100);
	/*color: black;*/
}

#ot_menu {
	height: 170px;
	/*bottom: 0px;*/
	/*left: 3%;*/
	/*position: fixed;*/
	background-color: #fff;
	z-index: 1000;
	width: 200px;
	border-radius: 5px;
}

.ot-show > .open-close {
	pointer-events: none;
}

.ot-show .glyphicon {
	pointer-events: auto;
}
.ot-show {
	position: fixed;
	left: 20px;
	bottom: 10px;
	/*margin-bottom: 10px;*/
	opacity: 1;
	filter: alpha(opacity=100);
	border: 1px solid rgb(155, 155, 155);
	box-shadow: 0px 0px 28px rgb(129, 129, 129);
}

.ot-hide {
	/*margin-bottom: -175px;*/
	position: fixed;
	left: 20px;
	bottom: -144px;
	opacity: 0.4;
	filter: alpha(opacity=40);
	border-style: none;
}

.ot-show, .ot-hide {
  transition: bottom .4s ease-in;
  -webkit-transition: bottom .4s ease-in;
}

.ot-container {
	margin: 5px;
}

.ot-open-btn {
	width: 100%;
	margin: 0px !important;
}

.timer {
  margin-top: 5px;
  margin-bottom: 5px;
  /*background-color: white;*/
  
  text-align: center;
}

.timer .time {
	font-size: 20px;
}