<!--
@license
Copyright (C) 2017 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="shared-styles">
  <template>
    <style>
      /* CSS reset */
      html, body, button, div, span, applet, object, iframe, h1, h2, h3,
      h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite,
      code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub,
      sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form,
      label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article,
      aside, canvas, details, embed, figure, figcaption, footer, header, hgroup,
      main, menu, nav, output, ruby, section, summary, time, mark, audio, video {
        border: 0;
        box-sizing: border-box;
        font-size: 100%;
        font: inherit;
        margin: 0;
        padding: 0;
        vertical-align: baseline;
      }
      *::after,
      *::before {
        box-sizing: border-box;
      }
      input,
      iron-autogrow-textarea {
        background-color: inherit;
        border: 1px solid var(--border-color);
        box-sizing: border-box;
        color: var(--primary-text-color);
        margin: 0;
        padding: 0;
      }
      a {
        color: var(--link-color);
      }
      input,
      textarea,
      select,
      button {
        font: inherit;
      }
      body {
        line-height: 1;
      }
      ol, ul {
        list-style: none;
      }
      blockquote, q {
        quotes: none;
      }
      blockquote:before, blockquote:after,
      q:before, q:after {
        content: '';
        content: none;
      }
      table {
        border-collapse: collapse;
        border-spacing: 0;
      }
      /* Other Shared Styles*/
      h1 {
        font-size: 2rem;
        font-weight: var(--font-weight-bold);
      }
      h2 {
        font-size: 1.5rem;
        font-weight: var(--font-weight-bold);
      }
      h3 {
        font-size: 1.17em;
        font-weight: var(--font-weight-bold);
      }
      iron-icon {
        color: var(--deemphasized-text-color);
        --iron-icon-height: 20px;
        --iron-icon-width: 20px;
      }
      /* Stopgap solution until we remove hidden$ attributes. */
      [hidden] {
        display: none !important;
      }
      .separator {
        border-left: 1px solid var(--border-color);
        height: 20px;
        margin: 0 8px;
      }
      .separator.transparent {
        border-color: transparent;
      }
      paper-toggle-button {
        --paper-toggle-button-checked-bar-color: var(--link-color);
        --paper-toggle-button-checked-button-color: var(--link-color);
      }
      strong {
        font-weight: var(--font-weight-bold);
      }
      :host {
        color: var(--primary-text-color);
      }
    </style>
  </template>
</dom-module>
