/*
 * Copyright (C) 2011 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

body {
    font-family: Tahoma, sans-serif;
    font-size: 11px;
    margin: 0;
    padding: 0;
}

a {
    color: Black;
}

table {
    table-layout: fixed;
    width: 100%;
    border-collapse: collapse;
}

td, th {
    overflow: hidden;
    vertical-align: top;
    /* border-right: 1px solid #c6c6c6; */
}

td:last-of-type, th:last-of-type {
    /* border-right: 0px; */
}

th {
    /* border-bottom: 1px solid #c6c6c6; */
}

button {
    border-radius: 2px;
    background-image: -webkit-linear-gradient(top,#f5f5f5,#f1f1f1);
    border: 1px solid rgba(0, 0, 0, 0.1);
    border-radius: 2px;
    color: #666;
    cursor: pointer;
    font-size: 11px;
    font-weight: bold;
    height: 29px;
    line-height: 27px;
    margin: 11px 6px;
    min-width: 54px;
    padding: 0 8px;
    text-align: center
}

button.next {
    margin-left: 0px;
}

button.previous {
    margin-right: 0px;
}

button[disabled] {
    visibility: hidden;
}

button:hover {
    background-image: -webkit-linear-gradient(top,#f8f8f8,#f1f1f1);
    -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.1);
    background-color: #f8f8f8;
    background-image: linear-gradient(top,#f8f8f8,#f1f1f1);
    border: 1px solid #c6c6c6;
    box-shadow: 0 1px 1px rgba(0,0,0,0.1);
    color: #333
}

button:focus {
    border: 1px solid #4d90fe;
    outline: none
}

button.default {
    border: 1px solid #3079ED;
    color: white;
    background-image: -webkit-linear-gradient(top,#4d90fe,#4787ed);
}

button.default:hover {
    border: 1px solid #2f5bb7;
    color: white;
    background-color: #357ae8;
    background-image: -webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#357ae8));
}

.clear {
    clear: both;
}

/*** butterbar ***/

.butterbar {
    background-color: #f5f5f5;
    padding: 5px;
    position: fixed;
    top: 0px;
    right: 0px;
}

.butterbar .hide {
    margin-left: 20px;
}

/*** infobar ***/

.infobar {
    display: none;
    background-color: Cornsilk;
    border: 5px solid Tomato;
    padding: 10px;
    margin: 5px auto;
    font-size: 15px;
    width: 100%;
    text-align: center;
}

.infobar .status a {
    font-weight: normal;
}

.infobar .status ul {
    margin: 0;
    padding: 0;
    list-style: none;
    display: inline-block;
    padding: 0 0 0 10px;
}

.infobar .status li {
    display: inline-block;
    margin: 0px 5px;
}

/*** recent-history ***/

.recent-history {
}

.recent-history .builder {
    width: 5px;
    border-right: 1px solid #f5f5f5;
}

.recent-history .built {
    background-color: #c6c6c6;
}

.recent-history td[data-failure-types] {
    background-color: Black;
}

.changelog .result {
    padding: 4px 0px;
    border-top: 2px solid white;
    border-bottom: 2px solid white;
}

.changelog .test {
    padding-left: 3px;
}

.changelog .entry {
    padding: 4px 0px 4px 3px;
}

.changelog .reverted {
    text-decoration: line-through;
}

.changelog .possible-regression {
    background-color: PapayaWhip;
}

.changelog .details, .changelog .details a {
    color: #555;
}

.changelog .summary {
    color: Black;
}

.changelog .author {
    font-style: italic;
}

.test-name.IMAGE\+TEXT::after {
    content: 'IMAGE+TEXT';
    font-weight: normal;
    text-decoration: none;
    color: white;
    background-color: Indigo;
    font-size: 10px;
    padding: 1px 2px;
    margin: 0 0 0 3px;
    border-radius: 4px;
}

.test-name.IMAGE::after {
    content: 'IMAGE';
    font-weight: normal;
    text-decoration: none;
    color: white;
    background-color: MidnightBlue;
    font-size: 10px;
    padding: 1px 2px;
    margin: 0 0 0 3px;
    border-radius: 4px;
}

.test-name.TIMEOUT::after {
    content: 'TIMEOUT';
    font-weight: normal;
    text-decoration: none;
    color: white;
    background-color: DarkGoldenRod;
    font-size: 10px;
    padding: 1px 2px;
    margin: 0 0 0 3px;
    border-radius: 4px;
}

.test-name.TEXT::after {
    content: 'TEXT';
    font-weight: normal;
    text-decoration: none;
    color: white;
    background-color: DodgerBlue;
    font-size: 10px;
    padding: 1px 2px;
    margin: 0 0 0 3px;
    border-radius: 4px;
}

.test-name.CRASH::after {
    content: 'CRASH';
    font-weight: normal;
    text-decoration: none;
    color: white;
    background-color: Tomato;
    font-size: 10px;
    padding: 1px 2px;
    margin: 0 0 0 3px;
    border-radius: 4px;
}

/*** results-view ***/

/* FIXME: Remove this once garden-o-matic switches to the new results view. */
.old-results-view {
    display: none;
    position: fixed;
    left: 0px;
    right: 0px;
    top: 25%;
    bottom: 0px;
}

.results-view {
    background-color: #f5f5f5;
}

.results-view .toolbar {
    border-top: 1px solid #c6c6c6;
    border-bottom: 1px solid #c6c6c6;
}

.results-view .toolbar .selector {
    font-size: 11px;
    font-weight: bold;
    height: 29px;
    line-height: 27px;
    margin: 11px 6px;
    padding: 0 8px;
}

.results-view .test-selector {
    width: 400px;
    margin-right: 6px;
}

.results-view .toolbar .actions {
    float: right;
}

.results-detail td {
    background-color: white;
}

.text-result {
    border: none;
    width: 100%;
    height: 400px; /* FIXME: How do we get a reasonable height here? */
}

.image-result {
    width: 100%;
    height: auto;
}

/*** partytime ***/

.partytime {
    display: none;
    text-align: center;
}
