/*
 * ddlutils.css_t
 * ~~~~~~~~~~~~
 *
 * Adapted from the Sphinx themes used in Celery (https://github.com/ask/celery)
 * :copyright: Copyright 2010 by Armin Ronacher.
 * :license: BSD, see LICENSE for details.
 */

{% set page_width = 940 %}
{% set sidebar_width = 220 %}
{% set body_font_stack = "'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif" %}
{% set headline_font_stack = "'Ubuntu', " ~ font_family %}
{% set code_font_stack = "'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace" %}

@import url("basic.css");
 
/* -- page layout ----------------------------------------------------------- */
 
body {
    font-family: {{ body_font_stack }};
    font-size: 17px;
    background-color: white;
    color: #000;
    margin: 30px 0 0 0;
    padding: 0;
}

div.document {
    width: {{ page_width }}px;
    margin: 0 auto;
}

div.deck {
    font-size: 18px;
}

p.developmentversion {
    color: red;
}

div.related {
    width: {{ page_width - 20 }}px;
    padding: 5px 10px;
    background: #FAFAFA;
    margin: 15px auto 15px auto;
}

div.documentwrapper {
    float: left;
    width: 100%;
}

div.bodywrapper {
    margin: 0 0 0 {{ sidebar_width }}px;
}

div.sphinxsidebar {
    width: {{ sidebar_width }}px;
}

hr {
    border: 1px solid #B1B4B6;
}
 
div.body {
    background-color: #ffffff;
    color: #3E3E3E;
    padding: 0 30px 0 30px;
}

img.celerylogo {
    padding: 0 0 10px 10px;
    float: right;
}
 
div.footer {
    width: {{ page_width - 15 }}px;
    margin: 10px auto 30px auto;
    padding-right: 15px;
    font-size: 14px;
    color: #888;
    text-align: right;
}

div.footer a {
    color: #888;
}

div.sphinxsidebar a {
    color: #444;
    text-decoration: none;
    border-bottom: 1px dashed #DCDCDC;
}

div.sphinxsidebar a:hover {
    border-bottom: 1px solid #999;
}
 
div.sphinxsidebar {
    font-size: 14px;
    line-height: 1.5;
}

div.sphinxsidebarwrapper {
    padding: 7px 10px;
}

div.sphinxsidebarwrapper p.logo {
    padding: 0 0 20px 0;
    margin: 0;
}
 
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
    font-family: {{ headline_font_stack }};
    color: #444;
    font-size: 24px;
    font-weight: normal;
    margin: 0 0 5px 0;
    padding: 0;
}

div.sphinxsidebar h4 {
    font-size: 20px;
}

div.sphinxsidebar h3 a {
    color: #444;
}

div.sphinxsidebar p.logo a,
div.sphinxsidebar h3 a,
div.sphinxsidebar p.logo a:hover,
div.sphinxsidebar h3 a:hover {
    border: none;
}
 
div.sphinxsidebar p {
    color: #555;
    margin: 10px 0;
}

div.sphinxsidebar ul {
    margin: 10px 0;
    padding: 0;
    color: #000;
}
 
div.sphinxsidebar input {
    border: 1px solid #ccc;
    font-family: {{ body_font_stack }};
    font-size: 1em;
}
 
/* -- body styles ----------------------------------------------------------- */
 
a {
    color: #1F626F;
    text-decoration: underline;
}
 
a:hover {
    color: #1F4E6F;
    text-decoration: underline;
}
 
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
    font-family: {{ headline_font_stack }};
    font-weight: normal;
    margin: 30px 0px 10px 0px;
    padding: 0;
}
 
div.body h1 { margin-top: 0; padding-top: 0; font-size: 200%; }
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }

div.body h1 a.toc-backref,
div.body h2 a.toc-backref,
div.body h3 a.toc-backref,
div.body h4 a.toc-backref,
div.body h5 a.toc-backref,
div.body h6 a.toc-backref {
    color: inherit!important;
    text-decoration: none;
}
 
a.headerlink {
    color: #ddd;
    padding: 0 4px;
    text-decoration: none;
}
 
a.headerlink:hover {
    color: #444;
    background: #eaeaea;
}
 
div.body p, div.body dd, div.body li {
    line-height: 1.4em;
}

div.admonition {
    margin: 20px -30px;
    padding: 10px 30px;
    border-top: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}

div.admonition p.admonition-title {
    font-family: {{ headline_font_stack }};
    font-weight: normal;
    font-size: 24px;
    margin: 0 0 10px 0;
    padding: 0;
    line-height: 1;
}

div.admonition p.last {
    margin-bottom: 0;
}

div.highlight{
    background-color: white;
}

dt:target, .highlight {
    background: #FAFAFA;
}

div.note {
    border-top: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}
 
div.seealso {
    border-top: 1px solid #fff;
    border-bottom: 1px solid #fff;
}
 
div.topic {
    border-top: 1px solid #666;
    border-bottom: 1px solid #666;
}
 
div.warning {
    border-top: 1px solid #666;
    border-bottom: 1px solid #666;
}
 
p.admonition-title {
    display: inline;
}
 
p.admonition-title:after {
    content: ":";
}

pre, tt {
    font-family: {{ code_font_stack }};
    font-size: 0.9em;
}

img.screenshot {
}

tt.descname, tt.descclassname {
    font-size: 0.95em;
}

tt.descname {
    padding-right: 0.08em;
}

img.screenshot {
    -moz-box-shadow: 2px 2px 4px #eee;
    -webkit-box-shadow: 2px 2px 4px #eee;
    box-shadow: 2px 2px 4px #eee;
}

table.docutils {
    border: 1px solid #888;
    -moz-box-shadow: 2px 2px 4px #eee;
    -webkit-box-shadow: 2px 2px 4px #eee;
    box-shadow: 2px 2px 4px #eee;
}

table.docutils td, table.docutils th {
    border: 1px solid #888;
    padding: 0.25em 0.7em;
}

table.field-list, table.footnote {
    border: none;
    -moz-box-shadow: none;
    -webkit-box-shadow: none;
    box-shadow: none;
}

table.footnote {
    margin: 15px 0;
    width: 100%;
    border: 1px solid #eee;
    background: #fdfdfd;
    font-size: 0.9em;
}

table.footnote + table.footnote {
    margin-top: -15px;
    border-top: none;
}

table.field-list th {
    padding: 0 0.8em 0 0;
}

table.field-list td {
    padding: 0;
}

table.footnote td.label {
    width: 0px;
    padding: 0.3em 0 0.3em 0.5em;
}

table.footnote td {
    padding: 0.3em 0.5em;
}

dl {
    margin: 0;
    padding: 0;
}

dl dd {
    margin-left: 30px;
}

blockquote {
    margin: 0 0 0 30px;
    padding: 0;
}

ul {
    margin: 10px 0 10px 30px;
    padding: 0;
}
 
pre {
    background: #FAFAFA;
    padding: 7px 10px;
    margin: 15px 0;
    border: 1px solid #C7C7C7;
    border-radius: 2px;
    -moz-border-radius: 2px;
    -webkit-border-radius: 2px;
    line-height: 1.3em;
}
 
tt {
    background: #FAFAFA;
    color: #222;
    /* padding: 1px 2px; */
}

tt.xref, a tt {
    background: #FAFAFA;
    border-bottom: 1px solid white;
}

a.reference {
    text-decoration: none;
    border-bottom: 1px dashed #DCDCDC;
}

a.reference:hover {
    border-bottom: 1px solid #6D6D6D;
}

a.footnote-reference {
    text-decoration: none;
    font-size: 0.7em;
    vertical-align: top;
    border-bottom: 1px dashed #DCDCDC;
}

a.footnote-reference:hover {
    border-bottom: 1px solid #6D6D6D;
}

a:hover tt {
    background: #EEE;
}