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


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

// Medium devices (tablets, less than 992px)
// @media (max-width: 991.98px) { ... }
@include media-breakpoint-down(md) {

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




// Small devices (landscape phones, less than 768px)
// @media (max-width: 767.98px) { ... }
@include media-breakpoint-down(sm) {
    
    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;
            }
            
        }
    }

   
    
}



// Extra small devices (portrait phones, less than 576px)
// @media (max-width: 575.98px) { ... }
@include media-breakpoint-down(xs) { 
    
    
    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;

                
            }
            
            
        }
    }
   
}


