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

#apacheconbox {
  margin: 20px 0px 0px 20px;
  padding: 10px;
  border: 1px solid #ccc;
  background-color: white;
  background-image: url(../images/button-top.gif);
  background-repeat: repeat-x;
}
#apacheconspacer {
  float: right;
  margin: 0px 0px 10px 10px;
  background-color: white;
}
#poweredBy {
  display: none;
}
.xleft {
  float: right;
}
.xright {
  float: left;
}
#bannerLeft img {
  margin-left: 20px;
}
#bannerRight img {
  padding: 0px;
  border: 0px;
  margin-top: 20px;
  margin-right: 20px;
  margin-bottom: 0px;
}
body {
  padding: 0px 0px 10px 0px;
}
body, td, select, input, li{
  font-family: Verdana, Helvetica, Arial, sans-serif;
  font-size: 13px;
}
code{
  font-family: Courier, monospace;
  font-size: 13px;
}
a {
  text-decoration: none;
}
a:link {
  color:#36a;
}
a:visited  {
  color:#47a;
}
a:active, a:hover {
  color:#69c;
}
#legend li.externalLink {
  background: url(../images/external.png) left top no-repeat;
  padding-left: 18px;
}
a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover {
  background: url(../images/external.png) right center no-repeat;
  padding-right: 18px;
}
#legend li.newWindow {
  background: url(../images/newwindow.png) left top no-repeat;
  padding-left: 18px;
}
a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover {
  background: url(../images/newwindow.png) right center no-repeat;
  padding-right: 18px;
}
.section {
margin-left: 10px;
}
.section p, .section table {
margin-left: 10px;
}
h2 {
  color: #904040;
  background-color: white;
  border: 0px;
  border-bottom: 2px solid #525D76;
  padding: 0px;
  padding-left: 20px;
  vertical-align: bottom;
  font-weight:900;
  font-size: large;
  background: url(../images/h2feather.gif) left center no-repeat;
  margin-bottom: 15px;
}
h3 {
  border: thin solid #828DA6;
  padding-bottom: 0px;
  color: #525D76;
  background-color: white;
  padding: 2px 2px 2px 2px;
  border: 0px; 
  font-weight: bold;
  font-size: 15px;
  margin-top: 5px;
  margin-bottom: 13px;
  border-bottom: 1px dotted #525D76;
}
h4 {
  padding: 2px 2px 2px 2px;
  border: 0px;
  background: url(../images/h4.jpg) 0% 70% no-repeat;
  color: black;
  margin-top: 5px;
  padding-left: 12px;
  background-color: #fff;
  font-weight: bold;
  font-size: small;
  margin-left: 10px;
}
h5 {
  padding: 2px px 2px 2px;
  border: 0px;
  border-bottom: 0px;
  color: black;
  background-color: #fff;
  font-weight: bold;
  font-size: small;
}
p {
  line-height: 1.3em;
  font-size: small;
}
#breadcrumbs {
  background: url(../images/button-top.gif) left top repeat;
  border-top: 0px solid #525D76;
  border-bottom: 1px solid #ccc; /* #525D76;*/
  border-top: 1px solid #ccc;
  padding-top: 3px;
  padding-bottom: 3px;
  background-color: #eeeeee;
  font-size: small;
}
#breadcrumbs a {
  font-weight: bold;
}
#bodyColumn {
}
#leftColumn {
  margin: 0px;
  margin-top: -1px;
  border: 0px;
  padding: 0px;
  padding-left: 20px;
  background: none;
}
#leftColumn ul {
  font-size: 15px;
  padding-top: 4px;
  padding-bottom: 10px;
}
#leftColumn li {
  padding-left: 10px;
  padding-bottom: 3px;
}
#navcolumn {
  border: 1px solid #ccc; /* #525D76;i*/
  background: url(../images/button-bottom.gif) left bottom no-repeat;
  padding: 15px;
  border-top: 0px solid white;
  background-color: white;
}
#navcolumn h5 {
  font-size: 12px;
  border-bottom: 1px solid #eee;
  padding-top: 3px;
  padding-bottom: 2px;
  margin-right: 10px;
  color: #000;
}
table.bodyTable {
  padding-right: 20px;
}
table.bodyTable th {
  color: black;
  background-color: #bbb;
  text-align: left;
  font-weight: bold;
  border-top: 1px solid #ccc;
  border-bottom: 1px solid #ccc; 
  background-image: url(../images/button-top.gif);
}
#footer {
  border-top: 1px solid #ccc;
  margin-top: 30px;
  padding: 10px;
  background-image: url(../images/button-top.gif);
}
table.bodyTable th, table.bodyTable td {
  padding: 2px;
  font-size: 1em;
}
table.bodyTable tr.a {
  background-color: #fff;
}
table.bodyTable tr.a td {
  border-bottom: 1px solid #eee;
}
table.bodyTable tr.b {
  background-color: #fff;
}
table.bodyTable tr.b td {
  border-bottom: 1px solid #ddd;
}
.source {
  border: 1px solid #525D76;
}
dl {
  padding: 4px 4px 4px 6px;
  border: 1px solid #aaa;
  background-color: #ffc;
}
dt {
  color: #900;
}
#organizationLogo img, #projectLogo img, #projectLogo span{
  margin: 8px;
}
#banner img {
  padding: 10px;
}
.errormark, .warningmark, .donemark, .infomark {
  background: url(../images/icon_error_sml.gif) no-repeat;
}
.warningmark {
  background-image: url(../images/icon_warning_sml.gif);
}
.donemark {
  background-image: url(../images/icon_success_sml.gif);
}
.infomark {
  background-image: url(../images/icon_info_sml.gif);
}
