/* Variables */
:root {
    --genesis-vertical-navigation-width: 280px;
}

genesis-vertical-navigation {
    position: sticky;
    display: flex;
    flex-direction: column;
    flex: 1 0 auto;
    top: 0;
    width: var(--genesis-vertical-navigation-width);
    min-width: var(--genesis-vertical-navigation-width);
    max-width: var(--genesis-vertical-navigation-width);
    height: 100vh;
    min-height: 100vh;
    max-height: 100vh;
    z-index: 200;

    /* ----------------------------------------------------------------------------------------------------- */
    /* @ Navigation Drawer
    /* ----------------------------------------------------------------------------------------------------- */

    /* Animations */
    &.genesis-vertical-navigation-animations-enabled {
        transition-duration: 400ms;
        transition-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1);
        transition-property: visibility, margin-left, margin-right, transform, width, max-width, min-width;

        /* Wrapper */
        .genesis-vertical-navigation-wrapper {
            transition-duration: 400ms;
            transition-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1);
            transition-property: width, max-width, min-width;
        }
    }

    /* Over mode */
    &.genesis-vertical-navigation-mode-over {
        position: fixed;
        top: 0;
        bottom: 0;
    }

    /* Left position */
    &.genesis-vertical-navigation-position-left {

        /* Side mode */
        &.genesis-vertical-navigation-mode-side {
            margin-left: calc(#{var(--genesis-vertical-navigation-width)} * -1);

            &.genesis-vertical-navigation-opened {
                margin-left: 0;
            }
        }

        /* Over mode */
        &.genesis-vertical-navigation-mode-over {
            left: 0;
            transform: translate3d(-100%, 0, 0);

            &.genesis-vertical-navigation-opened {
                transform: translate3d(0, 0, 0);
            }
        }

        /* Wrapper */
        .genesis-vertical-navigation-wrapper {
            left: 0;
        }
    }

    /* Right position */
    &.genesis-vertical-navigation-position-right {

        /* Side mode */
        &.genesis-vertical-navigation-mode-side {
            margin-right: calc(var(--genesis-vertical-navigation-width) * -1);

            &.genesis-vertical-navigation-opened {
                margin-right: 0;
            }
        }

        /* Over mode */
        &.genesis-vertical-navigation-mode-over {
            right: 0;
            transform: translate3d(100%, 0, 0);

            &.genesis-vertical-navigation-opened {
                transform: translate3d(0, 0, 0);
            }
        }

        /* Wrapper */
        .genesis-vertical-navigation-wrapper {
            right: 0;
        }
    }

    /* Inner mode */
    &.genesis-vertical-navigation-inner {
        position: relative;
        width: auto;
        min-width: 0;
        max-width: none;
        height: auto;
        min-height: 0;
        max-height: none;
        box-shadow: none;

        .genesis-vertical-navigation-wrapper {
            position: relative;
            overflow: visible;
            height: auto;

            .genesis-vertical-navigation-content {
                overflow: visible !important;
            }
        }
    }

    /* Wrapper */
    .genesis-vertical-navigation-wrapper {
        position: absolute;
        display: flex;
        flex: 1 1 auto;
        flex-direction: column;
        top: 0;
        bottom: 0;
        width: 100%;
        height: 100%;
        overflow: hidden;
        z-index: 10;
        background: inherit;
        box-shadow: inset -1px 0 0 var(--genesis-border);
        
        /* Content */
        .genesis-vertical-navigation-content {
            flex: 1 1 auto;
            overflow-x: hidden;
            overflow-y: auto;
            overscroll-behavior: contain;

            /* Divider */
            > genesis-vertical-navigation-divider-item {
                margin: 24px 0;
            }

            /* Group */
            > genesis-vertical-navigation-group-item {
                margin-top: 24px;
            }
        }

        /* Footer */
        .genesis-vertical-navigation-footer {

        }
    }

    /* Aside wrapper */
    .genesis-vertical-navigation-aside-wrapper {
        position: absolute;
        display: flex;
        flex: 1 1 auto;
        flex-direction: column;
        top: 0;
        bottom: 0;
        left: var(--genesis-vertical-navigation-width);
        width: var(--genesis-vertical-navigation-width);
        height: 100%;
        z-index: 5;
        overflow-x: hidden;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
        transition-duration: 400ms;
        transition-property: left, right;
        transition-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1);
        background: inherit;

        > genesis-vertical-navigation-aside-item {
            padding: 24px 0;

            /* First item of the aside */
            > .genesis-vertical-navigation-item-wrapper {
                display: none !important;
            }
        }
    }

    &.genesis-vertical-navigation-position-right {

        .genesis-vertical-navigation-aside-wrapper {
            left: auto;
            right: var(--genesis-vertical-navigation-width);
        }
    }

    /* Navigation items common */
    genesis-vertical-navigation-aside-item,
    genesis-vertical-navigation-basic-item,
    genesis-vertical-navigation-collapsable-item,
    genesis-vertical-navigation-divider-item,
    genesis-vertical-navigation-group-item,
    genesis-vertical-navigation-spacer-item {
        display: flex;
        flex-direction: column;
        flex: 1 0 auto;
        user-select: none;

        .genesis-vertical-navigation-item-wrapper {

            .genesis-vertical-navigation-item {
                position: relative;
                display: flex;
                align-items: center;
                justify-content: flex-start;
                padding: 10px 16px;
                font-size: 13px;
                font-weight: 500;
                line-height: 20px;
                text-decoration: none;
                border-radius: 6px;

                /* Disabled state */
                &.genesis-vertical-navigation-item-disabled {
                    cursor: default;
                    opacity: 0.4;
                }

                .genesis-vertical-navigation-item-icon {
                    margin-right: 16px;
                }

                .genesis-vertical-navigation-item-title-wrapper {

                    .genesis-vertical-navigation-item-subtitle {
                        font-size: 11px;
                        line-height: 1.5;
                    }
                }

                .genesis-vertical-navigation-item-badge {
                    margin-left: auto;

                    .genesis-vertical-navigation-item-badge-content {
                        display: flex;
                        align-items: center;
                        justify-content: center;
                        font-size: 10px;
                        font-weight: 600;
                        white-space: nowrap;
                        height: 20px;
                    }
                }
            }
        }
    }

    /* Aside, Basic, Collapsable, Group */
    genesis-vertical-navigation-aside-item,
    genesis-vertical-navigation-basic-item,
    genesis-vertical-navigation-collapsable-item,
    genesis-vertical-navigation-group-item {

        > .genesis-vertical-navigation-item-wrapper {
            margin: 0 12px;
        }
    }

    /* Aside, Basic, Collapsable */
    genesis-vertical-navigation-aside-item,
    genesis-vertical-navigation-basic-item,
    genesis-vertical-navigation-collapsable-item {
        margin-bottom: 4px;

        .genesis-vertical-navigation-item {
            cursor: pointer;
        }
    }

    /* Aside */
    genesis-vertical-navigation-aside-item {

    }

    /* Basic */
    genesis-vertical-navigation-basic-item {

    }

    /* Collapsable */
    genesis-vertical-navigation-collapsable-item {

        > .genesis-vertical-navigation-item-wrapper {

            .genesis-vertical-navigation-item {

                .genesis-vertical-navigation-item-badge {

                    + .genesis-vertical-navigation-item-arrow {
                        margin-left: 8px;
                    }
                }

                .genesis-vertical-navigation-item-arrow {
                    height: 20px;
                    line-height: 20px;
                    margin-left: auto;
                    transition: transform 300ms cubic-bezier(0.25, 0.8, 0.25, 1),
                    color 375ms cubic-bezier(0.25, 0.8, 0.25, 1);
                }
            }
        }

        &.genesis-vertical-navigation-item-expanded {

            > .genesis-vertical-navigation-item-wrapper {

                .genesis-vertical-navigation-item {

                    .genesis-vertical-navigation-item-arrow {
                        transform: rotate(90deg);
                    }
                }
            }
        }

        > .genesis-vertical-navigation-item-children {

            > *:first-child {
                margin-top: 6px;
            }

            > *:last-child {
                padding-bottom: 6px;

                > .genesis-vertical-navigation-item-children {

                    > *:last-child {
                        padding-bottom: 0;
                    }
                }
            }

            .genesis-vertical-navigation-item {
                padding: 10px 16px;
            }
        }

        /* 1st level */
        .genesis-vertical-navigation-item-children {
            overflow: hidden;

            .genesis-vertical-navigation-item {
                padding-left: 56px;
            }

            /* 2nd level */
            .genesis-vertical-navigation-item-children {

                .genesis-vertical-navigation-item {
                    padding-left: 72px;
                }

                /* 3rd level */
                .genesis-vertical-navigation-item-children {

                    .genesis-vertical-navigation-item {
                        padding-left: 88px;
                    }

                    /* 4th level */
                    .genesis-vertical-navigation-item-children {

                        .genesis-vertical-navigation-item {
                            padding-left: 104px;
                        }
                    }
                }
            }
        }
    }

    /* Divider */
    genesis-vertical-navigation-divider-item {
        margin: 12px 0;

        .genesis-vertical-navigation-item-wrapper {
            height: 1px;
            box-shadow: 0 1px 0 0;
        }
    }

    /* Group */
    genesis-vertical-navigation-group-item {

        > .genesis-vertical-navigation-item-wrapper {

            .genesis-vertical-navigation-item {

                .genesis-vertical-navigation-item-badge,
                .genesis-vertical-navigation-item-icon {
                    display: none !important;
                }

                .genesis-vertical-navigation-item-title-wrapper {

                    .genesis-vertical-navigation-item-title {
                        font-size: 12px;
                        font-weight: 600;
                        letter-spacing: 0.05em;
                        text-transform: uppercase;
                    }
                }
            }
        }
    }

    /* Spacer */
    genesis-vertical-navigation-spacer-item {
        margin: 6px 0;
    }
}

/* ----------------------------------------------------------------------------------------------------- */
/* @ Overlay
/* ----------------------------------------------------------------------------------------------------- */
.genesis-vertical-navigation-overlay {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 170;
    opacity: 0;
    background-color: rgba(0, 0, 0, 0.6);

    + .genesis-vertical-navigation-aside-overlay {
        background-color: transparent;
    }
}

/* ----------------------------------------------------------------------------------------------------- */
/* @ Aside overlay
/* ----------------------------------------------------------------------------------------------------- */
.genesis-vertical-navigation-aside-overlay {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 169;
    opacity: 0;
    background-color: rgba(0, 0, 0, 0.3);
}

/* ----------------------------------------------------------------------------------------------------- */
/* @ Navigation Items Colors
/* ----------------------------------------------------------------------------------------------------- */

/* Navigation items common */
genesis-vertical-navigation-aside-item,
genesis-vertical-navigation-basic-item,
genesis-vertical-navigation-collapsable-item,
genesis-vertical-navigation-group-item {

    .genesis-vertical-navigation-item-wrapper {

        .genesis-vertical-navigation-item {
            color: currentColor;

            .genesis-vertical-navigation-item-icon {
                @apply text-current opacity-60;
            }

            .genesis-vertical-navigation-item-title-wrapper {

                .genesis-vertical-navigation-item-title {
                    @apply text-current opacity-80;
                }

                .genesis-vertical-navigation-item-subtitle {
                    @apply text-current opacity-50;
                }
            }
        }
    }
}

/* Aside, Basic, Collapsable */
genesis-vertical-navigation-aside-item,
genesis-vertical-navigation-basic-item,
genesis-vertical-navigation-collapsable-item {

    > .genesis-vertical-navigation-item-wrapper {

        .genesis-vertical-navigation-item {

            /* Active state */
            &:not(.genesis-vertical-navigation-item-disabled) {

                &.genesis-vertical-navigation-item-active,
                &.genesis-vertical-navigation-item-active-forced {
                    @apply bg-gray-800 bg-opacity-5 dark:bg-white dark:bg-opacity-12;

                    .genesis-vertical-navigation-item-icon {
                        @apply opacity-100;
                    }

                    .genesis-vertical-navigation-item-title {
                        @apply opacity-100;
                    }

                    .genesis-vertical-navigation-item-subtitle {
                        @apply opacity-100;
                    }
                }
            }

            /* Hover state */
            &:not(.genesis-vertical-navigation-item-active-forced):not(.genesis-vertical-navigation-item-active):not(.genesis-vertical-navigation-item-disabled) {

                &:hover {
                    @apply bg-gray-800 bg-opacity-5 dark:bg-white dark:bg-opacity-12;

                    .genesis-vertical-navigation-item-icon {
                        @apply opacity-100;
                    }

                    .genesis-vertical-navigation-item-title,
                    .genesis-vertical-navigation-item-arrow {
                        @apply opacity-100;
                    }

                    .genesis-vertical-navigation-item-subtitle {
                        @apply opacity-100;
                    }
                }
            }
        }
    }
}

/* Collapsable */
genesis-vertical-navigation-collapsable-item {

    /* Expanded state */
    &.genesis-vertical-navigation-item-expanded {

        > .genesis-vertical-navigation-item-wrapper {

            .genesis-vertical-navigation-item {

                .genesis-vertical-navigation-item-icon {
                    @apply opacity-100;
                }

                .genesis-vertical-navigation-item-title,
                .genesis-vertical-navigation-item-arrow {
                    @apply opacity-100;
                }

                .genesis-vertical-navigation-item-subtitle {
                    @apply opacity-100;
                }
            }
        }
    }
}

/* Group */
genesis-vertical-navigation-group-item {

    > .genesis-vertical-navigation-item-wrapper {

        .genesis-vertical-navigation-item {

            .genesis-vertical-navigation-item-title-wrapper {

                .genesis-vertical-navigation-item-title {
                    @apply opacity-100 text-primary-600 dark:text-primary-400;
                }
            }
        }
    }
}
