/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you 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.
 */
.top-container {
    padding-top:35px!important;
}
.vcenter {
    display: inline-block;
    vertical-align: middle;
    float: none;
}
.incubator-page-header {
    padding-bottom: 9px;
    margin: 5px 0 20px;
    border-bottom: 1px solid #eeeeee;
}
td {
  padding: 0.05em;
}
span.issue {
  background-color: #d55e00;
  font-size: 0.9375em;
  padding: 1px 3px 0;
  white-space: nowrap;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-shadow: none;
  color: white;
  padding: 0.2em;
}
span.grad {
  border: 2px solid #d55e00;
  color: white;
  font-size: 0.9375em;
  padding: 1px 3px 0;
  white-space: nowrap;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-shadow: none;
  padding: 0.2em;
}
span.care {
  background-color: #e69f00;
  color: black;
  font-size: 0.9375em;
  padding: 1px 3px 0;
  white-space: nowrap;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-shadow: none;
  padding: 0.2em;
}
span.cool1 {
  background-color: #009e73;
  color: white;
  font-size: 0.9375em;
  padding: 1px 3px 0;
  white-space: nowrap;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-shadow: none;
  padding: 0.2em;
}
span.cool2 {
  background-color: #f0e442;
  color: black;
  font-size: 0.9375em;
  padding: 1px 3px 0;
  white-space: nowrap;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-shadow: none;
  padding: 0.2em;
}
span.cool3 {
  background-color: #e69f00;
  color: black;
  font-size: 0.9375em;
  padding: 1px 3px 0;
  white-space: nowrap;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-shadow: none;
  padding: 0.2em;
}
span.cool4 {
  background-color: #d55e00;
  color: white;
  font-size: 0.9375em;
  padding: 1px 3px 0;
  white-space: nowrap;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-shadow: none;
  padding: 0.2em;
}
span.graduated {
  background-color: lawngreen;
  color: white;
  font-size: 0.9375em;
  padding: 1px 3px 0;
  white-space: nowrap;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-shadow: none;
  padding: 0.2em;
}
span.retired {
  background-color: orange;
  color: white;
  font-size: 0.9375em;
  padding: 1px 3px 0;
  white-space: nowrap;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-shadow: none;
  padding: 0.2em;
}
span.code {
  font-family: Consolas, "Liberation Mono", Courier, monospace;
  font-weight: normal;
  font-size: 0.9375em;
  padding: 1px 3px 0;
  white-space: nowrap;
  background-color: #f2f2f2;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-shadow: none;
}