// Copyright (C) 2020 The Android Open Source Project
//
// 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.

.trace-info-page {
  overflow-y: auto;
  overflow-x: hidden;
  padding: 0 20px;

  section {
    margin: 20px auto;
    max-width: 800px;
    font-size: 1rem;
    padding: 20px;
    border-radius: 8px;

    &.errors {
      background-color: #f3e5f5;
    }

    .metric-error {
      font-family: var(--monospace-font);
      font-size: 12px;
      padding: 5px;
      word-break: break-all;
    }

    h2 {
      font-family: "Roboto", sans-serif;
      font-weight: 400;
      letter-spacing: 0.25px;
      font-size: 2rem;
      margin-bottom: 1rem;
    }

    h3 {
      font-size: 0.9rem;
      font-weight: 400;
      line-height: 1.25rem;
      margin: 10px 0;
      color: #333;
    }

    .contextual-help {
      font-size: 18px;
      margin-left: 10px;
      color: #43a047;
      cursor: default;
    }

    table {
      border-spacing: 4px 1px;

      thead td {
        margin-bottom: 5px;
        padding-bottom: 5px;
        border-bottom: 1px solid #333;
        font-weight: 500;
      }
      tr td {
        min-height: 20px;
      }

      tbody {
        tr:nth-child(2n + 1) td {
          background-color: rgba(0, 0, 0, 0.04);
        }

        td.name {
          min-width: 150px;
        }

        td {
          font-family: var(--monospace-font);
          font-size: 12px;
          padding: 5px;
          word-break: break-all;
          white-space: pre-wrap;
          &:first-of-type {
            font-weight: 800;
          }
        }
      }
    }
  }
}
