<!--
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>
      .headerRow {
        display: flex;
      }
      .topHeader,
      .groupHeader {
        border-bottom: 1px solid #eee;
        font-weight: bold;
        padding: .3em .5em;
      }
      .topHeader {
        background-color: #ddd;
        flex-shrink: 0;
      }
      .noChanges {
        border-bottom: 1px solid #eee;
        padding: .3em .5em;
      }
      .keyboard,
      .star {
        align-items: center;
        display: flex;
        justify-content: center;
        padding: 0;
        width: 2em;
      }
      .star {
        padding-top: .05em;
      }
      .subject {
        flex-grow: 1;
        flex-shrink: 1;
        word-break: break-word;
      }
      .status {
        width: 9em;
      }
      .owner {
        width: 15em;
      }
      .project,
      .branch {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
      }
      .project {
        width: 10em;
      }
      .branch {
        width: 7em;
      }
      .updated {
        width: 6em;
        text-align: right;
      }
      .size {
        width: 9em;
        text-align: right;
      }
      .label {
        width: 2.6em;
        text-align: center;
      }
      :host {
        font-size: 11px;
      }
      @media only screen and (max-width: 50em) {
        :host {
          font-size: 14px;
        }
        gr-change-list-item {
          flex-wrap: wrap;
          justify-content: space-between;
          padding: .25em .5em;
        }
        gr-change-list-item[selected] {
          background-color: transparent;
        }
        .topHeader,
        .keyboard,
        .status,
        .project,
        .branch,
        .updated,
        .label {
          display: none;
        }
        .star {
          align-items: flex-start;
          padding-left: .35em;
          padding-top: .4em;
        }
        .subject {
          margin-bottom: .25em;
          text-decoration: underline;
          width: calc(100% - 2em);
        }
        .owner,
        .size {
          width: auto;
        }
      }
      @media only screen and (min-width: 1240px) {
        :host {
          font-size: 12px;
        }
      }
      @media only screen and (min-width: 1340px) {
        :host {
          font-size: 13px;
        }
      }
      @media only screen and (min-width: 1450px) {
        :host {
          font-size: 14px;
        }
      }
    </style>
  </template>
</dom-module>
