/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */
/* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */

// CSS styles for coverage.py HTML reports.

// When you edit this file, you need to run "make css" to get the CSS file
// generated, and then check in both the .scss and the .css files.

// When working on the file, this command is useful:
//      sass --watch --style=compact --sourcemap=none --no-cache coverage/htmlfiles/style.scss:htmlcov/style.css
//
// OR you can process sass purely in python with `pip install pysass`, then:
//      pysassc --style=compact coverage/htmlfiles/style.scss coverage/htmlfiles/style.css

// Ignore this comment, it's for the CSS output file:
/* Don't edit this .css file. Edit the .scss file instead! */

// Dimensions
$left-gutter: 3rem;


//
// Declare colors and variables
//

$font-normal:             -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
$font-code:               SFMono-Regular, Menlo, Monaco, Consolas, monospace;

$off-button-lighten:      50%;
$hover-dark-amt:          95%;

$focus-color:             #007acc;

$mis-color:               #ff0000;
$run-color:               #00dd00;
$exc-color:               #808080;
$par-color:               #dddd00;

$light-bg:                #fff;
$light-fg:                #000;
$light-gray1:             #f8f8f8;
$light-gray2:             #eee;
$light-gray3:             #ccc;
$light-gray4:             #999;
$light-gray5:             #666;
$light-gray6:             #333;
$light-pln-bg:            $light-bg;
$light-mis-bg:            #fdd;
$light-run-bg:            #dfd;
$light-exc-bg:            $light-gray2;
$light-par-bg:            #ffa;
$light-token-com:         #008000;
$light-token-str:         #0451A5;
$light-context-bg-color:  #aef;

$dark-bg:                 #1e1e1e;
$dark-fg:                 #eee;
$dark-gray1:              #222;
$dark-gray2:              #333;
$dark-gray3:              #444;
$dark-gray4:              #777;
$dark-gray5:              #aaa;
$dark-gray6:              #ddd;
$dark-pln-bg:             $dark-bg;
$dark-mis-bg:             #4b1818;
$dark-run-bg:             #373d29;
$dark-exc-bg:             $dark-gray2;
$dark-par-bg:             #650;
$dark-token-com:          #6A9955;
$dark-token-str:          #9CDCFE;
$dark-context-bg-color:   #056;

//
// Mixins and utilities
//
@mixin background-dark($color) {
    @media (prefers-color-scheme: dark) {
        background: $color;
    }
}
@mixin color-dark($color) {
    @media (prefers-color-scheme: dark) {
        color: $color;
    }
}
@mixin border-color-dark($color) {
    @media (prefers-color-scheme: dark) {
        border-color: $color;
    }
}

// Add visual outline to navigable elements on focus improve accessibility.
@mixin focus-border {
    &:active, &:focus {
        outline: 2px dashed $focus-color;
    }
}

// Page-wide styles
html, body, h1, h2, h3, p, table, td, th {
    margin: 0;
    padding: 0;
    border: 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: $font-normal;
    font-size: 1em;
    background: $light-bg;
    color: $light-fg;
    @include background-dark($dark-bg);
    @include color-dark($dark-fg);
}

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

a {
    @include focus-border;
}

p {
    font-size: .875em;
    line-height: 1.4em;
}

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;

    &:hover {
        text-decoration: underline;
        color: inherit;
    }
}

// Page structure
#header {
    background: $light-gray1;
    @include background-dark(black);
    width: 100%;
    border-bottom: 1px solid $light-gray2;
    @include border-color-dark($dark-gray2);
}

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

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

#footer .content {
    padding: 0;
    color: $light-gray5;
    @include color-dark($dark-gray5);
    font-style: italic;
}

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

// Header styles
#header .content {
    padding: 1rem $left-gutter;
}

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

#filter_container {
    float: right;
    margin: 0 2em 0 0;

    input {
        width: 10em;
        padding: 0.2em 0.5em;
        border: 2px solid $light-gray3;
        background: $light-bg;
        color: $light-fg;
        @include border-color-dark($dark-gray3);
        @include background-dark($dark-bg);
        @include color-dark($dark-fg);
        &:focus {
            border-color: $focus-color;
        }
    }
}

h2.stats {
    margin-top: .5em;
    font-size: 1em;
}
.stats button {
    font-family: inherit;
    font-size: inherit;
    border: 1px solid;
    border-radius: .2em;
    color: inherit;
    padding: .1em .5em;
    margin: 1px calc(.1em + 1px);
    cursor: pointer;
    border-color: $light-gray3;
    @include border-color-dark($dark-gray3);
    @include focus-border;

    @include focus-border;

    &.run {
        background: mix($light-run-bg, $light-bg, $off-button-lighten);
        @include background-dark($dark-run-bg);
        &.show_run {
            background: $light-run-bg;
            @include background-dark($dark-run-bg);
            border: 2px solid $run-color;
            margin: 0 .1em;
        }
    }
    &.mis {
        background: mix($light-mis-bg, $light-bg, $off-button-lighten);
        @include background-dark($dark-mis-bg);
        &.show_mis {
            background: $light-mis-bg;
            @include background-dark($dark-mis-bg);
            border: 2px solid $mis-color;
            margin: 0 .1em;
        }
    }
    &.exc {
        background: mix($light-exc-bg, $light-bg, $off-button-lighten);
        @include background-dark($dark-exc-bg);
        &.show_exc {
            background: $light-exc-bg;
            @include background-dark($dark-exc-bg);
            border: 2px solid $exc-color;
            margin: 0 .1em;
        }
    }
    &.par {
        background: mix($light-par-bg, $light-bg, $off-button-lighten);
        @include background-dark($dark-par-bg);
        &.show_par {
            background: $light-par-bg;
            @include background-dark($dark-par-bg);
            border: 2px solid $par-color;
            margin: 0 .1em;
        }
    }
}

// Yellow post-it things.
%popup {
    display: none;
    position: absolute;
    z-index: 999;
    background: #ffffcc;
    border: 1px solid #888;
    border-radius: .2em;
    color: #333;
    padding: .25em .5em;
}

// Yellow post-it's in the text listings.
%in-text-popup {
    @extend %popup;
    white-space: normal;
    float: right;
    top: 1.75em;
    right: 1em;
    height: auto;
}

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

.help_panel {
    @extend %popup;
    padding: .5em;
    border: 1px solid #883;

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

    .indexfile & {
        width: 20em;
        min-height: 4em;
    }

    .pyfile & {
        width: 16em;
        min-height: 8em;
    }
}

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

.keyhelp {
    margin: .75em;

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

// Source file styles

// The slim bar at the left edge of the source lines, colored by coverage.
$border-indicator-width: .2em;

#source {
    padding: 1em 0 1em $left-gutter;
    font-family: $font-code;

    p {
        // position relative makes position:absolute pop-ups appear in the right place.
        position: relative;
        white-space: pre;

        * {
            box-sizing: border-box;
        }

        .n {
            float: left;
            text-align: right;
            width: $left-gutter;
            box-sizing: border-box;
            margin-left: -$left-gutter;
            padding-right: 1em;
            color: $light-gray4;
            @include color-dark($dark-gray4);

            a {
                text-decoration: none;
                color: $light-gray4;
                @include color-dark($dark-gray4);
                &:hover {
                    text-decoration: underline;
                    color: $light-gray4;
                    @include color-dark($dark-gray4);
                }
            }
        }

        &.highlight .n {
            background: #ffdd00;
        }

        .t {
            display: inline-block;
            width: 100%;
            box-sizing: border-box;
            margin-left: -.5em;
            padding-left: .5em - $border-indicator-width;
            border-left: $border-indicator-width solid $light-bg;
            @include border-color-dark($dark-bg);

            &:hover {
                background: mix($light-pln-bg, $light-fg, $hover-dark-amt);
                @include background-dark(mix($dark-pln-bg, $dark-fg, $hover-dark-amt));

                & ~ .r .annotate.long {
                    display: block;
                }
            }

            // Syntax coloring
            .com {
                color: $light-token-com;
                @include color-dark($dark-token-com);
                font-style: italic;
                line-height: 1px;
            }
            .key {
                font-weight: bold;
                line-height: 1px;
            }
            .str {
                color: $light-token-str;
                @include color-dark($dark-token-str);
            }
        }

        &.mis {
            .t {
                border-left: $border-indicator-width solid $mis-color;
            }

            &.show_mis .t {
                background: $light-mis-bg;
                @include background-dark($dark-mis-bg);

                &:hover {
                    background: mix($light-mis-bg, $light-fg, $hover-dark-amt);
                    @include background-dark(mix($dark-mis-bg, $dark-fg, $hover-dark-amt));
                }
            }
        }

        &.run {
            .t {
                border-left: $border-indicator-width solid $run-color;
            }

            &.show_run .t {
                background: $light-run-bg;
                @include background-dark($dark-run-bg);

                &:hover {
                    background: mix($light-run-bg, $light-fg, $hover-dark-amt);
                    @include background-dark(mix($dark-run-bg, $dark-fg, $hover-dark-amt));
                }
            }
        }

        &.exc {
            .t {
                border-left: $border-indicator-width solid $exc-color;
            }

            &.show_exc .t {
                background: $light-exc-bg;
                @include background-dark($dark-exc-bg);

                &:hover {
                    background: mix($light-exc-bg, $light-fg, $hover-dark-amt);
                    @include background-dark(mix($dark-exc-bg, $dark-fg, $hover-dark-amt));
                }
            }
        }

        &.par {
            .t {
                border-left: $border-indicator-width solid $par-color;
            }

            &.show_par .t {
                background: $light-par-bg;
                @include background-dark($dark-par-bg);

                &:hover {
                    background: mix($light-par-bg, $light-fg, $hover-dark-amt);
                    @include background-dark(mix($dark-par-bg, $dark-fg, $hover-dark-amt));
                }
            }

        }

        .r {
            position: absolute;
            top: 0;
            right: 2.5em;
            font-family: $font-normal;
        }

        .annotate {
            font-family: $font-normal;
            color: $light-gray5;
            @include color-dark($dark-gray6);
            padding-right: .5em;

            &.short:hover ~ .long {
                display: block;
            }

            &.long {
                @extend %in-text-popup;
                width: 30em;
                right: 2.5em;
            }
        }

        input {
            display: none;

            & ~ .r label.ctx {
                cursor: pointer;
                border-radius: .25em;
                &::before {
                    content: "▶ ";
                }
                &:hover {
                    background: mix($light-context-bg-color, $light-bg, $off-button-lighten);
                    @include background-dark(mix($dark-context-bg-color, $dark-bg, $off-button-lighten));
                    color: $light-gray5;
                    @include color-dark($dark-gray5);
                }
            }

            &:checked ~ .r label.ctx {
                background: $light-context-bg-color;
                @include background-dark($dark-context-bg-color);
                color: $light-gray5;
                @include color-dark($dark-gray5);
                border-radius: .75em .75em 0 0;
                padding: 0 .5em;
                margin: -.25em 0;
                &::before {
                    content: "▼ ";
                }
            }

            &:checked ~ .ctxs {
                padding: .25em .5em;
                overflow-y: scroll;
                max-height: 10.5em;
            }
        }

        label.ctx {
            color: $light-gray4;
            @include color-dark($dark-gray4);
            display: inline-block;
            padding: 0 .5em;
            font-size: .8333em;   // 10/12
        }

        .ctxs {
            display: block;
            max-height: 0;
            overflow-y: hidden;
            transition: all .2s;
            padding: 0 .5em;
            font-family: $font-normal;
            white-space: nowrap;
            background: $light-context-bg-color;
            @include background-dark($dark-context-bg-color);
            border-radius: .25em;
            margin-right: 1.75em;
            span {
                display: block;
                text-align: right;
            }
        }
    }
}


// index styles
#index {
    font-family: $font-code;
    font-size: 0.875em;

    table.index {
        margin-left: -.5em;
    }
    td, th {
        text-align: right;
        width: 5em;
        padding: .25em .5em;
        border-bottom: 1px solid $light-gray2;
        @include border-color-dark($dark-gray2);
        &.name {
            text-align: left;
            width: auto;
        }
    }
    th {
        font-style: italic;
        color: $light-gray6;
        @include color-dark($dark-gray6);
        cursor: pointer;
        &:hover {
            background: $light-gray2;
            @include background-dark($dark-gray2);
        }
        &.headerSortDown, &.headerSortUp {
            white-space: nowrap;
            background: $light-gray2;
            @include background-dark($dark-gray2);
        }
        &.headerSortDown:after {
            content: " ↑";
        }
        &.headerSortUp:after {
            content: " ↓";
        }
    }
    td.name a {
        text-decoration: none;
        color: inherit;
    }

    tr.total td,
    tr.total_dynamic td {
        font-weight: bold;
        border-top: 1px solid #ccc;
        border-bottom: none;
    }
    tr.file:hover {
        background: $light-gray2;
        @include background-dark($dark-gray2);
        td.name {
            text-decoration: underline;
            color: inherit;
        }
    }
}

// scroll marker styles
#scroll_marker {
    position: fixed;
    right: 0;
    top: 0;
    width: 16px;
    height: 100%;
    background: $light-bg;
    border-left: 1px solid $light-gray2;
    @include background-dark($dark-bg);
    @include border-color-dark($dark-gray2);
    will-change: transform; // for faster scrolling of fixed element in Chrome

    .marker {
        background: $light-gray3;
        @include background-dark($dark-gray3);
        position: absolute;
        min-height: 3px;
        width: 100%;
    }
}
