vadoc style sheet */
/**
 * 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.
 */

/* Define colors, fonts and other style attributes here to override the defaults  */

/* Page background color */
body { 	font-family: Arial;
	background-color: white;
	font-size: 8px;
 }

td { 	
	font-family: Arial;
	font-size: 10pt;
 }
/* Table colors */
.TableHeadingColor     { background: #F4F4F4 }
.TableSubHeadingColor  { background: #F4F4F4 }
.TableRowColor         { background: #FFFFFF }

/* Font used in left-hand frame lists */
.FrameTitleFont   { font-size: normal; font-family: Arial,Helvetica,sans-serif; font-size:12pt; line-height: normal; }
.FrameHeadingFont { font-size: normal; font-family: Arial,Helvetica,sans-serif; font-size:10pt; line-height: normal;}
.FrameItemFont    { font-size: normal; font-family: Arial,Helvetica,sans-serif; font-size:8pt; line-height: normal;}

/* 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:#F4F4F4;} */
.NavBarCell1    { background:transparent url("http://activemq.apache.org/images/top-red-bar.png") repeat; 
font-family: Verdana, arial, sans-serif;
font-size: 11px;
font-weight: bold;	
line-height: 16px;
color: #777;
}

.NavBarCell1 a:link, .NavBarCell1 a:visited {
  font-family: Verdana, arial, sans-serif;
  font-size: 11px;
  font-weight: bold;	
  line-height: 16px;
  color: #ffffff;
  text-decoration: none;
}
.NavBarCell1 a:active, .NavBarCell1 a:hover {
  font-family: Verdana, arial, sans-serif;
  font-size: 11px;
  font-weight: bold;	
  line-height: 13px;
  color: #c0c0c0;
  text-decoration: underline;
}

.NavBarCell1Rev { background-color:silver;}

.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}

A:link, A:visited, A:active, A:hover {
   color: #880055;
   text-decoration: none;
}

A:active, A:hover {
   text-decoration: underline;
   color: #202020;
}

P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
    color: #000000;
}

TD, TH, SPAN {
    color: #000000;
}

BLOCKQUOTE {
    margin-right: 0px;
}

/*H1, H2, H3, H4, H5, H6    {
    color: #000000;
    font-weight:500;
    margin-top:10px;
    padding-top:15px;
}

H1 { font-size: 150%; }
H2 { font-size: 140%; }
H3 { font-size: 110%; font-weight: bold; }
H4 { font-size: 110%; font-weight: bold;}
H5 { font-size: 100%; font-style: italic; }
H6 { font-size: 100%; font-style: italic; }*/

TT {
font-size: 90%;
    font-family: "Courier New", Courier, monospace;
    color: #000000;
}

PRE {
font-size: 90%;
    padding: 5px;
    border-style: solid;
    border-width: 1px;
    border-color: #CCCCCC;
    background-color: #F4F4F4;
}

UL, OL, LI {
    list-style: disc;
}

HR  {
    width: 100%;
    height: 1px;
    background-color: #CCCCCC;
    border-width: 0px;
    padding: 0px;
    color: #CCCCCC;
}

.variablelist { 
    padding-top: 10; 
    padding-bottom:10; 
    margin:0;
}

.itemizedlist, UL { 
    padding-top: 0; 
    padding-bottom:0; 
    margin:0; 
}

.term { 
    font-weight:bold;
}
body center {
	text-align: left;
    color: #660033;
}

table, td, th {
	border: 0px;
}

th {
	border-bottom: 1px solid;
	border-color: #aaa;
}

tr.TableRowColor td {
	border-bottom: 1px solid;
	border-color: #aaa;
}

dl dd {
	font-size: 90%;
	line-height: 120%;
}

p {
	padding-left: 5px;
	padding-top: 0px;
	padding-bottom: 0px;
}
