/*
 * Copyright (C) 2013 Apple 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.
 */

.status-line {
    text-align: left;
    min-height: 32px;
    padding: 2px 0;
}

.status-line .bubble {
    float: left;
    min-width: 24px;
    height: 24px;
    color: white;
    line-height: 24px;
    font-size: 16px;
    font-family: "HelveticaNeue-Medium", "Helvetica Neue", sans-serif;
    text-align: center;
    border-radius: 12px;
    padding: 0 6px;
    overflow: hidden;
    margin-top: 2px;
    margin-right: 6px;
    text-decoration: none;
}

.status-line.neutral .bubble {
    background-color: rgb(181, 174, 148);
}

.status-line.unauthorized .bubble {
    background-color: rgb(171, 61, 171);
}

.status-line .bubble.pictogram {
    padding: 0;
    max-width: 24px;
}

.status-line.good .bubble.pictogram {
    background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><g transform="translate(20 30) rotate(-45 30 17)" shape-rendering="crispEdges" fill="white"><rect y="5" width="10" height="25"/><rect y="20" width="60" height="10"/></g></svg>');
}

.status-line.unauthorized .bubble.pictogram {
    background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><clipPath id="top-semicircle"><rect x="0" y="0" width="100" height="37"/></clipPath><circle cx="50" cy="33" r="13" clip-path="url(#top-semicircle)" stroke="white" stroke-width="10" fill="none" /><rect x="24" y="38" width="52" height="39" fill="white"/></svg>');
}

.status-line.danger .bubble {
    background-color: rgb(230, 175, 44);
}

.status-line.neutral .bubble.pictogram,
.status-line.danger .bubble.pictogram {
    font-weight: bold;
}

.status-line.bad .bubble.pictogram {
    font-family: "Menlo-Bold", sans-serif;
    font-size: 23px;
    line-height: 22px;
}

.status-line .label {
    font-family: "Helvetica Neue", sans-serif;
    font-size: 10px;
    text-transform: lowercase;
    line-height: 11px;
    padding-top: 1px;
    display: block;
}

.status-line .message {
    font-family: "Helvetica Neue", sans-serif;
    font-size: 12px;
    text-transform: lowercase;
}

.status-line .message * {
    color: inherit;
}

.status-line .message .revision-number {
    -webkit-user-select: auto;
    cursor: text;
}

.status-line.no-label .message {
    line-height: 28px;
}

.status-line:not(.no-label) .message {
    line-height: 13px;
}

.status-line.neutral .label,
.status-line.neutral .message,
.status-line.no-bubble .label,
.status-line.no-bubble .message {
    color: rgb(145, 135, 95);
}

.status-line.bad .bubble {
    background-color: rgb(191, 67, 41);
}

.status-line.good .bubble {
    background-color: rgb(76, 151, 61);
}

.status-line.good .label,
.status-line.good .message {
    color: rgb(76, 151, 61);
}

.status-line.bad .label,
.status-line.bad .message {
    color: rgb(191, 67, 41);
}

body.accessibility-colors .status-line.good .bubble {
    background-color: rgb(50, 219, 72);
}

body.accessibility-colors .status-line.bad .bubble {
    background-color: rgb(196, 49, 49);
}

body.accessibility-colors .status-line.good .label,
body.accessibility-colors .status-line.good .message {
    color: rgb(40, 177, 58);
}

body.accessibility-colors .status-line.bad .label,
body.accessibility-colors .status-line.bad .message {
    color: rgb(191, 67, 41);
}

.status-line.danger .label,
.status-line.danger .message {
    color: rgb(230, 175, 44);
}

.status-line.unauthorized .label,
.status-line.unauthorized .message {
    color: rgb(171, 61, 171);
}

.status-line .bubble.popover-tracking:hover {
    text-shadow: 0px 0px 5px rgba(255, 255, 255, 0.7)
}
