/* ------------------------------------------------------------------------------
*
*  # Navs related component
*
*  Overrides for navs related bootstrap component
*
*  Version: 1.3
*  Latest update: Aug 10, 2016
*
* ---------------------------------------------------------------------------- */


// Basic styles
// -------------------------

.nav {

    // Nav items
    > li {
        > a {

            // Remove outline on focus
            &:focus {
                outline: 0;
            }
        }

        // Disabled state sets text to gray and nukes hover/tab effects
        &.disabled > a {

            // Mute elements
            > .badge,
            > .label,
            > .status-mark,
            > img {
                .opacity(0.75);
            }
        }
    }

    // Open dropdowns
    .open > a {
        &,
        &:hover,
        &:focus {
            background-color: transparent;
            border-color: transparent;
            color: @gray-dark;
        }
    }

    // Optional sizing
    &.nav-lg > li > a {
        padding: @nav-link-padding-large;
    }
    &.nav-sm > li > a {
        padding: @nav-link-padding-small;
    }
    &.nav-xs > li > a {
        padding: @nav-link-padding-mini;
    }

    // Tabs nav image
    .tab-img {
        max-height: @line-height-computed;
        display: inline-block;
        vertical-align: top;
    }
}



// Tabs
// -------------------------

// Base styles
.nav-tabs {
    margin-bottom: @line-height-computed;

    // Tabs list item
    > li {
        float: none;

        // Actual tabs (as links)
        > a {
            margin-right: 0;
            color: @color-grey-400;
            border-radius: 0;

            // Hover/focus states
            &:hover,
            &:focus {
                background-color: transparent;
                border-color: transparent;
                color: @text-color;
            }

            // Right aligned icons
            > [class*=icon-].pull-right {
                float: right;
                margin-top: ((@line-height-computed - @icon-font-size) / 2);
            }
        }
    }


    //
    // Tab layouts
    //

    // Justified tabs
    // Needs to be dublicated. Sadly.
    &.nav-justified {
        .nav-tabs-justified();
    }


    // Tabs with highlighted top border
    &.nav-tabs-highlight {
        @media (min-width: @screen-sm-min) {
            > li {

                // Change border radius and top border width
                > a {
                    &,
                    &:hover,
                    &:focus {
                        border-top-width: 2px;
                    }
                }

                // Apply top border color. Replace it with any variable or color
                &.active > a {
                    &,
                    &:hover,
                    &:focus {
                        border-top-color: @brand-primary;
                    }
                }
            }
        }
    }


    // Tabs with top border
    &.nav-tabs-top {
        @media (min-width: @screen-sm-min) {

            // List items
            > li {
                margin-bottom: 0; // Remove bottom spacing

                // Change border radius and top border width
                > a {
                    &,
                    &:hover,
                    &:focus {
                        border: 0;
                    }

                    // Top highlight line
                    &:after {
                        content: '';
                        position: absolute;
                        top: 0;
                        left: 0;
                        right: 0;
                        height: 2px;
                    }
                }

                // Add top border on hover
                &.open > a,
                > a:hover,
                > a:focus {
                    &:after {
                        background-color: @nav-tabs-border-color;
                    }
                }

                // Apply top border color. Replace it with any variable or color
                &.active > a {

                    // Highlight background color
                    &:after {
                        background-color: @color-pink-300;
                    }

                    // States
                    &,
                    &:hover,
                    &:focus {
                        background-color: transparent;
                    }
                }
            }

            // Without bottom border
            &.top-divided {
                border-bottom-color: transparent;
            }
        }
    }


    // Tabs with bottom border
    &.nav-tabs-bottom {
        @media (min-width: @screen-sm-min) {

            // Tab nav item
            > li {
                margin-bottom: 0;

                // Link
                > a {
                    border-width: 0;
                    margin-bottom: -1px;

                    // Bottom highlight
                    &:after {
                        content: '';
                        position: absolute;
                        bottom: 0;
                        left: 0;
                        right: 0;
                        height: 2px;
                    }
                }

                // Apply bottom border color and change width. Replace color with any variable or color
                &.active > a {

                    // Highlight background color
                    &:after {
                        background-color: @color-pink-300;
                    }

                    // States
                    &,
                    &:hover,
                    &:focus {
                        background-color: transparent;
                        border-width: 0;
                    }
                }
            }

            // Without bottom border
            &.bottom-divided {
                border-bottom-color: transparent;
            }
        }
    }


    // Tabs with custom solid background
    &[class*=bg-] {
        border-bottom: 0;

        // Add common styles for all bg color variations
        > li {
            margin-bottom: 0;

            // Link
            > a {
                color: #fff;
                border-width: 0;

                // Hover state
                &:hover,
                &:focus {
                    background-color: fade(#000, 5%);
                }
            }

            // Opened dropdown menu
            &.open:not(.active) > a {
                color: #fff;
                background-color: fade(#000, 5%);
            }
        }

        // Apply permanent darker color for active item
        > .active > a {
            &,
            &:hover,
            &:focus {
                background-color: fade(#000, 10%);
                border-width: 0;
                color: #fff;
            }
        }

        // Mute disabled links
        > .disabled > a {
            &,
            &:hover,
            &:focus {
                color: fade(#fff, 50%);
            }
        }

        // Setup desktop view
        @media (min-width: @screen-sm-min) {
            .tab-content-bordered & {
                .border-bottom-radius(0);
            }
        }
    }


    // Tabs with solid background
    &.nav-tabs-solid {

        // Links color
        > li > a {
            color: @text-color;
            
            // Remove border
            &,
            &:hover,
            &:focus {
                border-color: transparent;
            }
        }

        // Apply background color to active tab. Replace it with any variable or color
        > .active > a,
        > .active > a:hover,
        > .active > a:focus {
            background-color: @component-active-bg;
            border-color: @component-active-bg;
            color: #fff;
        }

        // Setup desktop view
        @media (min-width: @screen-sm-min) {

            // Set permanent background color
            background-color: @nav-tabs-solid-bg;
            border: 0;

            // Add border radius
            > li {
                margin-bottom: 0;

                // Link styles
                > a {

                    // Hover state
                    &:hover,
                    &:focus {
                        background-color: @nav-tabs-solid-hover-bg;
                    }
                }
            }

            // Style dropdown link
            > .open:not(.active) > a {
                background-color: @nav-tabs-solid-hover-bg;
                border-color: transparent;
            }
        }
    }


    // Tabs with top icon
    &.nav-tabs-icon {
        > li > a > i {
            margin-right: @element-horizontal-spacing;
        }

        // Desktop view
        @media (min-width: @screen-sm-min) {

            // Links
            > li > a {
                padding-bottom: (@line-height-computed - (@padding-base-vertical * 1.5));

                // Icon
                > i {
                    display: block;
                    margin: 5px 0;
                }
            }

            // Sizes
            &.nav-lg > li > a {
                padding-bottom: (@line-height-computed-large - (@padding-base-vertical * 1.5));
            }
            &.nav-sm > li > a {
                padding-bottom: (@line-height-computed-small - (@padding-base-vertical * 1.5));
            }
            &.nav-xs > li > a {
                padding-bottom: (@line-height-computed-mini - (@padding-base-vertical * 1.5));
            }
        }
    }


    // Toolbar tabs
    &.nav-tabs-toolbar {
        background-color: @panel-footer-bg;
    }


    // Setup desktop view
    @media (min-width: @screen-sm-min) {
        font-size: 0;

        > li {
            display: inline-block;
            font-size: @font-size-base;
        }
    }


    // Setup mobile view
    @media (max-width: @screen-xs-max) {
        border-bottom: 0;
        position: relative;
        background-color: #fff;
        padding: @list-spacing 0;
        border: 1px solid @panel-default-border;
        border-radius: @border-radius-base;

        // Tab nav item
        > li {
            margin-bottom: 0;

            // Add permanent link styles
            > a {
                border: 0;

                // Hover state
                &:hover,
                &:focus {
                    background-color: @nav-tabs-mobile-link-hover-bg;
                }

                // Stick right elements to the right side
                .position-right {
                    &[class*=icon-] {
                        float: right;
                        margin-top: ((@line-height-computed - @icon-font-size) / 2);
                    }

                    // Labels/badges
                    &.label,
                    &.badge {
                        float: right;
                    }
                }
            }

            // Left border and bg colors for active link
            &.active > a {
                &,
                &:hover,
                &:focus {
                    border: 0;
                    background-color: @nav-tabs-mobile-link-active-bg;

                    // Highlight
                    &:after {
                        content: '';
                        position: absolute;
                        top: 0;
                        left: -1px;
                        bottom: 0;
                        width: 2px;
                        background-color: @brand-primary;
                    }
                }
            }

            // Dublicate left border for dropdown link
            &.open:not(.active) > a {
                &,
                &:hover,
                &:focus {
                    background-color: @nav-tabs-mobile-link-hover-bg;
                }
            }

            // Make all left aligned
            &.pull-right {
                float: none!important;
            }
        }

        // Remove highlight in solid and colored tabs
        &.nav-tabs-solid,
        &[class*=bg-] {
            > li.active > a {
                &:after {
                    content: none;
                }
            }
        }

        // Add text header to the tabs section
        &:before {
            content: 'Contents';
            color: inherit;
            font-size: @font-size-small;
            line-height: @line-height-small;
            margin-top: (@content-padding-base - @list-spacing);
            margin-left: @content-padding-base;
            margin-bottom: @content-padding-base;
            text-transform: uppercase;
            .opacity(0.5);
        }

        // Tabs with solid background
        &[class*=bg-] {
            > li {
                > a:hover,
                > a:focus,
                &.open:not(.active) > a {
                    background-color: fade(#000, 5%);
                }
            }
        }

        // Vertical tabs
        .nav-tabs-right & {
            margin-bottom: 0;
            margin-top: @line-height-computed;
        }

        // Toolbar tabs
        &.nav-tabs-toolbar {
            border-width: 0 0 1px 0;
            border-radius: 0;
        }
    }
}



// Vertical tabs
// -------------------------

@media (min-width: @screen-sm-min) {

    // Base
    .nav-tabs-vertical {
        display: table;
        width: 100%;

        // Tabs base
        > .nav-tabs {
            display: table-cell;
            border-bottom: 0;
            width: 300px;

            // Tabs nav item
            > li {
                display: block;
                margin-bottom: 0;
            }
        }

        // Solid and custom colored tabs
        > .nav-tabs-solid > li:last-child > a:after {
            .border-bottom-radius(@border-radius-base);
        }
        > .nav-tabs[class*=bg-] {
            > li:first-child > a {
                .border-top-radius(@border-radius-base);
            }

            > li:last-child > a {
                .border-bottom-radius(@border-radius-base);
            }
        }

        // Tab content
        > .tab-content {
            display: table-cell;

            // With padding
            > .has-padding {
                padding: 0;
                padding-top: (@padding-base-vertical * 1.5);
            }
        }

        // Bordered tab content
        &.tab-content-bordered > .tab-content {
            border-top-width: 1px;
        }
    }

    // Left tabs
    .nav-tabs-left {

        // Basic tabs
        > .nav-tabs {
            border-right: 1px solid @nav-tabs-border-color;

            // Items
            > li {
                margin-right: -1px;

                // Active links
                &.active > a,
                &.active > a:hover,
                &.active > a:focus {
                    border-bottom-color: @nav-tabs-border-color;
                    border-right-color: transparent;
                }
            }

            // Tabs component
            &.nav-tabs-component > li > a {
                border-radius: @border-radius-base 0 0 @border-radius-base;
            }
        }

        // Highlighted tabs
        > .nav-tabs-highlight {
            > li > a {
                &,
                &:hover,
                &:focus {
                    border-top-width: 1px;
                    border-left-width: 2px;
                }
            }

            // Active tabs item
            > li.active > a,
            > li.active > a:hover,
            > li.active > a:focus {
                border-top-color: @nav-tabs-border-color;
                border-left-color: @color-pink-400;
            }
        }

        // With top border
        > .nav-tabs-top,
        > .nav-tabs-bottom {
            padding-right: @grid-gutter-width;
        }

        // Divided tabs
        > .top-divided,
        > .bottom-divided {
            padding-right: 0;
            border-right-width: 0;
        }

        // Solid and custom colored tabs
        > .nav-tabs-solid,
        > .nav-tabs[class*=bg-] {
            border-right: 0;
            border-radius: @border-radius-base;

            > li {
                margin-right: 0;
            }
        }

        // Tab content
        > .tab-content {
            padding-left: @grid-gutter-width;
        }

        // Bordered tab content
        &.tab-content-bordered > .tab-content {
            border-left-width: 0;
        }
    }

    // Right tabs
    .nav-tabs-right {

        // Basic tabs
        > .nav-tabs {
            border-left: 1px solid @nav-tabs-border-color;
            margin-bottom: 0;
            margin-top: @line-height-computed;

            // Nav items
            > li {
                margin-left: -1px;

                // Active tab
                &.active > a,
                &.active > a:hover,
                &.active > a:focus {
                    border-bottom-color: @nav-tabs-border-color;
                    border-left-color: transparent;
                }
            }

            // Tabs component
            &.nav-tabs-component > li > a {
                border-radius: 0 @border-radius-base @border-radius-base 0;
            }
        }

        // Highlighted tabs
        > .nav-tabs-highlight {
            > li > a {
                &,
                &:hover,
                &:focus {
                    border-top-width: 1px;
                    border-right-width: 2px;
                }
            }

            // Active tabs
            > li.active > a,
            > li.active > a:hover,
            > li.active > a:focus {
                border-top-color: @nav-tabs-border-color;
                border-right-color: @color-pink-400;
            }
        }

        // With top border
        > .nav-tabs-top,
        > .nav-tabs-bottom {
            padding-left: @grid-gutter-width;
        }

        // Divided tabs
        > .top-divided,
        > .bottom-divided {
            padding-left: 0;
            border-left-width: 0;
        }

        // Solid and custom colored tabs
        > .nav-tabs-solid,
        > .nav-tabs[class*=bg-] {
            border-left: 0;
            border-radius: @border-radius-base;

            > li {
                margin-left: 0;
            }
        }

        // Tab content
        > .tab-content {
            padding-right: @grid-gutter-width;
        }

        // Bordered tab content
        &.tab-content-bordered > .tab-content {
            border-right-width: 0;
        }
    }
}



// Pills
// -------------------------

// Base
.nav-pills {
    margin-bottom: @line-height-computed;

    // Pill item
    > li {
        float: none;

        // Links rendered as pills
        > a {
            color: @gray-dark;
        }

        // Inline links
        & + li {
            margin-left: 0;

            // Add top spacing on mobile
            > a {
                margin-top: 2px;
            }
        }
    }

    // Link if dropdown opened
    .open > a {
        &,
        &:hover,
        &:focus {
            background-color: @nav-link-hover-bg;
        }
    }

    // Bordered and toolbar pills
    &.nav-pills-bordered,
    &.nav-pills-toolbar {
        > li > a,
        > .open > a {
            border: 1px solid @nav-tabs-border-color;
        }

        // Active state
        > .active > a,
        > .active > a:hover,
        > .active > a:focus {
            border-color: @nav-pills-active-link-hover-bg;
        }
    }

    // Toolbar pills
    &.nav-pills-toolbar {
        @media (min-width: @screen-sm-min) {
            > li {
                > a {
                    border: 1px solid @nav-tabs-border-color;
                    border-radius: 0;
                }

                &:first-child > a {
                    border-radius: @border-radius-base 0 0 @border-radius-base;
                }

                &:last-child > a {
                    border-radius: 0 @border-radius-base @border-radius-base 0;
                }

                & + li > a {
                    margin-top: 0;
                    margin-left: 0;
                    border-left: 0;
                }
            }
        }
    }


    // Setup desktop view
    @media (min-width: @screen-sm-min) {
        font-size: 0;

        // Pill item
        > li {
            display: inline-block;
            font-size: @font-size-base;

            // Links
            + li > a {
                margin-top: 0;
                margin-left: @tags-spacing;
            }
        }

        // Justified pills
        &.nav-justified {
            > li {
                display: table-cell;
            }
        }
    }

    // Stick right elements to the right side
    @media (max-width: @screen-xs-max) {
        > li > a {
            .position-right {

                // Icons
                &[class*=icon-] {
                    float: right;
                    margin-top: ((@line-height-computed - @icon-font-size) / 2);
                }

                // Labels and badges
                &.label,
                &.badge {
                    float: right;
                }
            }
        }
    }
}

// Stacked pills
.nav-stacked {
    > li {
        display: block;

        // Links
        > a {
            .pull-right {
                &[class*=icon-] {
                    float: right;
                    margin-top: ((@line-height-computed - @icon-font-size) / 2);
                }

                // Labels/badges
                &.label,
                &.badge {
                    float: right;
                }
            }
        }

        // Sibling links
        + li > a {
            margin-left: 0;
        }
    }
}


// Nav variations
// -------------------------

// Justified nav links
.nav-justified {

    // Remove bottom margin
    > li > a {
        margin-bottom: 0;
    }
}

// Justified tabs
.nav-tabs-justified {

    // Links
    > li > a {
        border-radius: 0;
        margin-bottom: 0;
        
        // Hover state
        &:hover,
        &:focus {
            border-bottom-color: @nav-tabs-border-color;
        }
    }

    // Setup desktop view
    @media (min-width: @screen-sm-min) {

        // Justified tabs with top border only
        &.nav-tabs-top {
            border-bottom: 1px solid @nav-tabs-border-color;

            // Links
            > li > a,
            > li > a:hover,
            > li > a:focus {
                border: 0;
            }
        }

        // Justified tabs with bottom border only
        &.nav-tabs-bottom {
            border-bottom: 1px solid @nav-tabs-border-color;
        }

        // Justified tabs with highlighted top border
        &.nav-tabs-highlight {
            > li > a,
            > li > a:hover,
            > li > a:focus {
                border-top-width: 2px;
            }
        }
    }

    // Setup mobile view
    @media (max-width: @screen-xs-max) {
        border-bottom: 1px solid @panel-default-border;

        // Give them the same look
        > li {
            &.active > a {
                &,
                &:hover,
                &:focus {
                    border: 0;
                }
            }
        }
    }
}

// Add rounded corners to the tabs
@media (min-width: @screen-sm-min) {

    // Default tabs
    .nav-tabs.nav-tabs-component {
        > li > a {
            border-radius: @border-radius-base @border-radius-base 0 0;
        }

        // Solid and with custom color
        &.nav-tabs-solid,
        &[class*=bg-] {
            border-radius: @border-radius-base;

            // Links
            > li > a {
                border-radius: 0;
            }

            // Link in first item
            > li:first-child > a {
                border-radius: @border-radius-base 0 0 @border-radius-base;
            }
        }
    }

    // Justified tabs
    .nav-tabs-component.nav-justified:extend(.nav-tabs-component) {
        &.nav-tabs-solid,
        &[class*=bg-] {
            > li:last-child > a {
                border-radius: 0 @border-radius-base @border-radius-base 0;
            }
        }
    }
}



// Tab content area
// -------------------------

// Add padding as panes don't have it by default
.tab-content > .has-padding {

    // Bordered tab content
    .tab-content-bordered & {
        padding: @panel-body-padding;
    }

    // Inside flat panel
    .panel-flat > .panel-heading + & {
        padding-top: 0;
    }

    // Remove padding on mobiles
    @media (min-width: @screen-sm-min) {
        padding: @panel-body-padding;
    }
}

// Panel tab content
.panel-tab-content {
    > .has-padding {
        padding: @panel-body-padding;
    } 
}

// Bordered tab content
.tab-content-bordered {

    // Add padding and borders to tab content area
    .tab-content {
        border-radius: @border-radius-base;
        border: 1px solid transparent;

        &:not([class*=bg-]) {
            border-color: @nav-tabs-active-link-hover-border-color;
            background-color: @nav-tabs-active-link-hover-bg;
        }

        @media (min-width: @screen-sm-min) {
            border-top-width: 0;
            border-radius: 0 0 @border-radius-base @border-radius-base;
        }
    }

    // Setup desktop view
    @media (min-width: @screen-sm-min) {
        .nav-tabs {
            margin-bottom: 0;

            // Add specific styles for solid tabs
            &.nav-tabs-solid {
                border-radius: @border-radius-base @border-radius-base 0 0;
                .box-shadow (0 0 0 1px @nav-tabs-border-color inset);

                > li:first-child > a {
                    border-radius: @border-radius-base 0 0 0;
                }

                &.nav-justified > li:last-child > a {
                    border-radius: 0 @border-radius-base 0 0;
                }
            }
        }

        // Tabs with solid color
        > .nav-tabs[class*=bg-] {
            .border-top-radius(@border-radius-base);

            & + .tab-content[class*=bg-] {
                border-top-width: 1px;
                border-top-color: fade(#fff, 50%);
            }
        }
    }
}



// Responsive stuff
// -------------------------

// Setup desktop view
@media (min-width: @screen-sm-min) {

    // Dropdown top margin correction in some tabs layouts
    .nav-tabs[class*=bg-],
    .nav-tabs-top {
        .dropdown-menu {
            margin-top: 0;
        }
    }

    // Top 1px gap for dropdown in bottom divided layout
    .nav-justified.bottom-divided .dropdown-menu {
        margin-top: 1px;
    }
}


// Setup mobile view
@media (max-width: @screen-xs-max) {
    .nav-tabs,
    .nav-pills {

        // Make dropdown full width on mobile
        .dropdown-menu,
        &.nav-justified > .dropdown .dropdown-menu {
            left: -1px;
            right: -1px;
            margin-top: 2px;
        }

        // Always use left text alignment on mobile
        &.nav-justified,
        &.text-center,
        &.text-right {
            > li > a {
                text-align: left;
            }
        }
    }
}
