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

.scope-bar {
    padding: 0 3px;

    --scope-bar-margin-default: 2px;
    --scope-bar-padding-default: 6px;
    --scope-bar-text-color-default: var(--text-color);
    --scope-bar-background-color-default: unset;
    --scope-bar-background-opacity-default: var(--glyph-opacity);
    --scope-bar-border-color-default: unset;
}

.scope-bar > li {
    position: relative;
    z-index: 0;
    display: inline-block;
    margin: 0 var(--scope-bar-margin);
    padding: 2px var(--scope-bar-padding) 4px;
    font-size: 11px;
    line-height: 11px;
    color: var(--scope-bar-text-color);
    text-align: center;

    --scope-bar-margin: var(--scope-bar-margin-override, var(--scope-bar-margin-default));
    --scope-bar-padding: var(--scope-bar-padding-override, var(--scope-bar-padding-default));
    --scope-bar-text-color: var(--scope-bar-text-color-override, var(--scope-bar-text-color-default));
    --scope-bar-background-color: var(--scope-bar-background-color-override, var(--scope-bar-background-color-default));
    --scope-bar-background-opacity: var(--scope-bar-background-opacity-override, var(--scope-bar-background-opacity-default));
    --scope-bar-border-color: var(--scope-bar-border-color-override, var(--scope-bar-border-color-default));
}

.scope-bar > li::after {
    position: absolute;
    content: "";
    left: 0;
    top: 0;
    z-index: -1;
    width: calc(100% - 2px);
    height: calc(100% - 2px);
    background-color: var(--scope-bar-background-color);
    border: 1px solid var(--scope-bar-border-color);
    border-radius: 3px;
    opacity: var(--scope-bar-background-opacity);
}

.scope-bar > li:focus {
    outline: none;
}

.scope-bar > li:matches(.selected, :hover) {
    --scope-bar-text-color-default: var(--selected-foreground-color);
    --scope-bar-background-color-default: var(--glyph-color-active);
    --scope-bar-border-color-default: var(--glyph-color-active);
}

.scope-bar > li:not(.selected):hover {
    --scope-bar-background-opacity-default: 0.5;
}

.scope-bar > li.selected:active::after {
    filter: brightness(0.8);
}

.scope-bar > li.multiple {
    position: relative;
}

.scope-bar > li.multiple > select {
    position: absolute;
    top: 1px;
    inset-inline-start: calc(var(--scope-bar-padding) - var(--scope-bar-padding-default) - 2px);
    width: 0;
    height: 0;
    margin: 0;
    opacity: 0;
    pointer-events: none;
}

.scope-bar > li:focus::after,
.scope-bar > li.multiple > select:focus {
    outline: auto -webkit-focus-ring-color;
    outline-offset: -1px;
}

.scope-bar > li.multiple:not(.selected) > select {
    display: none;
}

.scope-bar > li.multiple > .arrows {
    width: 5px;
    height: 12px;
    display: inline-block;
    vertical-align: -2px;
    margin-top: -1px;
    margin-bottom: -1px;
    margin-inline: 6px 2px;
}
