/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

body {
  font-size: 84%;
  margin: 0;
  min-width: 45em;
  padding: 0.75em;
}

h1 {
  color: rgb(74, 142, 230);
  font-size: 110%;
  font-weight: bold;
  letter-spacing: -1px;
  margin: 0;
  padding: 0;
}

h2 {
  border-top: 1px solid rgb(58, 117, 189);
  color: rgb(58, 117, 189);
  font-size: 110%;
  font-weight: normal;
  letter-spacing: -1px;
  margin: 0;
  margin-left: -38px;
  padding: 0.5em 1em 0.5em 38px;
}

h2:first-child {
  border-top: 0;
  padding-top: 0;
}

span.th {
  padding-left: 0.35em;
}

a {
  color: black;
}

div#header {
  background: rgb(82, 150, 222);
  background-size: 100%;
  border: 1px solid rgb(58, 117, 189);
  border-radius: 6px;
  color: white;
  margin-bottom: 0.75em;
  overflow: hidden;
  padding: 0.6em 1em 0.75em 0;
  position: relative;
  text-shadow: 0 0 2px black;
}

div#header h1 {
  background: url('chrome://resources/images/gear.png') 12px 60% no-repeat;
  color: white;
  display: inline;
  margin: 0;
  padding-left: 37px;
}

div#header p {
  color: white;
  display: inline;
  font-size: 84%;
  font-style: italic;
  margin: 0;
  padding: 0;
  padding-left: 0.4em;
}

div#header div.navigation {
  font-size: 92%;
  line-height: 3.5em;
  position: absolute;
  right: 1em;
  top: 0;
}

div#header select {
  border: 1px solid rgb(58, 117, 189);
  color: rgb(49, 93, 148);
  font-size: 100%;
  line-height: 140%;
}

div#header select option {
  padding: 0 0.2em;
}

div#sidebar {
  border-right: 1px solid #cfcfcf;
  display: none;
  float: left;
  margin-left: 26px;
  min-height: 20em;
  padding: 0.75em;
  padding-top: 0;
  width: 45em;
}

div#content {
  margin-left: 0;
}

hr {
  display: inline;
  padding: 0 0.5em;
  visibility: hidden;
}

.k {
  font-weight: normal;
  opacity: 0.4;
  padding-left: 0.1em;
}

.legend {
  color: #7f7f7f;
  font-size: 84%;
  line-height: 140%;
  margin-top: 2em;
  padding: 0.4em 0 0;
  text-align: right;
}

.legend h3 {
  color: black;
  display: inline;
  font-size: 100%;
  font-weight: normal;
  margin: 0;
  padding: 0 0.5em 0 0;
}

.legend .swatch {
  display: inline-block;
  height: 0.9em;
  margin-right: 0.2em;
  opacity: 0.66;
  padding: 0 0.5em;
}

table.list {
  border-collapse: collapse;
  font-size: 84%;
  line-height: 200%;
  table-layout: fixed;
  width: 100%;
}

table.list:not([class*='filtered']) tr:nth-child(odd) td {
  background: rgb(239, 243, 255);
}

.hidden {
  display: none;
}

table.list th {
  color: black;
  font-weight: bold;
  padding: 0 0.5em;
  vertical-align: top;
  white-space: nowrap;
}

table.list .firstRow th {
  line-height: 100%;
  text-align: left;
}

table.list .secondRow * {
  border-bottom: 1px solid rgb(181, 198, 222);
  text-align: left;
}

table.list td {
  line-height: 1.4em;
  padding: 0.35em 0.5em 0;
  vertical-align: top;
}

table.list tr td:nth-last-child(1),
table.list tr th:nth-last-child(1) {
  padding-right: 1em;
}

table.list:not([class*='filtered']) .tab .name {
  padding-left: 1.5em;
}

table.list .name {
  width: 100%;
}

table.list .name div {
  height: 1.6em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

table.list .pid {
  text-align: right;
  width: 4em;
}

table.list .pid .th {
  padding: 0;
}

table.list .type {
  width: 5em;
}

table.list .number {
  text-align: right;
  width: 7em;
}

table.list .total {
  font-weight: bold;
}

table.list .total .name {
  color: rgb(49, 93, 148);
  text-align: right;
}

table.list .total td {
  background: white !important;
  border-top: 1px solid rgb(181, 198, 222);
}

table.list .noResults {
  display: none;
}

table.list.noResults .noResults {
  display: table-row;
}

table.list .noResults td {
  color: #3f3f3f;
  padding: 3em 0;
  text-align: center;
}

table.list#browserComparison .name {
  background-position: 5px center;
  background-repeat: no-repeat;
  padding-left: 25px;
}

div.help {
  background: url('chrome://resources/images/help.png') center bottom no-repeat;
  display: inline-block;
  height: 14px;
  margin: -1px 0;
  opacity: 0.33;
  width: 14px;
}

div.help:hover {
  opacity: 1;
}

div.help div {
  display: none;
}

#helpTooltip {
  background: rgb(214, 232, 255);
  border: 1px solid rgb(168, 207, 255);
  border-radius: 0;
  box-shadow: 3px 3px 4px rgba(0, 0, 0, 0.33);
  font-size: 92%;
  line-height: 140%;
  max-width: 30em;
  padding: 0.3em 0.8em;
  position: absolute;
  z-index: 1000;
}

#helpTooltip p {
  margin: 0.6em 0;
}

div.otherbrowsers {
  font-size: 84%;
  text-align: center;
  width: 100%;
}
