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


/* override.scss */
.container-fluid {
    padding-left: 0px;
    padding-right: 4px;
}

.tabs li.tab.active {
    border-bottom: 2px solid $color_keppel_approx;

    a {
        color: $color_keppel_approx;
    }
}

.modal-header {
    padding: 15px;
    border-bottom: 1px solid #DEDEDE;

    .header-button {
        float: right;
        opacity: .2;
        color: $black;
        margin-top: -2px;

        &:hover {
            color: $black;
            text-decoration: none;
            cursor: pointer;
            filter: alpha(opacity=50);
            opacity: .5;
        }
    }
}

.modal-title {
    font-weight: 600;
    -webkit-font-smoothing: antialiased;
}

.modal-footer {
    padding: 15px;
    text-align: right;
    border-top: 1px solid #DEDEDE;

    .btn+.btn {
        margin-bottom: 0;
    }
}

.modal-body {
    position: relative;
    padding: 15px;
    max-height: calc(100vh - 215px);
    min-height: 70px;
    overflow: auto;

    .btn+.btn {
        margin-bottom: 2px;
    }

    .admin-audit-details {
        border: 1px solid #ddd;
        border-radius: 4px;

        tr>td:nth-child(2) {
            text-align: right;
        }
    }

    .tree-container {
        max-height: 140px;
        overflow-y: auto !important;
    }
}

.modal-full-screen {
    width: 80%;
    height: 80vh;

    .modal-content {
        width: 100%;
    }

}

.switch.pull-left {
    margin-right: 8px;
}

.modal-content {
    border-radius: 10px;
}


.select2-container {
    width: 100% !important;
}

.select2-mini {

    .select2-container .select2-selection--single,
    .select2-container .select2-selection--multiple {
        min-height: 28px;
    }

    .select2-container--default .select2-selection--single {
        .select2-selection__rendered {
            line-height: 28px;
            font-size: 13px;
        }

        .select2-selection__arrow {
            height: 28px;
        }

    }
}

.select2-container--default {
    &.select2-container--disabled {
        .select2-selection--multiple {
            background-color: $color_gallery_approx !important;
            cursor: not-allowed;

            input.select2-search__field {
                cursor: not-allowed;
            }
        }
    }

    .select2-selection--multiple {

        background-color: $color_white_lilac_approx !important;
        border: 1px $color_mystic_approx solid !important;

        &.errorClass {
            border: 1px solid red !important;
        }
    }

    .select2-selection--single {
        .select2-selection__arrow {
            height: 34px;
        }

        .select2-selection__rendered {
            line-height: 32px;
            font-size: 14px;
        }
    }

    &.select2-container--focus .select2-selection--multiple {
        border-color: $color_bali_hai_approx !important;
    }
}

.select2-container {

    .select2-selection--single,
    .select2-selection--multiple {
        min-height: 34px;

        .select2-selection__rendered {
            padding-left: 12px;
        }
    }
}

.select2-container--default .select2-selection--multiple .select2-selection__choice {
    background-color: $white;
    color: $color_mountain_mist_approx;
    border: 1px solid $tag_color;
}

.select2-container--default .select2-search--inline .select2-search__field {
    color: #555;
    // width: 300px !important;
}

.typeLOV {
    .select2-container--default {
        .select2-selection--multiple {
            .select2-selection__rendered {
                padding-right: 13px;

                .select2-selection__choice {
                    font-size: 14px;
                    color: $color_mountain_mist_approx;
                    border: 1px solid $color_mountain_mist_approx;
                }

                .select2-search__field {
                    font-size: 14px;
                }
            }

            .select2-selection__clear {
                position: absolute;
                float: none;
                margin: 0px;
                right: 4px;
                top: 5px;
                color: $color_mountain_mist_approx;
            }
        }
    }
}

.fixed-popover {
    position: fixed;
}

.popover.fade {
    -webkit-transition: ease-in .1s ease-out;
    -o-transition: ease-in .1s ease-out;
    transition: ease-in .1s ease-out;
}

.pager {
    margin: 0px;
}

.popover {
    z-index: 1000;
}

.popover-content {
    max-height: 150px;
    overflow: auto;

    ul {
        color: $dark_gray;
        padding: 0px 5px;
        margin-bottom: 0px;
        cursor: pointer;

        a {
            color: $dark_gray;
            padding: 5px;
        }
    }
}

.tab-content>.tab-pane.active {
    overflow-x: hidden;
    overflow: initial;
}

.advancedInfo {
    margin-left: 5px;
    cursor: pointer;
}

.query-builder {
    .rule-container {
        margin: 6px 0;
        display: flex;
        flex-wrap: wrap;

        .values-box {
            display: flex;
            flex-grow: 1;
            width: 100%;
            padding-right: 26px;
        }

        .action-box {
            position: absolute;
            right: 4px;
            top: calc(50% - 18px);
        }

        .rule-header {
            .rule-actions {
                padding: 7px 0px;
            }
        }

        .error-container {
            color: $color_trinidad_approx;
        }

        .rule-value-container {
            display: inline-block !important;
            border-left: none;
            width: calc(65% - 105px);

            .form-control {
                width: 100% !important;
                padding: 6px 12px !important;
            }
        }

        .rule-filter-container {
            width: 35%;

            .form-control {
                width: 100% !important;
            }
        }

        .rule-operator-container {
            width: 150px;

            .form-control {
                width: 100% !important;
            }
        }
    }

    .rules-list>:first-child::before {
        top: -8px;
    }

    .rules-group-container {
        border-color: transparent;
        background: none;

        .rules-group-header {
            .group-actions {
                .btn-success {
                    color: #38BB9B !important;
                    background-color: transparent !important;
                    border-color: #38BB9B !important;
                }

                .btn-danger {
                    color: #e14f00;
                    background-color: transparent;
                    border-color: #e14f00;
                }
            }

            .group-conditions {
                .btn-primary {
                    color: #333 !important;
                    background-color: $white !important;
                    border-color: #ccc !important;
                }

                .active {
                    color: $white !important;
                    background-color: #5bc0de !important;
                    border-color: #46b8da !important;
                }
            }
        }
    }


    .rules-group-header .btn-group.pull-right.group-actions {
        float: right !important;
    }
}

div.columnmanager-visibilitycontrol {
    width: auto;
    margin-bottom: 5px;

    &.open .btn-action {
        background-color: $color_keppel_approx;
        color: $white;
    }
}

div.columnmanager-dropdown-container {
    .columnmanager-dropdown-item {
        padding: 2px 13px;
    }

    &.open {
        overflow: auto;
        width: auto;
    }

    >li>span.column-label {
        width: auto;
    }
}

.stack-modal[aria-role="alertdialog"] {
    &.width-600 {
        width: 600px !important;
        left: calc(50% - 250px) !important;
        margin-left: 0 !important;
    }

    &.width-500 {
        width: 500px !important;
        left: calc(50% - 216px) !important;
        margin-left: 0 !important;
    }

    &.width-400 {
        width: 400px !important;
        left: calc(50% - 183px);
        margin-left: 0 !important;
    }

    .alert.ui-pnotify-container {
        color: $color_ironside_gray_approx;
        background-color: $white;
        border: 1px solid rgba(0, 0, 0, .2);
        padding: 0px;
        outline: 0;
        -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
        box-shadow: 0 5px 15px rgba(0, 0, 0, .5);

        .ui-pnotify-icon,
        .ui-pnotify-title {
            padding: 15px;
        }

        .ui-pnotify-text {
            position: relative;
            padding: 15px;
            max-height: 400px;
            min-height: 70px;
            overflow: auto;
            border-top: 1px solid #DEDEDE;
            word-break: break-word;
        }

        .ui-pnotify-action-bar {
            padding: 15px;
            text-align: right;
            border-top: 1px solid #DEDEDE;
        }
    }
}

.ui-pnotify-icon,
.ui-pnotify-icon span {
    padding: 2px 0px;
}

.btn-round-xs {
    border-radius: 11px;
    padding-left: 10px;
    padding-right: 10px;
    background-color: transparent !important;
    color: #626467;
    border: 1px solid black;
}

.text-center {
    text-align: center !important;
}

.margin-15 {
    margin: 15px 0px;
}

.padding-left-0 {
    padding-left: 0px !important;
}

.fa-color {
    color: $color_keppel_approx
}

.w30 {
    width: 30% !important;
}

.query-builder .error-container {
    cursor: pointer;
}

.renderable {
    .glyphicon {
        color: $color_jungle_green_approx;
        font-size: large;
        font-weight: bold;
    }

    .noToggle {
        color: $gray;
    }
}

.backgrid-internal-table {

    th,
    td {
        display: table-cell;
    }
}

.table-hover>tbody>tr:hover {
    background-color: #fafafa;
}

.input-group {
    .form-control {
        z-index: 1;
    }
}

.ui-pnotify-container {
    .ui-pnotify-text {
        word-break: break-word;
    }
}

.jstree-wholerow-ul {
    width: 100%;

    .jstree-anchor {
        width: calc(100% - 50px);
        overflow: hidden;
        text-overflow: ellipsis;
    }
}

.modal {
    position: absolute;
}

.modal-open {
    overflow-y: auto;
}

.daterangepicker {

    .ranges {
        max-height: 328px;
        overflow: auto;
    }

    .ranges li.active,
    td.active {
        background-color: $color_havelock_blue_approx;
    }

    .drp-buttons {
        .applyBtn {
            background-color: $color_havelock_blue_approx;
            border-color: $color_havelock_blue_approx;
        }
    }
}

.dropzone .dz-preview .dz-details .dz-filename {
    padding-top: 20px;
}

.long-description-container,
.short-description-container {
    margin-right: 0px !important;
}

.longdescription-wrapper {
    display: inline-block;
    height: 100px;
    background-color: #fff !important;
    overflow: auto;
    margin-top: 8px;
    width: 100%;

    ul {
        list-style: disc !important;
    }
}

.isTextTypeBtn-wrapper {
    display: inline-block;
    line-height: 22px;

    .switch {
        margin-bottom: 0px;
    }
}

.select2-container--default .select2-search--inline .select2-search__field {
    width: 100% !important;
}

.tooltip-inner>div {
    max-width: 250px;
    text-align: left;

    ul {
        list-style: disc;
    }
}

.ideal-timeout {
    .modal-content {
        border-radius: 0px !important;
    }
}

.typeFilter-container {
    width: 100%;

    .typeFilter {
        width: calc(100% - 45px);
        display: inline-block;
    }
}

.refreshBtn-container {
    display: inline-block;
    position: absolute;
    padding-left: 8px;

    .btn-action {
        margin: 0px !important;
        font-size: 15px;
    }
}

.user-circle {
    display: inline;
}

.business-metadata-detail-attr {
    ul {
        list-style: disc
    }
}