@import '../styles.scss';

* {
  // We use z=1 as our 'base', so that our row highlighting underlay can exist
  // between the background(body) and content.
  z-index: 1;
}

commits-table-sk {
  background-color: var(--surface);
  color: var(--on-surface);

  .commitsTableContainer {
    display: grid;
    // Make the legend and commit columns shrink to content so with few taskspecs the commits don't
    // awkwardly take up a large portion of the screen.
    grid-template-columns: min-content min-content auto;
    gap: 2px 2px;
  }

  .rowUnderlay {
    display: contents;

    div {
      z-index: 0;
    }

    div:nth-child(odd) {
      background-color: #efefef;
    }
  }

  .task-spec {
    background-color: var(--surface-1dp);
    border-radius: 5px;
    border: 1px solid;
    box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);
    cursor: pointer;
    height: 20px;
    min-width: 20px;
    justify-content: center;
    text-align: center;
  }

  .commit {
    font-family: monospace;
    font-size: 0.75em;
    height: 16px;
    padding: 2px;
    position: relative;
    cursor: pointer;
  }

  .commit.highlight-revert {
    background-color: var(--error);
    color: var(--on-error);
    fill: var(--on-error);
  }
  .commit.highlight-reland {
    background-color: var(--primary);
    color: var(--on-primary);
    fill: var(--on-primary);
  }

  .legend {
    border-right: 1px solid;
    font-size: 10px;
    min-width: 100px;

    * {
      padding: 5px;
    }
  }

  .controls .horizontal {
    display: flex;
    flex-flow: row wrap;
    align-items: center;
  }

  .commitLabelSelector {
    padding-right: 40px;
    padding-left: 10px;
  }

  .specFilter {
    > * {
      display: inline-block;
    }
    radio-sk {
      margin-right: 0;
    }
  }

  .lastLoaded {
    padding-top: 10px;
  }

  .reloadControls {
    #repoLabel {
      position: relative;
      top: 30px;
      left: 3px;
      width: min-content;
    }

    select {
      padding: 2px 0px;
      margin-left: 0px;
      width: 180px;
      text-align-last: center;
      text-align: center;
      font-size: 16px;
    }

    input-sk {
      input {
        width: 100px;
      }
    }
  }

  .tiny svg {
    width: 12px;
    height: 12px;
  }

  radio-sk.tiny .box {
    width: 8px;
    height: 8px;
  }

  .icon-right {
    float: right;
  }

  // With the exception of revert/reland icons, we don't want icons interferring with our
  // dialog-opening clicks on tasks, commits, and task specs.
  comment-icon-sk,
  texture-icon-sk,
  block-icon-sk {
    pointer-events: none;
  }

  .tasksTable {
    min-height: 780px;
    grid-column: 2 / 3;
    grid-row: 1 / -1;
    border: solid 1px;
    display: contents;
  }

  .category {
    border: solid 1px;
    padding: 3px;
  }

  .task {
    border-radius: 3px;
    border: solid 1px;
    cursor: pointer;
    text-align: center;
  }

  .multicommit-task {
    display: grid;
    // Lock the rows' height so a comment icon, if present, doesn't skew the individual divs.
    grid-auto-rows: 1fr;

    .task {
      border-radius: initial;
      border: initial;
      border-left: solid 1px;
      border-right: solid 1px;
    }

    .task:first-child {
      border-top: solid 1px;
      border-radius: 3px 3px 0px 0px;
    }

    .task:last-child {
      border-bottom: solid 1px;
      border-radius: 0px 0px 3px 3px;
    }

    .task.dashed-top {
      border-top: dashed 1px;
    }

    .task.dashed-bottom {
      border-bottom: dashed 1px;
    }
  }

  .multicommit-task:hover {
    border-color: red;
    border-radius: 3px;
    border: solid 1px;
    cursor: pointer;
  }

  .grow:hover {
    transform: scale(1.1);
    opacity: 1;
    z-index: 2;
  }

  .grow:hover.bg-success,
  .grow:hover .bg-success {
    background-color: var(--success);
  }

  .grow:hover.bg-failure,
  .grow:hover .bg-failure {
    background-color: var(--failure);
  }

  .grow:hover.bg-mishap,
  .grow:hover .bg-mishap {
    background-color: var(--unexpected);
  }

  .fill-green {
    fill: var(--success);
  }

  .fill-red {
    fill: var(--failure);
  }
}

div.hidden.task {
  visibility: hidden;
}

// Darkmode overrides
.darkmode {
  .rowUnderlay {
    div:nth-child(odd) {
      background-color: var(--surface-2dp);
    }
  }
}
