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

/* Worth deferring */

@font-face {
  font-family: "Share Tech Mono";
  font-style: normal;
  font-weight: 400;
  src: url(fonts/Share-Tech-Mono/Share-Tech-Mono-Regular.woff) format("woff");
}

body {
    background: linear-gradient(to bottom, #f4f7fa, #fcfcfb 32em, #fcfcfb) no-repeat, #fcfcfb;
}

code, pre {
    font-family: "Share Tech Mono", monospace;
}

blockquote, pre {
    color: #222;
    background-color: #fcfcfb;
    box-shadow: inset 0 0 0.3em 0 #ecece0;
}

.feature {
    border-radius: 0.5em;
    background-color: #f6f6f6;
    background: radial-gradient(ellipse at 30% 40%, #fefefe 30%, #f6f6f6 100%);
    box-shadow: 0 0.025em 0.15em #7d778b;
}

input {
    box-shadow: inset 0 0.05em 0.05em 0.1em #fcfcfc;
}

button {
    background: #f6f6f6;
    background: linear-gradient(to bottom, white, #f6f6f6 10%) no-repeat;
}

button:hover {
    background: #fcfcfc;
    background: linear-gradient(to bottom, white, #fcfcfc 10%) no-repeat;
}

ul {
    list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAL0lEQVQoz2P4//8/AymYgb4aePPWlfDmrr2OgoFiuDVAFP1Hw9eHlAZSPT04Ig4AsFqLgI4Un7IAAAAASUVORK5CYII=");
}

h2.selected, h3.selected, h4.selected, h5.selected, h6.selected {
    color: #0d567f;
    text-shadow: 0em 0em 0.1em #d0c6e7;
}

a.heading-link {
    display: none;
    font-weight: 300;
    padding-left: 0.3em;
    padding-right: 0.3em;
}

h2:hover a.heading-link, h3:hover a.heading-link, h4:hover a.heading-link, h5:hover a.heading-link, h6:hover a.heading-link {
    display: inline;
}

h2.selected a.heading-link, h3.selected a.heading-link, h4.selected a.heading-link, h5.selected a.heading-link, h6.selected a.heading-link {
    display: inline;
}

a[href] {
    text-decoration: none;
    color: #0d6dad;
}

a[href]:visited {
    color: #0d567f;
}

.date {
    color: #666;
    font-size: 0.8em;
    font-style: italic;
}

.accesskey {
    text-decoration: underline;
}

.color-block {
    font-size: 0.9em;
    float: left;
    color: white;
    padding: 0.8em 1em;
    font-weight: 400;
    min-height: 10em;
    width: 10em;
    margin-bottom: 1em;
}

.company-logo {
    float: right;
    margin: 0 0 0 0.8em;
    width: 100px;
}

#-content {
    background-color: white;
    box-shadow: 0 0 0.15em #7d778b;
}

#-top a {
    color: #0d567f;
}

#-global-navigation > li.selected > a {
    color: rgba(0, 0, 0, 0.9);
}

#-global-navigation > li.selected > a:not([id="logotype"]) {
    text-shadow: 0em 0em 0.1em #d0c6e7;
}

#-menu, #-search {
    border-bottom: 1px solid #d4d4ca;
    background-color: #f6f6f6;
    background: radial-gradient(ellipse at 30% 40%, #fbfbfb 30%, #f6f6f6 100%);
    box-shadow: inset 0 0.3em 0.4em -0.4em #7d778b, inset 0 -0.3em 0.4em -0.45em #7d778b;
}

#-menu h3 {
    margin-bottom: 0;
}

#-menu ul {
    list-style: none;
    margin-left: 0;
    padding-left: 0;
}

#-search > form {
    text-align: center;
    font-size: 1.1em;
    width: 24em;
    margin: 0 auto;
}

#-search input {
    width: 100%;
    box-shadow: 0 0 0.1em #d0c6e7;
    margin-bottom: 1em;
}

#-search button {
    color: #0d6dad;
    background: #fafafb;
    border: 1px solid #0d6dad;
    border-radius: 0.3em;
    padding: 0.1em 0.8em;
    margin-bottom: 1em;
}

#-search a {
    font-size: 0.8em;
    display: block;
}

#-download-link > a {
    color: #0d6dad;
    border-radius: 0.3em;
    background: #f7f7f7;
    background: linear-gradient(to bottom, white, #f7f7f7 10%, #f7f7f7 95%, #d4d4d4) no-repeat;
}

#-download-link > a:hover {
    color: rgb(63, 159, 255);
    border: 0.15em solid rgb(63, 159, 255);
}

#-apache-navigation > li:after {
    content: "\2022";
    margin: 0 0.15em 0 0.35em;
    color: #d4d4ca;
}

#-apache-navigation > li:last-child:after {
    content: none;
}

#-jira-goto-form {
    display: inline;
    margin: 0;
}

#-jira-goto-form input {
    width: 6em;
}

#-viewvc-goto-form {
    display: inline;
    margin: 0;
}

#-viewvc-goto-form input {
    width: 6em;
}

#-dashboard-forms {
    float: right;
}

#-dashboard-forms > form {
    margin: 0 1.2em 0 0;
    display: inline-block;
}

#-dashboard-forms > form:last-child {
    margin-right: 0;
}

#-dashboard-forms > #-jira-search-form {
    float: right;
}

#-dashboard-forms > #-jira-search-form input {
    width: 8em;
}

#-source-modules > table {
    width: 100%;
}

#-source-modules td, #-source-modules th {
    border: none;
}

#-source-modules > table th:nth-child(4) {
    width: 33%;
}

#-dashboard-links {
    font-size: 0.9em;
}

/* Pygments */

.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: normal } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: normal } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #808080 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: normal } /* Generic.Prompt */
.highlight .gs { font-weight: normal } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: normal } /* Generic.Subheading */
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: normal } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: normal } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: normal } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: normal } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: normal } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: normal } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: normal } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: normal } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: normal } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: normal } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: normal } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: normal } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */

/* Adjustments for docbook output */

.docbook .navheader,
.docbook br.table-break,
.docbook br.example-break {
    display: none;
}

.docbook .navfooter table td {
    border: none;
}

.docbook .navfooter table td[align="center"] {
    text-align: center;
}

.docbook .navfooter table td[align="right"] {
    text-align: right;
}

.docbook table {
    border: white;
}

.docbook .calloutlist td {
    border-bottom: none;
}

.docbook hr {
    margin-top: 1em;
}

.docbook div.example,
.docbook div.footnotes,
.docbook div.important,
.docbook div.list-of-examples,
.docbook div.list-of-figures,
.docbook div.list-of-tables,
.docbook div.note
.docbook div.section,
.docbook div.table,
.docbook div.tip,
.docbook div.toc,
.docbook h1, .docbook h2, .docbook h3, .docbook h4,
.docbook hr,
.docbook pre.programlisting {
    margin-bottom: 1em;
}

.docbook p.title strong {
    font-family: "Oswald", sans-serif;
    font-weight: 300;
}

/* Adjustments for asciidoctor output */

div.sect1, div.sect2, div.paragraph, div.listingblock, div.ulist, div.tableblock, div.toc {
    margin-bottom: 1em;
}

div.ulist > ul > li > *:last-child {
    margin-bottom: 0;
}

div.tableblock td, div.tableblock th {
    border: 0;
    border-bottom: 1px solid #efefef;
}

div.title {
    font-family: "Oswald", sans-serif;
    font-size: 0.95em;
    font-weight: 300;
}

/* Media */

@media screen and (max-width: 800px) {
    #-dashboard-forms #-jira-search-form {
        display: none;
    }
}

@media screen and (max-width: 640px) {
    #-dashboard-forms #-viewvc-goto-form {
        display: none;
    }
}

@media screen and (max-width: 360px) {
    #-search > form {
        width: 13em;
    }
}

@media print {
    body {
        font-size: 10pt;
    }

    #-content {
        box-shadow: none;
    }

    #-top, #-apache-navigation {
        display: none;
    }

    #-path-navigation {
        margin-top: 1em;
    }

    #-middle {
        padding: 0;
    }

    .docbook div.navfooter {
        display: none;
    }

    table, pre {
        font-size: 0.9em;
    }
}
