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

@font-face
{
    font-family: 'Oswald';
    font-style: normal;
    font-weight: 300;
    src: local('Oswald Light'), local('Oswald-Light'), url(/fonts/oswald-light.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}

@font-face
{
    font-family: 'Oswald';
    font-style: normal;
    font-weight: 400;
    src: local('Oswald Regular'), local('Oswald-Regular'), url(/fonts/oswald.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}

@font-face
{
    font-family: 'Oswald';
    font-style: normal;
    font-weight: 700;
    src: local('Oswald Bold'), local('Oswald-Bold'), url(/fonts/oswald-bold.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}

@font-face
{
    font-family: 'Roboto Condensed';
    font-style: normal;
-    font-weight: 300;
    src: local('Roboto Condensed Light'), local('RobotoCondensed-Light'), url(/fonts/roboto_condensed-light.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}

@font-face
{
    font-family: 'Roboto Condensed';
    font-style: normal;
    font-weight: 400;
    src: local('Roboto Condensed'), local('RobotoCondensed-Regular'), url(/fonts/roboto_condensed.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}

@font-face
{
    font-family: 'Roboto Condensed';
    font-style: normal;
    font-weight: 700;
    src: local('Roboto Condensed Bold'), local('RobotoCondensed-Bold'), url(/fonts/roboto_condensed-bold.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}

*
{
    margin: 1em 0;
    padding: 0;
    box-sizing: border-box;
}

html, body, div, a, br
{
    margin: 0;
}

section, div.section
{
    margin: 1em 0;
}

blockquote
{
    margin-left: 1em;
    margin-right: 1em;
}

body
{
/*    font-family: "Droid Serif",Georgia,"Times New Roman",Times,serif;     */
    font-family: "Roboto Condensed", sans-serif;
    font-weight: 400;
    font-size: 13.5pt;
    line-height: 18pt;
    text-rendering: optimizeLegibility;
    color: rgba(0, 0, 0, 0.9);
    background: linear-gradient(to bottom, #f4f7fa, #fcfcfb 32em, #fcfcfb) no-repeat, #fcfcfb;
}

h1, h2, h3, h4, h5, h6
{
/* font-family: "Source Sans Pro","Helvetica Neue",Helvetica,Arial,sans-serif; */
    font-family: "Oswald", sans-serif;
    font-weight: 400;
    color: #303284;
    line-height: 100%;
}

h1
{
    font-size: 1.7em;
    margin-top: 0;
    margin-bottom: 0.8em;
}

h2
{
    font-size: 1.2em;
}

h3
{
    font-size: 1em;
}

h4
{
    font-size: 1em;
    font-weight: 300;
}

hr
{
    margin-top: 1em;
    border: none;
    border-top: 1px solid #d4d4d4;
    height: 1px;
    clear: both;
}

ol, ul, dd
{
    padding-left: 1.2em;
}

li, dt, dd
{
    margin: 0 0 0.2em 0;
}

li > ul, li > ol, dd > dl
{
    margin-top: 0;
    margin-bottom: 0;
}

li > p:last-child, dd > p:last-child
{
    margin-bottom: 1em;
}

a > img
{
    border: none;
}

#logo2
{
    float: right;
}

#page
{
    max-width: 60em;
    margin-left: auto;
    margin-right: auto;
    border-top: none;
    background-color: white;
    box-shadow: 0 0 0.15em #7d778b;
    padding:0.2em;
}

#middle
{
    padding: 0 1.5em 0;
}

#leftnav
{
    float: left;
    width: 10em;
    border-right: 1px solid #d4d4ca;
    margin-bottom: 1em;
    margin-right: 1em;
    padding-right: 1em;
    text-align: right;
    min-height: 32em;
    white-space: nowrap;
    font-size: 0.9em;
}

#leftnav h2 { margin: 0.1em 0 0.1em 0; font-size: 1.1em;}
#leftnav a.headerlink { display: none; }
#leftnav ul { list-style: none; padding-left: 0; margin: 0.1em 0 0.4em 0; }
#leftnav li { line-height: 1.2em; margin: 0; }

#bottom-nav { text-align: center; }
#bottom-nav img { margin: 0.2em 0; }

#content
{
    padding-left: 11em;
}

#copyright
{
    clear: both;
    font-size: 0.8em;
	text-align: center;
}

.frame, pre
{
    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;
    padding: 1em;
    margin: 1.5em 0;
    overflow-x: auto;
}

/* fixed-size pre for side by side code comparison */
pre.fixed
{
    overflow-x: hidden;
    overflow-y: auto;
    width: 25em;
    height: 30em;
}

.right
{
    text-align: right;
}

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

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

pre, code
{
    font-size: 0.8em;
    line-height: 1.2em;
}

.note
{
    background-color: #ffeeff;
    border: 1px dotted #111111;
    padding: 3px 3px;
}

.grayed
{
    color: darkgray;
    font-style: italic;
}

/* tables */

table.standard, table.table
{
    width: 100%;
}

table.standard tr, table.table tr
{
    background-color: #D0D0FF;
}

table.standard tr:nth-child(even), table.table tr:nth-child(even)
{
    background-color: #E5E5FF;
}

/* newsitems */

.newsitem div
{
    border-left: 1px solid #d4d4d4;
}

.newsitem p
{
    padding-left: 0.5em;
}

.newsitem b
{
    color: #545454;
}

/* breadcrumbs - see https://css-tricks.com/triangle-breadcrumbs/ */

#breadcrumb
{
    clear: both;
}

#breadcrumb ul
{
    background-color: hsla(239,47%,95%,1);
    margin-top: 0.2em;
    margin-bottom: 0.2em;
    list-style: none;
    overflow: hidden;
    font: 0.8em Helvetica, Arial, Sans-Serif;
    padding-left: 0;
}

#breadcrumb ul li
{
    float: left;
    margin: 0;
}

#breadcrumb ul li a
{
    color: white;
    text-decoration: none;
    padding: 0.2em 0 0.2em 2.5em;
    background: #303284; /* fallback color */
    background: hsla(239,47%,35%,1);
    position: relative;
    display: block;
    float: left;
}

#breadcrumb ul li a:after
{
    content: " ";
    display: block;
    width: 0;
    height: 0;
    border-top: 50px solid transparent; /* Go big on the size, and let overflow hide */
    border-bottom: 50px solid transparent;
    border-left: 30px solid hsla(239,47%,35%,1);
    position: absolute;
    top: 50%;
    margin-top: -50px;
    left: 100%;
    z-index: 2;
}

#breadcrumb ul li a:before
{
    content: " ";
    display: block;
    width: 0;
    height: 0;
    border-top: 50px solid transparent;
    border-bottom: 50px solid transparent;
    border-left: 30px solid white;
    position: absolute;
    top: 50%;
    margin-top: -50px;
    margin-left: 1px;
    left: 100%;
    z-index: 1;
}

#breadcrumb ul li:first-child a
{
    padding-left: 10px;
}

#breadcrumb ul li:nth-child(2) a       { background:        hsla(239,47%,45%,1); }
#breadcrumb ul li:nth-child(2) a:after { border-left-color: hsla(239,47%,45%,1); }
#breadcrumb ul li:nth-child(3) a       { background:        hsla(239,47%,55%,1); }
#breadcrumb ul li:nth-child(3) a:after { border-left-color: hsla(239,47%,55%,1); }
#breadcrumb ul li:nth-child(4) a       { background:        hsla(239,47%,65%,1); }
#breadcrumb ul li:nth-child(4) a:after { border-left-color: hsla(239,47%,65%,1); }
#breadcrumb ul li:nth-child(5) a       { background:        hsla(239,47%,75%,1); }
#breadcrumb ul li:nth-child(5) a:after { border-left-color: hsla(239,47%,75%,1); }
#breadcrumb ul li:last-child a
{
    background: transparent !important;
    color: black;
    pointer-events: none;
    cursor: default;
}
#breadcrumb ul li:last-child a:before { border-left-color: transparent !important; }
#breadcrumb ul li:last-child a:after { border-left-color: transparent !important; }

#breadcrumb ul li a:hover { background: hsla(239,47%,25%,1); }
#breadcrumb ul li a:hover:after { border-left-color: hsla(239,47%,25%,1) !important; }

/* conversion matrix */

table.conversions
{
    border: solid 1px black;
    border-collapse: collapse;
    margin-left: auto;
    margin-right: auto;
}
table.conversions td,
table.conversions th
{
    border: solid 1px black;
    padding: 0.1em;
    text-align: center;
}
.conversions .strict
{
    color: green;
}
.conversions .implicit
{
    color: blue;
}
.conversions .explicit
{
    color: magenta;
}
.conversions .none
{
    color: red;
}

.smalltable
{
    font-size: smaller;
    word-wrap: no;
}

.blue
{
    color: blue;
}

.bigger
{
    font-size: bigger;
}

/* Style adjustments for mobile devices */

@media screen and (max-width: 800px)
{
}

@media screen and (max-width: 640px)
{
    h1
    {
        font-size: 1.5em;
    }

    table, pre
    {
        font-size: 0.7em;
        margin-bottom: 1.2em;
    }
}

/* markdown code hilite */
/* generated with command: pygmentize -S default -f html -a .codehilite */

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