/* 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. */
body { background-image: url("/versions/master/assets/img/mxnet-background-compressed.jpeg"); }

/* 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. */
/* 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-light { font-weight: 300; }

.font-regular { font-weight: 400; }

.font-heavy { font-weight: 700; }

.left { text-align: left; }

.right { text-align: right; }

.center { text-align: center; margin-left: auto; margin-right: auto; }

.justify { text-align: justify; }

.hidden-sm { display: none; }

.container { width: 100%; margin-left: auto; margin-right: auto; }

@media only screen and (min-width: 33.75em) { .container { width: 80%; } }

@media only screen and (min-width: 60em) { .container { width: 75%; max-width: 60rem; } }

.row { position: relative; width: 100%; }

.row [class^="col"] { float: left; margin: 0.5rem 1%; min-height: 0.125rem; }

.row::after { content: ""; display: table; clear: both; }

.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12 { width: 98%; }

.col-1-sm { width: 6.3333333333%; }

.col-2-sm { width: 14.6666666667%; }

.col-3-sm { width: 23%; }

.col-4-sm { width: 31.3333333333%; }

.col-5-sm { width: 39.6666666667%; }

.col-6-sm { width: 48%; }

.col-7-sm { width: 56.3333333333%; }

.col-8-sm { width: 64.6666666667%; }

.col-9-sm { width: 73%; }

.col-10-sm { width: 81.3333333333%; }

.col-11-sm { width: 89.6666666667%; }

.col-12-sm { width: 98%; }

@media only screen and (min-width: 45em) { .col-1 { width: 6.3333333333%; }
  .col-2 { width: 14.6666666667%; }
  .col-3 { width: 23%; }
  .col-4 { width: 31.3333333333%; }
  .col-5 { width: 39.6666666667%; }
  .col-6 { width: 48%; }
  .col-7 { width: 56.3333333333%; }
  .col-8 { width: 64.6666666667%; }
  .col-9 { width: 73%; }
  .col-10 { width: 81.3333333333%; }
  .col-11 { width: 89.6666666667%; }
  .col-12 { width: 98%; }
  .hidden-sm { display: block; } }

.row { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; flex-wrap: wrap; }

.row > [class*='col-'] { display: flex; flex-direction: column; }

/* 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. */
/** Reset some basic elements */
body, h1, h2, h3, h4, h5, h6, p, blockquote, pre, hr, dl, dd, ol, ul, figure { margin: 0; padding: 0; }

body { background-repeat: no-repeat; background-size: contain; min-height: 100%; background-color: whitesmoke; }

@media screen and (min-width: 600px) and (max-width: 1024px) { body { background-size: inherit; } }

@media screen and (max-width: 600px) { body { background-size: cover; } }

table { color: #424242 !important; }

/** Basic styling */
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-weight: 300; font-size: 17px; line-height: 1.5; color: white; background-color: #048ccc; display: flex; min-height: 100vh; flex-direction: column; }

/** Set `margin-bottom` to maintain vertical rhythm */
h1, h2, h3, h4, h5, h6, p, blockquote, pre, ul, ol, dl, figure, .highlight { margin-bottom: 15px; }

/** `main` element */
main { display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */ }

header { z-index: 10; }

/** Images */
img { max-width: 100%; vertical-align: middle; }

/** Figures */
figure > img { display: block; }

figcaption { font-size: 14.875px; }

/** Lists */
ul, ol { margin-left: 30px; }

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

/** Headings */
h1, h2, h3, h4, h5, h6 { font-weight: 300; }

h1 { font-weight: 200; font-size: 59.5px; line-height: 120%; }

/** Links */
a { color: #048ccc; text-decoration: none; font-weight: 300; }

a:visited { color: #048ccc; }

a:hover { color: #043c6e; text-decoration: none; }

.clickable:hover { cursor: pointer; }

/** Blockquotes */
blockquote { color: #828282; border-left: 4px solid whitesmoke; padding-left: 15px; font-size: 19.125px; letter-spacing: -1px; font-style: italic; }

blockquote > :last-child { margin-bottom: 0; }

/** Code formatting */
pre, code { font-size: 15.9375px; border: 1px solid whitesmoke; border-radius: 3px; background-color: #eef; }

code { padding: 1px 5px; }

pre { padding: 8px 12px; overflow-x: auto; }

pre > code { border: 0; padding-right: 0; padding-left: 0; }

.span-accented { color: orangered; float: none !important; margin: 0 !important; font-size: 120%; }

/** Wrapper */
.wrapper { max-width: -webkit-calc(1150px - (30px * 2)); max-width: calc(1150px - (30px * 2)); margin-right: auto; margin-left: auto; padding-right: 30px; padding-left: 30px; }

@media screen and (max-width: 1024px) { .wrapper { max-width: -webkit-calc(1150px - (30px)); max-width: calc(1150px - (30px)); padding-right: 15px; padding-left: 15px; } }

/** Clearfix */
.wrapper:after, .footer-col-wrapper:after { content: ""; display: table; clear: both; }

/** Icons */
.svg-icon { width: 16px; height: 16px; display: inline-block; fill: whitesmoke; padding-right: 5px; padding-top: 4px; vertical-align: text-top; }

.social-media-list li + li { padding-top: 5px; }

/** Tables */
table { margin-bottom: 30px; width: 100%; text-align: left; color: white; border-collapse: collapse; border: 1px solid whitesmoke; }

table tr:nth-child(even) { background-color: white; }

table th, table td { padding: 10px 15px; }

table th { background-color: #fcfcfc; border: 1px solid #ebebeb; border-bottom-color: #d6d6d6; }

table td { border: 1px solid whitesmoke; }

/* 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. */
/** Site header */
.site-header { min-height: 55.95px; position: fixed; top: 0; width: 100%; padding-top: 10px; padding-bottom: 10px; }

.site-header-logo { width: 120px; }

.site-title { font-size: 27.625px; font-weight: 300; line-height: 57.375px; letter-spacing: -1px; margin-bottom: 0; float: left; color: white; }

.site-title, .site-title:visited { color: #424242; }

.site-nav { float: right; line-height: 57.375px; }

.site-nav .nav-trigger { display: none; }

.site-nav #global-search-mobile-border { display: none; }

.site-nav .gs-search-border { display: inline-block; }

.site-nav .menu-icon { display: none; }

.site-nav .page-link { color: white; line-height: 1.5; }

.site-nav .page-link:not(:last-child) { margin-right: 40px; }

.site-nav .page-link:hover { color: white; text-shadow: -0.06ex 0 white, 0.06ex 0 white; }

.site-nav .page-link.page-current { color: white; text-decoration: underline; }

@media screen and (max-width: 1024px) { .site-nav { position: absolute; top: 9px; right: 15px; background-color: #048ccc; border-radius: 2px; text-align: right; }
  .site-nav label[for="nav-trigger"] { display: block; float: right; width: 36px; height: 36px; z-index: 2; cursor: pointer; }
  .site-nav .gs-search-border { display: none; }
  .site-nav #global-search-mobile-border { display: block; }
  .site-nav .menu-icon { display: block; float: right; width: 36px; height: 26px; line-height: 0; padding-top: 10px; text-align: center; }
  .site-nav .menu-icon > svg { fill: whitesmoke; }
  .site-nav input ~ .trigger { clear: both; display: none; }
  .site-nav input:checked ~ .trigger { display: block; padding-bottom: 5px; }
  .site-nav .page-link { padding: 5px 10px; display: block; margin-left: 20px; }
  .site-nav .page-link:not(:last-child) { margin-right: 0; } }

/** Site footer */
.site-footer { border-top: 1px solid whitesmoke; padding: 30px 0; background-color: #424242; }

.site-footer .footer-category-title { color: #048ccc; }

.site-footer a { color: whitesmoke !important; }

.site-footer a:visited { color: whitesmoke !important; }

.site-footer2 { background-color: #424242; padding-top: 40px; padding-bottom: 10px; }

.footer-heading { font-size: 19.125px; margin-bottom: 15px; }

.contact-list, .apache-list, .social-media-list { list-style: none; margin-left: 0; }

.footer-col-wrapper { font-size: 15.9375px; margin-left: -15px; }

.footer-bottom-warning { font-size: 80%; color: white; float: left; }

.footer-logo { width: 200px; margin-bottom: 30px; margin-top: 30px; }

.footer-col { float: left; margin-bottom: 15px; padding-left: 15px; }

.footer-text { color: whitesmoke; }

.footer-col-1 { width: -webkit-calc(25% - (30px / 2)); width: calc(25% - (30px / 2)); }

.footer-col-2 { width: -webkit-calc(30% - (30px / 2)); width: calc(30% - (30px / 2)); }

.footer-col-3 { width: -webkit-calc(45% - (30px / 2)); width: calc(45% - (30px / 2)); }

@media screen and (max-width: 1024px) { .footer-col-1, .footer-col-2 { width: -webkit-calc(50% - (30px / 2)); width: calc(50% - (30px / 2)); }
  .footer-col-3 { width: -webkit-calc(100% - (30px / 2)); width: calc(100% - (30px / 2)); } }

@media screen and (max-width: 600px) { .footer-col { float: none; width: -webkit-calc(100% - (30px / 2)); width: calc(100% - (30px / 2)); } }

/** Page content */
.header-section .btn { background-color: whitesmoke; }

.page-content { height: 100%; padding: 30px 0 0; flex: 1; margin-top: 100px; }

.page-content-home { height: 100%; padding: 30px 0 0; margin-top: 100px; }

.page-heading { font-size: 34px; }

.post-list-heading { font-size: 29.75px; }

.post-list { margin-left: 0; list-style: none; }

.post-list > li { margin-bottom: 30px; }

.post-meta { font-size: 14.875px; color: #828282; }

.post-link { display: block; font-size: 25.5px; }

/** Posts */
.post-header { margin-bottom: 20px; margin-top: 50px; }

.post-title { font-size: 44.625px; letter-spacing: -1px; line-height: 1; }

@media screen and (max-width: 1024px) { .post-title { font-size: 38.25px; } }

.post-content { min-height: 700px; background-color: white; padding-top: 30px; color: #424242; }

.post-content h2 { font-size: 34px; }

@media screen and (max-width: 1024px) { .post-content h2 { font-size: 29.75px; } }

.post-content h3 { font-size: 27.625px; }

@media screen and (max-width: 1024px) { .post-content h3 { font-size: 23.375px; } }

.post-content h4 { font-size: 21.25px; }

@media screen and (max-width: 1024px) { .post-content h4 { font-size: 19.125px; } }

.copy-btn { display: none; position: absolute; right: 0; width: 60px; text-align: center; padding: 2px; padding-bottom: 5px; font-family: monospace; font-size: 15px; background-color: #048ccc; color: white; border: none; }

.copy-btn:hover { background-color: #eef; color: #048ccc; cursor: pointer; border: 1px solid #048ccc; }

.copy-btn:active { background-color: #048ccc; color: whitesmoke; }

:target::before { display: block; content: " "; margin-top: -86px; height: 86px; visibility: hidden; pointer-events: none; }

/* 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. */
/** Syntax highlighting styles */
.highlight { background: #fff; }

.highlighter-rouge .highlight { background: #eef; }

.highlight .c { color: #998; font-style: italic; }

.highlight .err { color: #a61717; background-color: #e3d2d2; }

.highlight .k { font-weight: bold; }

.highlight .o { font-weight: bold; }

.highlight .cm { color: #998; font-style: italic; }

.highlight .cp { color: #999; font-weight: bold; }

.highlight .c1 { color: #998; font-style: italic; }

.highlight .cs { color: #999; font-weight: bold; font-style: italic; }

.highlight .gd { color: #000; background-color: #fdd; }

.highlight .gd .x { color: #000; background-color: #faa; }

.highlight .ge { font-style: italic; }

.highlight .gr { color: #a00; }

.highlight .gh { color: #999; }

.highlight .gi { color: #000; background-color: #dfd; }

.highlight .gi .x { color: #000; background-color: #afa; }

.highlight .go { color: #888; }

.highlight .gp { color: #555; }

.highlight .gs { font-weight: bold; }

.highlight .gu { color: #aaa; }

.highlight .gt { color: #a00; }

.highlight .kc { font-weight: bold; }

.highlight .kd { font-weight: bold; }

.highlight .kp { font-weight: bold; }

.highlight .kr { font-weight: bold; }

.highlight .kt { color: #458; font-weight: bold; }

.highlight .m { color: #099; }

.highlight .s { color: #d14; }

.highlight .na { color: #008080; }

.highlight .nb { color: #0086B3; }

.highlight .nc { color: #458; font-weight: bold; }

.highlight .no { color: #008080; }

.highlight .ni { color: #800080; }

.highlight .ne { color: #900; font-weight: bold; }

.highlight .nf { color: #900; font-weight: bold; }

.highlight .nn { color: #555; }

.highlight .nt { color: #000080; }

.highlight .nv { color: #008080; }

.highlight .ow { font-weight: bold; }

.highlight .w { color: #bbb; }

.highlight .mf { color: #099; }

.highlight .mh { color: #099; }

.highlight .mi { color: #099; }

.highlight .mo { color: #099; }

.highlight .sb { color: #d14; }

.highlight .sc { color: #d14; }

.highlight .sd { color: #d14; }

.highlight .s2 { color: #d14; }

.highlight .se { color: #d14; }

.highlight .sh { color: #d14; }

.highlight .si { color: #d14; }

.highlight .sx { color: #d14; }

.highlight .sr { color: #009926; }

.highlight .s1 { color: #d14; }

.highlight .ss { color: #990073; }

.highlight .bp { color: #999; }

.highlight .vc { color: #008080; }

.highlight .vg { color: #008080; }

.highlight .vi { color: #008080; }

.highlight .il { color: #099; }

/* 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. */
.home { margin-bottom: 40px; }

.home .btn { border: 0; }

a.btn { padding: 10px; padding-left: 20px; padding-right: 20px; margin-top: 20px; background-color: white; transition: box-shadow 0.3s linear, border 0.3s linear; color: #424242; }

a.btn:hover { box-shadow: inset 0 -2px 0 0 #048ccc; color: black; }

.btn-action { float: right; }

.section { padding-top: 20px; padding-bottom: 30px; }

.section h2 { text-transform: uppercase; }

.card { color: #424242; padding: 10px; background-color: white; transition: box-shadow 0.3s linear; height: 100%; }

.card:hover { box-shadow: inset 0 -2px 0 0 #048ccc; filter: none; }

.card:hover a h3, .card:hover h4 { color: orangered; }

.card h3 { color: black; }

.card p { font-size: 90%; }

.card a { color: #424242; }

.card a:hover { color: black; }

.card-header-title { height: 50px; }

.card-header-title h3 { float: left; }

.card-header-title img { float: right; width: 30px; }

.key-features-section { background-color: white; color: #424242; }

.key-features-section h3 { color: orangered; }

.key-features-section .btn { background-color: whitesmoke; }

@media screen and (min-width: 1024px) { .key-features-section .card-text { min-height: 180px !important; } }

.key-features-section .card:hover { box-shadow: 0 0 0 0 !important; }

.key-feature-image { width: 100%; text-align: center; margin-top: 30px; }

.key-feature-image img { width: 70px; filter: grayscale(1); }

.ecosystem-section { background-color: whitesmoke; color: black; }

.community-section { background-color: whitesmoke; color: #424242; }

.community-section .card { background-color: white; }

.news-section { color: #424242; min-height: 500px; background-color: white; }

.news-section .btn { background-color: whitesmoke; }

/* 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. */
.page-content-home div#rtb h2 { font-size: 0.6em; }

#rtb div.col-sm-4.rtb-col { border: 1px solid whitesmoke; margin: 20px; }

.blog-more { margin-top: 40px; margin-bottom: 40px; height: 60px; }

.blog-more .btn { background-color: whitesmoke; }

/* 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. */
.feature-image { max-width: 100px; filter: grayscale(1); margin: auto; }

.feature-paragraph { margin: auto; }

.feature-title { float: left; margin-bottom: 0px; }

.highlight pre { box-shadow: inset 0 -2px 0 0 #048ccc; margin-bottom: 0 !important; }

figure { margin-bottom: 0 !important; }

/* 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. */
.ecosystem-page .card { background-color: whitesmoke; }

.ecosystem-page h4 { float: left; }

/* 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. */
.docs-logo-docs { width: 25px; padding-bottom: 4px; margin-right: 10px; }

.docs-logo-container { margin: auto; text-align: center; margin-bottom: 20px; }

.docs-logo-container img.docs-logo-image { height: 75px; margin: auto; }

.docs-side-bar { margin-left: 0px !important; padding-right: 10px; background-color: whitesmoke; }

.docs-hero { margin-bottom: 20px; }

.docs-card { background-color: whitesmoke; padding: 20px; height: 100%; }

.docs-card.docs-side { padding: 5px; }

.docs-card.docs-side ul { margin-left: 0; }

.docs-card.docs-side li { margin-left: 20px; }

.docs-action-btn a { color: #424242; }

.docs-action-btn a:visited { color: #043c6e; }

.docs-action-btn a:hover { color: orangered; }

.docs-faq { background-color: whitesmoke; padding-top: 20px; padding-bottom: 20px; }

.docs-architecture { background-color: whitesmoke; margin-top: 20px; margin-bottom: 20px; padding-top: 20px; padding-bottom: 20px; }

.docs-dev-guide { background-color: white; padding-top: 20px; padding-bottom: 20px; }

.language-binding-banner { border: 1px solid transparent; border-radius: .25rem; color: #856404; padding: .75rem 1.25rem; margin-bottom: 1rem; background-color: #fff3cd; border-color: #ffeeba; }

/* 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. */
.install-selector { max-width: 800px; margin: auto; margin-bottom: 40px; padding-bottom: 40px; padding-top: 40px; }

.install-selector .highlight { margin-left: 20px; margin-top: 20px; margin-bottom: 20px !important; }

.install-content, .install-widget { visibility: hidden; }

.get-started-from-source { background-color: whitesmoke; padding-top: 50px; padding-bottom: 50px; }

#lang-demo ul { margin-top: 20px; margin-bottom: 15px; }

.option-title { width: 100px; float: left; clear: none; text-align: right; font-size: 15px; padding-top: 7px; padding-bottom: 8px; padding-right: 10px; font-weight: bold; }

.option-row { padding-bottom: 8px; }

#setup-options { margin-top: 15px; margin-bottom: 15px; margin-left: 30px; }

/* Drop down */
.dropbtn { background-color: #048ccc; color: white; font-size: 17px; margin: 0px; border: none; min-width: 100%; padding: 10px; }

li.opt.versions { padding: 10px; }

li.opt.versions:hover { background-color: #048ccc; }

li.opt.versions:hover a { color: whitesmoke; }

.dropdown { position: relative; display: inline-block; margin: 5px; font-size: 17px; }

ul.dropdown-content, ul.version-dropdown { display: none; position: absolute; left: 40%; text-align: center; background-color: whitesmoke; box-shadow: none; z-index: 1; margin: 0px; padding: 0px; list-style-type: none; }

ul.version-dropdown { left: 0px; width: 100%; }

.current-version.dropbtn.btn:focus { outline: 0; }

.current-version .dropdown-caret { position: relative; top: 4px; }

.version-dropdown .active a { color: whitesmoke; }

.version-dropdown a, .dropdown-content a { color: #424242; text-decoration: none; display: block; padding-left: 5px; padding-right: 5px; font-size: 17px; }

.version-dropdown a:hover, .dropdown-content a:hover { color: orangered; }

.dropdown-content .active a { color: whitesmoke; }

.dropdown:hover .dropdown-content { display: block; }

.dropdown:hover .dropbtn { background-color: #048ccc; }

/* selector */
.col-3.install-left { margin: auto; }

.col-3.install-left span { padding-left: 20px; border-left: 2px #048ccc dashed; }

@media screen and (max-width: 600px) { .col-3.install-left span { border: none; } }

.col-9.install-right { margin: auto; }

.install-selector .active { background-color: #048ccc !important; color: whitesmoke !important; }

.btn-group.opt-group { margin-top: 5px; margin-bottom: 5px; display: flex; justify-content: space-between; }

.btn-group.opt-group .opt { padding-bottom: 10px; padding-top: 10px; font-size: 17px; width: 100%; border: none; color: #333447; margin-left: 5px; margin-right: 5px; background-color: whitesmoke; }

@media screen and (max-width: 600px) { .btn-group.opt-group .opt { font-size: 11px; margin-left: 2px; margin-right: 2px; } }

.btn-group.opt-group .opt:hover { background-color: #048ccc; color: whitesmoke; }

.btn-group.opt-group .opt:focus { outline: 0; }

/* 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. */
.highlight .hll { background-color: #ffffcc; }

.highlight { background: #f0f3f3; }

.highlight .c { color: #0099FF; font-style: italic; }

/* Comment */
.highlight .err { color: #AA0000; background-color: #FFAAAA; }

/* Error */
.highlight .k { color: #006699; font-weight: bold; }

/* Keyword */
.highlight .o { color: #555555; }

/* Operator */
.highlight .ch { color: #0099FF; font-style: italic; }

/* Comment.Hashbang */
.highlight .cm { color: #0099FF; font-style: italic; }

/* Comment.Multiline */
.highlight .cp { color: #009999; }

/* Comment.Preproc */
.highlight .cpf { color: #0099FF; font-style: italic; }

/* Comment.PreprocFile */
.highlight .c1 { color: #0099FF; font-style: italic; }

/* Comment.Single */
.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic; }

/* Comment.Special */
.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000; }

/* Generic.Deleted */
.highlight .ge { font-style: italic; }

/* Generic.Emph */
.highlight .gr { color: #FF0000; }

/* Generic.Error */
.highlight .gh { color: #003300; font-weight: bold; }

/* Generic.Heading */
.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00; }

/* Generic.Inserted */
.highlight .go { color: #AAAAAA; }

/* Generic.Output */
.highlight .gp { color: #000099; font-weight: bold; }

/* Generic.Prompt */
.highlight .gs { font-weight: bold; }

/* Generic.Strong */
.highlight .gu { color: #003300; font-weight: bold; }

/* Generic.Subheading */
.highlight .gt { color: #99CC66; }

/* Generic.Traceback */
.highlight .kc { color: #006699; font-weight: bold; }

/* Keyword.Constant */
.highlight .kd { color: #006699; font-weight: bold; }

/* Keyword.Declaration */
.highlight .kn { color: #006699; font-weight: bold; }

/* Keyword.Namespace */
.highlight .kp { color: #006699; }

/* Keyword.Pseudo */
.highlight .kr { color: #006699; font-weight: bold; }

/* Keyword.Reserved */
.highlight .kt { color: #007788; font-weight: bold; }

/* Keyword.Type */
.highlight .m { color: #FF6600; }

/* Literal.Number */
.highlight .s { color: #CC3300; }

/* Literal.String */
.highlight .na { color: #330099; }

/* Name.Attribute */
.highlight .nb { color: #336666; }

/* Name.Builtin */
.highlight .nc { color: #00AA88; font-weight: bold; }

/* Name.Class */
.highlight .no { color: #336600; }

/* Name.Constant */
.highlight .nd { color: #9999FF; }

/* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold; }

/* Name.Entity */
.highlight .ne { color: #CC0000; font-weight: bold; }

/* Name.Exception */
.highlight .nf { color: #CC00FF; }

/* Name.Function */
.highlight .nl { color: #9999FF; }

/* Name.Label */
.highlight .nn { color: #00CCFF; font-weight: bold; }

/* Name.Namespace */
.highlight .nt { color: #330099; font-weight: bold; }

/* Name.Tag */
.highlight .nv { color: #003333; }

/* Name.Variable */
.highlight .ow { color: #000000; font-weight: bold; }

/* Operator.Word */
.highlight .w { color: #bbbbbb; }

/* Text.Whitespace */
.highlight .mb { color: #FF6600; }

/* Literal.Number.Bin */
.highlight .mf { color: #FF6600; }

/* Literal.Number.Float */
.highlight .mh { color: #FF6600; }

/* Literal.Number.Hex */
.highlight .mi { color: #FF6600; }

/* Literal.Number.Integer */
.highlight .mo { color: #FF6600; }

/* Literal.Number.Oct */
.highlight .sa { color: #CC3300; }

/* Literal.String.Affix */
.highlight .sb { color: #CC3300; }

/* Literal.String.Backtick */
.highlight .sc { color: #CC3300; }

/* Literal.String.Char */
.highlight .dl { color: #CC3300; }

/* Literal.String.Delimiter */
.highlight .sd { color: #CC3300; font-style: italic; }

/* Literal.String.Doc */
.highlight .s2 { color: #CC3300; }

/* Literal.String.Double */
.highlight .se { color: #CC3300; font-weight: bold; }

/* Literal.String.Escape */
.highlight .sh { color: #CC3300; }

/* Literal.String.Heredoc */
.highlight .si { color: #AA0000; }

/* Literal.String.Interpol */
.highlight .sx { color: #CC3300; }

/* Literal.String.Other */
.highlight .sr { color: #33AAAA; }

/* Literal.String.Regex */
.highlight .s1 { color: #CC3300; }

/* Literal.String.Single */
.highlight .ss { color: #FFCC33; }

/* Literal.String.Symbol */
.highlight .bp { color: #336666; }

/* Name.Builtin.Pseudo */
.highlight .fm { color: #CC00FF; }

/* Name.Function.Magic */
.highlight .vc { color: #003333; }

/* Name.Variable.Class */
.highlight .vg { color: #003333; }

/* Name.Variable.Global */
.highlight .vi { color: #003333; }

/* Name.Variable.Instance */
.highlight .vm { color: #003333; }

/* Name.Variable.Magic */
.highlight .il { color: #FF6600; }

/* Literal.Number.Integer.Long */
/* 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. */
.trigger { float: right; }

/* Search bar - wide screen */
.gs-search-border { padding-left: 25px; float: right; }

#global-search { width: 0px; border: 0px; background-color: transparent; border-bottom: 1px solid rgba(0, 0, 0, 0.12); outline: none; font-size: 1em; color: #ffffff; display: inline-block; margin-bottom: 19px; }

#gs-search-icon { background: url(/assets/img/search-icon.svg) center no-repeat; background-size: 1em; height: 30px; width: 30px; position: relative; top: 10px; cursor: pointer; display: inline-block; }

#global-search-form { display: none; padding: 5px; line-height: 1em; }

#global-search-close { cursor: pointer; }

#global-search-dropdown-container { display: inline-block; position: relative; }

#global-search-dropdown-container button { background-color: inherit; color: white; font-size: 17px; margin: 0px; border: none; min-width: 100%; outline: 0; height: 37px; width: 90px; padding: 0px; cursor: pointer; }

#global-search-dropdown-container-mobile .gs-current-version-mobile .gs-dropdown-caret, #global-search-dropdown-container .gs-current-version .gs-dropdown-caret { position: relative; top: 4px; height: 18px; }

ul.gs-version-dropdown { display: none; position: absolute; text-align: center; background-color: whitesmoke; box-shadow: none; z-index: 1; margin: 0px; padding: 0px; list-style-type: none; }

li.gs-opt.gs-versions { padding: 10px; cursor: pointer; }

.gs-version-dropdown li:hover { color: #ff4500 !important; }

/* Search bar - mobile */
#global-search-mobile { width: 120px; margin-right: 10px; background-color: transparent; border: 0px; border-bottom: 1px solid rgba(0, 0, 0, 0.12); outline: none; font-size: 1em; color: white; }

#gs-search-icon-mobile { background: url(/assets/img/search-icon.svg) center no-repeat; background-size: 1em; height: 30px; width: 30px; position: relative; top: 10px; cursor: pointer; display: inline-block; }

#global-search-dropdown-container-mobile { display: inline-block; position: absolute; right: 10px; }

#global-search-dropdown-container-mobile button { background-color: inherit; margin: 0px; border: none; outline: 0; height: 37px; padding: 0px; cursor: pointer; }

.gs-version-dropdown-mobile { display: none; position: absolute; text-align: center; background-color: whitesmoke; box-shadow: none; z-index: 1; margin: 0px; padding: 0px; left: -50px; list-style-type: none; width: 166px; left: -138px; }

#global-search-mobile-border { line-height: 25px; }

#global-search-mobile::placeholder, #global-search::placeholder { color: #eeeeee; }

.gs-version-dropdown-mobile li.active, .gs-version-dropdown li.active { color: #ff4500 !important; font-weight: lighter; }

.gs-version-dropdown-mobile li, .gs-version-dropdown li { color: #424242; text-decoration: none; display: block; padding-left: 5px; padding-right: 5px; font-size: 17px; }

/* Main dropdown wrapper */
.algolia-autocomplete .ds-dropdown-menu > div { max-height: 60vh; overflow-y: scroll; }

#global-search-mobile-border .algolia-autocomplete .ds-dropdown-menu { min-width: 80vw; }

#global-search-mobile-border .algolia-autocomplete .ds-dropdown-menu > div { min-width: 80vw; max-height: 90vh; }

.gs-search-border .algolia-autocomplete .ds-dropdown-menu { min-width: 680px; }

/* Main category */
.algolia-autocomplete .algolia-docsearch-suggestion--category-header { color: #000000; text-align: center; }

/* Category */
.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { color: gray; }

/* Title */
.algolia-autocomplete .algolia-docsearch-suggestion--title { color: black; font-weight: 300; }

/* Description description */
.algolia-autocomplete .algolia-docsearch-suggestion--text { font-size: 0.8rem; color: gray; }

/* Highlighted text */
.algolia-autocomplete .algolia-docsearch-suggestion--highlight { color: blue; }

/* 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. */
.dropdown-option-active { color: #ff4500 !important; font-weight: lighter; }

.dropdown { position: relative; display: inline-block; }

.dropdown-content { display: none; position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); padding: 12px 16px; z-index: 1; text-align: left; }

.dropdown:hover .dropdown-content { display: block; }

.dropdown-header { color: #ffffff; display: inline-flex; }

.dropdown-caret { width: 18px; }

.trigger .dropdown-caret { height: 57px; }

.dropdown-caret-path { fill: #ffffff; }

/* 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. */
.feedback-container { text-align: center; }

.feedback-answer-container { display: inline-block; }

.feedback-question { display: inline-block; padding: 0.5em 1em 0.5em 1em; }

.feedback-answer { display: inline-block; padding: 0.5em 1em 0.5em 1em; color: #048ccc; cursor: pointer; }

.feedback-answer:hover { color: #ffffff; background-color: #048ccc; }

.feedback-thank-you { display: none; padding: 0.5em 1em 0.5em 1em; }

.feedback-hr-top { margin: 1em; margin-top: 50px; }

.feedback-hr-bottom { margin: 1em; margin-bottom: 30px; }

/*# sourceMappingURL=main.css.map */