/*
 *  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 {
    background-color: white;
    color: black;
    text-align: left;
    text-align: left;
    font: "Times New Roman", serif;
}

.menuItem {
    vertical-align: top;
    padding: 0pt;
    margin-top: 4pt;
    margin-bottom: 4pt;
    margin-right: 0pt;
    margin-left: 0pt;
}

h1 {
    font-family: Arial, helvetica, sans-serif;
    font-weight: bold;
    font-size: 12pt;
    background-color: #525D76;
    color: white;
    text-indent: 2pt;
    margin-left: 0pt;
}

h2 {
    font-family: Arial, helvetica, sans-serif;
    font-weight: bold;
    font-size: 12pt;
    background-color: #828DA6;
    color: white;
    text-indent: 2pt;
    margin-left: 10pt;
}

h3 {
    font-weight: bold;
    margin-left: 20pt;
    margin-top: 5pt;
    margin-right: 0pt;
    margin-bottom: 5pt;
    text-transform: uppercase;
    font-size: 11pt;
}

a:link {
    color:#525D76;
}

p {
    padding-left: 2pt;
    margin-left: 20pt;
}

td.TableCell {
    vertical-align: top;
    text-align: left;
    background-color: #a0ddf0;
}

th.TableHeading {
    background-color: #039acc;
    text-align: center;
    color: black;
    font-family: Arial, Helvetica, sans-serif;
    padding: 2pt;
}

table {
    margin-left: 0pt;
    margin-right: 0pt;
}

img {
    border: none;
}

pre {
    background: #F3F5F7;
    border: thin solid;
    border-color: #828DA6;
    padding: 12pt;
    font-size: 11.0pt;
    font-family: Courier;
    margin-right: 10pt;
    margin-left: 25pt;
}

.class {
    font-weight: bold;
    font-size: 10pt;
    font-family: Arial;
    border-top: none;
    border-right: none;
    border-left: none;
    border-bottom: solid #525D76 2px;
}

.special {
    font-weight: bold;
    text-align: center;
    color: #525D76;
    margin-top: 3pt;
    margin-bottom: 3pt;
    font-family: Arial, helvetica, sans-serif;
    font-size: 10pt;
}

.backtotop {
    font-weight: bold;
    margin-left: 0pt;
}

.note {
    color: red;
    font-weight: bolder;
    font-family: Arial, helvetica, sans-serif;
    font-size: 10pt;
}

.notetext {
    padding-left: 20pt;
    margin-top: 0pt;
    margin-bottom: 0pt;
    font-family: Arial, helvetica, sans-serif;
    font-size: 10pt;
}

.example {
    font-weight: bolder;
    font-family: Arial, helvetica, sans-serif;
    font-size: 10pt;
}

.exampletext {
    margin-left: 40pt;
}

.TOCHeading {
    font-weight: bold;
    font-size: 12pt;
    text-align: left;
    color: #000000;
    font-family: Arial, helvetica, sans-serif;
    padding-left: 15px;
    margin-bottom: 5pt;
    margin-top: 5pt;
    margin-left: 5px;
    margin-right: 0pt;
}

.TOC {
    font-size: 11pt;
    text-indent: 15pt;
    color: white;
    padding-left: 15px;
    margin-left: 5px;
    margin-right: 0.00px;
    margin-top: 0px;
    margin-bottom: 0px;
    font-family: Arial, helvetica, sans-serif;
}

.update {
    color: #A9A9A9;
    font-size: smaller;
    font-style: italic;
}

li {
    margin-left: 20pt;
    padding-left: 1pt;
    padding-top: 1pt;
    padding-bottom: 1pt;
    padding-right: 0pt;
}

ol li {
    list-style-type: decimal;
}

ul li {
    list-style-type: square;
}

li ul li {
    list-style-type: disc;
}

dl {
    margin: 5pt;
}

dd {
    margin-left: 30pt;
    margin-top: 5pt;
    margin-right: 20pt;
    margin-bottom: 5pt;
    border-right: none;
    border-bottom: none;
    border-left: none;
    border-top: none;
    padding-bottom: 8px;
}

dd p {
    margin-left: 0pt;
}

dt {
    font-size: 10pt;
    font-family: Arial, helvetica, sans-serif;
    font-weight: bolder;
    margin-left: 20pt;
    margin-top: 5pt;
    margin-right: 0pt;
    margin-bottom: 5pt;
    border-top: none;
    border-right: none;
    border-bottom: solid #828DA6 1px;
    border-left: none;
    padding-bottom: 3px;
}

h2 .editsection,h2 .hashlink {
	font-size:67%;
}

h3 .editsection,h3 .hashlink {
	font-size:76%;
}

h4 .editsection,h4 .hashlink {
	font-size:86%;
}

a.editsection,a.hashlink {
	font-weight:normal;
	line-height:1.2;
	padding:.25em;
	text-decoration:none;
	color:grey;
}

a.editsection:hover,a.hashlink:hover {
	background-color:#eee;color:blue!important;
}

h2:hover a.hashlink,h3:hover a.hashlink,h4:hover a.hashlink {
	color:#ccc;
}
a.hashlink {
	color:white;
}

