/*
* 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.
*/
/**
 * General
 */

img { border: 0; }

#content table {
  border: 0;
  width: 100%;
}
/*Hack to get IE to render the table at 100%*/
* html #content table { margin-left: -3px; }

#content th,
#content td {
  margin: 0;
  padding: 0;
  vertical-align: top;
}

.clearboth {
  clear: both;
}

.note, .warning, .fixme {
  border: solid black 1px;
  margin: 1em 3em;
}

.note .label {
  background: #369;
  color: white;
  font-weight: bold;
  padding: 5px 10px;
}
.note .content {
  background-color:#f5f5f5;background-repeat:repeat-x;background-image:-khtml-gradient(linear,left top,left bottom,from(#fff),to(#f5f5f5));background-image:-moz-linear-gradient(top,#fff,#f5f5f5);background-image:-ms-linear-gradient(top,#fff,#f5f5f5);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#fff),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#fff,#f5f5f5);background-image:-o-linear-gradient(top,#fff,#f5f5f5);background-image:linear-gradient(top,#fff,#f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#f5f5f5',GradientType=0);
  color: black;
  line-height: 120%;
  font-size: 90%;
  padding: 5px 10px;
}
.warning .label {
  background: #C00;
  color: white;
  font-weight: bold;
  padding: 5px 10px;
}
.warning .content {
  background: #FFF0F0;
  color: black;
  line-height: 120%;
  font-size: 90%;
  padding: 5px 10px;
}
.fixme .label {
  background: #C6C600;
  color: black;
  font-weight: bold;
  padding: 5px 10px;
}
.fixme .content {
  padding: 5px 10px;
}

/**
 * Typography
 */

body {
  font-family: verdana, "Trebuchet MS", arial, helvetica, sans-serif;
  font-size: 100%;
  color: #404040;
}

#content {
  font-family: Georgia, Palatino, Times, serif;
  font-size: 95%;
}
#tabs {
  font-size: 70%;
}
#menu {
  font-size: 80%;
}
#footer {
  font-size: 70%;
}

h1, h2, h3, h4, h5, h6 {
  font-family: "Trebuchet MS", verdana, arial, helvetica, sans-serif;
  font-weight: bold;
  margin-top: 1em;
  margin-bottom: .5em;
}

h1 {
    margin-top: 0;
    margin-bottom: 1em;
  font-size: 1.4em;
  background-color:#f5f5f5;background-repeat:repeat-x;background-image:-khtml-gradient(linear,left top,left bottom,from(#fff),to(#f5f5f5));background-image:-moz-linear-gradient(top,#fff,#f5f5f5);background-image:-ms-linear-gradient(top,#fff,#f5f5f5);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#fff),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#fff,#f5f5f5);background-image:-o-linear-gradient(top,#fff,#f5f5f5);background-image:linear-gradient(top,#fff,#f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#f5f5f5',GradientType=0);
}
#content h1 {
  font-size: 160%;
  margin-bottom: .5em;
}
#menu h1 {
  margin: 0;
  padding: 10px;
  background: #336699;
  color: white;
}
h2 { 
  font-size: 120%;
  background-color:#f5f5f5;background-repeat:repeat-x;background-image:-khtml-gradient(linear,left top,left bottom,from(#fff),to(#f5f5f5));background-image:-moz-linear-gradient(top,#fff,#f5f5f5);background-image:-ms-linear-gradient(top,#fff,#f5f5f5);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#fff),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#fff,#f5f5f5);background-image:-o-linear-gradient(top,#fff,#f5f5f5);background-image:linear-gradient(top,#fff,#f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#f5f5f5',GradientType=0);
}
h3 { font-size: 100%; }
h4 { font-size: 90%; }
h5 { font-size: 80%; }
h6 { font-size: 75%; }

p {
  line-height: 120%;
  text-align: left;
  margin-top: .5em;
  margin-bottom: 1em;
}

a {
  color: #0069D6;
}

#content li,
#content th,
#content td,
#content li ul,
#content li ol{
  margin-top: .5em;
  margin-bottom: .5em;
}


#content li li,
#minitoc-area li{
  margin-top: 0em;
  margin-bottom: 0em;
}

#content .attribution {
  text-align: right;
  font-style: italic;
  font-size: 85%;
  margin-top: 1em;
}

.codefrag {
  font-family: "Courier New", Courier, monospace;
  font-size: 110%;
}
