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

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

@import "../css/prism.css";


$theme-colors: (
     "primary": #055799,
     "secondary": #b02032,
    'gray': #e9e9e9,
    'shadow-gray': #d5d5d5,
     'ignite-red': #f20025,
);

/** 
Custom building the bootstrap, to avoid unused components
*/

@import "../node_modules/bootstrap/scss/functions";
@import "../node_modules/bootstrap/scss/variables";
@import "../node_modules/bootstrap/scss/mixins";
@import "../node_modules/bootstrap/scss/root";
@import "../node_modules/bootstrap/scss/reboot";
@import "../node_modules/bootstrap/scss/type";
@import "../node_modules/bootstrap/scss/images";
@import "../node_modules/bootstrap/scss/code";
@import "../node_modules/bootstrap/scss/grid";
@import "../node_modules/bootstrap/scss/tables";
// @import "../node_modules/bootstrap/scss/forms";
@import "../node_modules/bootstrap/scss/buttons";
@import "../node_modules/bootstrap/scss/transitions";
@import "../node_modules/bootstrap/scss/dropdown";
// @import "../node_modules/bootstrap/scss/button-group";
// @import "../node_modules/bootstrap/scss/input-group";
// @import "../node_modules/bootstrap/scss/custom-forms";
@import "../node_modules/bootstrap/scss/nav";
@import "../node_modules/bootstrap/scss/navbar";
// @import "../node_modules/bootstrap/scss/card";
// @import "../node_modules/bootstrap/scss/breadcrumb";
// @import "../node_modules/bootstrap/scss/pagination";
// @import "../node_modules/bootstrap/scss/badge";
@import "../node_modules/bootstrap/scss/jumbotron";
// @import "../node_modules/bootstrap/scss/alert";
// @import "../node_modules/bootstrap/scss/progress";
// @import "../node_modules/bootstrap/scss/media";
// @import "../node_modules/bootstrap/scss/list-group";
@import "../node_modules/bootstrap/scss/close";
// @import "../node_modules/bootstrap/scss/toasts";
@import "../node_modules/bootstrap/scss/modal";
// @import "../node_modules/bootstrap/scss/tooltip";
// @import "../node_modules/bootstrap/scss/popover";
// @import "../node_modules/bootstrap/scss/carousel";
// @import "../node_modules/bootstrap/scss/spinners";
// @import "../node_modules/bootstrap/scss/utilities";
@import "../node_modules/bootstrap/scss/print";


body {
    font-family: 'Open Sans', sans-serif;
    font-size: 14px;
    margin: 0;
    padding: 0;
    opacity: 1;
}
strong {
    font-weight: 600;
}



.sticky-top {
    box-shadow: 0 4px 8px 0 #b5b5b5;
    background-color: #ffffff;
}

.fa-external-link-alt {
    color: #aaaaaa;
}

/** start header */
#header {
    

    #nav {
        padding: 0.5rem 0;
        margin-bottom: 0 !important;
        .navbar-brand {
            img {
                width: 12rem;
                transition: all 0.5s ease;
            }
        }
        .navbar-nav {
            position: absolute;
            right: 0;

            > li.nav-item {
                font-size: 16px;
                transition: width 0.2 ease, font-size 0.5s ease;
                width:130px;
                
            }
            

            li.nav-item {
                

                a {
                    display: inline-block;
                    padding-right: 1.3em;
                    padding-left: 1.3em;
                    cursor: pointer;
                    transition: padding 0.5s ease;
                    
                }
                .dropdown-toggle:after {
                    display: none;
                }

                ul.dropdown-menu {
                    padding: 0.5em 0 0 1.3em;
                    

                    box-shadow:  0px 5px 8px 0px theme-color('shadow-gray'), 0px -5px 8px 0px theme-color('shadow-gray');
                    border-bottom: 5px solid theme-color('ignite-red');
                    border-radius: 0;

                    .dropdown-subtitle {
                        font-weight: 400;
                        font-size: 16px;
                        margin-top: 0.6em;
                        border-bottom: 3px solid theme-color('gray');
                        margin-bottom: 0.5em;

                        padding-bottom: 0.5em;

                    }

                    .dropdown-item {
                        padding: 0;
                        transition: background-color 200ms ease-in-out;
                        a {
                            padding: 0.4em 1.5em 0.4em 1em;
                            color: #000;
                            // padding: 0;
                            font-size: 14px;
                            display: block;
                            transition: none;;
                        }
                        a:hover {
                            text-decoration: none;
                        }
                    }
                    .dropdown-item:hover {
                        background-color: lighten(theme-color('gray'), 5%);
                        border-left:3px solid theme-color('secondary');
                            // -webkit-animation: menuitemanimation 1000ms linear  both;
                            // animation: menuitemanimation 1000ms linear  both;   
                        
                        a {
                            padding-left: calc(1em - 3px);
                            
                        }
                    }
                    .dropdown-item:active {
                        background-color: #ffffff;
                    }

                    .dropdown-item:last-child {
                        border-bottom: 5px solid theme-color('secondary');
                        padding-bottom: 1em;
                        margin-bottom: -5px;
                    }
                }
                
            }
            li.nav-item.show {
                > a.dropdown-toggle {
                    font-weight: 700;
                    
                }
            }
        }
    }
}
#header.shrink {

    #nav .navbar-nav > li.nav-item {
        // font-size: 15px !important;
        width: 120px;
    }
    .btn-secondary {
        padding: 0.3rem 1.2rem 0.4rem !important;
    }

    img {
        width: 8rem !important;   
    }
}

#footer {
    
    box-shadow: 
        inset 0px 15px 8px -10px theme-color('shadow-gray'),
        inset 0px -15px 8px -10px theme-color('shadow-gray');

        .wrapper {
            background: rgb(24,124,204);
            background: -moz-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 45%, rgba(242,242,242,0) 45%);
            background: -webkit-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 45%, rgba(242,242,242,0) 45%);
            background: linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 45%, rgba(242,242,242,0) 45%);
            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#187ccc",endColorstr="#f2f2f2",GradientType=1);
    
            padding-top: 3rem;
        }

    nav {
        ul {
            
            li {
                padding:5px;
                a {
                    color: #ffffff;
                }
            }
        }
    }
    .copyright {
        padding-left: 33%;
        
        .footer-logos {
            display: flex;
            justify-content: space-between;


            .ignite {
                img {
                    width: 190px;
                }
            }
            .apache {
                img {
                    width: 80px;
                }
            }
        }
    }
}



/** end header */

.bg-gray-shadow {
    background-color: theme-color("gray");


}

#main-banner {
    

    
    
    box-shadow: 
        inset 0px 15px 8px -10px theme-color('shadow-gray'),
        inset 0px -15px 8px -10px theme-color('shadow-gray');

    .wrapper {

        background: rgb(24,124,204);
        background: -moz-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 14%, rgba(242,242,242,0) 14%, rgba(242,242,242,0) 80%, rgba(10,90,154,1) 80%, rgba(24,124,204,1) 100%);
        background: -webkit-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 14%, rgba(242,242,242,0) 14%, rgba(242,242,242,0) 80%, rgba(10,90,154,1) 80%, rgba(24,124,204,1) 100%);
        background: linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 14%, rgba(242,242,242,0) 14%, rgba(242,242,242,0) 80%, rgba(10,90,154,1) 80%, rgba(24,124,204,1) 100%);
        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#187ccc",endColorstr="#187ccc",GradientType=1);

        // background: rgb(24,124,204);
        // background: -moz-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 5%, rgba(242,242,242,0) 5%);
        // background: -webkit-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 5%, rgba(242,242,242,0) 5%);
        // background: linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 5%, rgba(242,242,242,0) 5%);
        // filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#187ccc",endColorstr="#f2f2f2",GradientType=1);

        padding: 5em 0;
    }


    h1 {
        font-weight: 300;
        font-size: 32px;
        line-height: 1.4em;
        text-align: center;

        strong {
            display: block;
        }
    }
    p {
        font-size: 24px;
        font-weight: 300;
        width: 80%;
        line-height: 1.5em;
        margin-bottom: 1.5em;
    }
    .btn {
        font-size: 18px;
        line-height: 1.5em;
        padding: 0.5rem 1.5rem;
        margin-right: 30px;

        i {
            font-size: 24px;
            margin-right: 8px;
            vertical-align: middle;
        }
    }
    .buttons {
        text-align: center;
        margin-top: 3rem;
    }
    .btn-getting-started {
        background-color: #ffffff;

        i {
            color: theme-color('secondary');
        }
    }

}

#github-stats-bar {
    padding:  0.5rem 0 0.2rem;
    background-color: lighten(theme-color('gray'), 5%);
    
    a {
        color: lighten(theme-color('gray'), 5%);
    }

    

    .twitter-follow {
        iframe {
            position: absolute !important;
            top: 5px;
            right: 0;
        }
    }
}

.github-stats {
    .github-link {
        
        .fa-github {
            color: theme-color('primary');
            font-size: 30px;
            margin-right: 1rem;
            vertical-align: top;
        }
    }
}
.github-wrapper {
    .fa-github {
        color: #000000 !important;
    }
    
    > * {
        display: inline-block;
        
    }
    * {
        vertical-align: top !important; 
        line-height: 24px;;
    }

}

#intro-text {
    // margin-bottom: 3rem; 
    padding: 5rem 0 0;
    box-shadow:  inset 0px 15px 8px -10px #d5d5d5;

    p {
        border-radius: 5px;
        padding: 0 10rem;
        font-size: 24px;
        text-align: center;
        margin-bottom: 0;
        font-weight: 300;
    }
}


#home-deployment-options {
    box-shadow: inset 0px -15px 8px -10px theme-color('shadow-gray'); 
    padding: 4rem 0 3rem;

    background: #ffffff;
    background: linear-gradient(180deg, #ffffff 0%, theme-color('gray') 30%);
    // background-color: theme-color('gray');
   
    h2 {
        margin-bottom: 3rem;
    }

    .row {
        padding: 0 3rem; 
        
        .option {
            padding: 0 40px; 
        }
     
        a {
            display: block;
            text-align: center;
            color: #000;
            margin-bottom: 3em; 
            
            h3 {
                font-size: 20px;
                line-height: 1.5em;
                font-weight: 600; 

                span {
                    display: block; 
                }
            }
        
            p {
                font-size: 16px;
                font-weight: 400;
                line-height: 1.6em; 
            }
        
            .icon-wrapper{
                border-radius: 50px;
                padding: 1.5rem;
                background-color: theme-color('secondary');
                transition: all 0.3s ease-in-out;
                margin: 1rem auto 2rem;
                
                width: 100px;
                height: 100px;

                > svg {
                    width: 100%;
                    height: 100%;

                    
                    // fill: theme-color('secondary');
                    fill: #ffffff;
                    
                    
                }
            }
        }
        a:hover {
            text-decoration: none; 
            
            .icon-wrapper {
                
                background-color: theme-color('primary');
                
                svg {
                    
                    fill: #ffffff; 
                    
                }
            }
        }
    }
}

#home-use-cases {
    padding: 5rem 0;
    background-color: #ffffff;
    // box-shadow: inset 0px 15px 8px -10px #e5e5e5;

    #intro-text {
        
        margin-bottom: 50px;
        
        p {
            background-color: theme-color('gray');
            border-radius: 5px;
            padding: 40px 90px;
            font-size: 18px;
            line-height: 2em;
        }
    }
    #intro-text:after {
        content: "";
        width: 25vw;
        height: 6px;
        background-color: theme-color('gray');
        display: block;
        margin: 40px auto 50px;
        border-radius: 5px;;
    }

    .container {
        .row {
            margin-bottom: 2rem;
            margin-top: 4rem;
        }

        
        a.simplified-img-a {
            cursor: zoom-in;
        }
        
        
        img {
            max-width: 100%;
            margin: 0 auto;
            display: block;
        }

        .txt-wrapper {
            h3 {
                font-size: 20px;
                margin-bottom: 15px;
                font-weight: 600;
            }
            display: block;
            padding: 30px;


            p {
                font-size: 16px;
                line-height: 2em;
                margin-bottom: 20px;
            }
            .btn {
                padding: 8px 15px;
            }
        }
    }

}

.modal-dialog {
    
    .modal-content {
        button.close {
            width: 40px;
            position: absolute;
            right: 10px;
            top: 10px;
        }

    }
}

#diagramModal {
    .modal-dialog {
        max-width: 90vw !important;

        .modal-content {
            height: 95vh;

            

            img {
                height: 95vh;
                max-width: 60vw;
                margin: 0 auto;
            }
        }
    }
}

#videoModal {
    .modal-dialog {
        max-width: 68vw;

        .modal-content {
            .modal-header {
                h4 {
                    font-weight: 300;
                }
            }
            .modal-body {
                iframe {
                    width: 100% !important;
                    height: 40vw !important;
                }
            }
        }
    }
}

section.section-block {
    
    h2 {
        text-align: center;
        font-size: 32px;
        text-transform: uppercase;
        margin-bottom: 2em;

        strong {
            color: theme-color('primary');
            font-weight: 900;
        }
    }
}


#home-features {

    

    box-shadow: 
        inset 0px 15px 8px -10px theme-color('shadow-gray'),
        inset 0px -15px 8px -10px theme-color('shadow-gray');

    .wrapper {
        background: rgb(24,124,204);
        background: -moz-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 5%, rgba(242,242,242,0) 5%, rgba(242,242,242,0) 95%, rgba(10,90,154,1) 95%, rgba(24,124,204,1) 100%);
        background: -webkit-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 5%, rgba(242,242,242,0) 5%, rgba(242,242,242,0) 95%, rgba(10,90,154,1) 95%, rgba(24,124,204,1) 100%);
        background: linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 5%, rgba(242,242,242,0) 5%, rgba(242,242,242,0) 95%, rgba(10,90,154,1) 95%, rgba(24,124,204,1) 100%);
        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#187ccc",endColorstr="#187ccc",GradientType=1);

        padding: 5rem 0;
        }

        .row {
            padding: 0 3rem;
        }
    .feature {
        padding: 0 40px;

        a {
            display: block;
            text-align: center;
            color: #000;
            margin-bottom: 3em;;
            

            h3 {
                font-size: 20px;
                line-height: 1.5em;
                font-weight: 600;
                span {
                    display: block;
                }
            }

            p {
                font-size: 16px;
                font-weight: 400;;
                line-height: 1.6em;
            }
            svg {
                width: 100px;
                height: 100px;
                fill: theme-color('secondary');
                transition: all 0.5s ease-in-out;
                background-color: #ffffff;
                border-radius: 0px;
                padding: 1.5em;
                margin-top: 2em;
                margin-bottom: 1em;
            }
            
        }
        a:hover {
            text-decoration: none;
            
            svg {
                background-color: theme-color('secondary');
                fill: #ffffff;
                
                // border-radius: 300px;
            }
        }
    }
}

#home-extras {
    padding: 5rem 0;
    
    #home-links {
        ul {
            padding: 0 6rem;
            li {
                list-style: none;

                a {
                    display: flex;
                    justify-content: start;
                    align-items: center;
                    padding: 10px 20px;
                    margin-bottom: 25px;
                    transition: all 0.2s ease-in-out;

                    svg {
                        background-color: theme-color('secondary');
                        border-radius: 150px;
                        width: 55px;
                        height: 55px;
                        fill: #ffffff;
                        transition: all 0.3s ease-in-out;
                        padding: 5px;
                        margin-right: 2em;
                    }
                    span {
                        color: #000;
                        font-size: 20px;
                        font-weight: 600;
                    }
                }
                a:hover {
                    background-color: theme-color('gray') !important;
                    border-radius: 5px;
                    text-decoration: none;

                    svg {
                        background-color: theme-color('primary');
                    }
                }

            }
        }
    }
    #home-twitter {
        .pre-scrollable {
            max-height: 430px;
            border-top: 1px solid theme-color('gray');
            border-bottom: 1px solid theme-color('gray');
        }
        .follow-widget {
            text-align: right;
            margin-top: 10px;
        }
    }
}

.documentation {
    padding-top: 0;

    h2 {
        text-align: center;
        text-transform: uppercase;
        font-weight: 400;
        font-size: 24px;
        margin-top: 4em;
        margin-bottom: 1em;
    }

    h2:after {
        content: " ";
        display: block;
        width: 200px;
        border-bottom: 1px solid #dddddd;
        border-top: 1px solid #dddddd;
        margin: 1.5em auto 0;
        height: 7px;
    }

    p.intro {
        text-align: center;
        padding: 0 3em;
        font-size: 16px;
        margin-bottom: 2em;
    }


    .icons-list {
        padding-left: 0;
        
        li {
            list-style: none;

        
            a {
                color: #000;
                text-align: center;
                display: block;
                width: 100%;
                min-height: 8em;
                font-size: 16px;
                line-height: 1.6em;
                margin-bottom: 4em;;
                transition: all 0.4s ease-out;


                svg {
                    margin: 0 auto;
                    display: block;
                    width: 3.5em;
                    height: 5em;
                    fill: #c8c8c8;
                    transition: all 0.4s ease-out;
                }

                
            }
            a:after {
                content:"";
                border-right: 1px solid #cccccc;
                height: 6em;
                width: 1px;
                float: right;
                display: block;
                position: absolute; right: 0; 
                top: calc(50% - 4em);
            }
        
            a:hover {
                color:  theme-color('secondary');
                text-decoration: none;
                > svg {
                    width: 4em;
                    fill: theme-color('secondary');
                }
            }
        }

        li:last-child, li:nth-child(4n) {
            a:after {
                display: none;
            }
        }
    }
}



/***
* Styles for internal pages 
*/
article {
    
    padding: 0px 0 80px;
    font-size: 16px;
    line-height: 2em;

    header {
        
        background: -moz-linear-gradient(45deg, rgba(242,242,242,0) 91%, rgba(10,90,154,1) 91%, rgba(24,124,204,1) 100%);
        background: -webkit-linear-gradient(45deg, rgba(242,242,242,0) 91%, rgba(10,90,154,1) 91%, rgba(24,124,204,1) 100%);
        background: linear-gradient(45deg, rgba(242,242,242,0) 91%, rgba(10,90,154,1) 91%, rgba(24,124,204,1) 100%);
        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#187ccc",endColorstr="#187ccc",GradientType=1);
        background-color: theme-color('gray');
        box-shadow: 0px 14px 30px 10px theme-color('gray');
        // color: #000000;
        padding: 4rem 0 1rem;
        margin-bottom: 5rem;

        h1 {
            color: #000000;
        }
    }

    h1, h2 {
        font-size: 36px;
        font-weight: 300;
        text-transform: uppercase;
        margin-bottom: 0;

        strong {
            font-weight: bold;
            color: theme-color('primary')
        }
    }

    h2 {
        font-size: 26px;
        margin-top: 50px;
        margin-bottom: 30px;
        // clear: both;
    }

    h3 {
        font-size: 26px;
        font-weight: 500;
        margin-top: 40px;
        margin-bottom: 20px;
    }



    .fa-anchor {
        font-size: 14px;
    }

    p {
        
    }

    ul {
        li {
            margin-bottom: 1em;
        }
    }

    .tab-content {
        margin-top: 30px;
        margin-bottom: 40px;
    }

    .jumbotron {
        margin-top: 80px;
        padding: 2rem;
        clear: both;

        .title {
            font-size: 26px;
            font-weight: 500;;
        }
    }

    img.diagram-right {
        max-width: 50%;
        float: right;
        margin: 0 0 2rem 2rem;
        max-height: 600px;
    }

    .fact-question {
        padding-bottom: 35px;
    }
    .nav-tabs > li > a {
        margin-right: 2px;
        line-height: 1.42857;
        border: 1px solid transparent;
        border-radius: 4px 4px 0 0;
    }
    .nav > li > a {
        position: relative;
        display: block;
        padding: 10px 15px;
        overflow: hidden;
    }
    .nav-tabs > li {
        float: left;
        margin-bottom: -1px;
    }
    .nav-tabs > li > a.active, .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
        color: #555555;
        background-color: #fff;
        border: 1px solid #ddd;
        border-bottom-color: transparent;
        cursor: default;
    }
    .nav-tabs {
        border-bottom: 1px solid #ddd;
    }

    #events {
        .row-event {
            margin-bottom: 4rem;
            border-bottom: 2px #e1e1e1 dotted;
            padding-bottom: 2rem;

            .round-icon-block {
                background-color: theme-color('gray');
                border-radius: 10px;
                padding: 1rem;

                img {
                    margin: 0 auto;
                    max-width: 75%;
                    
                    display: block;
                }
                p {
                    text-align: center;
                    margin-top: 10px;
                    font-weight: 300;
                    strong {
                        color: theme-color('primary') !important;
                        font-weight: bold;
                    }
                }
            }

            h3 {
                margin-top: 0;
                margin-bottom: 10px;
            }

            
                p {
                    margin-top: 1rem;
                    
                }
            
            .event-date {
                font-size: 16px;
                color: #666;
                margin-bottom: 0px;
                line-height: 1.5em;
            }
            .event-date:before {
                content: "•";
                font-size: 22px;
                color: theme-color('secondary');
                display: inline-block;
                margin-right: 5px;
                line-height: 1.5em;
                vertical-align: middle;
            }
        }
        
        
    }

    #meetups-groups {

        #meetups-tabs {
            .round-icon-block-tab {
                background-color: theme-color('gray');
                border-radius: 10px;
                padding: 5px;
                display: block;
                float: left;
                margin-right: 8px;
                
                img {
                    margin: 0px auto;
                    max-width: 20px;
                    width: 20px;
                    display: block;
                }
            }
            .continent {
                display: block;
                float: left;
            }
            .active .continent {
                font-weight: bold;
                padding-top: 1px;
            }
        }
        .meet-groups {
            h4 {
                font-size: 1.2rem;
                font-weight: 600;
                
            }

            ul {
                padding-bottom: 25px;
            }
        }
    }

    #screencasts {
        a.video {
            display: block;
            background-color: theme-color('gray');
            background-size: 100%;
            width: 90%;
            padding: 1rem 0;
            text-align: center;
            font-size: 18px;
            margin: 0 auto;
            border-top: 5px solid #000;
            border-bottom: 5px solid #000;

            p {
                line-height: 1.8em;
                font-weight: 300;
                color: theme-color('secondary');
                text-transform: uppercase;
                
                margin-bottom: 0;
            }
            span {
                font-size: 15px;
                color: #666666;
            }
        }
        a:after {
            content: "\f16a";
            font-family: FontAwesome;
            font-size: 32px;
            color: theme-color('secondary');
            display: block;
        }
        a:hover {
            text-decoration: none;;
        }
    }

    .btn-group-export {
        float: right;

        .table-export-options {
            padding: 1rem;

            li {
                text-align: center;
                a {
                    display: block;
                    width: 100%;
                    transition: background-color 500ms ease-out;
                }
                a:hover {
                    background-color: theme-color('gray');
                    text-decoration: none;
                }
            }
            li:last-child {
                margin-bottom: 0;
            }
        }
    }
}





  /* Generated with Bounce.js. Edit at http://bouncejs.com#%7Bs%3A%5B%7BT%3A%22t%22%2Ce%3A%22b%22%2Cd%3A750%2CD%3A0%2Cf%3A%7Bx%3A0%2Cy%3A-5%7D%2Ct%3A%7Bx%3A0%2Cy%3A0%7D%2Cs%3A1%2Cb%3A9%7D%5D%7D */
  
  @-webkit-keyframes menuitemanimation { 
    0% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -5, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -5, 0, 1); }
    2.5% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -3.034, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -3.034, 0, 1); }
    4.9% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.368, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.368, 0, 1); }
    7.31% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1.644, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1.644, 0, 1); }
    9.71% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2.32, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2.32, 0, 1); }
    12.41% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1.646, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1.646, 0, 1); }
    15.02% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.366, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.366, 0, 1); }
    17.62% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.68, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.68, 0, 1); }
    20.22% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -1.042, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -1.042, 0, 1); }
    22.92% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.743, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.743, 0, 1); }
    25.53% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.168, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.168, 0, 1); }
    28.13% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.304, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.304, 0, 1); }
    30.73% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.468, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.468, 0, 1); }
    36.04% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.077, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.077, 0, 1); }
    41.34% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.21, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.21, 0, 1); }
    51.85% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.095, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.095, 0, 1); }
    62.36% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.042, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.042, 0, 1); }
    72.87% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.019, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.019, 0, 1); }
    83.48% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.009, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.009, 0, 1); }
    93.99% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.004, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.004, 0, 1); }
    100% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 
  }
  
  @keyframes menuitemanimation { 
    0% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -5, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -5, 0, 1); }
    2.5% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -3.034, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -3.034, 0, 1); }
    4.9% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.368, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.368, 0, 1); }
    7.31% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1.644, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1.644, 0, 1); }
    9.71% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2.32, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2.32, 0, 1); }
    12.41% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1.646, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1.646, 0, 1); }
    15.02% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.366, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.366, 0, 1); }
    17.62% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.68, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.68, 0, 1); }
    20.22% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -1.042, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -1.042, 0, 1); }
    22.92% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.743, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.743, 0, 1); }
    25.53% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.168, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.168, 0, 1); }
    28.13% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.304, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.304, 0, 1); }
    30.73% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.468, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.468, 0, 1); }
    36.04% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.077, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.077, 0, 1); }
    41.34% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.21, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.21, 0, 1); }
    51.85% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.095, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.095, 0, 1); }
    62.36% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.042, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.042, 0, 1); }
    72.87% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.019, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.019, 0, 1); }
    83.48% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.009, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.009, 0, 1); }
    93.99% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.004, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.004, 0, 1); }
    100% { -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); } 
  }
  
  
  
  



@media (max-width: 1400px) {
    #main-banner {
    

        .wrapper {
    
            background: -moz-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 9%, rgba(242,242,242,0) 9%, rgba(242,242,242,0) 90%, rgba(10,90,154,1) 90%, rgba(24,124,204,1) 100%);
            background: -webkit-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 9%, rgba(242,242,242,0) 9%, rgba(242,242,242,0) 90%, rgba(10,90,154,1) 90%, rgba(24,124,204,1) 100%);
            background: linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 9%, rgba(242,242,242,0) 9%, rgba(242,242,242,0) 90%, rgba(10,90,154,1) 90%, rgba(24,124,204,1) 100%);
            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#187ccc",endColorstr="#187ccc",GradientType=1);
        }
    }

}

@media (max-width: 1280px) {
    #main-banner {
    

        .wrapper {
    
            background: -moz-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 7%, rgba(242,242,242,0) 7%, rgba(242,242,242,0) 90%, rgba(10,90,154,1) 90%, rgba(24,124,204,1) 100%);
            background: -webkit-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 7%, rgba(242,242,242,0) 7%, rgba(242,242,242,0) 90%, rgba(10,90,154,1) 90%, rgba(24,124,204,1) 100%);
            background: linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 7%, rgba(242,242,242,0) 7%, rgba(242,242,242,0) 90%, rgba(10,90,154,1) 90%, rgba(24,124,204,1) 100%);
            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#187ccc",endColorstr="#187ccc",GradientType=1);
        }
    }

}

// Large devices (desktops, less than 1200px)
// @media (max-width: 1199.98px) { ... }
@include media-breakpoint-down(lg) {
    #main-banner {
    

        .wrapper {
    
            background: -moz-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 7%, rgba(242,242,242,0) 7%, rgba(242,242,242,0) 90%, rgba(10,90,154,1) 90%, rgba(24,124,204,1) 100%);
            background: -webkit-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 7%, rgba(242,242,242,0) 7%, rgba(242,242,242,0) 90%, rgba(10,90,154,1) 90%, rgba(24,124,204,1) 100%);
            background: linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 7%, rgba(242,242,242,0) 7%, rgba(242,242,242,0) 90%, rgba(10,90,154,1) 90%, rgba(24,124,204,1) 100%);
            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#187ccc",endColorstr="#187ccc",GradientType=1);
        }
    }

    #intro-text {
        p {
            padding: 0;
        }
    }

    #home-use-cases {
        #use-cases-tabs {
            width: 85%;

            .active:after {
                left: calc(28% - 15px);
            }

            li:last-child {
                .active:after {
                    left: calc(73% - 15px);
                }
            }
        }
    }
    #home-extras {
        #home-links {
            ul {
                padding: 0;
            }
        }
    }
    #home-features {
        .feature {
            a {
                p {
                    font-size: 15px;
                }
            }
        }
    }
}

// Medium devices (tablets, less than 992px)
// @media (max-width: 991.98px) { ... }
@include media-breakpoint-down(md) {
    
    #intro-text {
        p {
            font-size: 20px;
        }
    }

    article {
        header {
            padding-top: 3rem;
            h1 {
                font-size: 32px;
            }
        }

        #screencasts {
            a.video {
                font-size: 16px;
                width: 100%;

                p {
                
                }
                span {
                    font-size: 13px;
                }
            }
            a:after {
                
                font-size: 28px;
            }
            
        }

        #videoModal {
            .modal-dialog {
                max-width: 96vw;
        
                .modal-content {
                    
                    .modal-body {
                        iframe {
                            
                            height: 60vw !important;
                        }
                    }
                }
            }
        }
    }

    #home-deployment-options {
        .row {
            a {
                svg {
                    width: 85px;
                    height: 85px;
                }
                h3 {
                    font-size: 18px;

                }
                p {
                    font-size: 14px;
                }
            }
            .option {
                padding: 0 25px !important;
            }
            
        }
    }


    #header {
        #nav {
            .navbar-nav {
                position: relative;
                li.nav-item {
                    
                    a.btn {
                        margin-left: 1.3em;
                    }
                    
                    ul.dropdown-menu {
                        border: 0;
                        box-shadow: none;
                        margin-bottom: 2rem;
                        margin-left: 2rem;
                        border-left: 5px solid theme-color('secondary');

                        .dropdown-item:last-child {
                            border-bottom: none;
                        }
                    }
                }
            }
            
            
            .navbar-brand {
                img {
                    width: 9rem;
                }
            }
            .navbar-toggler-icon {
                i {
                    font-size: 2rem;
                }
            }
        }
    }
    #header.shrink 
        #nav .navbar-nav > li.nav-item {
            width: 100%;
        }
    

    #home-use-cases {
        #use-cases-tabs {
            width: 100%;

            .active:after {
                left: calc(24% - 15px);
            }
            li:last-child {
                .active:after {
                    left: calc(77% - 15px);
                }
            }
        }
        #tabsContent {
            img {
                max-width: 75rem;
            }
            .txt-wrapper {
                width: 35rem;
            }
        }
    }
    #home-features {
        .row {
            padding: 0 2rem;
        }
        .feature {
            padding: 0 10px;
            a {
                h3 {
                    font-size: 18px;
                }
                p {
                    font-size: 14px;
                }
            }
        }
    }

    .jumbotron {
        margin-top: 80px;
        padding: 1rem;
        clear: both;
        > .container {
            padding: 0;
        }

        .title {
            font-size: 22px;
        }

        ul {
            padding-inline-start: 1.5rem;

            li {

            }
        }
    }
    
}

// Small devices (landscape phones, less than 768px)
// @media (max-width: 767.98px) { ... }
@include media-breakpoint-down(sm) {
    .twitter-follow {
        display: none;
    }

    article {
        img.diagram-right {
            max-width: 100%;
            float: right;
            margin: 1rem;
        }
        
        
        #screencasts {
            a.video {
                font-size: 19px;
                max-width: 50vw;
                height: 28vw;
                margin-bottom: 2em;

                span {
                    font-size: 15px;
                }
            }
            a:after {
                
                font-size: 34px;
            }
            
        }
    }

    #main-banner {
        .wrapper {
            background: -moz-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 5%, rgba(242,242,242,0) 5%, rgba(242,242,242,0) 95%, rgba(10,90,154,1) 95%, rgba(24,124,204,1) 100%);
            background: -webkit-linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 5%, rgba(242,242,242,0) 5%, rgba(242,242,242,0) 95%, rgba(10,90,154,1) 95%, rgba(24,124,204,1) 100%);
            background: linear-gradient(45deg, rgba(24,124,204,1) 0%, rgba(10,90,154,1) 5%, rgba(242,242,242,0) 5%, rgba(242,242,242,0) 95%, rgba(10,90,154,1) 95%, rgba(24,124,204,1) 100%);
            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#187ccc",endColorstr="#187ccc",GradientType=1);
        }
    }
    
    #home-deployment-options {
        #intro-text { 
            p {
                font-size: 18px;
                padding: 30px 0;
            }
        }
    }
    #home-use-cases {
        #tabsContent {
            padding: 0;

            .txt-wrapper {
                width: 32rem;

                p {
                    font-size: 14px;
                }
            }
        }
        #use-cases-tabs {
            .btn {
                min-height: 90px;
            }
            .active:after {
                top: 4.8em;
            }
        }
    }
    #home-extras {
        #home-links {
            ul {
                li {
                    a {
                        padding: 5px 0;
                    }
                }
            }
        }
    }

    #footer {

        nav {
            ul {
                display: flex;
                justify-content: space-evenly;
                li {
                
                    a {
                        color: #000;
                    }
                }
            }
        }

        .wrapper {
             background: none;
        }
        .copyright {
            padding: 0;
            text-align: center;

            .footer-logos {
                justify-content: space-evenly;
                padding-bottom: 20px;
            }
        }
    }
    
}

// Extra small devices (portrait phones, less than 576px)
// @media (max-width: 575.98px) { ... }
@include media-breakpoint-down(xs) { 
    #main-banner {
        h1 {
            font-size: 26px;
            text-align: center;
            
        }
        .buttons {
            text-align: center;
            align-items: center;
        }
        .btn {
            margin-bottom: 10px;
        }
    }
    #home-use-cases {
        #tabsContent {
            .txt-wrapper {
                width: 100%;
            }
        }
    }
    #home-extras {
        #home-links {
            ul {
                padding-left: 3em;
            }
        }
    }
    #home-features, #home-use-cases {
        h2 {
            strong {
                display: block;
            }
        }
    }
    article {
        header {
            margin-bottom: 2rem;
            padding-top: 2.5rem;
            h1 {
                font-size: 28px;
            }
        }

        img.diagram-right {
            float: none;
            margin: 1rem auto;
            max-width: 100% !important;
        }

        .jumbotron {
            padding: 1rem;
            .title {
                font-size: 24px;

            }
            .my-4 {
                margin-bottom: 1rem !important;
                margin-top: 1rem !important;
            }
        }
        .fact-question {
            padding-bottom: 1rem;

            h3 {
                font-size: 22px;
                margin-top: 1rem;
                
            }
        }
        .usecase-video {
            iframe {
                width: 100% !important;
                
            }
        }
        .documentation {
            h2 {
                margin-top: 2em;
            }
            .icons-list {
                li {
                    a {
                        margin-bottom: 2em;
                    }
                }
                li:last-child, li:nth-child(2n) {
                    a:after {
                        display: none;
                    }
                }
            }
        }
        #screencasts {
            a.video {
                max-width: 100%;
                height: 10em;
                margin-bottom: 1em;

                
            }
            
            
        }
    }
    #footer {
        nav {
            ul {
                flex-wrap: wrap;
            }
        }
    }
}


