/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */
/* For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt */

/* CSS styles for coverage.py. */

/* Page-wide styles */
html, body, h1, h2, h3, p, table, td, th {
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    font-weight: inherit;
    font-style: inherit;
    font-size: 100%;
    font-family: inherit;
    vertical-align: baseline;
    }

/* Set baseline grid to 16 pt. */
body {
    font-family: georgia, serif;
    font-size: 1em;
    }

html>body {
    font-size: 16px;
    }

/* Set base font size to 12/16 */
p {
    font-size: .75em;           /* 12/16 */
    line-height: 1.33333333em;  /* 16/12 */
    }

table {
    border-collapse: collapse;
    }
td {
    vertical-align: top;
}
table tr.hidden {
    display: none !important;
    }

p#no_rows {
    display: none;
    font-size: 1.2em;
    }

a.nav {
    text-decoration: none;
    color: inherit;
    }
a.nav:hover {
    text-decoration: underline;
    color: inherit;
    }

/* Page structure */
#header {
    background: #f8f8f8;
    width: 100%;
    border-bottom: 1px solid #eee;
    }

#source {
    padding: 1em;
    font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
    }

.indexfile #footer {
    margin: 1em 3em;
    }

.pyfile #footer {
    margin: 1em 1em;
    }

#footer .content {
    padding: 0;
    font-size: 85%;
    font-family: verdana, sans-serif;
    color: #666666;
    font-style: italic;
    }

#index {
    margin: 1em 0 0 3em;
    }

/* Header styles */
#header .content {
    padding: 1em 3em;
    }

h1 {
    font-size: 1.25em;
    display: inline-block;
}

#filter_container {
    display: inline-block;
    float: right;
    margin: 0 2em 0 0;
}
#filter_container input {
    width: 10em;
}

h2.stats {
    margin-top: .5em;
    font-size: 1em;
}
.stats span {
    border: 1px solid;
    padding: .1em .25em;
    margin: 0 .1em;
    cursor: pointer;
    border-color: #999 #ccc #ccc #999;
}
.stats span.hide_run, .stats span.hide_exc,
.stats span.hide_mis, .stats span.hide_par,
.stats span.par.hide_run.hide_par {
    border-color: #ccc #999 #999 #ccc;
}
.stats span.par.hide_run {
    border-color: #999 #ccc #ccc #999;
}

.stats span.run {
    background: #ddffdd;
}
.stats span.exc {
    background: #eeeeee;
}
.stats span.mis {
    background: #ffdddd;
}
.stats span.hide_run {
    background: #eeffee;
}
.stats span.hide_exc {
    background: #f5f5f5;
}
.stats span.hide_mis {
    background: #ffeeee;
}
.stats span.par {
    background: #ffffaa;
}
.stats span.hide_par {
    background: #ffffcc;
}

/* Help panel */
#keyboard_icon {
    float: right;
    margin: 5px;
    cursor: pointer;
}

.help_panel {
    position: absolute;
    background: #ffffcc;
    padding: .5em;
    border: 1px solid #883;
    display: none;
}

.indexfile .help_panel {
    width: 20em; height: 4em;
}

.pyfile .help_panel {
    width: 16em; height: 8em;
}

.help_panel .legend {
    font-style: italic;
    margin-bottom: 1em;
}

#panel_icon {
    float: right;
    cursor: pointer;
}

.keyhelp {
    margin: .75em;
}

.keyhelp .key {
    border: 1px solid black;
    border-color: #888 #333 #333 #888;
    padding: .1em .35em;
    font-family: monospace;
    font-weight: bold;
    background: #eee;
}

/* Source file styles */
.linenos p {
    text-align: right;
    margin: 0;
    padding: 0 .5em;
    color: #999999;
    font-family: verdana, sans-serif;
    font-size: .625em;   /* 10/16 */
    line-height: 1.6em;  /* 16/10 */
    }
.linenos p.highlight {
    background: #ffdd00;
    }
.linenos p a {
    text-decoration: none;
    color: #999999;
    }
.linenos p a:hover {
    text-decoration: underline;
    color: #999999;
    }

td.text {
    width: 100%;
    }
.text p {
    margin: 0;
    padding: 0 0 0 .5em;
    border-left: 2px solid #ffffff;
    white-space: pre;
    position: relative;
    }

.text p.mis {
    background: #ffdddd;
    border-left: 2px solid #ff0000;
    }
.text p.run, .text p.run.hide_par {
    background: #ddffdd;
    border-left: 2px solid #00ff00;
    }
.text p.exc {
    background: #eeeeee;
    border-left: 2px solid #808080;
    }
.text p.par, .text p.par.hide_run {
    background: #ffffaa;
    border-left: 2px solid #eeee99;
    }
.text p.hide_run, .text p.hide_exc, .text p.hide_mis, .text p.hide_par,
.text p.hide_run.hide_par {
    background: inherit;
    }

.text span.annotate {
    font-family: georgia;
    color: #666;
    float: right;
    padding-right: .5em;
    }
.text p.hide_par span.annotate {
    display: none;
    }
.text span.annotate.long {
    display: none;
    }
.text p:hover span.annotate.long {
    display: block;
    max-width: 50%;
    white-space: normal;
    float: right;
    position: absolute;
    top: 1.75em;
    right: 1em;
    width: 30em;
    height: auto;
    color: #333;
    background: #ffffcc;
    border: 1px solid #888;
    padding: .25em .5em;
    z-index: 999;
    border-radius: .2em;
    box-shadow: #cccccc .2em .2em .2em;
    }

/* Syntax coloring */
.text .com {
    color: green;
    font-style: italic;
    line-height: 1px;
    }
.text .key {
    font-weight: bold;
    line-height: 1px;
    }
.text .str {
    color: #000080;
    }

/* index styles */
#index td, #index th {
    text-align: right;
    width: 5em;
    padding: .25em .5em;
    border-bottom: 1px solid #eee;
    }
#index th {
    font-style: italic;
    color: #333;
    border-bottom: 1px solid #ccc;
    cursor: pointer;
    }
#index th:hover {
    background: #eee;
    border-bottom: 1px solid #999;
    }
#index td.left, #index th.left {
    padding-left: 0;
    }
#index td.right, #index th.right {
    padding-right: 0;
    }
#index th.headerSortDown, #index th.headerSortUp {
    border-bottom: 1px solid #000;
    white-space: nowrap;
    background: #eee;
    }
#index th.headerSortDown:after {
    content: " ↓";
}
#index th.headerSortUp:after {
    content: " ↑";
}
#index td.name, #index th.name {
    text-align: left;
    width: auto;
    }
#index td.name a {
    text-decoration: none;
    color: #000;
    }
#index tr.total,
#index tr.total_dynamic {
    }
#index tr.total td,
#index tr.total_dynamic td {
    font-weight: bold;
    border-top: 1px solid #ccc;
    border-bottom: none;
    }
#index tr.file:hover {
    background: #eeeeee;
    }
#index tr.file:hover td.name {
    text-decoration: underline;
    color: #000;
    }

/* scroll marker styles */
#scroll_marker {
    position: fixed;
    right: 0;
    top: 0;
    width: 16px;
    height: 100%;
    background: white;
    border-left: 1px solid #eee;
    }

#scroll_marker .marker {
    background: #eedddd;
    position: absolute;
    min-height: 3px;
    width: 100%;
    }
