/**
 * Copyright 2019 Google LLC
 *
 * 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 'third_party/py/multitest_transport/ui2/constants';

.view_columns_btn {
  margin-right: 10px;
}

mat-table {
  overflow-x: auto;

  mat-header-row,
  mat-row {
    align-items: stretch;
    height: auto;
    min-height: 49px;
    min-width: 100%;
    vertical-align: middle;
  }

  mat-header-cell:last-of-type,
  mat-cell:last-of-type {
    justify-content: center;
    padding: 0 0 0 1px;
  }

  &:not(.scrolled) {
    mat-header-cell:last-of-type,
    mat-cell:last-of-type {
      border-left: 1px solid $primary-less;
      padding: 0;
    }
  }
}

.action-row {
  margin: 10px 16px;
  position: sticky;
}

.filter {
  padding: 0 8px 0 16px;
  align-items: center;

  mat-divider {
    height: 30px;
    margin: 0 20px;
    align-self: center;
  }
}

.filter-icon {
  margin: 0 8px;
  vertical-align: bottom;
}

.mat-mdc-chip {
  --mdc-chip-elevated-container-color: $background-default;
  border: 1px solid $border-chip;
  font-size: 12px;
}

.test-name-column {
  min-width: 150px;
  word-break: break-all;
}

.warning-icon {
  color: $warning;
  vertical-align: middle;
}
