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

/*
    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 {
    #promotion-bar {
        background-color: #333333;
        padding: 8px;
        
        p {
            font-size: 14px;
            line-height: 1.4em;
            font-weight: 600;
            padding: 0;
            margin: 0;

            color: #f0f0f0;
            text-align: center;

            a {
                color: #FCB903;
            }
        }
    }

    #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;
    
    min-height: calc(100vh - 380px); // viewport height minus footer+header height

    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;
            }
        }
    }
}


