/**
 * 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.
 */
@CHARSET "UTF-8";

body {
	margin-top: 50px;
}

#wrapper {
	padding-left: 0;
}

#page-wrapper {
	width: 100%;
	padding: 5px 15px;
}

/* Nav Messages */
.messages-dropdown .dropdown-menu .message-preview .avatar,.messages-dropdown .dropdown-menu .message-preview .name,.messages-dropdown .dropdown-menu .message-preview .message,.messages-dropdown .dropdown-menu .message-preview .time
	{
	display: block;
}

.messages-dropdown .dropdown-menu .message-preview .avatar {
	float: left;
	margin-right: 15px;
}

.messages-dropdown .dropdown-menu .message-preview .name {
	font-weight: bold;
}

.messages-dropdown .dropdown-menu .message-preview .message {
	font-size: 12px;
}

.messages-dropdown .dropdown-menu .message-preview .time {
	font-size: 12px;
}

/* Nav Announcements */
.announcement-heading {
	font-size: 50px;
	margin: 0;
}

.announcement-text {
	margin: 0;
}

/* Table Headers */
table.tablesorter thead {
	cursor: pointer;
}

table.tablesorter thead tr th:hover {
	background-color: #f5f5f5;
}

/* Flot Chart Containers */
.flot-chart {
	display: block;
	height: 400px;
}

.flot-chart-content {
	width: 100%;
	height: 100%;
}

/* Edit Below to Customize Widths > 768px */
@media ( min-width :768px) {
	/* Wrappers */
	#wrapper {
		padding-left: 225px;
	}
	#page-wrapper {
		padding: 15px 25px;
	}

	/* Side Nav */
	.side-nav {
		margin-left: -225px;
		left: 225px;
		width: 225px;
		position: fixed;
		top: 50px;
		height: 100%;
		border-radius: 0;
		border: none;
		background-color: #222222;
		overflow-y: auto;
	}

	/* Bootstrap Default Overrides - Customized Dropdowns for the Side Nav */
	.side-nav>li.dropdown>ul.dropdown-menu {
		position: relative;
		min-width: 225px;
		margin: 0;
		padding: 0;
		border: none;
		border-radius: 0;
		background-color: transparent;
		box-shadow: none;
		-webkit-box-shadow: none;
	}
	.side-nav>li.dropdown>ul.dropdown-menu>li>a {
		color: #999999;
		padding: 15px 15px 15px 25px;
	}
	.side-nav>li.dropdown>ul.dropdown-menu>li>a:hover,.side-nav>li.dropdown>ul.dropdown-menu>li>a.active,.side-nav>li.dropdown>ul.dropdown-menu>li>a:focus
		{
		color: #fff;
		background-color: #080808;
	}
	.side-nav>li>a {
		width: 225px;
	}
	.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus
		{
		background-color: #080808;
	}

	/* Nav Messages */
	.messages-dropdown .dropdown-menu {
		min-width: 300px;
	}
	.messages-dropdown .dropdown-menu li a {
		white-space: normal;
	}
	.navbar-collapse {
		padding-left: 15px !important;
		padding-right: 15px !important;
	}
}