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

//---------------------------------//
//---------progress Bar------------//
//---------------------------------//
/*
.progressBar {
  overflow: hidden;
  padding: 10px 35px;
  .entypo {
    /!*float: none!important;
    position: absolute;
    margin: 0!important;
    top:0;
    left:0;*!/
   /!* line-height: 36px;
    height: 36px;
    width: 36px;*!/

    color: white;
    z-index:2;
    position: relative;
    display: none;
    font-size: 36px;

    margin: -24px -15px 0 0!important;
  }
  div {
    .transition(background-color, 0.5s, ease-out);
    background-color: @gray-light;
    height: 10px;
    border-top:2px solid @gray-light;
    border-bottom:2px solid @gray-light;
    span {
      display: block;
      width: 55px;
      span { display: none;}
      &:first-child {
        float: left;
        margin: -10px 0 0 -17px;
        h6 {
          font-weight: bold;
        }
      }
      &:last-child {
        float: right;
        margin: -10px -15px 0 0;
        div {
          background-color: @gray-light;
        }
      }
      h6 {
        margin: 0;
        font-size: 10px;
      }
    }
    div {
      display: inline-block;
      border-radius: 30px;
      line-height: 27px;
      width: 30px;
      height: 30px;
      text-align: center;
      background-color: #333;
      color: white;
      border: 3px solid @gray-light;
    }
  }
}
.clusterProgressBox {
  font-weight: bold;
  font-size: 16px;
  span {
    text-align: center;
  }
  &.summary {
    .progressBar {
      div {
        background-color: @gray-dark;
        border-color: @gray-dark;
        span {
          &:first-child {
            .entypo { display: block;}
            div {
              color: @gray-dark;
              border-color: @gray-dark;
            }
            h6 {
              font-weight: normal;
            }
          }
          &:last-child {
            div {
              border-color: @gray-light;
            }
            h6 {
              font-weight: bold;
            }
          }
        }
      }
    }
  }
}
.feedProgressBox {
  font-size: 14px;
  .progressBar {
    padding: 10px 6% 0 6%;
    >div {
      >span {
        display: inline-block;
        width: 24%;
        margin: -11px 0 0 0;
        &:first-child {
          margin: -10px 0 0 -4%;
          h6 {
            font-weight: normal;
          }
        }
        &:last-child {
          margin: -10px -21% 0 0;
        }
        div {
          background-color: @gray-dark;
        }
      }
      div {
        border-color: @gray-light;
      }
      h6 {
        margin-left: -7px;
        font-weight: normal;
      }
    }
  }
  &.general {
    .fir {
      background-color: @gray-dark;
      & + h6 { font-weight: bold!important; }
    }
    .sec, .thi, .fou, .fif {
      background-color: @gray-light;
    }

  }
  &.properties {
    .fir {
      .entypo {display: block;}
      border-color: @gray-dark;
      color: @gray-dark;
    }
    .sec + h6 { font-weight: bold; }
    .fir, .sec {
      background-color: @gray-dark;
    }
    .thi, .fou, .fif {
      background-color: @gray-light;
    }
  }
  &.location {
    .thi + h6 { font-weight: bold; }
    .fir, .sec {
      .entypo {display: block;}
      border-color: @gray-dark;
      color: @gray-dark;
    }
    .fir, .sec, .thi {
      background-color: @gray-dark;
    }
    .fou, .fif {
      background-color: @gray-light;
    }
  }
  &.clusters {
    .fou + h6 { font-weight: bold; }
    .fir, .sec, .thi {
      .entypo {display: block;}
      border-color: @gray-dark;
      color: @gray-dark;
    }
    .fir, .sec, .thi, .fou {
      background-color: @gray-dark;
    }
    .fif {
      background-color: @gray-light;
    }
  }
  &.summary {
    .fif + h6 { font-weight: bold; }
    .fir, .sec, .thi, .fou {
      .entypo {display: block;}
      border-color: @gray-dark;
      color: @gray-dark;
    }
    .fir, .sec, .thi, .fou, .fif {
      background-color: @gray-dark;
    }
  }
}
.processProgressBox {
  font-size: 14px;


  .progressBar {

    padding: 10px 6% 0 6%;
    >div {
      >span {
        display: inline-block;
        width: 24%;
        margin: -11px 0 0 0;
        &:first-child {
          margin: -10px 0 0 -4%;
          h6 {
            font-weight: normal;
          }
        }
        &:last-child {
          margin: -10px -21% 0 0;
        }
        div {
          background-color: @gray-dark;
        }
      }
      div {
        border-color: @gray-light;
      }
      h6 {
        margin-left: -7px;
        font-weight: normal;
      }
    }
  }
  &.general {
    .fir {
      background-color: @gray-dark;
      & + h6 { font-weight: bold!important; }
    }
    .sec, .thi, .fou, .fif {
      background-color: @gray-light;
    }

  }
  &.properties {
    .fir {
      .entypo {display: block;}
      border-color: @gray-dark;
      color: @gray-dark;
    }
    .sec + h6 { font-weight: bold; }
    .fir, .sec {
      background-color: @gray-dark;
    }
    .thi, .fou, .fif {
      background-color: @gray-light;

    }
  }
  &.clusters {
    .thi + h6 { font-weight: bold; }
    .fir, .sec {
      .entypo {display: block;}
      border-color: @gray-dark;
      color: @gray-dark;
    }
    .fir, .sec, .thi {
      background-color: @gray-dark;
    }
    .fou, .fif {
      background-color: @gray-light;
    }
  }
  &.inputsAndOutputs {
    .fou + h6 { font-weight: bold; }
    .fir, .sec, .thi {
      .entypo {display: block;}
      border-color: @gray-dark;
      color: @gray-dark;
    }
    .fir, .sec, .thi, .fou {
      background-color: @gray-dark;
    }
    .fif {
      background-color: @gray-light;
    }
  }
  &.summary {
    .fif + h6 { font-weight: bold; }
    .fir, .sec, .thi, .fou {
      .entypo {display: block;}
      border-color: @gray-dark;
      color: @gray-dark;
    }
    .fir, .sec, .thi, .fou, .fif {
      background-color: @gray-dark;
    }
  }
}*/
.feedProgressBox, .clusterProgressBox, .processProgressBox, .datasetProgressBox,
.snapshotProgressBox, .datasourceProgressBox {
  .progressBar {
    padding: 0px;
    > div {
      width: 19%;
      margin-left: 1%;
      float: left;
      height: 32px;
      border: 1px solid @progress-div-border;
      border-bottom:1px solid @progress-div-bottom-border;
      line-height: 32px;
      font-size: 110%;
      border-radius: 5px 5px 0px 0px;
      color: @progress-div-color;
      &.completed {
        background-color: @progress-div-completed-bg;
        color: @progress-div-completed-color;
        border-color: @gray-lightest;
        border-bottom: @progress-div-bottom-border;
      }
      &.active {
        background-color: @progress-div-active-bg;
        color: @progress-div-active-color;
      }
      &.fir {
        margin-left: 0.5%;
      }
    }
  }
}
