$hc-offcanvas-nav-background-color:   #eee !default;
$hc-offcanvas-nav-text-color:         #111 !default;
$hc-offcanvas-nav-text-size:          14px !default;

.hc-offcanvas-nav {
    font-family: sans-serif;

    &,
    .nav-wrapper {
        &::after {
            background: rgba(0, 0, 0, .3);
        }
    }

    .nav-container,
    .nav-wrapper,
    ul {
        background: $hc-offcanvas-nav-background-color;
    }

    .nav-content > {
        h2, h3, h4, h5, h6 {
            font-size: round($hc-offcanvas-nav-text-size * 1.35);
            font-weight: normal;
            padding: 20px 17px;
            color: darken($hc-offcanvas-nav-background-color, 20%);

            &:not(.nav-title):not(.level-title) {
                font-size: round($hc-offcanvas-nav-text-size * 1.14);
                padding: 15px 17px;
                background: $hc-offcanvas-nav-background-color;
            }
        }
    }

    .nav-item-link,
    li.nav-close a,
    .nav-back a {
        padding: 14px 17px;
        font-size: $hc-offcanvas-nav-text-size;
        color: $hc-offcanvas-nav-text-color;
        z-index: 1;
        background: rgba(0, 0, 0, 0);
        border-bottom: 1px solid darken($hc-offcanvas-nav-background-color, 6%);
        transition: background .1s ease;

        &:focus,
        &:focus-within {
            z-index: 10;
        }

        &[disabled] {
            color: rgba($hc-offcanvas-nav-text-color, .5);
        }
    }

    div.nav-back {
        & + ul > li:first-child > .nav-item-wrapper > .nav-item-link {
            border-top: none !important;
        }
    }

    &:not(.touch-device) {
        li:not(.nav-item-custom) {
            a:not([disabled]) {
                &:hover {
                    background: darken($hc-offcanvas-nav-background-color, 2%);
                }
            }
        }
    }

    .nav-custom-content {
        padding: 14px 17px;
        font-size: $hc-offcanvas-nav-text-size;
        border-bottom: 1px solid darken($hc-offcanvas-nav-background-color, 6%);
    }

    .nav-highlight {
        background: darken($hc-offcanvas-nav-background-color, 4%);
    }

    .nav-wrapper {
        & > .nav-content > {

            ul {

                &:first-of-type {
                    & > li {
                        &:first-child:not(.nav-back):not(.nav-close) {
                            & > .nav-item-wrapper {
                                & > .nav-item-link {
                                    border-top: 1px solid darken($hc-offcanvas-nav-background-color, 6%);

                                    & + a {
                                        border-top: 1px solid darken($hc-offcanvas-nav-background-color, 6%);
                                    }
                                }
                            }
                        }
                    }
                }

                &:not(:last-child) {
                    border-bottom: 2px solid darken($hc-offcanvas-nav-background-color, 6%);
                }

                & + {
                    h2, h3, h4, h5, h6 {
                        margin-top: -2px;
                    }
                }
            }

            h2, h3, h4, h5, h6 {
                & + ul {
                    & > li {
                        &:first-child:not(.nav-back):not(.nav-close) {
                            & > .nav-item-wrapper {
                                & > .nav-item-link {
                                    border-top: 1px solid darken($hc-offcanvas-nav-background-color, 6%);
                                }
                            }
                        }
                    }
                }
            }

            .nav-title,
            .level-title,
            .nav-close {
                & + {
                    h2, h3, h4, h5, h6 {
                        border-top: 1px solid darken($hc-offcanvas-nav-background-color, 6%);
                    }
                }
            }
        }
    }

    li {
        color: $hc-offcanvas-nav-text-color;

        &.nav-parent {
            .nav-item-link {

                &:last-child {
                    padding-right: 58px;
                }

                &:not(:last-child) {
                    margin-right: 45px;
                }
            }
        }
    }

    .nav-close-button span,
    .nav-parent .nav-next,
    .nav-back span {
        width: 45px;
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        text-align: center;
        cursor: pointer;
        transition: background .1s ease;
    }

    .nav-close-button {
        position: relative;
        display: block;

        span {
            &::before,
            &::after {
                content: '';
                position: absolute;
                top: 50%;
                left: 50%;
                width: 6px;
                height: 6px;
                margin-top: -3px;
                border-top: 2px solid $hc-offcanvas-nav-text-color;
                border-left: 2px solid $hc-offcanvas-nav-text-color;
            }

            &::before {
                margin-left: -9px;
                transform: rotate(135deg);
            }

            &::after {
                transform: rotate(-45deg);
            }
        }
    }

    .nav-content > .nav-close {
        position: relative;
        z-index: 2;

        a {
            font-size: $hc-offcanvas-nav-text-size;
            color: $hc-offcanvas-nav-text-color;
            background: rgba(0, 0, 0, 0);
            z-index: 1;
            text-decoration: none;
            box-sizing: border-box;

            &:not(.has-label) {
                height: 50px;
            }

            &.has-label {
                padding: 14px 17px;
                border-top: 1px solid darken($hc-offcanvas-nav-background-color, 6%);
            }

            &:hover {
                border: none;
                background: radial-gradient(
                        farthest-corner at top right,
                        rgba(0, 0, 0, .1),
                        rgba(0, 0, 0, 0)
                );
            }
        }

        &.has-label + ul {
            margin-top: -1px;
        }
    }

    &:not(.nav-close-button-empty) {
        .nav-content > .nav-close {
            margin-bottom: -1px;
        }
    }

    .nav-title {
        color: dodgerblue !important;
        & + .nav-close {
            a:not(.has-label) {
                position: absolute;
                width: 45px;
                height: 66px;
                line-height: 66px;
                top: -66px;
                right: 0;
            }
        }
    }

    &.nav-close-button-empty {
        .nav-title {
            padding-right: 55px;
        }
    }

    li.nav-close {
        a:not(.has-label) {
            height: 49px;
        }
    }

    .nav-content > .nav-close:first-child a,
    .nav-title + .nav-close a.has-label,
    li.nav-close a,
    .nav-back a {
        background: darken($hc-offcanvas-nav-background-color, 3%);
        border-top: 1px solid darken($hc-offcanvas-nav-background-color, 7%);
        border-bottom: 1px solid darken($hc-offcanvas-nav-background-color, 7%);

        &:hover {
            background: darken($hc-offcanvas-nav-background-color, 4.3%);
        }
    }

    li.nav-close,
    li.nav-back {
        &:not(:first-child) {
            a {
                margin-top: -1px;
            }
        }
    }

    a.nav-next {
        border-left: 1px solid darken($hc-offcanvas-nav-background-color, 6%);
        border-bottom: 1px solid darken($hc-offcanvas-nav-background-color, 6%);
    }

    .nav-next,
    .nav-back {
        span {
            &::before {
                content: '';
                position: absolute;
                top: 50%;
                left: 50%;
                width: 8px;
                height: 8px;
                margin-left: -2px;
                box-sizing: border-box;
                border-top: 2px solid $hc-offcanvas-nav-text-color;
                border-left: 2px solid $hc-offcanvas-nav-text-color;
                transform-origin: center;
            }
        }
    }

    .nav-next {
        span {
            position: absolute;
            top: 0;
            right: 0;
            left: 0;
            bottom: 0;

            &::before {
                transform: translate(-50%, -50%) rotate(135deg);
            }
        }
    }

    .nav-back {
        span {
            &::before {
                margin-left: 2px;
                transform: translate(-50%, -50%) rotate(-45deg);
            }
        }
    }

    /* Left */

    &.nav-position-left {

        &.nav-open.nav-levels-overlap {
            .nav-wrapper {
                box-shadow: 1px 0 2px rgba(0, 0, 0, .2);
            }
        }
    }

    /* Right */

    &.nav-position-right {

        &.nav-open.nav-levels-overlap {
            .nav-wrapper {
                box-shadow: -1px 0 2px rgba(0, 0, 0, .2);
            }
        }

        .nav-next {
            span {
                &::before {
                    margin-left: 2px;
                    transform: translate(-50%, -50%) rotate(-45deg);
                }
            }
        }

        .nav-back {
            span {
                &::before {
                    margin-left: -2px;
                    transform: translate(-50%, -50%) rotate(135deg);
                }
            }
        }
    }

    /* Top */

    &.nav-position-top {

        &.nav-open {
            .nav-wrapper {
                box-shadow: 0 1px 2px rgba(0, 0, 0, .2);
            }
        }

        .nav-next {
            span {
                &::before {
                    margin-left: 0;
                    margin-right: -2px;
                    transform: translate(-50%, -50%) rotate(-135deg);
                }
            }
        }

        .nav-back {
            span {
                &::before {
                    margin-left: 0;
                    margin-right: -2px;
                    transform: translate(-50%, -50%) rotate(45deg);
                }
            }
        }
    }

    /* Bottom */

    &.nav-position-bottom {

        &.nav-open {
            .nav-wrapper {
                box-shadow: 0 -1px 2px rgba(0, 0, 0, .2);
            }
        }

        .nav-next {
            span {
                &::before {
                    margin-left: 0;
                    margin-right: -2px;
                    transform: translate(-50%, -50%) rotate(45deg);
                }
            }
        }

        .nav-back {
            span {
                &::before {
                    margin-left: 0;
                    margin-right: -2px;
                    transform: translate(-50%, -50%) rotate(-135deg);
                }
            }
        }
    }

    /* Expand & none */

    &.nav-levels-expand,
    &.nav-levels-none {

        ul {
            .nav-wrapper {
                box-shadow: none;
                background: transparent;
            }
        }

        li {

            &.level-open {
                background: darken($hc-offcanvas-nav-background-color, 4%);

                & > .nav-item-wrapper > {

                    a {
                        border-bottom: 1px solid darken($hc-offcanvas-nav-background-color, 8%);

                        &:hover {
                            background: darken($hc-offcanvas-nav-background-color, 3%);
                        }
                    }

                    .nav-next,
                    a > .nav-next {
                        span {
                            &::before {
                                margin-top: -2px;
                                transform: translate(-50%, -50%) rotate(-135deg);
                            }
                        }
                    }
                }
            }
        }

        @for $i from 1 through 5 {
            .nav-wrapper-#{$i} .nav-item-link {
                padding-left: calc(17px + 20px * #{$i});
            }
        }
    }

    /* RTL */

    &.rtl {

        a.nav-next {
            border-left: none;
            border-right: 1px solid darken($hc-offcanvas-nav-background-color, 6%);
        }

        .nav-title + .nav-close a:not(.has-label),
        .nav-close-button span,
        .nav-next,
        .nav-back span {
            left: 0;
            right: auto;
        }

        li {
            &.nav-parent {
                .nav-item-link {

                    &:last-child {
                        padding-left: 58px;
                        padding-right: 17px;
                    }

                    &:not(:last-child) {
                        margin-left: 45px;
                        margin-right: 0;
                    }
                }
            }
        }

        @for $i from 1 through 5 {
            .nav-wrapper-#{$i} li.nav-item .nav-item-link {
                padding-right: calc(17px + 20px * #{$i});
            }
        }
    }
}
