<!--
Copyright (C) 2015 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.
-->
<dom-module id="gr-change-list-styles">
  <template>
    <style>
      :host {
        font-size: var(--font-size-normal);
      }
      gr-change-list-item,
      tr {
        border-bottom: 1px solid #ddd;
      }
      tr.topHeader {
        border: none;
      }
      th {
        text-align: left;
      }
      th,
      .cell {
        vertical-align: middle;
      }
      th:not(.label),
      .cell:not(.label) {
        padding-right: 8px;
      }
      th.label {
        border-left: none;
      }
      .topHeader,
      .groupHeader {
        font-family: var(--font-family-bold);
      }
      .topHeader th {
        background-color: #fafafa;
        font-size: var(--font-size-large);
        height: 3rem;
        position: -webkit-sticky;
        position: sticky;
        top: -1px; /* Offset for top borders */
        z-index: 1;
      }
      /* :after pseudoelements are used here because borders on sticky table
        headers with a background color are broken. */
      th:after {
        border-bottom: 1px solid #ddd;
        bottom: 0;
        content: '';
        left: 0;
        position: absolute;
        width: 100%;
      }
      th.label:after {
        border-left: 1px solid #ddd;
        top: 0;
      }
      .groupHeader {
        background-color: #eaeaea;
      }
      .groupHeader a {
        color: #000;
        text-decoration: none;
      }
      .groupHeader a:hover {
        text-decoration: underline;
      }
      .cell {
        height: 2.25rem;
      }
      .keyboard,
      .star {
        padding: 0;
      }
      gr-change-star {
        vertical-align: middle;
      }
      .keyboard,
      .branch,
      .star,
      .label,
      .number,
      .owner,
      .assignee,
      .updated,
      .size,
      .status,
      .project {
        white-space: nowrap;
      }
      .keyboard,
      .star {
        vertical-align: middle;
      }
      .keyboard {
        width: 20px;
      }
      .star {
        width: 30px;
      }
      .label {
        border-left: 1px solid #ddd;
        text-align: center;
        width: 3rem;
      }
      .topHeader .label {
        border: none;
      }
      .truncatedProject {
        display: none;
      }
      @media only screen and (max-width: 90em) {
        .assignee,
        .branch,
        .owner {
          overflow: hidden;
          max-width: 10rem;
          text-overflow: ellipsis;
        }
        .truncatedProject {
          display: inline-block;
        }
        .fullProject {
          display: none;
        }
      }
      @media only screen and (max-width: 50em) {
        :host {
          font-size: var(--font-size-large);
        }
        gr-change-list-item {
          flex-wrap: wrap;
          justify-content: space-between;
          padding: .25em .5em;
        }
        .cell {
          align-items: center;
          display: flex;
        }
        .topHeader,
        .keyboard,
        .status,
        .project,
        .branch,
        .updated,
        .label,
        .assignee,
        .groupHeader .star,
        .noChanges .star {
          display: none;
        }
        .groupHeader .cell,
        .noChanges .cell {
          padding: 0 .5em;
        }
        .subject {
          margin-bottom: .25em;
          width: calc(100% - 2em);
        }
        .owner,
        .size {
          max-width: none;
        }
      }
      @media only screen and (min-width: 1450px) {
        .project {
          width: 20em;
        }
      }
    </style>
  </template>
</dom-module>
