/* The contents of this file are subject to the Mozilla Public
 * License Version 1.1 (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.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 *
 * The Original Code is the Bugzilla Bug Tracking System.
 *
 * The Initial Developer of the Original Code is Everything Solved.
 * Portions created by Everything Solved are Copyright (C) 2006 
 * Everything Solved. All Rights Reserved.
 *
 * Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
 */

body {
  background: white;
  color: #111;
  padding: 0 1em;
  margin: 0;
  font-family: Verdana, Arial, sans-serif;
  font-size: small;
}

a:link, a:active { color: #36415c; }
a:visited { color: #666; }
a:hover   { color: #888; }

h1 {
  font-size: 150%;
  font-weight: bold;
  border-bottom: 2px solid #ccc;
}
h2 {
  font-size: 125%;
  font-weight: bold;
  border-bottom: 1px solid #ccc;
  margin-bottom: 8px;
}
h3 {
  font-size: 115%;
  font-weight: bold;
  margin-bottom: 0;
  padding-bottom: 0;
}

/* This makes Description/Params/Returns look nice. */
dd   { margin-top: .2em; }
dd p { margin-top: 0; }
dl   { margin-bottom: 1em; }

/* This makes the names of functions slightly larger, in Gecko. */
body > dl > dt code { font-size: 1.35em; }

#pod h1 a, #pod h2 a, #pod h3 a {
  color: #36415c;
  text-decoration: none;
}

pre, code, tt, kbd, samp {
  /* Unfortunately, the default monospace fonts on most browsers
     look odd with relative sizing. */
  font-size: 12px;
}

.code {
  background: #eed;
  border: 1px solid #ccc;
}

pre.code {
  margin-left: 10px;
  width: 90%;
  padding: 10px;
}

/* Special styles for the Contents page */

.contentspage dt {
  font-size: large;
  font-weight: bold;
}

.pod_desc_table {
  border-collapse: collapse;
  table-layout: auto;
  border: 1px solid #ccc;
}

.pod_desc_table th {
  text-align: left;
}

.pod_desc_table td, .pod_desc_table th {
  padding: .25em;
  border-top: 1px solid #ccc;
}

.pod_desc_table .odd th, .pod_desc_table .odd td {
  background-color: #eee;
}

.pod_desc_table 
