/*
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.
*/

/* Javadoc style sheet */

/* Define colors, fonts and other style attributes here to override the defaults  */

/* Page background color */
body { background-color: #FFFFFF }

a:link, a:visited {
 color: blue;
 }

a:active, a:hover, #leftcol a:active, #leftcol a:hover {
 color: #f30 !important;
 }

a:link.selfref, a:visited.selfref {
 color: #555 !important;
 }

.a td {
 background: #ddd;
 color: #000;
 }

/* Table colors */
.TableHeadingColor     { background: #036; color:#FFFFFF } /* Dark blue */
.TableSubHeadingColor  { background: #bbb; color:#fff } /* Dark grey */
.TableRowColor         { background: #efefef } /* White */

/* Font used in left-hand frame lists */
.FrameTitleFont   { font-size: medium; font-family: normal; color:#000000 }
.FrameHeadingFont { font-size: medium; font-family: normal; color:#000000 }
.FrameItemFont    { font-size: medium; font-family: normal; color:#000000 }

/* Example of smaller, sans-serif font in frames */
/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */

/* Navigation bar fonts and colors */
.NavBarCell1    { background-color:#ddd;}/* Light mauve */
.NavBarCell1Rev { background-color:#888;}/* Dark Blue */
.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}

.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
