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


@import "color.css";
@import "nav.css";
@import "xmlverbatim.css";
@import "ant.css";
@import "ivy-ref.css";
@import "shell.css";
@import "tree.css";

/*
** HTML elements
*/
body  {
  margin: 0;
  padding: 0;
  bgcolor: #ffffff;
}
#body  {
  display: table;
  margin: 8px auto;
  padding: 0;
  width: 98%;
}
body, p, td, li, ul, ol  {
  font-family: Verdana, Helvetica, Arial, sans-serif;
  font-size: small;
}
h1, h2, h3, h4, h5, h6 {
  font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
}
h1 {
/*
  margin-left: 15px;
  margin-right: 15px;
  */
  padding-left: 10px;
  font-size: 1.6em;
  -moz-border-radius-topleft: 5px;
  -moz-border-radius-topright: 5px;
  -moz-border-radius-bottomright: 5px;
  -moz-border-radius-bottomleft: 5px;
}
h2 {
  font-size: 1.4em;
}
h3 {
  font-size: 1.2em;
}
h4 {
  font-size: 1.1em;
}
tr.dark td, tr.light td {
  padding: 0.3em;
}
a:link {
  text-decoration: none;
  font-weight: bold;
}
a:visited {
  text-decoration: none;
  font-weight: bold;
}
a:hover, a:active {
  font-weight: bold;
  text-decoration: underline;
}
p {
  margin: 0 0 1.3em 0;
  padding: 0;
}
blockquote {
  padding: 0 15px 0 15px;
  margin: 15px 50px 15px 50px;
  text-align: left;
  font-size: 1.2em;
  line-height: 1.3em;
  font-family: "Trebuchet MS", Geneva, Arial, Helvetica, SunSans-Regular, Verdana, sans-serif;
}
pre {
  padding: 0.75em 1.5em;
  font-size: 1em;
}
.form-item {
  margin-top: 1em;
}
.item-list .title {
  font-size: 0.85em;
}
.hide {
  display: none
}

/*
** Page layout blocks / IDs
*/
#body  {
  -moz-border-radius-topleft: 5px;
  -moz-border-radius-topright: 5px;
  -moz-border-radius-bottomright: 5px;
  -moz-border-radius-bottomleft: 5px;
  padding-top: 5px;
  padding-bottom: 5px;
}
#home img {
  padding: 5px 20px 10px 10px;
}
.product img {
  padding: 5px 20px 10px 10px;
}

#top-menu tr {
  padding: 0;
  margin: 0;
}

#top-menu td {
  padding: 0;
  margin: 0;
}

#search {
  padding: 0 1em 0 1em;
  margin: 0;
}
#search .form-text, #search .form-submit {
  padding: 0;
  margin: 0;
  font-size: 0.85em;
}
#search .form-text {
  width: 8em;
  padding: 0;
  margin: 0;
}

#sidebar-left, #sidebar-right {
  width: 200px;
  /* padding in px not ex because IE messes up 100% width tables otherwise */
  padding: 15px 5px 75px 10px;
  vertical-align: top;
}
#sidebar-left li, #sidebar-right li {
  font-size: 1em;
}
.block h2 {
  margin: 5px 0px 0px 0px;
  padding: 1px 5px 1px 30px;
  font-size: 1.2em;
  font-weight: 700;
  -moz-border-radius-topleft: 5px;
  -moz-border-radius-topright: 5px;
} 

.block .content {
  -moz-border-radius-bottomright: 5px;
  -moz-border-radius-bottomleft: 5px;
  margin-bottom: 10px;
}

#main {
  padding-left: 10px;
  padding-right: 10px;
  padding-bottom: 10px;
  background: transparent url(../images/background.png) center center no-repeat;
}

.content {
  padding-top: 10px;
}

#forum {
  margin: 15px 0 15px 0;
}
#forum table {
  width: 100%;
}
#forum table tr th {
  text-align: center;
  font-size: 0.75em;
}
#forum table tr th a  {
  text-decoration: underline;
}
#forum table tr th img  {
  margin: 0;
}
#forum td {
  padding: 0.5em 0.5em 0.5em 0.5em;
}
#forum td.container a {
  padding: 20px 0 20px 35px;
}
#forum td.statistics, #forum td.settings, #forum td.pager {
  height: 1.5em;
}
#forum td .links {
  padding-top: 0.7em;
  font-size: 0.9em;
}
.block-forum h3 {
  margin-bottom: .5em;
}

#footer-menu td {
  padding-top: 3px;
}

.footer {
  text-align: center;
  margin-top: 3pt;
  margin-bottom: 3pt;
  font-size: 85%;
}

.comparison td, .comparison th {
    text-align: center;
}

.comment {
  -moz-border-radius: 5px;
  border: 1px solid #abc;
  padding: .5em;
  margin-bottom: 1em;
}
.comment .title {
  font-size: 1em;
  padding: 10px 0px 12px 19px;
  background: transparent url(icon-comment.png) left center no-repeat;
}
.comment .new {
  font-weight: bold;
  font-size: 1em;
  margin-left: 2px;
  color: red;
}
.comment .picture {
  border: 1px solid #fff;
  float: right;
  margin: 10px;
}
.submitted {
  color: #999;
  font-size: 0.79em;
}
.since {
  font-weight: 700;
  font-style: italic;
}

.postit {
  margin:10px;
  padding:10px;
  -moz-border-radius:10px;
  float:right;
  width:400px;
}

table.home {
    text-align:center;
    color:#6e9244;
    font-family:verdana, "Lucida Grande", arial, helvetica, sans-serif;
}
tr.homeitems {
    font-size:large;
}
tr.homeitems td {
    padding: 0 0.5cm 0 0.5cm;
}
tr.homeitems a:link, a:visited {
    color: #6e9244; 
    text-decoration: none;
}
tr.homeitems a:hover {
    text-decoration: underline;
    background: none !important;
}
.home img { border-width:0; }

