/*
* 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 {
  color: white;
  font-family: Helvetica, Arial, 'Liberation Sans', FreeSans, sans-serif;
  font-size: 12pt;
  margin: 0;
}

#banner {
  height: 150px;
  padding: 0 0 0 0;
  color: black;
  font-family: Helvetica, Arial, 'Liberation Sans', FreeSans, sans-serif;
  font-size:16pt;
  vertical-align: middle;
}

#bannerright {
  text-align: right;
  float: right;
  padding: 34pt 36pt 26pt 36pt;
}

#bannercenter {
  padding: 46pt 2pt 50pt 2pt;
  float: center;
  color: #107EC0;
}

#bannerleft {
  text-align: left;
  float: left;
}

#bannerleft a:hover {
 color: #107EC0;
 background-color: white;
}

a {
  color: #107EC0;
}

a:visited {
 color: #107EC0;
}

a:hover {
 color: #107EC0;
 text-decoration:underline;
}

a img { border: none; }

h1,h2,h3,h4,h5,h6 {
  color: #193240;
  text-transform:uppercase;
}

#clear {
  overflow: auto;
  clear: both;
}

#content {
  margin: 0 50px 20px 50px;
  padding: 0 8px 40px;
  color: #333;
  overflow: auto;
  clear: both;
}

#content h1,h2,h3,h4,h5,h6 {
  font-weight: normal;
  text-transform:none;
  margin: 10px 0 15px;
  padding: 5px 0;
}

#content h1 {
  font-size: 1.4em;
  padding: 15px;
  border-top: 1px solid #a3afb6;
}

#content h2 {
  font-size: 1.2em;
  margin-top: 2em;
}

#content h3,h4,h5,h6 {
  border-bottom: none;
  font-size: 1em;
  margin-bottom: 0;
}

#content li {
  margin-bottom: 0.5em;
}

#contenta {
  margin: 0 150px 20px 250px;
  padding: 0 8px 40px;
  color: #333;
}

#contenta h1,h2,h3,h4,h5,h6 {
  font-weight: normal;
  margin: 10px 0 15px;
  padding: 5px 0;
}

#contenta h1 {
  font-size: 1.4em;
  padding: 15px;
  border-top: 1px solid #a3afb6;
}

#contenta h2 {
  font-size: 1.2em;
  margin-top: 2em;
  border-bottom: 1px solid #a3afb6;
}

#contenta h3,h4,h5,h6 {
  border-bottom: none;
  font-size: 1em;
  margin-bottom: 0;
}

#contenta li {
  margin-bottom: 0.5em;
}

#contenta a:hover {
 color: #107EC0;
 text-decoration:underline;
 background-color: #e6ebed;
}

table {
  border-collapse:collapse;
  margin: auto;
}

th {
  height: 40px;
  background: #f5f8fa;
  border: 1px solid #a3afb6;
  vertical-align: middle;
  font-size: 0.9em;
}

td {
  vertical-align: top;
  border: 1px solid #a3afb6;
  padding: 0.4em 0.5em 0.4em 0.5em;
  font-size: 0.9em;
}

.w140 {
  width: 140px;
}

.w160 {
  width: 160px;
}

.w180 {
  width: 180px;
}

.w200 {
  width: 200px;
}

.w220 {
  width: 220px;
}

.codehilite {
  background-color: #F0F000;
  padding: 0.01em 1em;
  border-radius: 10px;
}

#sidenav {
  border: 1px solid #e6ebed;
  border-left: none;
  -moz-border-radius: 0 10px 10px 0;
  border-radius: 0 10px 10px 0;
  font-size: 0.9em;
  color: #003;
  float: left;
  padding: 15px 15px 5px 25px;
  width: 180px;
  background: none repeat scroll 0 0 #f5f8fa;
  margin: 0 0 20px 0;
}

#sidenav img {
  padding-bottom: 15px;
  margin-left: auto;
  margin-right: auto;
  display: block;
}

#sidenav h1 {
  color: #000;
  font-size: 1em;
  padding: 0;
  margin-top: 0.8em;
  margin-bottom: 0;
  border-bottom: 1px solid #a3afb6;
}

#sidenav ul {
  margin: 0 0;
  padding: 0;
  list-style: none;
}

#sidenav li {
  border-bottom: 1px solid #e6ebed; 
  margin: 0.2em 0;
  padding: 0;
}

#sidenav li a {
  margin: 0;
  text-decoration:none;
}

#sidenav li a:hover {
  color: #193240;
  background: none;
}

#navigation {
  border: 1px solid #e6ebed;
  border-left: none;
  -moz-border-radius: 0 10px 10px 0;
  border-radius: 0 10px 10px 0;
  font-size: 0.9em;
  color: #003;
  float: left;
  padding: 15px 15px 5px 25px;
  width: 180px;
  background: none repeat scroll 0 0 #f5f8fa;
  margin: 0 0 20px 0;
}

#navigation img {
  padding-bottom: 15px;
  margin-left: auto;
  margin-right: auto;
  display: block;
}

#navigation h1 {
  color: #000;
  font-size: 1em;
  padding: 0;
  margin-top: 0.8em;
  margin-bottom: 0;
  border-bottom: 1px solid #a3afb6;
}

#navigation ul {
  margin: 0 0;
  padding: 0;
  list-style: none;
}

#navigation li {
  border-bottom: 1px solid #e6ebed; 
  margin: 0.2em 0;
  padding: 0;
}

#navigation li a {
  margin: 0;
  text-decoration:none;
}

#navigation li a:hover {
 color: #107EC0;
 background-color: #e6ebed;
}

#footera {
  margin: 20px 0px 0px 0px;
  padding: 8px 0px 12px 0px;
  border-top: 2px solid #ccc;
  color:#666;
  font-size: 8pt;
  padding: 0 8px;
  text-align: left;
  overflow: auto;
  clear: both;
  line-height: 10pt;
}

#copyrighta {
}

#copyrighta p {
  padding-left: 20px;
  line-height: 10pt;
  padding-bottom: 5px;
}

#copyrighta a {
 color: #107EC0;
 text-decoration:underline;
}

#copyrighta a:hover {
 background-color: #e6ebed;
}

#poweredby {
  float: right;
  text-align: right;
  width: 210px;
  height: 100px;
}

#asf-logo {
  width: 180px;
  padding-top: 20px;
}



/* definition lists */
dd {}
dl {}
dt {
  display: inline;
  float: left;
}