/*
 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.
*/

div.clear { clear:both; visibility: hidden; }
div.clear hr { display: none; }

/* Tweaks to the bootstrap theme
--------------------------------- */
li { line-height: 20px; }
tt { font: 12px Menlo, Monaco, "Courier New", monospace; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; padding: 3px 4px; background-color: #f7f7f9; border: 1px solid #e1e1e8; }
tt, code { color: #4e648e }
dt { margin: 15px 0 5px 0; font-size: 1.2em }

.big-red { font-weight: bold; color: #D14 }
.big-green { font-weight: bold; color: green }

.layout-table { width: 100%; }
.sidebar { width: 250px; vertical-align: top; }
.content { padding-left: 20px; vertical-align: top; }

.sidebar-nav { padding: 9px 0; }

.logo-left { margin: 10px; float: left; height: 100px}
.logo-center {margin-left: auto; margin-right: auto; display: block; width: 20%}
.logo-right { margin: 5px; float: right; height: 100px}

.navbar .nav { margin-left: 40px; }

.nav-list { margin-bottom: 15px; }
.nav-list li { line-height: 16px; }
.nav-list li.nav-header { color: #333; }
.nav-list li.nav-header i { margin-right: 5px; }

.nav-list li a { background: no-repeat 16px 9px; padding-left: 34px; }
.nav-list li.collapsed > a { background-image: url(../images/collapsed.gif) }
.nav-list li.expanded > a { background-image: url(../images/expanded.gif) }

.nav-list li.expanded ul { list-style: none; margin-left: 0; }
.nav-list li.expanded li a { display: block; padding: 3px 15px 3px 45px; margin-left: -15px; margin-right: -15px; }
.nav-list li.expanded li a:hover { text-decoration: none; background-color: #eee; }
.nav-list li.expanded li.active a { background-color: #08C; color: white }

.nav.nav-tabs { margin-bottom: 8px; }

.content .section { margin-top: 20px; }
.content .section:first-child { margin-top: 0; }
.section h2 { margin-bottom: 10px; }
.section h3 { margin-bottom: 10px; }
.section h4 { margin-bottom: 10px; }

.footer { background-color: whitesmoke; padding: 15px; margin-top: 15px; text-align: center; border-top: 1px solid #eee; }
.footer p { font-size: 12px; margin: 0 }

.table-not-wide { width: inherit;}
.alert-heading { display: block; font-size: 14px; margin-bottom: 6px; font-weight: bold; }

/* Pretty printing styles. Used with prettify.js.
---------------------------------------------------- */
.com { color: #93a1a1; }
.lit { color: #195f91; }
.pun, .opn, .clo { color: #93a1a1; }
.fun { color: #dc322f; }
.str, .atv { color: #D14; }
.kwd, .linenums .tag { color: #1e347b; }
.typ, .atn, .dec, .var { color: teal; }
.pln { color: #48484c; }
.prettyprint { padding: 8px; background-color: #f7f7f9; border: 1px solid #e1e1e8; }
.prettyprint.linenums {
  -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
     -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
          box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
}
ol.linenums { margin: 0 0 0 33px; }
ol.linenums li { padding-left: 12px; color: #bebec5; line-height: 18px; text-shadow: 0 1px 0 #fff; }

/* Additional styles.
-----------------------*/

/* fixed width font links (e.g., to a JavaDoc page) */
a.javadoc, a.javadoc:hover {
    font: 12px Menlo, Monaco, "Courier New", monospace;
}
/* reset code links to same color as normal links */
a.javadoc, a tt, a code {
    color: #0088CC;
}

/* add film icons to youtube and vimeo links (.icon-film) */
a[href^='https://www.youtube.com/']::before,
a[href^='https://vimeo.com/']::before {
    display: inline-block;
    width: 14px;
    height: 14px;
    margin-top: 1px;
    margin-right: .3em;
    line-height: 14px;
    vertical-align: text-top;
    content: '';
    /* .icon-film */
    background: url("../img/glyphicons-halflings.png") no-repeat -192px 0;
}
