/*
 *  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
 *
 *      https://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  {
    margin: 0;
    padding: 0;
    background-color: #5a7418;
}
#body  {
    display: table;
    margin: 8px auto;
    padding: 0;
    width: 98%;
    color: #000;
    background-color: #fff;
    border-radius: 5px;
    padding-top: 5px;
    padding-bottom: 5px;
}
body, p, td, li, ul, ol  {
    font-family: Verdana, Helvetica, Arial, sans-serif;
    font-size: small;
}
h1, h2, h3, h4, h5, h6 {
    color: #7a9438;font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
}
h1 {
    color: #7a9438;
    background-color: #fff;
    background: none;
}
h2 {
    color: #fff;
    background-color: #7a9438;
    padding-left: 10px;
    font-size: 1.6em;
    border-radius: 5px;
}
h3 {
    font-size: 1.4em;
}
h4 {
    font-size: 1.2em;
}
h5 {
    font-size: 1.1em;
}
tr.dark td, tr.light td {
    padding: 0.3em;
}
a:link {
    text-decoration: none;
    font-weight: bold;
    color: #7a9438;
}
a:visited {
    text-decoration: none;
    font-weight: bold;
    color: #7a9438;
}
a:hover, a:active {
    font-weight: bold;
    text-decoration: underline;
    color: #7a9438;
}
blockquote {
    padding: 0 15px 0 15px;
    margin: 15px 50px 15px 50px;
    text-align: left;
    font-size: 1.2em;
    line-height: 1.3em;
    font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
  color: #696969;
}
pre {
    padding: 0.75em 1.5em;
    font-size: 1em;
    background-color: #eee;
    border: 1px solid #ddd;
}
code {
    background-color: #EEE;
}
dt {
    font-weight: bold;
}
p {
    margin: 0;
    margin-top: 1em;
    margin-bottom: 1em;
}
ul {
    margin: 0;
    margin-top: 1em;
    margin-bottom: 1em;
}
li p {
    margin-top: 0.5em;
    margin-bottom: 0.5em;
}
#home img {
    padding: 5px 20px 10px 10px;
}
.product img {
    padding: 5px 20px 10px 10px;
}
#navcontainer  {
    color: white;
    margin-left: 20px;
    background-color:#7a9438;
}
#navcontainer  a {
    color: white;
    text-decoration: none;
}
#nav {
    background-color:#7a9438;
}
#nav ul {
    background-color:#7a9438;
    border-top: 1px solid #7a9438;
    border-right: 1px solid #7a9438;
    border-bottom: 1px solid #7a9438;
    border-left: 0.75em solid #7a9438;
}
#nav li a {
    color: #fff;
}
#nav .title {
    color: #fff;
    background: #7a9438;
    border-top: 0;
    border-right: 0;
    border-bottom: 1px solid #7a9438;
    border-left: 0;
}
#nav li li a {
    background: #fff;
    color: #7a9438;
    border-top: 0;
    border-right: 0;
    border-bottom: 1px solid #7a9438;
    border-left: 0;
}
#nav a:hover, #nav a:active {
    background: #9ebf47;
}
#top-menu {
    background-color:#7a9438;
    border-top: 3px solid #9ebf47;
    border-bottom: 3px solid #9ebf47;
}
#top-menu tr {
    padding: 0;
    margin: 0;
}
#top-menu td {
    padding: 0;
    margin: 0;
}
#search {
    padding: 0 1em 0 1em;
    margin: 0;
}
#search .form-text, #search .form-submit {
    padding: 0;
    margin: 0;
    font-size: 0.85em;
    border: 1px solid #7a9438;
}
#search .form-submit {
    background-color: #9ebf47;
}
#search .form-text {
    width: 8em;
    padding: 0;
    margin: 0;
}
#sidebar-left, #sidebar-right {
    width: 260px;
    /* padding in px not ex because IE messes up 100% width tables otherwise */
    padding: 15px 5px 75px 10px;
    vertical-align: top;
}
#sidebar-left li, #sidebar-right li {
    font-size: 1em;
}
.sidebar-title {
    margin: 5px 0px 0px 0px;
    padding: 1px 5px 1px 30px;
    font-size: 1.2em;
    font-weight: 700;
    border-top-left-radius: 5px;
    border-top-right-radius: 5px;
    color: #000;
    background-color: #eee;
    font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
}
#content {
    table-layout:fixed;
}
.block h2 {
    margin: 5px 0px 0px 0px;
    padding: 1px 5px 1px 30px;
    font-size: 1.2em;
    font-weight: 700;
    border-top-left-radius: 5px;
    border-top-right-radius: 5px;color: #000;
    background-color: #eee;
}
.block .content {
    border-bottom-right-radius: 5px;
    border-bottom-left-radius: 5px;
    margin-bottom: 10px;background-color: #fff;
    border: 1px solid #eee;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    padding-bottom: 10px;
}
.content {
    padding-top: 0px;
}
#footer-menu td {
    padding-top: 3px;
}
.footer {
    text-align: center;
    margin-top: 3pt;
    margin-bottom: 3pt;
    font-size: 85%;
}
table.tableblock {
    border-collapse: collapse;
    width: 90%;
    margin: auto;
    margin-top: 10px;
    margin-bottom: 10px;
}
table.tableblock thead {
    background-color: #DEE4CD;
    border: 1px solid #7A9437;
}
table.tableblock th {
    font-family: monospace;
    border: 1px solid #7A9437;
    padding: 5px;
}
table.tableblock tbody {
    background-color: #FFFFFF;
    border: 1px solid #7A9437;
}
table.tableblock td {
    border: 1px dotted #7A9437;
    padding: 5px;
}
table.tableblock td p:last-child {
    margin: 0px;
}
table.tableblock .halign-center {
    text-align: center;
}
table.tableblock .valign-middle {
    vertical-align: middle;
}
.note {
    padding: 15px;
    border-style:solid;
    border-width:1px;
    border-color: #F0D88D;
    background-color: #FCFCCA;
    margin: 10px;
}
.note .title {
    display:none;
}
.warning:before {
    content: url(../images/warning.svg)
}
.warning {
    border-style:solid;
    border-width:1px;
    border-color: #F0D88D;
    background-color: #FCFCCA;
    margin: 10px;
}
.warning .title {
    display:none;
}
#treemenu {
    padding-left: 10px;
}
.treeview ul {
    margin: 0;
    padding: 0;
}
.treeview li {
    background: white url(../images/bullet.gif) no-repeat left center;
    list-style-type: none;
    padding-left: 22px;
    margin-bottom: 3px;
}
.treeview li.submenu {
    background: white url(../images/closed.gif) no-repeat left 1px;
}
.treeview .hitarea {
    cursor: pointer;
}
.treeview li.collapsable, .treeview li.open {
    background: white url(../images/open.gif) no-repeat left 1px;
}
.treeview ul.closed {
    display: none;
}
.treeview .submenu ul li {
    cursor: default;
}
#book #title {
    margin: 15px;
    padding: 10px;
    font-size: 2em;
    text-align: center;
    border: solid 2px;
    font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
    border-radius: 5px;
    color: #7a9438;
}
#book {
    background-color: #FFFFFF;
}
