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

body {
  background: $grey12 url('/nifi-registry/assets/images/registry-logo-web-app.svg') no-repeat center center;
  background-size: 40%;
}

#nifi-registry-login-perspective {
  background: $grey12 url('/nifi-registry/assets/images/registry-logo-web-app.svg') no-repeat center center;
  background-size: 40%;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

#nifi-registry-not-found-perspective {
  background: $grey12 url('/nifi-registry/assets/images/registry-logo-web-app.svg') no-repeat center center;
  background-size: 40%;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

#nf-registry-app-container {
  margin: 0;
  width: 100%;
  height: 100%;
}

#nifi-registry-logo {
  height: 44px;
}

#nifi-registry-alerts-count {
  border-radius: 50%;
  background: $warnColor;
  height: 14px;
  width: 14px;
  position: relative;
  left: 9px;
  color: #fff;
  font-size: 9px;
  text-align: center;
  line-height: 14px;
}

#nifi-registry-toolbar {
  min-width: 1045px;
  position: absolute;
  z-index: 1000;
  background: $grey11;
}

#nifi-registry-toolbar .mat-icon-button {
  color: $grey5;
  font-size: 20px;
  margin: 0;
}

#nifi-registry-toolbar .mat-select-value-text,
#nifi-registry-toolbar .mat-select-arrow {
  color: white;
}

body[fds] .td-chip span {
    font-size: 10px;
}

#nifi-registry-toolbar span,
#nifi-registry-toolbar .link {
  color: $grey5;
  font-weight: lighter;
}

#nf-registry-perspectives-container {
  position: absolute;
  top: 64px;
  left: 0;
  right: 0;
  bottom: 0;
  min-height: 370px;
  min-width: 1045px;
  overflow: auto;
  background: $grey12;
  background-size: 40%;
}

#current-user {
  font-family: 'Roboto Slab';
  font-style: normal;
  font-weight: normal;
  font-size: 12px;
  max-width: 250px;
  text-overflow: ellipsis;
  line-height: normal;
  overflow: hidden;
  white-space: nowrap;
  color: $grey5;
}

#logout-link-container {
  font-size: 12px;
  text-transform: uppercase;
}

#loading-spinner {
  position: absolute;
  top: calc(50% - 50px);
  left: calc(50% - 50px);
  z-index: 2;
}

mat-sidenav {
  width: 40%;
  min-width: 418px;
}

.sidenav-content {
  position: absolute;
  bottom: 60px;
  top: 80px;
  right: 0;
  left: 0;
  overflow: auto;
}

.field-header {
  font-size: 11px;
  color: #999;
  font-weight: 300;
  margin-bottom: 6px;
  text-transform: uppercase;
}

body[fds] mat-form-field.td-chips-form-field.mat-input-container {
  width: unset;
}

body[fds] .md-title {
  font-weight: normal;
  color: $grey3;
}

body[fds] .md-subhead {
  font-weight: lighter;
}

body[fds] div .td-data-table {
  display: flex;
}
