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

html {
    padding:        0pt;
    margin:         0pt;
}

body {
    margin-top:     1em;
    margin-bottom:  1em;
    margin-left:    16%;
    margin-right:   8%;
    font-size: 10.5pt;
    line-height: 1.3;
    font-family:     "Palatino Linotype", "Times New Roman", Times, serif;
}

div {
    margin:         0pt;
}

p {
    text-align:     left;
    margin-bottom:  .6em;
    line-height:    1.4;
}

td {   line-height:    1.2;
       padding: .3em;
       }

hr {
    margin-top:     .6em;
    margin-bottom:  .6em;
    margin-left:    0pt;
    margin-right:   0pt;
    border:         1px solid gray;
    background:     gray;
}

h2,h3,h4,h5 {
  margin: 0 0 0.5em 0;
  page-break-after: avoid;
  font-family: Helvetica, Arial, sans-serif;
  font-weight: bold;
    color:          #525D76;
}

h2 {
  margin-left: -10%; }

h2, h3, h4 { margin-top: 1em; }

/* later rules of same specificity override earlier ones */
/* cant use ">" because IE doesn't recognize */

div.chapter div.titlepage h2.title {
  margin-bottom: 1.5em;
  font-size: 1.6em;
  letter-spacing: -0.07ex;
  border-top:solid black 2.25pt;
}

/* this one comes after and is therefore more specific */

div.section div.titlepage h2.title {  /* h2 */
  font-size: 1.3em;
  border-top:solid black 1.00pt;
}

h3 {
  margin-left: -5%;
  font-size: 1.2em;
  border-top:solid black .75pt;
}

div.note h3, div.tip h3 {
    margin-left: 0;
    font-size: 1.2em;
    border-top: none;
    margin-top: 0em;
}

h4 {
  font-size: 1.1em;
}

a {
   text-decoration: underline;
   /*color: black;*/
}

a:hover {
   text-decoration: underline;
   color: black;
}

h3,h4,h5 {
    line-height:    1.3;
    margin-top:     1.5em;
    font-family:    Arial, Sans-serif;
}

h1.title {
    text-align:     left;

    margin-top:     2em;
    margin-bottom:  2em;
    margin-left:    0pt;
    margin-right:   0pt;
}

h2.subtitle, h3.subtitle {
    text-align:     left;
    margin-top:     2em;
    margin-bottom:  2em;
    text-transform: uppercase;
}

h3.author, p.othercredit {
    font-size:      0.9em;
    font-weight:    normal;
    font-style:     oblique;
    text-align:     left;
    color:          #525D76;
}

td.tableSubhead {
    font-weight:    bold;
    background-color: silver;
}

div.titlepage {
}

div.section {
}


div.authorgroup
{
    text-align:     left;
    margin-bottom:  3em;
    display:        block;
}

div.toc, div.list-of-examples, div.list-of-figures {

    margin-bottom:  3em;
}


div.itemizedlist {
    margin-top:     0.5em;
    margin-bottom:  0.5em;
}

ol,ul {
}

li {
}

pre {
    margin:         .75em 0;
    line-height:    1.25;
    color:          black;
}

pre.programlisting {
    font-size:      9pt;
    padding:        5pt 2pt;
    border:         1pt solid black;
    background:     #eeeeee;
}

div.table {
    margin:         1em;
    padding:        0.5em;
    text-align:     center;
}

div.table table {
 /*    display:        block; */   /* in firefox, breaks centering */
    margin-left: auto;  /* see http://theodorakis.net/tablecentertest.html */
    margin-right: auto;
}

div.table td {
    padding-right:  5px;
    padding-left:   5px;
}

div.table p.title {
    text-align:     center;
    margin-left:    5%;
    margin-right:   5%;
}

p.releaseinfo, .copyright {
    font-size:      0.9em;
    text-align:     left;
    margin:         0px;
    padding:        0px;
}

div.note, div.important, div.example, div.informalexample, div.tip, div.caution {
    margin:         1em;
    padding:        0.5em;
    border:         1px solid gray;
    background-color: #f8f8e0;
}

div.important th, div.note th, div.tip th {
    text-align:     left;
    border-bottom:  solid 1px gray;
}

div.navheader, div.navheader table {
    font-family:    sans-serif;
    font-size:      12px;
}

div.navfooter, div.navfooter table {
    font-family:    sans-serif;
    font-size:      12px;
}

div.figure, div.screenshot {
    text-align:     center;  /* needed for ms5 */
    margin-top:     1em;
    margin-bottom:  1em;
}

div.figure table, div.screenshot table {    /* see http://theodorakis.net/tablecentertest.html */
    margin-left: auto;
    margin-right: auto;
}

div.figure p.title {
    text-align:     center; 
    margin-left:    15%;
    margin-right:   15%;
}

div.example p.title {
    margin-top:     0em;
    margin-bottom:  0.6em;
    text-align:     left;
    padding-bottom: 0.4em;
    border-bottom:  solid 1px gray;
}

div.figure img {
    border:         1px solid gray;
    padding:        0.5em;
    margin:         0.5em;
}

div.revhistory {
    font-size:      0.8em;
    width:          90%;
    margin-left:    5%;
    margin-top:     3em;
    margin-bottom:  3em;
}

div.revhistory table {
    font-family:    sans-serif;
    font-size:      12px;
  border-collapse: collapse;
}

div.revhistory table tr {
  border:         solid 1px gray;
}

div.revhistory table th {
  border: none;
}

span.bold-italic {
  font-weight: bold;
  font-style: italic;
}
