/*
 * Copyright (C) 2013 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:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * 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.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
 * OWNER OR 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.
 */

.network-log-grid.data-grid {
    border: none !important;
    flex: auto;
}

.network-log-grid.data-grid.no-selection[data-keyboard-focus="true"]:focus {
    border: none !important;
}

#network-container {
    border: 1px solid rgb(204, 204, 204);
}

#network-container.no-node-selected:focus-within {
    border: 1px solid var(--accent-color);
}

.network-log-grid {
    --network-grid-default-color: rgba(255, 255, 255, 1.0);
    --network-grid-stripe-color: rgba(245, 245, 245, 1.0);
    --network-grid-navigation-color: rgba(221, 238, 255, 1.0);
    --network-grid-hovered-color: rgba(235, 242, 252, 0.7);
    --network-grid-initiator-path-color: rgba(58, 217, 58, 0.4);
    --network-grid-initiated-path-color: rgba(217, 58, 58, 0.4);
    --network-grid-selected-color: rgba(219, 219, 219, .6);
    --network-grid-focus-selected-color: var(--selection-bg-color);
    --network-grid-focus-selected-color-has-error: rgb(255, 240, 240, 1.0);
    --network-grid-from-frame-color: rgba(224, 247, 250, .4);
    --network-grid-is-product-color: rgba(255, 252, 225, .6);
}

.-theme-with-dark-background .network-log-grid {
    --network-grid-default-color: rgba(36, 36, 36, 1.0);
    --network-grid-stripe-color: rgba(41, 41, 41, 1.0);
    --network-grid-navigation-color: rgba(221, 238, 255, 1.0);
    --network-grid-hovered-color: rgba(20, 37, 63, 0.7);
    --network-grid-initiator-path-color: rgba(58, 217, 58, 0.4);
    --network-grid-initiated-path-color: rgba(217, 58, 58, 0.4);
    --network-grid-selected-color: rgba(57, 57, 57, .6);
    --network-grid-focus-selected-color: var(--selection-bg-color);
    --network-grid-focus-selected-color-has-error: rgba(217, 58, 58, 0.15);
    --network-grid-from-frame-color: rgba(224, 247, 250, .4);
    --network-grid-is-product-color: rgba(255, 252, 225, .6);
}

.network-summary-bar {
    flex: 0 0 27px;
    line-height: 27px;
    padding-left: 5px;
    background-color: #eee;
    border-top: 1px solid #ccc;
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
    user-select: text;
}

.panel.network .toolbar.network-summary-bar {
    border-bottom: 0px;
}

.network-summary-bar span[is=dt-icon-label] {
    margin-right: 6px;
}

.network-summary-bar > * {
    flex: none;
}

.network-log-grid.data-grid table.data {
    background: transparent;
}

.network-log-grid.data-grid td {
    height: 41px;
    border-left: 1px solid #e1e1e1;
    vertical-align: middle;
}

.network-log-grid.data-grid .corner {
    display: none;
}

.network-log-grid.data-grid.small td {
    height: 21px;
}

.network-waterfall-header, .network-log-grid.data-grid th {
    border-bottom: 1px solid rgb(205, 205, 205);
    border-left: 1px solid rgb(205, 205, 205);
}

.network-log-grid.data-grid table.data th {
    border-bottom: none;
}

.network-waterfall-header, .network-log-grid.data-grid .header-container {
    height: 31px;
    background-color: var(--toolbar-bg-color);
}

.network-log-grid.data-grid .data-container {
    top: 31px;
}

.network-waterfall-header.small, .network-log-grid.data-grid.small .header-container {
    height: 27px;
}

.network-log-grid.data-grid.small .data-container {
    top: 27px;
}

.network-log-grid.data-grid select {
    -webkit-appearance: none;
    border: none;
    width: 100%;
    color: inherit;
}

.network-log-grid.data-grid .name-column {
    cursor: pointer;
}

.network-log-grid.data-grid .waterfall-column {
    padding: 1px 0;
}

.network-log-grid.data-grid .waterfall-column .sort-order-icon-container {
    right: 15px;
    pointer-events: none;
}

.network-log-grid.data-grid th.sortable:active {
    background-image: none !important;
}

.network-cell-subtitle {
    font-weight: normal;
    color: gray;
}

.network-badge {
    margin-right: 4px;
}

.network-error-row,
.network-error-row .network-cell-subtitle ,
.network-log-grid.data-grid tr.selected.network-error-row,
.network-log-grid.data-grid tr.selected.network-error-row .network-cell-subtitle,
.network-log-grid.data-grid tr.selected.network-error-row .network-dim-cell {
    color: rgb(230, 0, 0) !important;
}

.network-log-grid.data-grid:focus tr.selected.network-error-row,
.network-log-grid.data-grid:focus tr.selected.network-error-row .network-cell-subtitle,
.network-log-grid.data-grid:focus tr.selected.network-error-row .network-dim-cell {
    color: rgb(230, 0, 0) !important;
}
.initiator-column .devtools-link {
    color: inherit;
}

.network-log-grid.data-grid tr.selected,
.network-log-grid.data-grid tr.selected .network-cell-subtitle,
.network-log-grid.data-grid tr.selected .network-dim-cell {
    color: inherit;
}

.network-log-grid.data-grid:focus tr.selected,
.network-log-grid.data-grid:focus tr.selected .network-cell-subtitle,
.network-log-grid.data-grid:focus tr.selected .network-dim-cell {
    color: var(--selection-fg-color);
}

.network-log-grid tr.highlighted-row {
    -webkit-animation: network-row-highlight-fadeout 2s 0s;
}

@-webkit-keyframes network-row-highlight-fadeout {
    from {background-color: rgba(255, 255, 120, 1); }
    to { background-color: rgba(255, 255, 120, 0); }
}

.network-header-subtitle {
    color: gray;
}

.network-log-grid.data-grid.small .network-cell-subtitle,
.network-log-grid.data-grid.small .network-header-subtitle {
    display: none;
}

/* Resource preview icons */

.network-log-grid.data-grid .icon {
    content: url(Images/resourcePlainIcon.png);
}

.network-log-grid.data-grid.small .icon {
    content: url(Images/resourcePlainIconSmall.png);
}

.network-log-grid.data-grid .icon.script {
    content: url(Images/resourceJSIcon.png);
}

.network-log-grid.data-grid.small .icon.script {
    content: url(Images/resourceDocumentIconSmall.png);
}

.network-log-grid.data-grid .icon.document {
    content: url(Images/resourceDocumentIcon.png);
}

.network-log-grid.data-grid.small .icon.document {
    content: url(Images/resourceDocumentIconSmall.png);
}

.network-log-grid.data-grid .icon.stylesheet {
    content: url(Images/resourceCSSIcon.png);
}

.network-log-grid.data-grid.small .icon.stylesheet {
    content: url(Images/resourceDocumentIconSmall.png);
}

.network-log-grid.data-grid .icon.media {
    content: url(Images/resourcePlainIcon.png); /* FIXME: media icon */
}

.network-log-grid.data-grid.small .icon.media {
    content: url(Images/resourcePlainIconSmall.png); /* FIXME: media icon */
}
.network-log-grid.data-grid .icon.texttrack {
    content: url(Images/resourcePlainIcon.png); /* FIXME: vtt icon */
}

.network-log-grid.data-grid.small .icon.texttrack {
    content: url(Images/resourcePlainIconSmall.png); /* FIXME: vtt icon */
}

.network-log-grid.data-grid .icon.image {
    position: relative;
    background-image: url(Images/resourcePlainIcon.png);
    background-repeat: no-repeat;
    content: "";
}

.network-log-grid.data-grid.small .icon.image {
    background-image: url(Images/resourcePlainIconSmall.png);
    content: "";
}

.network-log-grid.data-grid .icon {
    float: left;
    width: 32px;
    height: 32px;
    margin-top: 1px;
    margin-right: 3px;
}

.network-log-grid.data-grid.small .icon {
    width: 16px;
    height: 16px;
}

.network-log-grid.data-grid .image-network-icon-preview {
    position: absolute;
    margin: auto;
    top: 3px;
    bottom: 4px;
    left: 5px;
    right: 5px;
    max-width: 18px;
    max-height: 21px;
    min-width: 1px;
    min-height: 1px;
}

.network-log-grid.data-grid.small .image-network-icon-preview {
    top: 2px;
    bottom: 1px;
    left: 3px;
    right: 3px;
    max-width: 8px;
    max-height: 11px;
}

.network-dim-cell {
    color: grey;
}

.network-frame-divider {
    width: 2px;
    background-color: #FCCC49;
    z-index: 10;
    visibility: hidden;
}

#network-container:not(.brief-mode) .data-container {
    overflow: hidden;
}

.network-log-grid.data-grid .resources-dividers {
    z-index: 0;
}

.network-log-grid.data-grid .resources-dividers-label-bar {
    background-color: transparent;
    border: none;
    height: 30px;
    pointer-events: none;
}

#network-container {
    overflow: hidden;
}

.network-status-pane {
    color: #777;
    background-color: white;
    z-index: 500;
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
    padding: 0 20px;
    overflow: auto;
}

.network-status-pane > .recording-hint {
    font-size: 14px;
    text-align: center;
    line-height: 28px;
}

.network-waterfall-header {
    position: absolute;
    border-left: 0px;
    width: 100%;
    display: table;
    z-index: 200;
}

.network-waterfall-header:hover {
    background-color: hsla(0, 0%, 10%, 0.1);
}

.network-waterfall-header div {
    display: table-cell;
    line-height: 14px;
    margin: auto 0px;
    vertical-align: middle;
    text-align: left;
    font-weight: normal;
    padding: 0px 4px;
}

.network-waterfall-header .sort-order-icon-container {
    position: absolute;
    top: 1px;
    right: 0;
    bottom: 1px;
    display: flex;
    align-items: center;
}

.network-waterfall-header .sort-order-icon {
    align-items: center;
    margin-right: 4px;
    margin-bottom: -2px;
}

.network-frame-group-icon {
    display: inline-block;
    margin: -8px -2px;
}

.network-frame-group-badge {
    margin-right: 4px;
}
