/*
 * Copyright 2014 Google Inc.
 *
 * 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.
 */

/**
 * @fileoverview Styles for pagespeed_admin/cache.
 *
 * @author xqyin@google.com (XiaoQian Yin)
 */

/*------------------------------------------------------------------
@global Type
------------------------------------------------------------------*/
h3 {
  font-weight: bold;
  font-size: 15px;
  margin: 1em 0 0 0;
}
table, th, td {
  padding: 2px;
}
thead {
  font-size: 14px;
  font-style: normal;
  font-weight: bold;
}
/*------------------------------------------------------------------
mod rules
------------------------------------------------------------------*/
.pagespeed-caches-result {
  padding: 0 0 0 5px;
}
.pagespeed-caches-purge-table {
  padding-top: 5px;
}
.pagespeed-caches-purge-global {
  padding-top: 5px;
}
.pagespeed-caches-purge-url {
  font-family: monospace;
}
.pagespeed-caches-url-column {
  width: 700px;
}
.pagespeed-caches-date-column {
  width: 250px;
}
