/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

.bs-select-menu {
    @import '../../../public/stylesheets/variables.scss';

    $item-height: 30px;
    $max-visible-items: 11;

    z-index: 2000;
    padding: 0;
    margin: 0;
    list-style: none;
    position: absolute;
    font-family: Roboto;
    outline: none !important;
    overflow-y: auto;
    overflow-x: hidden;
    max-height: $max-visible-items * $item-height;
    box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.3);
    border-radius: $ignite-button-border-radius;
    border: 1px solid #c5c5c5;
    background: white;
    color: initial; // Fixes color inheritance inside some containers

    .bssm-active-indicator {
        font-size: 14px;
        width: 12px;
        color: #afafaf;

        &.bssm-active-indicator__active {
            color: $ignite-brand-success;
        }
    }

    .bssm-item-text {
        overflow: visible;
        white-space: nowrap;
    }

    &>li {
        width: 100%;

        &>.bssm-item-button {
            width: 100%;
            justify-content: flex-start;
            border-bottom: 1px solid #dedede;
            padding-bottom: 9px;
            background-color: transparent;
            border-radius: 0;
            padding-right: 30px;

            &:hover {
                background-color: #eeeeee;
            }
        }

        &:last-of-type > .bssm-item-button {
            border-bottom: none;
            padding-bottom: 10px;
        }
    }

    [class*='bssm-multiple'] {
        .bssm-active-indicator {
            display: initial;
        }
    }

    &:not([class*='bssm-multiple']) {
        .bssm-active-indicator {
            display: none;
        }

        & > li > .bssm-item-button__active {
            background-color: #e5f2f9;
        }
    }
}

.bssm-click-overlay {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1999;
}
