/* Copyright 2016 The Fuchsia Authors. All rights reserved.
 * Use of this source code is governed under the Apache License, Version 2.0
 * that can be found in the LICENSE file.
 */

body {
    font-family: sans-serif;
}

a {
    text-decoration: none;
}

.target-container {
    border-collapse: separate;
    display: flex;
    list-style-type: none;
    padding: 0;
    margin-top: 0.5em;
    table-layout: fixed;
    width: 100%;
}

.target-container div {
    display: flex;
    justify-content: center;
    align-items: center;
    border: 0.5px solid #333;
    font-size: 1.5em;
    line-height: 2em;
    padding: 1.3em;
    text-align: center;
    min-height:60px;
}

.target-container a {
    flex:1;
    align-items: stretch;
    margin-left: 0.5em;
}

.target-name {
    color: white;
    line-height: 1.2em;
}

.fail {
    background: repeating-linear-gradient(
        -55deg,
        #BA4046,
        #BA4046 30px,
        #D44950 30px,
        #D44950 60px
    );
}

.pass {
    background: #49B974;
}

.server_error {
    background: repeating-linear-gradient(
        -55deg,
        #444,
        #444 30px,
        #555 30px,
        #555 60px
    );
}

.parser_error {
    background: repeating-linear-gradient(
        -55deg,
        #FEC859,
        #FEC859 30px,
        #FDB522 30px,
        #FDB522 60px
    );
    color: #333;
}

.clock {
    color: #222;
    font-family: sans-serif;
    font-size: 2em;
    margin-right: 0.25em;
    text-align: right;
}
