/*-
 * Licensed 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.

 */
/*side-bar start*/
.sidebar-stat-center{
	padding:10px 0;
	display: flex;
	align-items: center
}

.sidebar-stat-center>img{
	max-width:24px;
	margin-right:5px;
}

.sidebar-stat-center>span{
	font-size:18px;
	color:#fff
}

.well .faChevron{
	color: white;
}

.side-bar-scroll{
	padding:0px;
	background:transparent;
	border:0px;
}

.sideBar{
	overflow:scroll;
	height:650px;
	overflow-x: hidden;
}

.sideBar::-webkit-scrollbar-track
{
	-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
	border-radius: 10px;
	background-color: #F5F5F5;
}

.sideBar::-webkit-scrollbar
{
	width: 12px;
	border-radius: 10px;
	background-color: #F5F5F5;
}

.sideBar::-webkit-scrollbar-thumb
{
	border-radius: 10px;
	-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
	background-color: #D62929;
}

.well .side-metrics{
  font-size: 14px;
}
.well .faArrows{
	background:#ff5c33;
	color:black;
}

.well .side-date{
	color: white;
	/*position: absolute;*/
	/*left: 80px;*/
	/*margin-left: 10px;*/
}

.well .side-name{
	color: #999966;
	/*position: absolute;*/
	/*left: 210px;*/
	/*margin-left: 20px;*/
}

a>.side-name:hover{
	color: #b2c831;
	/*position: absolute;*/
	/*left: 210px;*/
	/*margin-left: 20px;*/
}

.well .side-percent{
	color: #40bf80;
	/*position: absolute;*/
	/*left: 390px;*/
}

.well .side-percent-red{
	color: #f00;
}

#gprs{
  position: absolute;
  top:5px;
  clip: rect(0, 50px, 50px, 0);
  top: -8px;
  /* clip: shape(top, right, bottom, left); NB 'rect' is the only available option */
}

.well-next{
	padding:0px;
	background:#262626;
	border:0px;
	position:relative;
}

.vcenter {
    display: inline-block;
    vertical-align: middle;
    float: none;
}

/*side-bar end*/

/* led start */
.led-red {
    /*margin: 20px auto;*/
    margin-top: -26px;
    margin-left: 180px;
    width: 12px;
    height: 12px;
    background-color: #940;
    border-radius: 50%;
    box-shadow: #000 0 -1px 7px 1px, inset #600 0 -1px 9px, #F00 0 2px 12px;
}

.led-yellow {
    /*margin: 20px auto;*/
    /*margin-top: -26px;
    margin-left: 180px;*/
    width: 12px;
    height: 12px;
    background-color: #A90;
    border-radius: 50%;
    box-shadow: #000 0 -1px 7px 1px, inset #660 0 -1px 9px, #DD0 0 2px 12px;
}

.led-green {
    /*margin: 20px auto;*/
    /*margin-top: -26px;
    margin-left: 180px;*/
    width: 12px;
    height: 12px;
    background-color: #690;
    border-radius: 50%;
    box-shadow: #000 0 -1px 7px 1px, inset #460 0 -1px 9px, #7D0 0 2px 12px;
}
/* led end   */

@media (max-width: 1200px) {
	#sidebar-option {
		height: auto;
		display: block;
	}
}

@media (min-width: 1200px) {
	#sidebar-option {
		height: 180px;
		display: flex;
		align-items: center;
	}
}