<!--
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;
      }
      .number {
        width: 4em;
      }
      .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: 9em;
        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;
        }
        .project {
          width: 20em;
        }
      }
    </style>
  </template>
</dom-module>
