// Copyright (C) 2019 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.

.details-content {
  display: grid;
  grid-template-rows: auto 1fr;

  .handle {
    background-color: hsl(215, 1%, 95%);
    border: 1px solid rgba(0,0,0,0.1);
    border-bottom: none;
    cursor: row-resize;
    height: 28px;
    min-height: 28px;
    display: grid;
    grid-auto-columns: 1fr 30px;
    grid-template-areas: "tabs button";

    .tabs {
      display: flex;

      .tab {
        font-family: 'Google Sans';
        color: #3c4b5d;
        padding: 3px 10px 10px 10px;
        margin-top: 3px;
        font-size: 13px;
        border-radius: 5px 5px 0px 0px;
        background-color: hsla(0, 0%, 75%, 1);
        border-top: solid 1px hsla(0, 0%, 75%, 1);
        border-left: solid 1px hsla(0, 0%, 75%, 1);
        border-right: solid 1px hsla(0, 0%, 75%, 1);

        &[active] {
          background-color: white;
          &:hover {
            cursor: default;
            background-color: white;
          }
        }

        &:hover {
          cursor: pointer;
          background-color: hsla(0, 0%, 85%, 1);
        }
      }
    }

    i.material-icons {
      font-size: 24px;
      float: right;
      vertical-align: middle;
      margin-right: 5px;
      margin-top: 1px;
      &:hover{
        cursor: pointer;
      }
    }

    .handle-title {
      float: left;
      font-family: 'Google Sans';
      color: #3c4b5d;
      margin-left: 5px;
      padding: 5px;
      font-size: 13px;
    }
  }

  .details-panel-container {
    .scroll-limiter {
      height: 100%;
      display: flex;
      flex-direction: column;
      .panel:last-child {
        flex-grow: 1;
      }
    }
  }
}

.details-panel {
  padding: 10px;
  font-family: 'Google Sans';
  color: #3c4b5d;

  .details-panel-heading {
    font-size: 16px;
    padding-bottom: 5px;
  }

  table {
    @include transition(0.1s);
    font-size: 14px;
    line-height: 18px;
    width: 50%;
    min-width: 200px;
    max-width: 50%;
    table-layout: fixed;
    word-wrap: break-word;
    tr:hover {
      background-color: hsl(214, 22%, 90%);
    }
    th {
      text-align: left;
      width: 30%;
      font-weight: normal;
    }
    .material-icons {
      @include transition(0.3s);
      font-size: 16px;
      border-radius: 3px;
      margin-left: 5px;
      border: 1px solid transparent;
      background-color: #e8e8e8;
      &:hover {
        cursor: pointer;
        border: #475566 solid 1px;
      }
    }
  }

  button {
    background-color: #262f3c;
    color: #fff;
    font-size: 0.875rem;
    padding-left: 1rem;
    padding-right: 1rem;
    padding-top: .5rem;
    padding-bottom: .5rem;
    border-radius: .25rem;
    margin-top: 12px;
  }

  .explanation {
    font-size: 14px;
    width: 35%;
    margin-top: 10px;
  }

  .material-icons {
    vertical-align: middle;
    margin-right: 10px;
  }
}

.notes-editor-panel {
  padding: 10px;
  display: flex;
  flex-direction: column;
  height: 100%;
  font-family: 'Google Sans';
  color: #3c4b5d;

  .notes-editor-panel-heading-bar {
    display: flex;
    padding-bottom: 8px;
    font-size: 14px;
    .notes-editor-panel-heading {
      padding-top: 3px;
    }
    input {
      vertical-align: middle;
    }
  }

  button {
   background: #262f3c;
   color: white;
   border-radius: 10px;
   font-size: 10px;
   height: 22px;
   line-height: 18px;
   min-width: 7em;
   margin: auto 0 auto 1rem;
  }

  input[type=text] {
    flex-grow: 1;
    border-radius: 4px;
    border:1px solid #dcdcdc;
    padding: 3px;
    margin: 0 10px;
    &:focus {
      outline: none;
      box-shadow: 1px 1px 1px rgba(23, 32, 44, 0.3);
    }
  }
}

.flame-graph-panel {
  height: 500px;
}

.log-panel {
  width: 100%;
  height: 100%;
  display: grid;
  grid-template-rows: auto 1fr;

  header.stale {
    color: grey;
  }

  .scrolling-container {
    overflow-y: scroll;
    position: relative;
    width: 100%;
    background-color: #fefefe;
    border-bottom: 1px solid hsl(213, 22%, 75%);

    .rows {
      position: relative;
      direction: ltr;
      width: 100%;

      .row {
        @include transition();
        position: absolute;
        width: 100%;
        height: 20px;
        line-height: 20px;
        background-color: hsl(214, 22%, 100%);

        &.D { color: hsl(122, 20%, 40%); }
        &.V { color: hsl(122, 20%, 30%); }
        &.I { color: hsl(0, 0%, 20%); }
        &.W { color: hsl(45, 60%, 45%); }
        &.E { color: hsl(4, 90%, 58%); }
        &.F { color: hsl(291, 64%, 42%); }
        &.stale { color: #aaa; }
        &:nth-child(even) {
            background-color: hsl(214, 22%, 95%);
        }
        &:hover {
          background-color: hsl(214, 22%, 90%);
        }
        .cell {
          font-size: 11px;
          font-family: var(--monospace-font);
          white-space: nowrap;
          overflow: hidden;
          text-overflow: ellipsis;
          padding-left: 10px;
          padding-right: 10px;
          display: inline-block;
          &:first-child {
            padding-left: 5px;
          }
          &:last-child {
            padding-right: 5px;
          }
          &:nth-child(1) {
            width: 110px;
            text-overflow: clip;
            text-align: right;
          }
          &:nth-child(2) {
            width: 20px;
          }
          &:nth-child(3) {
            width: 15%;
          }
          &:nth-child(4) {
            width: calc(100% - 110px - 20px - 15%);
          }
          &:only-child {
            width: 100%;
          }
        }
      }
    }
  }
}
