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

modal-import-models-step-indicator {
    @import "public/stylesheets/variables.scss";

    $text-color-default: #393939;
    $text-color-active: $ignite-brand-success;
    $indicator-color-default: #757575;
    $indicator-color-active: $ignite-brand-success;
    $indicator-size: 12px;
    $indicator-border-radius: 2px;
    $spline-height: 1px;

    display: block;

    .step-indicator__steps {
        display: flex;
        flex-direction: row;
        justify-content: space-between;
        margin: 0;
        padding: 0;
        list-style: none;
    }

    .step-indicator__step {
        color: $text-color-default;
        display: flex;
        flex-direction: column;
        align-items: center;
        position: relative;

        &:before {
            content: '';
            display: block;
            background: $indicator-color-default;
            width: 100%;
            height: $spline-height;
            bottom: $indicator-size / 2;
            position: absolute;
        }

        &:after {
            content: '';
            display: block;
            background: $indicator-color-default;
            width: $indicator-size;
            height: $indicator-size;
            border-radius: $indicator-border-radius;
            margin-top: 5px;
            z-index: 1;
        }
    }
    .step-indicator__step-first,
    .step-indicator__step-last {
        &:before {
            width: calc(50% - #{$indicator-size} / 2);
        }
    }
    .step-indicator__step-first:before {
        right: 0;
    }
    .step-indicator__step-last:before {
        left: 0;
    }
    .step-indicator__step-active {
        color: $text-color-active;

        &:after {
            background: $indicator-color-active;            
        }
    }
    .step-indicator__spline {
        background: $indicator-color-default;
        height: $spline-height;
        width: 100%;
        margin-top: auto;
        margin-bottom: $indicator-size / 2;
    }
    .step-indicator__step-visited {
        &:before,
        &+.step-indicator__spline {
            background: $indicator-color-active;
        }
    }
}