/*
 * Copyright 2011 Google Inc. All Rights Reserved.
 *
 * 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.
 */

body {
  margin: 0;
  padding: 0;
  border: 0;
  font: 81.25% arial, helvetica, sans-serif;
  color: #222;
}

.google-header-bar {
  height: 71px;
  background: #f1f1f1;
  border-bottom: 1px solid #e5e5e5;
  overflow: hidden;
}

.g-button {
  display: inline-block;
  min-width: 46px;
  text-align: center;
  color: #444;
  font-size: 11px;
  font-weight: bold;
  height: 27px;
  padding: 0 8px;
  line-height: 27px;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  -webkit-transition: all .218s;
  -moz-transition: all .218s;
  -ms-transition: all .218s;
  -o-transition: all .218s;
  transition: all .218s;
  border: 1px solid #dcdcdc;
  background-color: #f5f5f5;
  background-image: 0;
  background-image: 0;
  background-image: 0;
  background-image: 0;
  background-image: 0;
  background-image: linear-gradient(top, #f5f5f5, #f1f1f1);
  -webkit-user-select: none;
  -moz-user-select: none;
  user-select: none;
  cursor: default;
}

.content {
  padding: 0 44px;
}

.header .logo {
  margin: 17px 0 0;
  float: left;
}

.action-btn-grp {
  width:  403px;
  height:  25px;
  margin:  10px auto;
}

.g-button-primary:not([disabled]) {
  border: 1px solid #3079ed;
  color: #fff;
  text-shadow: 0 1px rgba(0, 0, 0, 0.1);
  background-color: #4d90fe;
  background-image: 0;
  background-image: 0;
  background-image: 0;
  background-image: 0;
  background-image: 0;
  background-image: linear-gradient(top, #4d90fe, #4787ed);
}

.notifications {
  width:  403px;
  margin:  0 auto;
  text-align:  center;
}

.main {
  width: 95%;
  margin: 0 auto;
}

h2 {
  font-size: 20px;
  margin: 15px 0;
  color: #dd4b39;
}

input[type=text], input[type=password] {
  width: 100%;
  height: 32px;
  font-size: 15px;
  -webkit-appearance: none;
  appearance: none;
  display: inline-block;
  margin: 0;
  padding: 0 8px;
  background: #fff;
  border: 1px solid #d9d9d9;
  border-top: 1px solid #c0c0c0;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  -webkit-border-radius: 1px;
  -moz-border-radius: 1px;
  border-radius: 1px;
}

#gaf-log {
  border:  1px solid #e5e5e5;
  padding:  10px;
}

.table-print {
  border-collapse:  collapse;
}

.table-print tbody tr {
  border-bottom:  1px dotted #e5e5e5;
}

.table-print tbody tr:last-child {
  border: none;
}

.table-print tbody tr td:first-child {
  font-weight: bold;
}

.table-print tbody tr td {
  height: 20px;
}

.table-print tbody tr td span {
  margin-left: 10px;
}

.marg {
  margin: 10px 0;
}

.gaf-chart {
  float: left;
  height: 250px;
  width: 400px;
}

.gaf-post-charts-div {
  clear: both;
}

#gaf-config-table {
  border: none;
  font-family: monospace;
  white-space: pre;
}

#gaf-stats {
  float: left;
}

#gaf-status {
  margin: 0 5em 0 0;
}

.gaf-status-unavailable,
.gaf-status-inactive,
.gaf-status-normal,
.gaf-status-warning,
.gaf-status-error {
  display: inline-block;
  border: 1px solid black;
  height: .5em;
  margin: 0 .5em 0 1em;
  width: 1em;
}

.gaf-status-unavailable {
  background: black;
}

.gaf-status-inactive {
  background: white;
}

.gaf-status-normal {
  background: #3c3;
}

.gaf-status-warning {
  background: yellow;
}

.gaf-status-error {
  background: #f33;
}

#gaf-log {
  height: 100em;
  overflow: auto;
}

#gaf-start-feed-push-success, #gaf-incremental-feed-push-success {
  color: green;
}

#gaf-start-feed-push-error, #gaf-incremental-feed-push-error {
  color: red;
}

#gaf-sec-encoded {
  font-family: monospace;
  width: 30em;
}
