/**
 *
 * 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 th {
  font-family: Verdana, Helvetica, Arial, sans-serif;
  margin: 0;
}

div {
  line-height: 1.5em;
}

a {
  color: #008800;
  text-decoration: none;
  font-weight: bold;
}

table, th, td {
	border: none;
}

.a td {
 background: #ddd;
 color: #000;
 }

.b td {
 background: #efefef;
 color: #000;
 }


.navLink a {
  font-weight: normal;
}

.navLink {
  margin-left: 5px;
}

.navLink:first-line {
  margin-left: -5px;
}


a:link.selfref, a:visited.selfref {
}

a:link, a:visited {
}

a:active, a:hover {
  text-decoration: underline;
}

a.plain:active, a.plain:hover {
  text-decoration: none;
}

.sectionTitle a {
  text-decoration: underline;
}
.subsectionTitle a {
  text-decoration: underline;
}

span.highlight {
  font-weight: bold;
  color: #990000;
}

#layout {
  margin: 0px;
  padding: 0px;
}

#banner {
  padding: 8px;
}

#breadcrumbs {
  border-top: 1px solid #009900;
  padding-left: 12px;
  padding-right: 12px;
  padding-top: 2px;
  padding-bottom: 2px;
  font-size: x-small;
}

#breadcrumbs td {
  font-size: x-small;
}

#breadcrumbs a {
  font-weight: bold;
}

#layout {
  border-top: 1px solid #009900;
  padding: 0px;
  margin: 0px;

}

.navSection {
  background-color: #ffffff;
  border: 1px solid #999999;
  border-top: none;
  padding: 0px;
  margin-bottom: 8px;
  font-size: small;
}

.navSection a {
  font-weight: normal;
}

.navSectionHead {
  border-top: 1px solid #999999;
  border-bottom: 1px solid #999999;
  color: #555555;
  padding: 4px;
  margin-left: 0px;
  margin-right: 0px;
  background-color: #eeeeee;
  font-weight: bold;
  font-size: x-small;
}

.navLink {
  padding-top: 2px;
  padding-bottom: 2px;
  padding-left: 14px;
  font-size: small;
}

.section {
  padding-bottom: 16px;
}

.sectionTitle, h1 {
  padding: 4px;
  border: 1px solid #aaaaaa;
  color: #007700;
  font-size: x-large;
  background-color: #dddddd;
}

h1 {
  margin: 0px;
  margin-bottom: .2em;
}

.subsection {
  padding-left: 20px;
  margin-top: 10px;
  margin-bottom: 10px;
}

body:first-child {
  padding-top: 0px;
}

.subsectionTitle, h2 {
  margin-top: 8px;
  margin-bottom: 8px;
  padding: 6px;
/*
  border-left: 1px solid #999999;
  border-bottom: 1px solid #999999;
  border: 1px solid #999999;
*/
  border-top: 1px solid #dddddd;
  border-bottom: 1px solid #dddddd;
  border-left: 2px solid #999999;
  border-right: 2px solid #999999;
  color: #007700;
  background-color: #eeeeee;
  font-weight: normal;
  font-size: larger;
}

.sectionTitle a {
  font-weight: normal;
}

.subsectionTitle a {
  font-weight: normal;
}

.subsubsection {
  padding-left: 30px;
}

.subsubsectionTitle, h3, .blogheading {
  font-weight: bold;
  /*background-color: #eeeeee;*/
  border: 1px solid #cccccc;
  padding: .2em;
}


p {
  line-height: 1.8em;
  /*padding-left: 20px;*/
  padding-right: 20px;
}

blockquote p {
  padding-left: 0px;
  padding-right: 0px;
}

ul {
  padding-left: 1.5em;
}

li {
  margin-right: 15%;
  line-height: 1.6em;
}

#leftColumn {
  border-right: 1px solid #cccccc;
  background-color: #ffffff;
  padding: 12px;
  font-size: small;
}

#extraColumn {
  padding: 12px;
}

#navBox {
}

#rightColumn {
  padding: 12px;
  border-right: 1px solid #cccccc;
}

#contentBox {

}

table.bodyTable, table.wikitable {
  margin: 10px;
  border-collapse: collapse;
  border-spacing: 0pt;
  background-color: #eeeeee;
}

#Content table.grid {
  border: 1px solid #bbbbbb;
}

table.grid {
  padding: 0px;
  border-collapse: collapse;
  border-spacing: 0pt;
}

table.grid th {
  background-color: #eeeeee;
  font-size: smaller;
  padding: 4px;
  border-bottom: 1px solid #bbbbbb;
}

table.grid td {
  font-size: x-small;
  border: 1px solid #bbbbbb;
  padding: 3px;
}

table.bodyTable th, table.bodyTable td, table.wikitable th, table.wikitable td {
  border: 1px solid #999999;
  font-size: smaller;
  padding: 4px;
}


table.bodyTable th, table.wikitable th {
  text-align: left;
  background-color: #dddddd;
  border: 2px solid #999999;
  padding: 4px;
}

.nobr
  white-space: nowrap;
}

table.bodyTable td {
  padding: 4px;
}

/*
table.bodyTable th, table.wikitable th {
  border-bottom: 2px solid #999999;
}

table.bodyTable tr.a {
  background-color: #dedede;
}

table.bodyTable tr.b {
  background-color: #efefef;
}
*/

.source, .code {
  padding: 12px;
  margin: 12px;
  border: 1px solid #007700;
  border-left: 2px solid #007700;
  border-right: 2px solid #007700;
  color: #555555;
}

pre {
  padding: 12px;
}

.java-keyword {
  color: #009900;
}

.java-object {
  color: #000099;
}

.java-quote {
  color: #990000;
}


.source, .code pre {
  margin: 0px;
  margin-left: 8px;
  padding: 0px;
}

#footer {
  padding-left: 4px;
  border-top: 1px solid #999999;
  color: #888888;
  font-size: x-small;
}

blockquote {
  border-top: 1px solid #bbbbbb;
  border-bottom: 1px solid #bbbbbb;
  border-left: 3px solid #bbbbbb;
  border-right: 3px solid #bbbbbb;
  padding: 12px;
  margin-left: 10%;
  margin-right: 15%;
  color: #666666;
  background-color: white;
  line-height: 1.5em;
}

input[type="text"] {
  margin: 0px;
  border: 1px solid #999999;
  background-color: #dddddd;
}

input.required {
  margin: 0px;
  border: 1px solid #990000;
}

input {
  border: 1px solid #999999;
}

textarea {
  border: 1px solid #999999;
}

textarea.required {
  border: 1px solid #990000;
}

label {
  font-size: smaller;
}

label.required {
  color: #990000;
}

.searchResults {
  color: black;
}

.searchResults b {
  color: #007700;
}


.linecomment { color: #bbbbbbb; }
.blockcomment { color: #bbbbbbb; }
.prepro { color: #0000BB; }
.select {}
.quote { color: #770000; }
.category1 { color: #007700; }
.category2 { color: #0000BB; }
.category3 { color: #0000BB; }


/* Portfolio demo */
td.amount, td.price, td.value, td.pl, td.cost {
    text-align: right
}

div.up {
  color: black;
}

div.down {
  color: red;
}

