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

/* Text */

.header {
  font-family: $fontMedium;
  font-size: 16px;
  color: $pageHeaderTextColor;
  padding-bottom: 10px;
}

.help-icon {
  font-size: 12px;
  color: $blue1;
}

.details-header {
  height: 92px;
}

.details-header-container {
  position: relative;
  top: 22px;
  left: 10px;
}

.description {
  font-family: $fontLight;
  font-size: 12px;
  color: $descriptionTextColor;
}

.description i {
  padding-right: 5px;
}

.label {
  font-family: $fontMedium;
  font-size: 14px;
  color: $bodyTextColor;
  text-transform: uppercase;
}

.units {
  font-family: $fontLight;
  font-size: 14px;
  color: $bodyTextColor;
}

.align-vertical {
  margin-top: auto;
  margin-bottom: auto;
}

.align-horizontal {
  margin-left: auto;
  margin-right: auto;
}

.fill-available-width {
  width: 100%;
}

.pointer {
  cursor: pointer;
}

.ellipsis {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    display: block !important;
}

.fa-rotate-45 {
    -webkit-transform: rotate(45deg);
    -moz-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    -o-transform: rotate(45deg);
    transform: rotate(45deg);
}
