/*
 ▄▄▄       ██▓███   ▄▄▄       ▄████▄   ██░ ██ ▓█████     ██▓  ▄████  ███▄    █  ██▓▄▄▄█████▓▓█████
▒████▄    ▓██░  ██▒▒████▄    ▒██▀ ▀█  ▓██░ ██▒▓█   ▀    ▓██▒ ██▒ ▀█▒ ██ ▀█   █ ▓██▒▓  ██▒ ▓▒▓█   ▀
▒██  ▀█▄  ▓██░ ██▓▒▒██  ▀█▄  ▒▓█    ▄ ▒██▀▀██░▒███      ▒██▒▒██░▄▄▄░▓██  ▀█ ██▒▒██▒▒ ▓██░ ▒░▒███
░██▄▄▄▄██ ▒██▄█▓▒ ▒░██▄▄▄▄██ ▒▓▓▄ ▄██▒░▓█ ░██ ▒▓█  ▄    ░██░░▓█  ██▓▓██▒  ▐▌██▒░██░░ ▓██▓ ░ ▒▓█  ▄
 ▓█   ▓██▒▒██▒ ░  ░ ▓█   ▓██▒▒ ▓███▀ ░░▓█▒░██▓░▒████▒   ░██░░▒▓███▀▒▒██░   ▓██░░██░  ▒██▒ ░ ░▒████▒
 ▒▒   ▓▒█░▒▓▒░ ░  ░ ▒▒   ▓▒█░░ ░▒ ▒  ░ ▒ ░░▒░▒░░ ▒░ ░   ░▓   ░▒   ▒ ░ ▒░   ▒ ▒ ░▓    ▒ ░░   ░░ ▒░ ░
  ▒   ▒▒ ░░▒ ░       ▒   ▒▒ ░  ░  ▒    ▒ ░▒░ ░ ░ ░  ░    ▒ ░  ░   ░ ░ ░░   ░ ▒░ ▒ ░    ░     ░ ░  ░
  ░   ▒   ░░         ░   ▒   ░         ░  ░░ ░   ░       ▒ ░░ ░   ░    ░   ░ ░  ▒ ░  ░         ░
      ░  ░               ░  ░░ ░       ░  ░  ░   ░  ░    ░        ░          ░  ░              ░  ░
*/

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

// Flat colors.
$color-turquoise: #1abc9c;
$color-emerald: #2ecc71;
$color-river: #3498db;
$color-amethyst: #9b59b6;
$color-asphalt: #34495e;
$color-sea: #16a085;
$color-nephritis: #27ae60;
$color-belize: #2980b9;
$color-wisteria: #8e44ad;
$color-midnight: #2C3E50;
$color-sunflower: #F1C40F;
$color-orange: #F39C12;
$color-carrot: #E67E22;
$color-pumpkin: #D35400;
$color-alizarin: #E74C3C;
$color-pomegranate: #C0392B;
$color-cloud: #ECF0F1;
$color-silver: #BDC3C7;
$color-concrete: #95A5A6;
$color-asbestos: #7F8C8D;

.syntaxhighlighter {
    padding: 10px 5px;
    border-radius: 6px;
}

div.toolbar {
    display: none;
}

div, p, h1, h2, h3, span, body, html, ul, li {
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
    font-size: 18px;
}

.carousel {
    min-height: 500px;
}

.screencast {
    border: 1px #ddd solid;
}

#overview h2,
#askquestion h2,
#sqlqueries h2,
#startdata h2,
#startcompute h2 {
    padding: 0 0 20px 0;
    line-height: 1.2em;
}

h3, .h3 {
    font-size: 22px;
    color: #333;
}

p {
    line-height: 1.2em;
    color: #333;
    font-size: 18px;
}

sup, sub {
    height: 0;
    line-height: 1;
    font-size: smaller;
    vertical-align: baseline;
    position: relative;
}

sup { bottom: 0.8ex; }
sub { top: 0.5ex; }

#overview {
    margin: -38px 0 0;
    padding-top: 80px;
}

.carousel-inner p {
    color: #fff;
}

.carousel .img-holder {
    margin: 0;

    img {
        width: auto;
        height: auto;
    }
}

div#banner1 {
    & p {
        padding-bottom: 40px;
        font-size: 24px;
    }
}

#documentation table,
#download table,
#benchmarks table {
    & > tbody > tr > th {
        text-align: center;
        background-color: $color-asphalt;
        color: #fff;
    }

    &,
    & > tbody > tr > tr,
    & > tbody > tr > th,
    & > tbody > tr > td {
        border: 1px solid $color-asphalt;

        &:first-child {
            padding: 5px 20px
        }
    }

    ul#javadoc,
    ul#docs,
    ul#videos {
        margin: 0;
        padding: 4px 0;
        list-style: none;

        & > li {
            padding-bottom: 4px;
        }
    }
}
#benchmarks table {
    margin-bottom: 35px
}
#benchmarks section {
    padding: 90px 0 0 0;
    margin-top: -40px;
    border-bottom: 2px dotted #ddd;

    &.first-section {
        margin-top: 0;
    }
}
#benchmarks img {
    margin: 0;
}
#community,
#askquestion {
    ul#lists {
        margin: 0;
        padding: 4px 0;
        list-style: none;

        & > li {
            padding-bottom: 4px;
        }
    }
}

#download table > tbody > tr > td {
    text-align: center;
}

#footer {
    p {
        font-size: 13px;
        text-align: justify;
        text-justify: inter-word;
    }
    .social-networks {
        float: right;
    }
}

.footer-nav > ul {
    padding-left: 50px;

    @media (max-width:$mobile) {
        padding: 5px 0 10px 0;
    }
}

#header {
    background: rgba(54, 54, 54, 0.95);
    top: 0;
}

section.page-section {
    padding: 90px 0 10px 0;
    margin-top: -70px;
    border-bottom: 2px dotted #ddd;
    margin-bottom: 20px;

    table.twosides {
        padding: 0 !important;
        margin: 0 !important;
        border: none !important;

        td {
            padding: 0 !important;
            margin: 0 !important;
            border: none !important;
        }
    }

    h2 {
        font-size: 26px;
        color: #333;
        padding: 0 0 20px 0;
        text-align: left;
    }
    h3 {
            font-size: 20px;
            color: #333;
            padding: 0 0 20px 0;
            text-align: left;
        }

    &:last-child {
        border-bottom: none
    }

    ul.page-list, ol.page-list {
        padding-left: 20px;
        color: #333;

        & > li {
            padding-bottom: 4px;
        }
    }

    div.page-links {
        margin: 20px 0 10px 0px;
        font-weight: bold;
    }

    div.page-heading {
        padding-top: 10px;
        font-weight: 700;
        padding-bottom: 10px;
    }

    .code-examples {
        clear: both;
        margin: 20px 0 10px 0;
    }

    .videos > ul {
        list-style: none;
        padding-left: 0;

        li {
            padding: 3px 0;

            i.fa {
                color: $color-river;
            }
        }

        .video-title {
            padding-left: 10px;
        }

        .video-duration {
            padding-left: 5px;
            color: #aaa;
            font-size: 12px
        }
    }

    .screencasts {
        iframe {
            border: 1px solid #eee;
        }
    }
}

section.page-section .first {
    padding-top: 75px;
}

section.page-section .page-box {
    div.page-left {
        float: left;

        ul.page-list {
            padding-left: 20px;

            & > li {
                padding-bottom: 4px;
            }
        }
    }

    div.page-right {
        padding-top: 10px;
        float: right;
    }
}

.syntaxhighlighter .code,
.syntaxhighlighter .gutter { 
    font-size: 16px !important;
}

img[usemap], map area{
    outline: none;
}

#list table {
    width: auto;

    & > thead > tr {
        background: #f5f5f5;

        & > th {
            text-align: center;
        }
    }

    & > tbody > tr {
        & > td:nth-child(3) {
            text-align: center;
        }
    }
}

.submenu-header {
    display: block;
    font-weight: bold;
    padding: 3px 15px 0 15px;
    font-size: 14px;
    line-height: 1.9;
    white-space: nowrap;
}

.dropdown-menu >li >a {
    font-size: 13px !important;
    font-weight: normal;
    line-height: 1.4;
}

.dropdown-menu >li >a:hover {
    color: $red;
}

.dropdown-menu .last {
    padding-bottom: 3px;
}


.dropdown:hover .dropdown-menu {
    display: block;
    border-radius: 5px 5px 5px 5px ;
}

.dropdown-menu .divider {
    margin: 0;
}

table.overview {
    width: 92% !important;
    border: none !important;
    margin: auto !important;

    & > thead > tr {
        border-bottom: 1px solid grey !important;

        & > th {
            color: #000;
            font-size: 21px !important;
            font-weight: bold;
            border: none !important;
            padding: 20px !important;
        }
        & .left {
            padding-left: 20px !important;
        }
        & .border-right {
            border-right: 1px solid grey !important;
        }
    }

    & > tbody {
        & > tr:nth-child(even){
            background: #f5f5f5;
        }

        & > tr {

            & > td {
                border: none !important;
                font-size: 18px !important;
                font-weight: 400;

                & > p {
                    margin-top :8px;
                    margin-bottom :8px
                }

            }
            & .left {
                padding-left: 20px !important;
            }
            & .border-right {
                border-right: 1px solid grey !important;
            }
        }
    }
}

table.formatted {
    border: 1px solid #ddd !important;
    width: 98% !important;
    margin-bottom: 40px;
    position: relative;

    & > thead > tr {
        background: #cfcfcf;
        border: 1px solid #cfcfcf;

        & > th {
            color: #000;
            font-weight: bold;
            border: none !important;
        }
        & .left {
            padding-left: 20px !important;
        }
    }

    & > tbody {

        & > tr:nth-child(even){
            background: #f5f5f5;
        }

        & > tr {

            & > td {
                border: none !important;

                & > p {
                    margin-top :8px;
                    margin-bottom :8px;
                    @media (max-width: $mobile) {
                        margin-top :0px;
                        margin-right :5px;
                        padding-right: 5px;
                    }
                }

                @media (max-width: $mobile) {
                    white-space: normal !important;
                }
            }

            & .left {
                font-weight: bold;
                padding-left: 20px !important;
            }
        }

        @media (max-width: $mobile) {
            border: none !important;
        }
    }
}

#main table {
    & td {
        @media (max-width: $mobile) {
              margin: 10px 0 5px -110px !important;
              white-space: normal !important;
        }

        & ul {
            @media (max-width: $mobile) {
                padding:0 0 0 20px ! important;
                margin-right: 5px;
            }
        }
    }

    & tr:nth-child(odd) td {
        @media (max-width: $mobile) {
            background-color: white;
        }
    }

    @media (max-width: $mobile) {
        margin: 0 0 20px 0 !important;
    }
}

section.usecase-page-section {
    padding: 90px 0 10px 0;
    margin-top: -70px;

    h2 {
        font-size: 26px;
        color: #333;
        padding: 0 0 20px 0;
        text-align: left;
    }
}

section.usecase-page-section .first {
    padding-top: 75px;
}

.centeredImage {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

.page-menu {
    margin-left : 35px;
    text-indent: 20px;
    padding: 20px 0 40px 0;

    & h3 {
        font-size: 21px !important;
        border-right: 1px solid grey;
        border-bottom: 1px solid grey;
        @media (max-width: $mobile) {
            border: none;
        }
    }

    & ul {
        list-style-type: none;
        padding-left: 0;
        border-right: 1px solid grey;
        @media (max-width: $mobile) {
            border: none;
            padding-bottom: 20px;
        }

        & > li {
            padding-bottom: 10px;
            padding-top: 10px;
            height:40px;
        }

        & > li:nth-child(even) {
            background: #f5f5f5;
            @media (max-width: $mobile) {
                  background: none;
            }
        }
    }

    & .last {
        border-right: none !important;
    }

    & .empty {
        @media (max-width: $mobile) {
              height:0;
              padding:0;
        }
    }

    & .col-sm-4, .col-md-4, .col-xs-12 {
        padding-left: 0;
        padding-right: 0;
    }
}

.dropdown-menu {
    @media (max-width: $mobile) {
        position: relative !important;
    }
}

iframe {
   @media (max-width: $mobile) {
       width : auto;
       height: auto;
   }
}

.carousel .carousel-control {
    @media (max-width: $mobile) {
        visibility: hidden;
    }
}

.carousel {
    @media (max-width: $mobile) {
        min-height: 300px !important;
    }
}

#people {
    & .col-xs-12 {
        @media (max-width: $mobile) {
            padding-right: 0px !important;

            & table.formatted.committers > tbody> tr > td:nth-child(odd) {
                font-weight: 500;
            }
        }
    }
}

.syntaxhighlighter table td.gutter .line {
    @media (max-width: $mobile) {
        display: none !important;
    }
}

.ignite-img {
    margin: 45px;

    @media (max-width: $mobile) {
        margin: 17px;
    }
}

#main table.benchmarks {
    @media screen { 
        @media (max-width: $mobile) {
            & > thead {
                display: block !important;
            }


            & > thead > tr {
                height: 50px;
                & > th {
                    text-align: center;
                    display: block !important;
                }
            }
        }
    }
}

.news-box {
    background: #e8f1fc;
    text-align: left;
    border-radius: 6px;
    padding: 12px 12px 0px 12px;

    h4 {
        font-size: 16px;
        margin-bottom: 12px;
    }

    ul {
        list-style-type: none;
        padding-left: 0px;

        li {
            padding-bottom: 15px;
            font-size: 15px;
            line-height: 1.2em;
            color: #333;
            a {
                color: #333;

                &:hover {
                    text-decoration: underline;
                }
            }
        }
    }

    p {
        font-size: 15px;
        margin-bottom: 5px;
    }
}

.news-box-date {
    font-size: 12px;
    color: #888;
}

.news-date {
    font-size: 15px;
    color: #888;
}

section.news-section {
    h3 {
        padding: 0 0 10px 0;
        line-height: 1.2em;
    }
    p {
        padding-top: 10px;
         a {
           color: #f00;
        }
    }

    a {
        color: #333;
    }
}

.testimonials {
    background: #e8f1fc;
    text-align: left;
    border-radius: 6px;
    padding: 12px 12px 0px 12px;

    h4 {
        font-size: 16px;
        margin-bottom: 12px;
    }

    ul {
        list-style-type: none;
        padding-left: 0px;

        li {
            padding-bottom: 25px;
            font-size: 15px;
            line-height: 1.2em;
            color: #333;
            font-style: italic;
        }
    }
}

.credits {
    font-style: normal;
    font-size: 15px;
}

.video-duration {
    margin: 17px;
    color: #888;
    font-size: 16px;
    line-height: 1.6em;
}

section#chatroom #gitter-badge {
  margin-left: 10px;
}

.delta {
    color: #449d44
}

.img-caption {
    font-size: 13px;
    text-align: center;
    margin-bottom: 0px;
}

.addons-contibutor {
    font-size: 13px;
}