/* Epydoc CSS Stylesheet
*
*  This is a massivley hacked stylesheet for epydoc, the very nice Python API
*  Documentation generator. The general look and feel is based on sphinx.
*
*  Feel free to tweak this some more to make the theme even more pleasing 
*  if you have the time to spare for such things. The typography in particular
*  could do with sorting out. Unless you like writing masocistic CSS however,
*  I'd recommend looking to refactor the markup generated by epydoc.
*
*/

/* Yahoo! Reset Styles
Copyright (c) 2008, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.5.1
*/
html {
    color: #000;
    background: #FFF;
}
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td {
    margin: 0;
    padding: 0;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}
fieldset,img {
    border: 0;
}
address,caption,cite,code,dfn,em,strong,th,var {
    font-style: normal;
    font-weight: normal;
}
li {
    list-style: none;
}
caption,th {
    text-align: left;
}
h1,h2,h3,h4,h5,h6 {
    font-size: 100%;
    font-weight: normal;
}
q:before,q:after {
    content: '';
}
abbr,acronym {
    border: 0;
    font-variant: normal;
}
sup {
    vertical-align: text-top;
}
sub {
    vertical-align: text-bottom;
}
input,textarea,select {
    font-family: inherit;
    font-size: inherit;
    font-weight: inherit;
}
input,textarea,select {*font-size:100%;
}
legend {
    color: #000;
}
body {
    font: 13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;
}
table {
    font-size: inherit;
    font: 100%;
}
pre,code,kbd,samp,tt {
    font-family: monospace;*font-size:108%;
    line-height: 100%;
}



/* Default Colors & Styles
* - Set the default foreground & background color with 'body'; and
* link colors with 'a:link' and 'a:visited'.
* - Use bold for decision list terms.
* - The heading styles defined here are used for headings *within*
* docstring descriptions. All headings used by epydoc itself use
* either class='epydoc' or class='toc' (CSS styles for both
* defined below).
*/
body {
    background: #ffffff;
    color: #000000;
}
p {
    margin-top: 0.5em;
    margin-bottom: 0.5em;
}
a {
    color: #355f7c;
    text-decoration: none;
}

a:hover {
    text-decoration: underline;
}

dt {
    font-weight: bold;
}
h1, h2 {
    color: #20435C;
    background: #F2F2F2;
    border-bottom: 1px solid #CCC;
    padding: 10px;
}
center {
    display: none;
}
code {
    font-size: 100%;
}
/* N.B.: class, not pseudoclass */
a.link {
    font-family: monospace;
}

/* Page Header & Footer
* - The standard page header consists of a navigation bar (with
* pointers to standard pages such as 'home' and 'trees'); a
* breadcrumbs list, which can be used to navigate to containing
* classes or modules; options links, to show/hide private
* variables and to show/hide frames; and a page title (using
* <h1>). The page title may be followed by a link to the
* corresponding source code (using 'span.codelink').
* - The footer consists of a navigation bar, a timestamp, and a
* pointer to epydoc's homepage.
*/
h1.epydoc {
    margin: -14px 0 0;
    font-size: +140%;
    color: #20435C;
}
h2.epydoc {
    font-size: +130%;
}
h3.epydoc {
    font-size: +115%;
    margin-top: 0.2em;
    margin-left: 25px;
}
td h3.epydoc {
    font-size: +115%;
    font-weight: bold;
    margin-bottom: 0;
}
table.navbar {
    background: #133F52;
    color: #355f7c;
    border: 0;
}
table.navbar table {
    color: #355f7c;
}
th.navbar-select {
    background: #1C4E63;
    color: #FFF;
}
table.navbar table th {
    padding-left: 15px;
}
table.navbar a {
    text-decoration: none;
    color: #FFF;
    padding: 0 10px;
    display: block;
}
table td.footer {
    padding: 10px;
    color: #666;
    font-size: 90%;
}
/* Table Headers
* - Each summary table and details section begins with a 'header'
* row. This row contains a section title (marked by
* 'span.table-header') as well as a show/hide private link
* (marked by 'span.options', defined above).
* - Summary tables that contain user-defined groups mark those
* groups using 'group header' rows.
*/
td.table-header {
    background: #F2F2F2;
    color: #20435C;
    border: 1px solid #CCC;
    padding: 5px 10px;
}
td.table-header table a:visited {
    color: #204080;
}
span.table-header {
    font-size: 120%;
}
th.group-header {
    background: #c0e0f8;
    color: #000000;
    text-align: left;
    font-size: 115%;
    border: 1px solid #608090;
}

/* Summary Tables (functions, variables, etc)
* - Each object is described by a single row of the table with
* two cells. The left cell gives the object's type, and is
* marked with 'code.summary-type'. The right cell gives the
* object's name and a summary description.
* - CSS styles for the table's header and group headers are
* defined above, under 'Table Headers'
*/
table.summary {
    border-collapse: collapse;
    background: #FFF;
    color: #000000;
    border: 1px solid #CCC;
    margin: 0 0 20px;
}
td.summary {
    border: 1px solid #CCC;
    padding: 5px 10px;
}
code.summary-type {
    font-size: 85%;
}

/* Details Tables (functions, variables, etc)
* - Each object is described in its own div.
* - A single-row summary table w/ table-header is used as
* a header for each details section (CSS style for table-header
* is defined above, under 'Table Headers').
*/
table.details {
    border-collapse: collapse;
    background: #FFF;
    color: #000000;
    border: 0;
    margin: .2em 0 0 0;
}
table.details table {
    color: #000000;
}

/* Fields */
dl.fields {
    margin-left: 2em;
    margin-top: 1em;
    margin-bottom: 1em;
}
dl.fields dd ul {
    margin-left: 0em;
    padding-left: 0em;
}
dl.fields dd ul li ul {
    margin-left: 2em;
    padding-left: 0em;
}
div.fields {
    margin-left: 2em;
}
div.fields p {
    margin-bottom: 0.5em;
}

/* Index tables (identifier index, term index, etc)
* - link-index is used for indices containing lists of links
* (namely, the identifier index & term index).
* - index-where is used in link indices for the text indicating
* the container/source for each link.
* - metadata-index is used for indices containing metadata
* extracted from fields (namely, the bug index & todo index).
*/
table.link-index {
    border-collapse: collapse;
    background: #F2F2F2;
    color: #000000;
    border: 1px solid #CCC;
}
td.link-index {
    border-width: 0px;
    padding: 3px;
}
span.index-where {
    font-size: 70%;
}
table.metadata-index {
    border-collapse: collapse;
    background: #e8f0f8;
    color: #000000;
    border: 1px solid #608090;
    margin: .2em 0 0 0;
}
td.metadata-index {
    border-width: 1px;
    border-style: solid;
}
table.link-index h2.epydoc {
    border-width: 1px 0;
}

/* Function signatures
* - sig* is used for the signature in the details section.
* - .summary-sig* is used for the signature in the summary
* table, and when listing property accessor functions.
* */
.sig-name {
    color: #006080;
}
.sig-arg {
    color: #008060;
}
.sig-default {
    color: #602000;
}
.summary-sig {
    font-family: monospace;
}
.summary-sig-name {
    color: #006080;
    font-weight: bold;
}
table.summary a.summary-sig-name:link {
    color: #006080;
    font-weight: bold;
}
table.summary a.summary-sig-name:visited {
    color: #006080;
    font-weight: bold;
}
.summary-sig-arg {
    color: #006040;
}
.summary-sig-default {
    color: #501800;
}

/* Subclass list
*/
ul.subclass-list {
    display: inline;
}
ul.subclass-list li {
    display: inline;
}

/* To render variables, classes etc. like functions */
table.summary .summary-name {
    color: #006080;
    font-weight: bold;
    font-family: monospace;
}
table.summary
a.summary-name:link {
    color: #006080;
    font-weight: bold;
    font-family: monospace;
}
table.summary
a.summary-name:visited {
    color: #006080;
    font-weight: bold;
    font-family: monospace;
}

/* Variable values
* - In the 'variable details' sections, each varaible's value is
* listed in a 'pre.variable' box. The width of this box is
* restricted to 80 chars; if the value's repr is longer than
* this it will be wrapped, using a backslash marked with
* class 'variable-linewrap'. If the value's repr is longer
* than 3 lines, the rest will be ellided; and an ellipsis
* marker ('...' marked with 'variable-ellipsis') will be used.
* - If the value is a string, its quote marks will be marked
* with 'variable-quote'.
* - If the variable is a regexp, it is syntax-highlighted using
* the re* CSS classes.
*/
pre.variable {
    padding: .5em;
    margin: 0;
    background: #F2F2F2;
    color: #000000;
    border: 1px solid #CCC;
}
.variable-linewrap {
    color: #604000;
    font-weight: bold;
}
.variable-ellipsis {
    color: #604000;
    font-weight: bold;
}
.variable-quote {
    color: #604000;
    font-weight: bold;
}
.variable-group {
    color: #008000;
    font-weight: bold;
}
.variable-op {
    color: #604000;
    font-weight: bold;
}
.variable-string {
    color: #006030;
}
.variable-unknown {
    color: #a00000;
    font-weight: bold;
}
.re {
    color: #000000;
}
.re-char {
    color: #006030;
}
.re-op {
    color: #600000;
}
.re-group {
    color: #003060;
}
.re-ref {
    color: #404040;
}

/* Base tree
* - Used by class pages to display the base class hierarchy.
*/
pre.base-tree {
    font-size: 80%;
    margin: 0;
}


/* Syntax Highlighting for Source Code
* - doctest examples are displayed in a 'pre.py-doctest' block.
* If the example is in a details table entry, then it will use
* the colors specified by the 'table pre.py-doctest' line.
* - Source code listings are displayed in a 'pre.py-src' block.
* Each line is marked with 'span.py-line' (used to draw a line
* down the left margin, separating the code from the line
* numbers). Line numbers are displayed with 'span.py-lineno'.
* The expand/collapse block toggle button is displayed with
* 'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
* modify the font size of the text.)
* - If a source code page is opened with an anchor, then the
* corresponding code block will be highlighted. The code
* block's header is highlighted with 'py-highlight-hdr'; and
* the code block's body is highlighted with 'py-highlight'.
* - The remaining py-* classes are used to perform syntax
* highlighting (py-string for string literals, py-name for names,
* etc.)
*/
pre.py-doctest {
    padding: .5em;
    margin: 1em;
    background: #F2F2F2;
    color: #000000;
    border: 1px solid #CCC;
}
table pre.py-doctest {
    background: #F2F2F2;
    color: #000000;
}
pre.py-src {
    border: 1px solid #CCC;
    background: #FFF;
    color: #000000;
    margin: 20px 0;
}
.py-line {
    border-left: 1px solid #CCC;
    margin-left: .2em;
    padding-left: .4em;
}
.py-lineno {
    font-style: italic;
    font-size: 90%;
    padding-left: .5em;
}
a.py-toggle {
    text-decoration: none;
}
div.py-highlight-hdr {
    border-top: 1px solid #CCC;
    border-bottom: 1px solid #CCC;
    background: #F2F2F2;
}
div.py-highlight {
    border-bottom: 1px solid #CCC;
    background: #F2F2F2;
}
.py-prompt {
    color: #005050;
    font-weight: bold;
}
.py-more {
    color: #005050;
    font-weight: bold;
}
.py-string {
    color: #006030;
}
.py-comment {
    color: #003060;
}
.py-keyword {
    color: #600000;
}
.py-output {
    color: #404040;
}
.py-name {
    color: #000050;
}
.py-name:link {
    color: #000050 !important;
}
.py-name:visited {
    color: #000050 !important;
}
.py-number {
    color: #005000;
}
.py-defname {
    color: #000060;
    font-weight: bold;
}
.py-def-name {
    color: #000060;
    font-weight: bold;
}
.py-base-class {
    color: #000060;
}
.py-param {
    color: #000060;
}
.py-docstring {
    color: #006030;
}
.py-decorator {
    color: #804020;
}

/* Graphs & Diagrams
* - These CSS styles are used for graphs & diagrams generated using
* Graphviz dot. 'img.graph-without-title' is used for bare
* diagrams (to remove the border created by making the image
* clickable).
*/
img.graph-without-title {
    border: none;
}
img.graph-with-title {
    border: 1px solid #000000;
}
span.graph-title {
    font-weight: bold;
}

/* General-purpose classes
* - 'p.indent-wrapped-lines' defines a paragraph whose first line
* is not indented, but whose subsequent lines are.
* - The 'nomargin-top' class is used to remove the top margin (e.g.
* from lists). The 'nomargin' class is used to remove both the
* top and bottom margin (but not the left or right margin --
* for lists, that would cause the bullets to disappear.)
*/
p.indent-wrapped-lines {
    padding: 0 0 0 7em;
    text-indent: -7em;
    margin: 0;
}
.nomargin-top {
    margin: 20px;
}
.nomargin {
    margin-top: 0;
    margin-bottom: 0;
}

/* HTML Log */
div.log-block {
    padding: 0;
    margin: .5em 0 .5em 0;
    background: #e8f0f8;
    color: #000000;
    border: 1px solid #000000;
}
div.log-error {
    padding: .1em .3em .1em .3em;
    margin: 4px;
    background: #ffb0b0;
    color: #000000;
    border: 1px solid #000000;
}
div.log-warning {
    padding: .1em .3em .1em .3em;
    margin: 4px;
    background: #ffffb0;
    color: #000000;
    border: 1px solid #000000;
}
div.log-info {
    padding: .1em .3em .1em .3em;
    margin: 4px;
    background: #b0ffb0;
    color: #000000;
    border: 1px solid #000000;
}
h2.log-hdr {
    background: #70b0ff;
    color: #000000;
    margin: 0;
    padding: 0em 0.5em 0em 0.5em;
    border-bottom: 1px solid #000000;
    font-size: 110%;
}
p.log {
    font-weight: bold;
    margin: .5em 0 .5em 0;
}
tr.opt-changed {
    color: #000000;
    font-weight: bold;
}
tr.opt-default {
    color: #606060;
}
pre.log {
    margin: 0;
    padding: 0;
    padding-left: 1em;
}

/* Hacks
*  This section is reseerved for the really horrible bits. In reality the
*  markup generated by epydoc wants a good kickings but a CSS patch is 
*  better than nothing. Some of this does remove useful links or output
*  because finding somewhere to put them on the page wasn't easy. If your
*  favourite link has disappeared this is probably the reason.
*/

ul ul {
    margin-left: 1em;
}
ul ul ul {
    margin-left: 2em;
}
ul ul ul ul {
    margin-left: 3em;
}
a[target=mainFrame], a[target=moduleFrame] {
    margin: 0 10px;
}
h2.toc {
    margin-bottom: 10px;
}
h1.toc {
    display: none;
}
.options {
    display: none;
}
hr, br {
    display: none;
}
a[href="toc-everything.html"] {
    display: none;
}
.breadcrumbs {
    visibility: hidden;
}
.details p {
    margin-left: 25px;
}
body > p {
    margin: 20px;
}
