/*
 * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.
 * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>
 *
 * 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.
 * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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.
 */

 .panel.network .toolbar {
    background-color: var(--toolbar-bg-color);
    border-bottom: var(--divider-border);
}

.network-details-view {
    background: rgb(203, 203, 203);
}

.network-details-view-tall-header {
    border-top: 4px solid var(--toolbar-bg-color);
}

.network-item-view {
    display: flex;
    background: white;
}

.network-item-preview-toolbar {
    border-top: 1px solid #ccc;
    background-color: #eee;
}

.resource-timing-view {
    display: block;
    margin: 6px;
    color: rgb(30%, 30%, 30%);
}

.resource-timing-table {
    width: 100% !important;
}

#network-overview-panel {
    flex: none;
    position: relative;
}

#network-overview-container {
    overflow: hidden;
    flex: auto;
    display: flex;
    flex-direction: column;
    position: relative;
    border-bottom: 1px solid #CDCDCD;
}

#network-overview-container canvas {
    width: 100%;
    height: 100%;
}

#network-overview-grid .resources-dividers-label-bar {
    pointer-events: auto;
}

.network .network-overview {
    flex: 0 0 60px;
}

.network-overview .resources-dividers-label-bar {
    background-color: rgba(255, 255, 255, 0.95);
}

.network-overview .resources-dividers-label-bar .resources-divider {
    background-color: transparent;
}

.network-overview .resources-dividers {
    z-index: 250;
}

.request-view.html iframe {
    width: 100%;
    height: 100%;
    position: absolute;
}

.network-film-strip {
    border-bottom: solid 1px #cdcdcd;
    flex: none !important;
}

.network-film-strip-placeholder {
    flex-shrink: 0;
}

.network-tabbed-pane {
    background-color: var(--toolbar-bg-color);
}

.network-settings-pane {
    flex: none;
    background-color: var(--toolbar-bg-color);
}

.network-settings-pane .toolbar {
    flex: 1 1;
}

.network-toolbar-container {
    display: flex;
    flex: none;
}

.network-toolbar-container > :first-child {
    flex: 1 1 auto;
}
