/*
 * 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.
 */

.resources-toolbar {
    border-top: 1px solid #ccc;
    background-color: var(--toolbar-bg-color);
}

.top-resources-toolbar {
    border-bottom: 1px solid #ccc;
    background-color: var(--toolbar-bg-color);
}

li.selected .base-storage-tree-element-subtitle {
    color: white;
}

.base-storage-tree-element-subtitle {
    padding-left: 2px;
    color: rgb(80, 80, 80);
    text-shadow: none;
}

.resources.panel .status {
    float: right;
    height: 16px;
    margin-top: 1px;
    margin-left: 4px;
    line-height: 1em;
}

.storage-view {
    display: flex;
    overflow: hidden;
}

.storage-view {
    overflow: hidden;
}

.storage-view .data-grid:not(.inline) {
    border: none;
    flex: auto;
}

.storage-view .storage-table-error {
    color: rgb(66%, 33%, 33%);
    font-size: 24px;
    font-weight: bold;
    padding: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.storage-view.query {
    padding: 2px 0;
    overflow-y: overlay;
    overflow-x: hidden;
}

.storage-view .filter-bar {
    border-top: none;
    border-bottom: var(--divider-border);
}

.database-query-prompt-container {
    position: relative;
    padding: 1px 22px 1px 24px;
}

.database-query-prompt {
    min-height: 16px;
    white-space: pre-wrap;
}

.prompt-icon {
    position: absolute;
    display: block;
    left: 7px;
    top: 9px;
    margin-top: -7px;
    -webkit-user-select: none;
}

.database-query-prompt-container .prompt-icon {
    top: 10px;
}

.database-user-query {
    position: relative;
    border-bottom: 1px solid rgb(245, 245, 245);
    padding: 1px 22px 1px 24px;
    min-height: 16px;
    flex-shrink: 0;
}

.database-query-text {
    color: rgb(0, 128, 255);
    -webkit-user-select: text;
}

.database-query-result {
    position: relative;
    padding: 1px 22px 1px 24px;
    min-height: 16px;
    margin-left: -24px;
    padding-right: 0;
}

.database-query-result.error {
    color: red;
    -webkit-user-select: text;
}

.resource-sidebar-tree-item .icon {
    content: url(Images/resourcePlainIconSmall.png);
}

.resource-sidebar-tree-item.resources-type-image .icon {
    position: relative;
    background-image: url(Images/resourcePlainIcon.png);
    background-repeat: no-repeat;
    content: "";
}

.resources-type-image .image-resource-icon-preview {
    position: absolute;
    margin: auto;
    min-width: 1px;
    min-height: 1px;
    top: 2px;
    bottom: 1px;
    left: 3px;
    right: 3px;
    max-width: 8px;
    max-height: 11px;
    overflow: hidden;
}

.resources-sidebar {
    padding: 0;
}
