/*
 * 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.
 */
body {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	margin-top: 30px;
	margin-top: 30px;
	margin-left: 8%;
	margin-right: 8%;
	font-size: 0.8em;
	color: #333333;
	background-color:#FFFFFF;
}

h1, h2, h3 {
	font-family: 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif;
	font-weight: bold;
}

h1 {
	font-weight: bold;
	margin-top: 4px;
	margin-bottom: 12px;
	font-size: 2em;
}

h2 {
	padding-top: 12px;
	margin-bottom: 0px;
	font-size: 1.6em;
	color: #333333;
}

h3 {
	margin-top: 0px;
	font-size: 1.3em;
	color: #004477;
}

h4 {
	margin-top: 20px;
	margin-bottom: 8px;
	font-size: 12px;
	color: #333333;
}

.item {
	border-bottom: 1px solid #CCCCCC;
	padding-top: 12px;
	padding-bottom: 0px;
}

.highlight {
	border: 1px solid #CCCCCC;
	padding-top:10px;
	padding-left:10px;
	padding-right:10px;
	padding-bottom:0px;
	border-color: #2080B3;
	margin-top:20px;
	margin-bottom:20px;
}

.footer {
	color: #666666;
	margin-top: 20px;
	font-size: 0.75em;
}

ul {
	margin-top:8px;
	margin-bottom:8px;
}

li {
	padding-bottom:8px;
}

code {
	color: #000099;
	font-family: "Courier New", Courier, monospace;
	font-size:1.1em;
}

img {
	border: 0;
}

#col1{
  	float:left;
	width: 20%;
	padding-right: 24px;
}

#col2{
  float: left;
  width: 55%;
}

#col3{
	float: right;
	width: 20%;
	margin: 0px;
	padding: 0px;
}

a:link {
	color: #006699;
	text-decoration: none;
}

a:visited {
	text-decoration: none;
	color: #006699;
}

a:hover {
	text-decoration: underline;
	color: #006699;
}

a:active {
	text-decoration: none;
	color: #006699;
}