/**
 * 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, html {
    font-family:Georgia, Arial, sans-serif; 
    color: #666666;
}
body, html, table, tr, td, tbody {
    padding:0;
    margin:0;
    vertical-align: top;
}
body {
    padding-top: 20px;
}

h1, h2, h3, h4, h5, h6 {
    font-family: 'Graublau Web', Helvetica, sans-serif;
    overflow: visible;
    color: #993333;
}

h2 {
  border-top: 4px solid #E0E0E0 !important;
  margin-top: 1.5em !important;
  padding-top: 0.5em !important;
}

p { margin-bottom:0px; }

a {
	color: #700;
	font-weight:bold;
	text-decoration: none;
}

a:hover { 
	color: #ff3333; 
	text-decoration: underline;
	}

img {
	border: none;
/*
	padding-right:2em
*/
}

.wrapper { min-width: 762px; width: 762px; margin: 0 auto; }

#navigation { width: 100%; float: left;
    font-family: Helvetica,Verdana,Arial,sans-serif; 
    background: black; 
	text-align:center; 
	padding: 8px 0 8px 0;
    color: #b55; 
	font-size: 10pt; 
	font-weight: bold;
  position: absolute;  
    top: 0px;
}
#navigation a { color: white; }
#navigation ul { display: block; margin:0; padding:0; }
#navigation li { list-style-type: none; display: inline; margin:0 5px 0 5px;}

#overview { width: 100%; padding-top:20px}
#overview div.message { 
    font-size: 11pt; 
    margin-top: -20px;
    padding-left: 120px;
    width: 350px;
}
#overview div.message h1{ margin-bottom: 5px; display:none; }
#overview div.message p{ margin-top: 0px; padding-bottom:14px; }

#spot { width: 100%; float: left; 
    margin-top: 15px;
    background:transparent url(../images/spot-banner.gif) repeat-x scroll 0 0;
    height: 277px;
}
#spot div.title {
    text-align:center; height:25px;
    text-align:center; padding-top: 2px;
    color: white; font-size: 10pt; font-weight: bold; 
    font-family: HelveticaNeue,"Helvetica Neue",Helvetica,Arial,Verdana,sans-serif; 
}
#spot div.content table {
    width: 100%; text-align:center; 
    color: black; font-size: 10pt; 
}

#spot a:hover {text-decoration: none; }

#spot div.spot-balloon {
  background:transparent url( ../../../images/spot-get-involved.gif ) no-repeat;
  background-position:center;
  height: 121px;
  text-align:left;
  padding-top: 25px;
  padding-left: 35px;
}

#spot div.spot-balloon li {
/*
  list-style: none;
*/
  list-style: disc;
}

/*
#spot div.spot-balloon {
  height: 120px;
  text-align:left;
  padding-top: 20px;
  padding-left: 15px;
}
*/

#content { width: 100%; float: left; padding-bottom: 20px; }
#content .wrapper { min-width: 700px; width: 700px; margin: 0 auto; padding-top: 1em}
#content div.left {
  float:left;
  width:200px;
  text-align:right;
  font-size: 18pt;
  clear:both;
}
#content h1 {
  font-size: 18pt;
}
#content div.right {
  float:right;
  width:450px;
  text-align:left;
}

#blog { width: 100%; float: left; }
#blog .wrapper { min-width: 600px; width: 600px; margin: 0 auto; }
#blog h1 {
  font-family: HelveticaNeue,"Helvetica Neue",Helvetica,Arial,Verdana,sans-serif; 
  font-size: 18pt; color: #993333;
}
#blog h2 {
  border-bottom: thin dashed #DDD;
  font-size: 16pt;
  margin-bottom: 5px;
}
#blog div.post p {
  padding-left: 10px;
}
#blog div.post .details {
  padding-top: 5px;
  color: #ccc;
  font-size: 10pt;
  font-family: HelveticaNeue,"Helvetica Neue",Helvetica,Arial,Verdana,sans-serif; 
}

#content .post h2 {
  margin-bottom:5px;
}
#content .post .details {
  color: #ccc;
  font-size: 10pt;
  font-family: HelveticaNeue,"Helvetica Neue",Helvetica,Arial,Verdana,sans-serif; 
  margin-top:0px;
}

code {	
  font-size: .9em;
  font-family: 'Droid Sans Mono', 'Courier New', monospace !important;
}
pre {
  background-color: #F8F8FF; 
  
  overflow:auto;
  -moz-background-clip:border;
  -moz-background-inline-policy:continuous;
  -moz-background-origin:padding;
  margin: 1em 0 1em 0;
  border:1px solid #DDDDDD;
  
  border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;  
  border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
  border-style: solid;  border-width: 1px; border-color: #dedede !important; 
  padding: 1em;
}
pre code {	
	font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
	font-weight:normal;
	font-style:normal;
}
div.compare { width: 700px; }
div.compare div.compare-left { float:left; width:340px; padding:5px; margin-top: 15px; }
div.compare div.compare-right { float:right; width:340px; padding:5px; margin-top: 15px; }
div.compare div h3 {
  margin-left: 15px;
  padding: 5px 15px;
  display: inline;
  font-size: .8em;
  color: #666;

  border-top: 1px solid #ccc; -moz-border-top-colors: #ccc white white #e5e5e5;
  border-left: 1px solid #ccc; -moz-border-left-colors: #ccc white white #e5e5e5;
  border-right: 1px solid #ccc;-moz-border-right-colors: #ccc white white #e5e5e5;
  border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px;  -moz-border-radius-topleft: 8px;
  border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px; 
}
div.compare div div {
  margin: 5px 0px 0px 0px;
}

.clear {
  clear:both;
}

.wide div.compare div.compare-left { float:none; width:700px; }
.wide div.compare div.compare-right { float:none; width:700px; }

.hide {
  display:none;
}