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, serif;
	background-color: white;
	font-size: 8px;
 }

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

/* Font used in left-hand frame lists */
.FrameTitleFont   { font-family: Arial,Helvetica,sans-serif; font-size:12pt; line-height: normal; }
.FrameHeadingFont { font-family: Arial,Helvetica,sans-serif; font-size:10pt; line-height: normal;}
.FrameItemFont    { 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: 0;
}

/*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: 1px solid #CCCCCC;
  background-color: #F4F4F4;
}

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

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

.variablelist { 
    padding-top: 10px;
    padding-bottom: 10px; 
    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: 0;
}

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: 0;
	padding-bottom: 0;
}
