/*
 * 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.
 */
.tab-header {

  .entity-header {

    
    .entity-name {
      display: flex;
      border: none;
      -webkit-font-smoothing: antialiased;
      align-items: center;
      
      .node-icon {
        flex: 0 1 0px;
        margin-left: 3px;
        img[src] {
          .make-icon(80px);
          margin-right: 18px;
        }
      }
      
      .node-name {
        flex: 1 0 200px;
        border: none;
      }
      .editable-wrap {
        flex: 1 0 200px;
        width: auto;
      }
      
      &.loading {
        margin-left: 5px;
        margin-top: 16px;
        margin-bottom: 16px;
      }
    }
    
    .editable {
      color: @primary-500;
      height: 34px;
      &:after {
        content: "\f040";
        font-family: FontAwesome;
        color: @gray-lighter;
        padding-left: 10px;
        transition: 0.3s ease all;
      }
      &:hover {
        cursor: pointer;
        &:after {
          color: @primary-500;
        }
      }
      &.editable-empty {
        color: @gray-lighter;
        color: #818899;
        text-transform: uppercase;
        &:before {
          content: "\f067";
          font-family: FontAwesome;
          color: @brand-success;
          padding-right: 10px;
          transition: color 0.3s;

        }

        &:after {
          color: @gray-lighter;
          display: none;
        }
      }
    }

  }
}

.location-multi {
  color: @gray-light;
  font-style: italic;

  .more {
    padding: 0;
  }
}
.na:before {
  content: 'not available';
  font-style: italic;
}

.modal-dialog .modal-header .text-danger:extend(.text-danger) {}