/*
 * Copyright (C) 2013 Apple 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 INC. 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 INC. 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.
 */

.filter-bar {
    display: flex;

    height: var(--navigation-bar-height);

    white-space: nowrap;
    overflow: hidden;

    background-color: var(--panel-background-color);
}

.filter-bar > .navigation-bar {
    margin-top: 1px;
}

.filter-bar > .navigation-bar > .item {
    padding: 0 0 3px;
    -webkit-padding-start: 8px;
}

.filter-bar > input[type="search"] {
    display: flex;
    flex: 1;
    min-width: 0;

    margin: 3px 6px 4px;
    padding-top: 0;

    outline: none;

    -webkit-appearance: none;

    border: 1px solid hsla(0, 0%, 0%, 0.25);
    border-radius: 3px;
    background-color: hsla(0, 0%, 100%, 0.2);
    background-clip: padding-box;

    height: 22px;
}

.filter-bar > input[type="search"]::placeholder {
    color: hsla(0, 0%, 0%, 0.35);
}

.filter-bar > input[type="search"]:focus { background-color: white; }

.filter-bar > input[type="search"]::-webkit-search-decoration {
    width: 13px;
    height: 13px;

    margin: 4px 4px 3px 3px;

    align-self: center;

    background-image: url(../Images/FilterFieldGlyph.svg);

    -webkit-appearance: none;
}

.filter-bar.active > input[type="search"]::-webkit-search-decoration {
    background-image: url(../Images/FilterFieldActiveGlyph.svg);
}

.filter-bar.indicating-progress > input[type="search"]::-webkit-search-decoration {
    background-image: url(../Images/IndeterminateProgressSpinner1.svg);
    background-repeat: no-repeat;
    background-size: 100% 100%;

    animation-name: discrete-spinner;
    animation-duration: 1s;
    animation-iteration-count: infinite;
    animation-timing-function: step-start;
}
