/*
 * ddlutils.css_t
 * ~~~~~~~~~~~~
 *
 * Adapted from celery's CSS at 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: #F2FCEE;
    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: #3E4349;
    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 #DCF0D5;
}

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: #348613;
    text-decoration: underline;
}
 
a:hover {
    color: #59B833;
    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 {
    background: #fafafa;
    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: #FAF3E8;
}

div.note {
    background-color: #eee;
    border: 1px solid #ccc;
}
 
div.seealso {
    background-color: #ffc;
    border: 1px solid #ff6;
}
 
div.topic {
    background-color: #eee;
}
 
div.warning {
    background-color: #ffe4e4;
    border: 1px solid #f66;
}
 
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: #F0FFEB;
    padding: 7px 10px;
    margin: 15px 0;
    border: 1px solid #C7ECB8;
    border-radius: 2px;
    -moz-border-radius: 2px;
    -webkit-border-radius: 2px;
    line-height: 1.3em;
}
 
tt {
    background: #F0FFEB;
    color: #222;
    /* padding: 1px 2px; */
}

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

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

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

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

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

a:hover tt {
    background: #EEE;
}