/*
 * Copyright (C) 2006 Apple Computer, 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 COMPUTER, INC. ``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 COMPUTER, INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * 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 {
    margin: 0
}

table {
    width: 100%;
    border-spacing: 0;
    white-space: pre-wrap !important;
    margin: 0;
    word-break: break-word;
    font-size: initial;
    font-family: monospace;
}

td {
    padding: 0 !important;
    vertical-align: baseline
}

.webkit-line-gutter-backdrop, .webkit-line-number {
    /* Keep this in sync with inspector.css (.webkit-line-gutter-backdrop) */
    box-sizing: border-box;
    padding: 0 4px !important;
    width: 31px;
    background-color: rgb(240, 240, 240);
    border-right: 1px solid rgb(187, 187, 187) !important;
    -webkit-user-select: none;
}

.webkit-line-gutter-backdrop {
    /* Keep this in sync with inspector.css (.webkit-line-gutter-backdrop) */
    position: absolute;
    z-index: -1;
    left: 0;
    top: 0;
    height: 100%
}

.webkit-line-number {
    text-align: right;
    color: rgb(128, 128, 128);
    word-break: normal;
    white-space: nowrap;
    font-size: 9px;
    font-family: Helvetica;
    -webkit-user-select: none;
}

.webkit-line-number::before {
    content: attr(value);
}

tbody:last-child .webkit-line-content:empty:before {
    content: " ";
}

.webkit-line-content {
    padding: 0 5px !important;
}

.webkit-highlight {
    background-color: rgb(100%, 42%, 42%);
    border: 2px solid rgb(100%, 31%, 31%);
}

.webkit-html-tag {
    /* Keep this in sync with inspector.css (.webkit-html-tag) */
    color: rgb(136, 18, 128);
}

.webkit-html-attribute-name {
    /* Keep this in sync with inspector.css (.webkit-html-attribute-name) */
    color: rgb(153, 69, 0);
}

.webkit-html-attribute-value {
    /* Keep this in sync with inspector.css (.webkit-html-attribute-value) */
    color: rgb(26, 26, 166);
}

.webkit-html-external-link, .webkit-html-resource-link {
    /* Keep this in sync with inspectorSyntaxHighlight.css (.webkit-html-external-link, .webkit-html-resource-link) */
    color: #00e;
}

.webkit-html-external-link {
    /* Keep this in sync with inspectorSyntaxHighlight.css (.webkit-html-external-link) */
    text-decoration: none;
}

.webkit-html-external-link:hover {
    /* Keep this in sync with inspectorSyntaxHighlight.css (.webkit-html-external-link:hover) */
    text-decoration: underline;
}

.webkit-html-comment {
    /* Keep this in sync with inspectorSyntaxHighlight.css (.webkit-html-comment) */
    color: rgb(35, 110, 37);
}

.webkit-html-doctype {
    /* Keep this in sync with inspectorSyntaxHighlight.css (.webkit-html-doctype) */
    color: rgb(192, 192, 192);
}

.webkit-html-end-of-file {
    /* Keep this in sync with inspectorSyntaxHighlight.css (.webkit-html-end-of-file) */
    color: rgb(255, 0, 0);
    font-weight: bold;
}

.webkit-html-message-bubble {
    box-shadow: black 0px 2px 5px;
    border-radius: 9px;
    -webkit-border-fit: lines;
    min-height: 13px;
    font-size: 9px;
    font-family: Lucida Grande, sans-serif;
    font-weight: bold;
    margin: 6px 25px;
    padding: 0 7px 1px;
}

.webkit-html-warning-message {
    background-color: rgb(100%, 62%, 42%);
    border: 2px solid rgb(100%, 52%, 21%);
}

.webkit-html-error-message {
    background-color: rgb(100%, 42%, 42%);
    border: 2px solid rgb(100%, 31%, 31%);
}

.webkit-html-message-line {
    padding-left: 23px;
    text-indent: -20px;
}

.webkit-html-message-icon {
    position: relative;
    top: 2px;
    margin: 0 4px;
}
