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

//------------clusterForms/feedFrom/processForm ----------------//
.mt1 {
  margin-top: 1px;
}
.mt3 {
  margin-top: 3px;
}
.mt5 {
  margin-top: 5px;
}
.mt8 {
  margin-top: 8px;
}
.mt10 {
  margin-top: 10px;
}
.mt15 {
  margin-top: 15px !important;
}
.mt20 {
  margin-top: 20px;
}
.mt25 {
  margin-top: 25px;
}
.mt30 {
  margin-top: 30px;
}
.mt35 {
  margin-top: 35px;
}
.mb0 {
  margin-bottom: 0px !important;
}
.mb5 {
  margin-bottom: 5px;
}
.mb7 {
  margin-bottom: 7px;
}
.mb10 {
  margin-bottom: 10px;
}
.mr20 {
  margin-right: 20px;
}
.ml20{
  margin-left: 20px;
}
.pt15px{
  padding-top:15px;
}
.pt35px{
  padding-top:35px;
}
.pt5px{
  padding-top:5px;
}
.pt3px{
  padding-top:3px;
}
.pb5px{
  padding-bottom:5px;
}
.pl0px{
  padding-left: 8px;
}
.p0px{
  padding: 0px;
}
.plr0px{
  padding-left: 0px;
  padding-right: 0px;
}

.pl5 {
  padding-left: 5px;
}

//-----------------next and previous buttons----------//
@nextBtnBackground: #69be28;
@prevBtnBackground: #CCCCCC;
.nextBtn, .prevBtn ,.cnclBtn {
  .transition(background, 0.3s, ease);
  border: 0px none;
  width: 100px;
  font-size: 12px;
  line-height: 1.3em;
}
.advancedSaveBtn {
  .transition(background, 0.3s, ease);
  border: 0px none;
  font-size: 12px;
  line-height: 1.3em;
  width: 180px;
}
.datasourceBtn {
  .transition(background, 0.3s, ease);
  border: 0px none;
  width: 120px;
  font-size: 12px;
  line-height: 1.3em;
}
a.cnclBtn {
	height:24px;
	background-color:#cccccc;
	/*border-radius:7px;*/
	margin:0px;
	line-height: 1.3em;
  &:hover {
    background: darken(#cccccc, 10%);
    color: #232323;
    outline: hidden;
    /*border-radius: 7px!important;*/
  }
  &:focus, &:active, &:visited {
    background: darken(#cccccc, 10%);
    color: #232323;
    outline: hidden;
	/*border-radius: 7px!important;*/
  }
}
.nextBtn {
  background: @form-nxt-btn;
  color: @progress-div-active-color;
  /*line-height: 1.3em;*/
  &:hover {
    background: darken(@form-nxt-btn, 10%);
    color: @progress-div-active-color;
    outline: hidden;
    /*border-radius: 7px!important;*/
  }
  &:focus, &:active, &:visited {
    background: darken(@form-nxt-btn, 10%);
    color: @progress-div-active-color;
    outline: hidden;
  }
}
.prevBtn {
  background: @prevBtnBackground;
  &:hover {
    background: darken(@prevBtnBackground, 10%);
    outline: hidden;
    /*border-radius: 7px!important;*/
  }
  &:focus, &:active, &:visited {
    background: darken(@prevBtnBackground, 10%);
    outline: hidden;
    /*border-radius: 10px!important;*/
  }
}
.advancedSaveBtn {
  background: @form-nxt-btn;
  color: @progress-div-active-color;
  &:hover {
    background: darken(@form-nxt-btn, 10%);
    color: @progress-div-active-color;
    outline: hidden;
  }
  &:focus, &:active, &:visited {
    background: darken(@form-nxt-btn, 10%);
    color: @progress-div-active-color;
    outline: hidden;
  }
}
.datasourceBtn {
  background: @form-nxt-btn;
  color: @progress-div-active-color;
  /*line-height: 1.3em;*/
  &:hover {
    background: darken(@form-nxt-btn, 10%);
    color: @progress-div-active-color;
    outline: hidden;
    /*border-radius: 7px!important;*/
  }
  &:focus, &:active, &:visited {
    background: darken(@form-nxt-btn, 10%);
    color: @progress-div-active-color;
    outline: hidden;
  }
}
//-----------------------------------------------------//
.aclBox {

  > div {
    label {
      margin-top:5px;
      font-weight: normal;
      width: 95%;
    }
    width: 32%;
    display: inline-block;
    vertical-align: top;
  }
}
.formBoxContainer {
  .customContainer{
	overflow:auto;
	border:1px solid @details-form-border;
	margin-left:0px;
	margin-right:0px;
  }
}
.dt {
  //display: table;
}
/*.xmlPreviewContainer {
  position: absolute;
  left: 530px;
  top: 55px;
  right: 0;
}
@media screen and (max-width: @grid-float-breakpoint) {
  .xmlPreviewContainer {
    position: relative;
    left:0;
    top:0;
    width: 500px;
  }
}*/
.formPage {

  h3 {
    font-weight: bold;
  }
  a.cnclBtn {
	height:24px;
	background-color:#cccccc;
	/*border-radius:7px;*/
	margin:0px;
	text-decoration: none;
	text-align: center;
	line-height: 1.3em;
	&:hover {
		background: darken(#cccccc, 10%);
		color: #232323;
		outline: hidden;
		/*border-radius: 7px!important;*/
	  }
	  &:focus, &:active, &:visited {
		background: darken(#cccccc, 10%);
		color: #232323;
		outline: hidden;
		/*border-radius: 7px!important;*/
	  }
	}
  .entypo {
    font-size: 22px;
	color: #000;
   /* line-height: 14px;*/
    /*vertical-align: top;
    display: inline-table;*/
  }
  .addTag {
	background-color:#cccccc;
  }
  h4 {
    font-size: 14px;
    font-weight: bold;
    line-height: 14px;
    margin: 20px 0 5px;
  }
  h5 {
    font-size: 14px;
    font-weight: bold;
    line-height: 14px;
    margin: 10px 0 5px;
    &.noSpecial { margin-left: 4%; margin-top:5px;}
  }
  label {
    font-size: 12px;
    line-height: 12px;
    margin: 10px 0 2px 0;
  }
  .font11px {
    font-size: 11px;
  }
  .light {
    font-weight: normal;
  }
  a {
    line-height: 30px;
    cursor: pointer;
    margin: 5px 15px;
    text-decoration: underline;
    color: black;
    &:focus {
      color: red;
    }
  }
  input, select {
    color: @gray-darker;
    font-size: 13px;
  }
  .input-group-addon {
    height:13px;
    border-radius:0;
  }

}
select {
  .form-control;
  padding:0;
}
#engineVersionField{ display: inline-block; width: auto; }
.inlineInputsGroup {
  input {
    display: inline-block;
    margin-right: 3px;
    &:last-child { margin-right:0;}
  }
  input[type="text"] {
    width: 43px;
    //height: 18px;
    //line-height: 18px;
    vertical-align: top;
  }
  select {
    display: inline-block;
    width: auto;
  }
  input[type="checkbox"] {
    margin:0;
    vertical-align: middle;
  }
  #availInput {
    width: 60px;
  }
}

.formTitle {
  background-color: @gray-light2;
  .border-bottom-radius(5px);
  color: black;
  padding: 5px;
  font-size: 16px;
  .entypo {
    font-size: 35px;
    line-height: 9px;
  }

}

#clusterSummaryStep, #feedSummaryStep, #processSummaryStep, #formSummaryBox, #datasourceSummaryStep {
  padding: 0 10px;
  h4 {
    margin-top: 25px;
    margin-bottom: 0px;
  }
}

.clusterForm, .feedForm, .entityForm, .datasetForm, .snapshotForm, .datasourceForm {
  input, input[disabled],textarea, textarea[disabled] {
    padding-left: 1px;
    border-width: 1px;
    background-color:@form-input-background-color;
    color:#333333;
    &.form-control {
      background-color:@form-input-background-color;
    }
    &[disabled] {
      background-color:@input-bg-disabled;
    }
  }
  input:active,input:focus,input:visited,
  select:active,select:focus,select:visited,
  textarea:active,textarea:focus,textarea:visited {
    background-color:#ffffff;
    color:#333333;
  }
  select {
    background-color: @form-input-background-color;
    color:#333333;
  }
  select[disabled] {
    background-color:@input-bg-disabled;
  }
  .p0px{
	padding:0px;
  }
  > div {
    &:first-child {
      margin-top: 0;
    }
    margin-top: 5px;
  }


}
#feedPropertiesBox {
  label {
    line-height: 25px;
  }
}
#interfaces-detail, #feedPropertiesBox {
  > div {
    margin-top: 10px;
  }
  label {
    margin:0;
  }
  input[type="checkbox"] {
    vertical-align: middle;
  }
}
#clusterLocationBox {
  label {
    margin:0;
  }
}
//---------------------------------//
.clusterForm, .feedForm, .entityForm, .datasetForm, .snapshotForm, .datasourceForm {
  .pullOver {

    button {
      transform: rotate(90deg);
      height:auto!important;
      position: absolute;
      right: -61px;
      top: 57px;

    }
  }
  .pullOverXml {


    button {
      transform: rotate(90deg);
      height:auto!important;
      position: absolute;
      right: -88px;
      top: 57px;
    }
  }
  .small {
    display: inline-block;
    width: 30px;
    height: 20px;
  }
  .medium {
    width: 80px;
  }
  .availFlagInput {
    width: 85px;
  }
  .freqTitle {
    margin: 0 0 5px 0;
  }
  .title {
	font-size: 14px;
	color: @form-label-color;
    .mb0;
  }
  .pb15px {
	padding-bottom:15px;
  }
  .pb30px {
	padding-bottom:30px;
  }
  .bb1pxw {
	border-bottom: 1px solid #666666;
  }
  input,select,button,textarea {
	height:24px;
	border-color:#cccccc;
  }
  .labelCheckBox  {
    height:17px;
  }
  input[type="radio"] {
    height: auto
  }
  .top-buffer {
    margin-top: 8px;
  }
  .feedLocationNavBox {
    margin-top:10px;
    h4 {
      margin-top: 10px;
    }
    &.nopointer .btn {
      cursor: default;
    }
  }
  .feedLocationNav {
    color: black;

    .btn {
      position: relative;
      background-color: lighten(@gray-light2, 20%);
      border-radius: 5px;
      font-size: 12px;
      letter-spacing: 0.5px;
      padding: 4px 20px;

      &:last-child {
        margin-right: -12px;
      }
    }
    .active {
      color: white;
      background-color:lighten(@gray, 20%);
      z-index: 1234;
    }
    &.disabled {
      .btn {
        background-color: lighten(@gray-light2, 30%);
        opacity:1;
        color: @gray-light2;
      }
      .active {
        background-color:lighten(@gray, 30%);
        color: white;
      }
    }
  }

  .sourceReplicationButton {
    width: 45px;
    display: inline-block;
    border-bottom: 3px solid @gray-light;
    color: @gray-light;
    cursor: pointer;
    small {
      font-size: 60%;
      margin-bottom: -5px;
      display: block;
    }
    &.active {
      border-color: @gray-dark;
      color: @gray-dark;
    }

  }
  .addReplicationButton {
    width: 70px;
    display: inline-block;
    border-bottom: 3px solid @gray-light;
    color: @gray-light;
    cursor: pointer;
    small {
      font-size: 60%;
      margin-bottom: -5px;
      display: block;
    }
    &.active {
      border-color: @gray-dark;
      color: @gray-dark;
    }

  }
  /*.validityDateBox {
    .light {
      display: block;
    }
    input {
      display: inline-block;

    }
  }*/
  .input-group {
    input {
      font-size: 12px;
    }
    button {
      padding: 2px 6px;
    }
    i {
      font-size: 14px;
    }
  }
  .timePicker {
    margin-top: -22px;
    .btn {
      padding: 1px 5px;
      border-radius: 0;
    }
  }
  @media screen and (max-width: @grid-float-breakpoint) {
    .timePicker {
      margin-top: 0;
    }
  }
  /*.TZSelect {
    margin: 5px 0;
  }*/
  .addProperty {
    margin: 12px 5px;
    display: inline-block;
  }
}


//----old entity details------------------//
.detailsHeaders {
  /*h3 { display: inline-block;}
  small {
    color: @gray-light;
    display: block;
    margin-bottom: -2px;
  }*/
  .btn {
    margin-top: -2px;
    background-color: @detail-header-button-background-color;
    color: @detail-header-color;
  }
  .entityName {
    color: @detail-header-color;
    font-size: 15px;
    padding-left: 5px;
  }
}

@media screen and (max-width: @grid-float-breakpoint) {
  .detailsBox {
    float:none!important;
  }
}
.entityDetailsBox {
	background-color: @entity-detail-background-color;
	color: @detail-color;
    border: 1px solid @detail-border-color;
}

.instanceDetails {
  .detailsBox {
    border: 1px solid @detail-border-color;
    margin: 5px;
    padding: 15px;
  }
}

.detailsBox {
  /*border-radius: 5px;
  border: 1px solid @gray-light2;*/
  margin: 0px;
  padding: 0px;
  font-size: 12px;
  background-color: @detail-background-color;
  h4 {
    font-weight: bold;
    margin:5px 0;
    color: @form-label-color;
  }
  h5 {
    font-weight: bold;
    margin-top:2px;
	color:  @form-label-color;
  }
  table {
    width: 100%;
    border-spacing: 5px;
    border-collapse: separate;
  }
  .blink-success {
	color: #69be28;
  }
  .blink-warning {
	color: #E6DD00;
  }
  .blink-danger {
    color: #E6DD00;
  }
  .blink-notification {
	color: #ffff00;
  }
  .text-success {
	color: #3c763d;
  }
  table.properties {
	color: @form-table-color;
	border-collapse: collapse;
    .mb0;
  }
  .no-border-top {
	border-top:0px;
  }
  .no-border-bottom {
	border-bottom:0px;
  }

  .editXMLBtn {
	backgorund-color:#cccccc;
	color:#232323;
	font-size:12px;
  }
  .tableHeader {
    width: 70px;
    font-weight: bold;
  }
  label, span {
    color: @form-label-color;
  }
  label {
    margin-top: 15px;
  }
  label.custom-danger {
	color: #f33;
  }
  textarea.form-control {
    width: 100%;
	/*background-color:#232323;
	color:#ffffff;
	border:0px;
	font-size:12px;*/
  }
  .dt {
	background-color: @details-box-dt-bg;
	border:1px solid #666666;
  }

  .processCluster {
    border-radius: 5px;
    border: 1px solid #a6a6a6;
    padding: 15px 4%;
    margin: 10px auto;
  }
  /*&.processCluster {
    padding: 15px 4%;
    margin: 5px auto;
    h5 {
      margin-top:15px;
      &:first-child {
        margin-top:0;
      }
    }
  }*/
  &.xmlPreviewContainer {
    margin-left: 25px;
    margin-right: -25px;
    textarea[disabled] {
      border: none;
      background-color: transparent;
    }
  }
}

.detailsBT{
  .entypo{
    font-size: 1.5em;
  }
  color: #fff;
  padding: 3px 8px;
  border: 1px solid white;
  border-radius: 5px;
  border-color: #fff;
  display: inline-block;
  cursor: auto;
  background-color: #5fa33e;
}


///////////////////////////////////////////////
///////VALIDITY BOXES//////////////////////////
///////////////////////////////////////////////
.validityBox {
  /*label, input, button {
    font-weight: normal;
  }*/

  /*> div {
    display: inline-block;
    margin: 0 2px;
  }*/

  h4 {
    margin-top: 5px;
    margin-bottom: 0;
  }
  .startDateBox, .endDateBox {
    /*width: 20%;*/
    vertical-align: top;
    margin-right: 5px;
  }
  .startTimeBox, .endTimeBox {
    /*width: 15%;*/
    vertical-align: top;
    input {
      width: 45px;
      margin-right: 5px;
      /*margin:0 auto;*/
    }
    button {
      border-radius: 0;
      width: 25px;
      /*height: 25px;*/
      padding:0;
      margin-left: 1px;
    }
    table {
      width: auto;
      border-spacing: 0;
      tr {
        &:first-child {
          display: none;
        }
        &:last-child {
          display: none;
        }
      }
    }

    a {
      display: none!important;
    }
  }
  .endDateBox {

  }
  .endTimeBox {

  }
  /* Date-picker */
  ul.dropdown-menu {
    color: @gray-dark;
    span, label {
      color: @gray-dark;
    }
    button {
      height: auto;
    }
  }
  /*.tzBox {
    width: 22%;
    //padding-top: 20px;
  }*/
}

.clusterForm, .feedForm, .entityForm, .datasetForm, .snapshotForm, .datasourceForm {
  margin-top: 25px;
  /*.validityBox {
    .startDateBox, .endDateBox { width: 27%;}
    .startTimeBox, .endTimeBox {width: 17%;}
    .endDateBox { margin-left: 20px;}
  }*/
}

.feedFormClusters {
  padding-top: 50px;
}

.feedForm .clusterSelect {
  display: inline;
  width: auto;
}

.feedForm .clusterAddBtn {
  margin: 0px 0px 1px 8px;
}

.feedForm .sourceClusterList, .feedForm .targetClusterList {
  padding-top: 7px;
}

.feedForm .clusterListLabel {
  font-size: 13px;
  margin-bottom: 7px;
}

.feedForm .panel-heading {
  padding: 1px;
}

.feedForm .panel-group .panel {
  border-radius: 0px;
  margin-top: -1px;
}

.feedForm .panel-group .panel .panel-collapse {
  padding: 0px;
}

.feedFormInputBorder {
  border: 1px solid @input-border;
}

.feedForm .partition-panel-body {
  padding: 5px 5px 30px 5px;
}

.aclPermission {
  min-width: 250px;
}

.endpointDefault {
  color : @form-label-color !important;
}

.endpointChanged {
  color: @gray-darker !important;
}

.clusterBoxEndLine {
  border-top: 1px solid #aaa;
}

.disabledEditBtn {
  pointer-events: auto !important;
}
