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

@import "variables.less";

input[type=text],
input[type=password] {
  .border-radius(0);
  padding: 12px;
  border: 1px solid #ccc;
  height: auto;
  font-size: 16px;
  margin-top: 0;
}

input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  padding: 0;
}

input[type="file"],
input[type="checkbox"],
input[type="radio"],
select {
  margin: 0 0 1em 0;
}

/*form elements and buttons*/
.btn-group {
  > .btn + .dropdown-toggle,
  > .btn:first-child,
  > .btn:last-child,
  > .dropdown-toggle {
    .border-radius(0);
    background-image: none;
    text-shadow: none;
  }
}

.btn {
  .box-shadow(none);
  .border-radius(@baseBorderRadius);
  background-image: none;
  text-shadow: none;
  background-repeat: no-repeat;
  padding: 10px;
  margin-top: 0px;
  .icon {
    margin-right: 0.2em;
  }
  &.btn-small {
    padding: 5px 10px;
    .icon {
      margin-right: 0;
      font-size: inherit;
    }
  }
  &.btn-mini {
    padding: 3px 8px;
    .icon {
      margin-right: 0;
      font-size: inherit;
    }
  }
}
.btn-primary {
  background: @brandPrimary;
}

.btn-primary a:visited {
  color: #fff;
}

.form-actions {
  background: none;
  border: none;
}

.input-append,
.input-prepend {
  .add-on {
    font-size: 18px;
    padding: 14px 5px 30px;
  }
  .btn .icon {
    font-size: 16px;
    margin-right: 0;
  }
}

.row-fluid .input-append [class*="span"],
.input-prepend input[class*="span"] {
  width: auto;
}

.form-inline {
  input[type=password],
  input[type=text] {
    width: auto;
  }
}
.checkbox {
  label {
    display: inline-block;
    padding-left: 30px;
  }
}

label {
  margin-right: 15px;
  padding-left:0;
  display: block;
  cursor: pointer;
  position: relative;
  font-size: 14px;
  &.inline {
    display: inline-block;
  }
}
.help-block {
  font-size: 12px;
}

a.help-link:hover {
  text-decoration: none;
}

input[type=text].error {
  border: red 1px solid;
}

form.view-query-update, form.view-query-save {
  max-width: 100%;
}

.custom-inputs {
  input[type=radio],
  input[type=checkbox] {
    display: none;
  }

  .checkbox label:before {
    border-radius: 12px;
    background-color: rgba(255, 255, 255, 0.1);
    border: 2px solid rgba(255, 255, 255, 0.1);
    transition: linear .2s, box-shadow linear .2s;
    -moz-transition: linear .2s, box-shadow linear .2s;
    -webkit-transition: linear .2s, box-shadow linear .2s;
  }

  .controls > .radio:first-child, .controls > .checkbox:first-child {
    padding-top: 15px;
  }

  .radio.inline, .checkbox.inline {
    display: inline-block;
    padding-top: 15px;
    margin-bottom: 12px;
    vertical-align: middle;
  }

  input[type=checkbox] + label:hover:before {
    border: 2px solid @white;
    transition: linear .2s, box-shadow linear .2s;
    -moz-transition: linear .2s, box-shadow linear .2s;
    -webkit-transition: linear .2s, box-shadow linear .2s;
  }

  /* if the checkbox is disabled, we don't want the red border on hover */
  input[type=checkbox]:disabled + label:hover:before {
    border: none;
  }

  /* if the checkbox is disabled, we don't want the white border on hover */
  input[type=checkbox]:disabled + label:hover:before {
    border: none;
  }

  input[type=checkbox]:checked + label:before {
    font-family: "fauxtonicon";
    content: "\f13e";
    font-size: 12px;
    background-color: inherit;
    border: 2px solid #7C8085;
    color: @linkColor;
    text-align: center;
    line-height: 19px;
    box-shadow: none;
    display: inline-block;
  }

  label:before {
    content: "";
    display: inline-block;
    width: 22px;
    height: 22px;
    margin-right: 10px;
    position: absolute;
    left: 0;
    bottom: 0px;
    background-color: #7C8085;
  }

  .radio label:before {
    border-radius: 8px;
  }

  input[type=radio]:checked + label:before {
    content: "\2022";
    color: #f3f3f3;
    font-size: 30px;
    text-align: center;
    line-height: 18px;
  }

  label.drop-down {
    &:before {
      display: none;
    }
  }
}

div.add-dropdown {
  position: absolute;
  top: 2px;
  right: 0px;
  .dropdown-menu {
    left: -110px;
    padding-bottom: 0;
    width: 148px;
    min-width: 0;
    top: 38px;
    .box-shadow(@boxShadow);
    &.arrow:before {
      right: 4px;
    }
    a {
      background-color: #202326;
      color: rgba(255, 255, 255, 0.8);
      &:hover {
        background-color: @navBG;
        color: white;
      }
    }
    li a {
      padding: 10px 15px 10px 12px;
    }
  }
  .dropdown-toggle {
    border-top: none !important;
    text-decoration: none;
  }
  > a {
    border-bottom: none;
    text-decoration: none;
    font-size: 16px;
  }
}

input.errorHighlight {
  -webkit-animation: errorBlinkBG 1s;
  animation: errorBlinkBG 1s;
}
