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

.filter-bar {
    background-color: var(--toolbar-bg-color);
    flex: none;
    flex-wrap: wrap;
    align-items: center;
    border-bottom: var(--divider-border);
}

.filter-text-filter {
    display: inline-flex;
    margin-left: 1px;
    margin-right: 2px;
    min-width: 40px;
    max-width: 200px;
    height: 24px;
    align-items: center;
}

.filter-bitset-filter {
    padding: 2px;
    display: inline-flex;
    overflow: hidden;
    height: 24px;
    position: relative;
    margin: 0;
}

.filter-bitset-filter span {
    display: inline-block;
    flex: none;
    margin: auto 2px;
    padding: 3px;
    background: transparent;
    text-shadow: rgba(255, 255, 255, 0.5) 0 1px 0;
    border-radius: 6px;
    overflow: hidden;
}

.filter-bitset-filter-divider {
    background-color: #ccc;
    height: 16px;
    width: 1px;
    margin: auto 2px;
    display: inline-block;
}

.filter-bitset-filter span.selected,
.filter-bitset-filter span:hover,
.filter-bitset-filter span:active {
    color: white;
    text-shadow: rgba(0, 0, 0, 0.4) 0 1px 0;
}

.filter-bitset-filter span:hover {
    background: rgba(0, 0, 0, 0.2);
}

.filter-bitset-filter span.selected {
    background: rgba(0, 0, 0, 0.3);
}

.filter-bitset-filter span:active {
    background: rgba(0, 0, 0, 0.5);
}

.filter-combobox-filter {
    margin-left: 5px;
    margin-right: 2px;
    flex: 0 0 auto;
    display: inline-block;
}

.filter-checkbox-filter {
    padding-left: 4px;
    padding-right: 2px;
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
    display: inline-flex;
    vertical-align: middle;
    height: 24px;
    position: relative;
}

.filter-checkbox-filter > [is=dt-checkbox] {
    display: flex;
    margin: auto 0;
}

.filter-checkbox-filter .checkbox-filter-checkbox {
    width: 10px;
    height: 10px;
    margin: auto 3px;
    padding: 0;
    border-radius: 2px;
    border: solid 1px;
    display: inline-block;
    overflow: visible;
    opacity: 0.8;
    flex-shrink: 0;
}

.filter-input-field {
    margin: 0 3px;
    padding-left: 3px;
    width: 163px;
    height: 18px;
    line-height: 20px;
    display: inline-block;
    background: #FFF;
    overflow: hidden;
    white-space: nowrap;
    cursor: auto;
}

.filter-input-field:hover {
    box-shadow: var(--focus-ring-inactive-shadow);
}

.filter-input-field:focus,
.filter-input-field:not(:empty) {
    box-shadow: var(--focus-ring-active-shadow);
}
