<!--
@license
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-top: 1px solid var(--border-color);
      }
      gr-change-list-item[selected],
      gr-change-list-item:focus {
        background-color: var(--selection-background-color);
      }
      .topHeader ~ gr-change-list-item:first-of-type,
      .topHeader + .groupHeader {
        border-top: none;
      }
      tbody {
        border-bottom: 1px solid var(--border-color);
      }
      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: var(--table-header-background-color);
        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 var(--border-color);
        bottom: 0;
        content: '';
        left: 0;
        position: absolute;
        width: 100%;
      }
      th.label:after {
        border-left: 1px solid var(--border-color);
        top: 0;
      }
      .groupHeader {
        background-color: var(--table-subheader-background-color);
      }
      .groupHeader a {
        color: var(--primary-text-color);
        text-decoration: none;
      }
      .groupHeader a:hover {
        text-decoration: underline;
      }
      .cell {
        height: 2.25rem;
      }
      .star {
        padding: 0;
      }
      gr-change-star {
        vertical-align: middle;
      }
      .branch,
      .star,
      .label,
      .number,
      .owner,
      .assignee,
      .updated,
      .size,
      .status,
      .project {
        white-space: nowrap;
      }
      .star {
        vertical-align: middle;
      }
      .leftPadding {
        width: 20px;
      }
      .star {
        width: 30px;
      }
      .label {
        border-left: 1px solid var(--border-color);
        text-align: center;
        width: 3rem;
      }
      .topHeader .label {
        border: none;
      }
      .truncatedProject {
        display: none;
      }
      @media only screen and (max-width: 100em) {
        .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;
        }
        gr-change-list-item[selected],
        gr-change-list-item:focus {
          background-color: var(--view-background-color);
          border: none;
          border-top: 1px solid var(--border-color);
        }
        gr-change-list-item:hover {
          background-color: var(--view-background-color);
        }
        .cell {
          align-items: center;
          display: flex;
        }
        .topHeader,
        .leftPadding,
        .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>
