/* Menu
******************************************************************************* */

.menu {
  display: flex;
  background-color: var(--#{$prefix}menu-bg);
  @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
    box-shadow: var(--#{$prefix}menu-box-shadow);
  }

  .app-brand {
    inline-size: 100%;
    padding-inline: calc(calc(#{var(--#{$prefix}menu-vertical-link-padding-x)} * 2.1333));
    .app-brand-text {
      color: var(--#{$prefix}heading-color);
    }
    .layout-menu-toggle {
      position: absolute;
      z-index: 3;
      border: 7px solid var(--#{$prefix}body-bg);
      @include border-radius(50%);
      background-color: var(--#{$prefix}primary);
      inset-inline-start: $menu-width - 1.05rem;
      opacity: 1;

      /* transition: opacity $menu-animation-duration ease-in-out; */
      i {
        block-size: 1.375rem;
        color: var(--#{$prefix}white);
        inline-size: 1.375rem;
        line-height: 1;
        transition: all $menu-animation-duration ease-in-out;
        :dir(rtl) & {
          transform: scaleX(-1);
        }
      }
      @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
        &::before {
          position: absolute;
          z-index: -1;
          display: none;
          border: 1px solid var(--#{$prefix}border-color);
          @include border-radius(50%);
          block-size: 2.25rem;
          clip-path: circle(71% at 0% 50%);
          content: "";
          inline-size: 2.25rem;
          inset-block-start: -.46rem;
          inset-inline-start: -.5rem;
          :dir(rtl) & {
            clip-path: circle(71% at 100% 50%);
          }
          [data-skin="bordered"] & {
            display: block;
          }
        }
      }
      @include media-breakpoint-down(xl) {
        display: none;
        border: 7px solid var(--#{$prefix}paper-bg);
        .layout-menu-expanded & {
          display: block;
        }
      }
    }
  }

  // Sub menu item link bullet
  .menu-sub > .menu-item > .menu-link {
    &::before {
      position: absolute;
      @include border-radius(50%);
      background-color: var(--#{$prefix}gray-400);
      block-size: .375rem;
      content: "";
      inline-size: .375rem;
      inset-inline-start: 1.4375rem;
      .layout-horizontal & {
        inset-inline-start: 1rem;
        @include media-breakpoint-down($menu-collapsed-layout-breakpoint) {
          inset-inline-start: 1.5rem;
        }
      }
    }
  }

  // ? Hide bullet from first child only as we display icon instead (horizontal)
  &.menu-horizontal .menu-inner > .menu-item > .menu-sub > .menu-item > .menu-link{
    padding-inline-start: $menu-horizontal-link-padding-x;
    &::before {
      display: none;
    }
  }
  &.menu-horizontal .menu-sub .menu-item .menu-link {
    padding-inline-start: $menu-horizontal-link-padding-x + $menu-horizontal-menu-level-spacer;
  }

  /* PS Scrollbar */
  .ps {
    &.ps--active-y > .ps__rail-y {
      background: none;
    }
    .ps__rail-y {
      inset-inline: auto .25rem !important;
    }
    .ps__thumb-y,
    .ps__rail-y {
      inline-size: .125rem;
    }

    .ps__rail-y:hover,
    .ps__rail-y:focus,
    .ps__rail-y.ps--clicking,
    .ps__rail-y:hover > .ps__thumb-y,
    .ps__rail-y:focus > .ps__thumb-y,
    .ps__rail-y.ps--clicking > .ps__thumb-y {
      inline-size: .375rem;
    }

    .ps__thumb-y,
    .ps__rail-y.ps--clicking > .ps__thumb-y {
      opacity: .3;
    }
  }
}

/*  Menu link */
.menu-link {
  position: relative;
  display: flex;
  flex: 0 1 auto;
  align-items: center;
  margin: 0;

  /* link hover animation */
  .menu:not(.menu-no-animation) & {
    transition-duration: $menu-animation-duration;
    transition-property: color, background-color, inset-inline-start;
  }
  .menu-item.disabled & {
    cursor: not-allowed;
  }

  > :not(.menu-icon) {
    flex: 0 1 auto;
    opacity: 1;
    .menu:not(.menu-no-animation) & {
      transition: opacity $menu-animation-duration ease-in-out;
    }
  }
}

.menu-inner {
  display: flex;
  align-items: flex-start;
  justify-content: flex-start;
  padding: 0;
  margin: 0;
  block-size: 100%;

  > .menu-item.menu-item-closing .menu-item.open .menu-sub,
  > .menu-item.menu-item-closing .menu-item.open .menu-toggle {
    background-color: transparent;
    color: var(--#{$prefix}menu-color);
  }
}

.menu-inner-shadow {
  position: absolute;
  z-index: 2;
  display: none;
  background: linear-gradient(var(--#{$prefix}menu-bg) 41%, rgba(var(--#{$prefix}menu-bg-rgb), .11) 95%, rgba(var(--#{$prefix}menu-bg-rgb), 0));
  inline-size: 100%;
  inset-block-start: $navbar-height + .35rem;
  pointer-events: none;
  @include media-breakpoint-up($menu-collapsed-layout-breakpoint) {
    block-size: 3rem;
  }
  @include media-breakpoint-down($menu-collapsed-layout-breakpoint) {
    block-size: 1.5rem;
  }
  .layout-navbar-full & {
    inset-block-start: 0;
  }
}

/* Menu item */
.menu-item {
  align-items: flex-start;
  justify-content: flex-start;

  &.menu-item-animating {
    transition: block-size $menu-animation-duration ease-in-out;
  }
}

/* Horizontal Menu
****************************************************************************** */
.menu.menu-horizontal {

  .menu-inner > .menu-item > .menu-link {
    @include border-radius($border-radius);
  }

  .menu-inner > .menu-item.active > .menu-link.menu-toggle{
    background: var(--#{$prefix}menu-active-bg);
    color: var(--#{$prefix}menu-active-color);
  }

  .menu-inner > .menu-item{
    margin-block: $menu-horizontal-link-padding-y;
    margin-inline: 0;
    &:not(:first-child) {
      margin-inline-start: calc($menu-item-spacer + .0625rem);
    }
    &:not(:last-child) {
      margin-inline-end: calc($menu-item-spacer + .0625rem);
    }
    .menu-sub {
      z-index: 1;
      box-shadow: var(--#{$prefix}menu-horizontal-menu-box-shadow);
    }
  }
}

.menu-item,
.menu-header,
.menu-divider,
.menu-block {
  flex: 0 0 auto;
  flex-direction: column;
  padding: 0;
  margin: 0;
  list-style: none;
}
.menu-header {
  opacity: 1;
  transition: opacity $menu-animation-duration ease-in-out;
  .menu-header-text {
    color: var(--#{$prefix}gray-400);
    letter-spacing: .4px;
    text-transform: uppercase;
    white-space: nowrap;
  }
}

/* Menu Icon */
.menu-icon {
  flex-grow: 0;
  flex-shrink: 0;
  block-size: $menu-icon-expanded-font-size;
  font-size: $menu-icon-expanded-font-size;
  inline-size: $menu-icon-expanded-font-size;
  margin-inline-end: $menu-icon-expanded-spacer;
  .menu:not(.menu-no-animation) & {
    transition: margin-inline-end $menu-animation-duration ease;
  }

  .menu-link {
    transition-duration: $menu-animation-duration;
  }
  .menu-toggle::after {
    transition-duration: $menu-animation-duration;
    transition-property: -webkit-transform, transform;
  }
}

.menu-link,
.menu-horizontal-prev,
.menu-horizontal-next {
  color: var(--#{$prefix}menu-color);

  &:hover,
  &:focus {
    color: var(--#{$prefix}menu-hover-color);
  }
}

.menu-item.disabled .menu-link,
.menu-horizontal-prev.disabled,
.menu-horizontal-next.disabled {
  opacity: .6;
}

/* Sub menu */
.menu-sub {
  display: none;
  flex-direction: column;
  padding: 0;
  margin: 0;

  .menu-item.open > & {
    display: flex;
  }
  > .menu-item {
    &.active {
      > .menu-link {
        background-color: transparent;
        color: var(--#{$prefix}heading-color);
        &:not(.menu-toggle)::before {
          box-shadow: 0 0 0 1px var(--#{$prefix}paper-bg);
        }
        &.menu-toggle {
          background-color: var(--#{$prefix}menu-active-toggle-bg);
          color: var(--#{$prefix}menu-color);
        }
      }
    }
  }
}

/* Menu toggle open/close arrow */
.menu-toggle::after {
  position: absolute;
  display: block;
  border: 2px solid;
  block-size: .45em;
  border-block-end: 0;
  border-inline-start: 0;
  content: "";
  inline-size: .45em;
  inset-block-start: 49%;
  transform: translateY(-50%) rotate(45deg);
  :dir(rtl) & {
    transform: translateY(-50%) rotate(-45deg);
  }
}

/* Menu divider */
.menu-divider {
  border: 0;
  border-block-start: 1px solid;
  border-block-start-color: var(--#{$prefix}menu-divider-color);
  inline-size: 100%;
}


// Vertical Menu
// ******************************************************************************

.menu-vertical {
  // overflow: hidden;
  flex-direction: column;

  // menu expand collapse animation
  &:not(.menu-no-animation) {
    transition: inline-size $menu-animation-duration;
  }

  &,
  .menu-block,
  .menu-inner > .menu-item,
  .menu-inner > .menu-header {
    inline-size: var(--#{$prefix}menu-width);
  }

  .menu-inner {
    flex: 1 1 auto;
    flex-direction: column;

    > .menu-item {
      margin-block: var(--#{$prefix}menu-item-spacer);
      margin-inline: 0;
      &.active {
        &::before {
          .layout-wrapper:not(.layout-horizontal) & {
            position: absolute;
            background-color: var(--#{$prefix}primary);
            block-size: 2.6845rem;
            content: "";
            inline-size: .25rem;
            inset-inline-end: 0;
            @include border-top-start-radius($border-radius);
            @include border-bottom-start-radius($border-radius);
          }
        }
        > .menu-link:not(.menu-toggle) {
          background-color: var(--#{$prefix}menu-active-bg);
          color: var(--#{$prefix}menu-active-color);
        }
      }

      /* menu-link spacing */
      .menu-link {
        @include border-radius($border-radius);
        margin-block: 0;
        margin-inline: $menu-vertical-link-margin-x;
      }
    }
  }

  .menu-item .menu-link,
  .menu-block {
    padding-block: var(--#{$prefix}menu-vertical-link-padding-y);
    padding-inline: var(--#{$prefix}menu-vertical-link-padding-x);
  }

  .layout-menu-hover & {
    .menu-inner > .menu-item > .menu-link,
    .menu-inner > .menu-block,
    .menu-inner > .menu-header {
      padding-inline: calc(#{var(--#{$prefix}menu-vertical-link-padding-x)} + #{$caret-width * 2}) calc(#{var(--#{$prefix}menu-vertical-link-padding-x)} + #{$caret-width * 3.2});
    }
  }

  .menu-header {
    position: relative;
    margin-block: $menu-vertical-header-margin-y $menu-vertical-header-margin-y * .5;
    margin-inline: 0;
    padding-block: calc($menu-vertical-link-padding-y * 2);
    padding-inline: calc($menu-vertical-link-padding-x * 2.133);
    &::before {
      position: absolute;
      background-color: var(--#{$prefix}gray-200);
      block-size: 1px;
      content: "";
      inline-size: 1rem;
      inset-block-start: 50%;
      inset-inline-start: 0;
      transition: all $menu-animation-duration ease-in-out;
    }
  }
  .menu-item .menu-link {
    font-size: $menu-font-size;
    min-block-size: 2.625rem;
    > div:not(.badge) {
      overflow: hidden;
      line-height: 1.375rem;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
  }

  .menu-item {
    .menu-toggle {
      padding-inline-end: calc(#{var(--#{$prefix}menu-vertical-link-padding-x)} + #{$caret-width * 3.2});

      &::after {
        inset-inline-end: calc(#{var(--#{$prefix}menu-vertical-link-padding-x)} + .3rem);
        transition: transform $menu-animation-duration;
      }
    }
    &:not(.active):not(.open) .menu-link:hover {
      background-color: var(--#{$prefix}menu-hover-bg);
    }

    &.active > .menu-toggle {
      background-color: var(--#{$prefix}menu-sub-active-bg);
      color: var(--#{$prefix}menu-sub-active-color);
    }
    &.active:not(.open) > .menu-link:not(.menu-toggle)::before {
      /* border: 3px solid var(--#{$prefix}primary-bg-subtle); */
      background-color: var(--#{$prefix}primary);
      block-size: .5rem;
      box-shadow: 0 0 0 3px var(--#{$prefix}primary-bg-subtle);
      inline-size: .5rem;
      inset-inline-start: 1.4rem;
      .layout-horizontal & {
        inset-inline-start: 1.5rem;
      }
    }
  }

  .menu-item.open:not(.menu-item-closing) > .menu-link::after {
    transform: translateY(-50%) rotate(135deg);

    :dir(rtl) & {
      transform: translateY(-50%) rotate(-135deg);
    }
  }

  .menu-divider {
    padding: 0;
    margin-block: $menu-link-spacer-x;
  }

  .menu-sub {
    .menu-item {
      margin-block: calc(var(--#{$prefix}menu-item-spacer) * 2) 0;
      margin-inline: 0;
    }
    .menu-icon {
      .layout-horizontal & {
        @include media-breakpoint-down($menu-collapsed-layout-breakpoint) {
          display: none;
        }
      }
    }
  }

  .layout-horizontal & {
    @include media-breakpoint-down($menu-collapsed-layout-breakpoint) {
      box-shadow: none;
    }
    .menu-item {
      margin-block-start: $menu-item-spacer * 2;
    }
  }

  .menu-horizontal-wrapper {
    flex: none;
  }

  ~ .menu-mobile-toggler{
    display: none;
    .layout-navbar-hidden & {
      position: fixed;
      z-index: 1067;
      display: flex;
      align-items: center;
      justify-content: center;
      background-color: var(--#{$prefix}secondary);
      inset-block-end: calc(#{$container-padding-x} * 2);
      inset-inline-start: $container-padding-x;
    }
  }

  // Levels
  $menu-first-level-spacer: $menu-vertical-link-padding-x + $menu-icon-expanded-width + $menu-icon-expanded-spacer;

  .menu-sub .menu-link {
    padding-inline-start: $menu-first-level-spacer;
  }

  // Menu levels loop for padding left/right
  @for $i from 2 through $menu-max-levels {
    $selector: "";

    @for $l from 1 through $i {
      $selector: "#{$selector} .menu-sub";
    }
    .layout-wrapper:not(.layout-horizontal) & {
      .menu-inner > .menu-item {
        #{$selector} {
          .menu-link {
            padding-inline-start: $menu-first-level-spacer + ($menu-vertical-menu-level-spacer * ($i)) - .8;
            &::before {
              inset-inline-start: $menu-icon-expanded-left-spacer + ($menu-vertical-menu-level-spacer * $i) - 1;
            }
          }
          & > .menu-item.active > {
            .menu-link {
              &::before {
                inset-inline-start: $menu-icon-expanded-left-spacer + ($menu-vertical-menu-level-spacer * $i) - 1.01;
              }
            }
          }
        }
      }
    }
  }
}

/* Vertical Menu Collapsed
******************************************************************************* */

@mixin layout-menu-collapsed() {
  inline-size: var(--#{$prefix}menu-collapsed-width);

  .menu-inner > .menu-item {
    inline-size: var(--#{$prefix}menu-collapsed-width);
  }

  .menu-inner > .menu-header,
  .menu-block {
    position: relative;
    inline-size: var(--#{$prefix}menu-width);
    margin-inline-start: var(--#{$prefix}menu-collapsed-width);
    padding-inline: $menu-icon-expanded-spacer calc(calc(var(--#{$prefix}menu-vertical-link-padding-x) * 2) - $menu-icon-expanded-spacer);
    text-indent: -9999px;
    text-overflow: ellipsis;
    white-space: nowrap;
    .menu-header-text {
      overflow: hidden;
      opacity: 0;
    }

    &::before {
      position: absolute;
      display: block;
      content: "";
      inline-size: calc(var(--#{$prefix}menu-collapsed-width) * .22);
      inset-block: 1.1875rem;
      inset-inline-start: calc(-1 * calc(var(--#{$prefix}menu-collapsed-width) * .61));
      text-align: center;
    }
  }

  /* Custom for sneat only */
  .menu-block {
    &::before {
      block-size: .125rem;
    }
  }
  .menu-inner > .menu-item div:not(.menu-block) {
    overflow: hidden;
    opacity: 0;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .menu-inner > .menu-item > .menu-sub,
  .menu-inner > .menu-item.open > .menu-sub {
    display: none;
  }
  .menu-inner > .menu-item > .menu-toggle::after {
    display: none;
  }

  &:not(.layout-menu-hover) {
    .menu-inner > .menu-item > .menu-link,
    .menu-inner > .menu-block,
    .menu-inner > .menu-header {
      padding-inline: calc(#{$menu-vertical-link-padding-x} - 1px);
    }
  }

  .menu-inner > .menu-item > .menu-link .menu-icon {
    margin-inline-end: 0;
    text-align: center;
  }
}

/* Only for menu example */
.menu-collapsed:not(:hover) {
  @include layout-menu-collapsed();
}

/* Horizontal
******************************************************************************* */

.menu-horizontal {
  flex-direction: row;
  inline-size: 100%;

  .menu-inner {
    overflow: hidden;
    flex: 0 1 100%;
    flex-direction: row;

    .menu-item {
      &:not(.menu-item-closing) > .menu-sub {
        background-color: var(--#{$prefix}menu-bg);
      }
      &:hover > .menu-link {
        background-color: var(--#{$prefix}menu-hover-bg);
        color: var(--#{$prefix}menu-hover-color);
      }
    }
  }

  .menu-item .menu-link {
    padding-block: $menu-horizontal-link-padding-y;
    padding-inline: $menu-horizontal-link-padding-x;
  }

  .menu-item.active > .menu-link:not(.menu-toggle) {
    background: var(--#{$prefix}menu-horizontal-active-bg);
    color: var(--#{$prefix}primary);
    &::before{
      background-color: var(--#{$prefix}primary);
      box-shadow: 0 0 0 3px var(--#{$prefix}primary-bg-subtle);
    }
  }

  .menu-item .menu-toggle {
    padding-inline-end: calc(#{$menu-horizontal-link-padding-x} + #{$caret-width * 3.2});

    &::after {
      inset-block-start: 47%;
      inset-inline-end: calc(#{$menu-horizontal-link-padding-x} + #{.15rem});
    }
  }

  .menu-inner > .menu-item > .menu-toggle {
    &::after {
      transform: translateY(-50%) rotate(135deg);
      :dir(rtl) & {
        transform: translateY(-50%) rotate(-135deg);
      }
    }
    &::before {
      position: absolute;
      z-index: 2;
      block-size: $menu-horizontal-link-padding-y;
      content: "";
      inline-size: 100%;
      inset-block-start: 100%;
      inset-inline-start: 0;
      pointer-events: auto;
    }
  }
  .menu-inner > .menu-item > .menu-sub {
    margin-block-start: $menu-horizontal-link-padding-y;
    .menu-sub {
      margin-block: 0;
      margin-inline: $menu-horizontal-spacer-x;
    }
  }
  .menu-inner > .menu-item:not(.menu-item-closing).open .menu-item.open {
    position: relative;
  }

  .menu-sub {
    position: absolute;
    inline-size: $menu-sub-width;
    padding-block: $menu-horizontal-item-spacer;
    padding-inline: 0;
    .menu-item {
      /* padding-inline: $menu-link-spacer-x; */
      &:not(:last-child) {
        margin-block-end: .125rem;
      }
      &.open .menu-link > div::after {
        position: absolute;
        z-index: 2;
        block-size: 100%;
        content: "";
        inline-size: 1.0625rem;
        inset-inline-end: -1.0625rem;
        pointer-events: auto;
      }
    }

    .menu-sub {
      position: absolute;
      inline-size: 100%;
      inset-block-start: 0;
      inset-inline-start: 100%;
    }

    .menu-link {
      padding-block: $menu-horizontal-menu-link-padding-y;
    }
  }

  .menu-inner > .menu-item {
    .menu-sub {
      @include border-radius($border-radius);
      .menu-sub {
        .menu-link {
          padding-inline-start: $menu-horizontal-menu-level-spacer;
        }
      }
    }
  }

  &:not(.menu-no-animation) .menu-inner .menu-item.open .menu-sub {
    animation: menuDropdownShow $menu-animation-duration ease-in-out;
  }

  @include media-breakpoint-down(lg) {
    & {
      display: none;
    }
  }
}

.menu-horizontal-wrapper {
  overflow: hidden;
  flex: 0 1 100%;
  inline-size: 0;

  .menu:not(.menu-no-animation) & .menu-inner {
    transition: margin $menu-animation-duration;
  }
}

.menu-horizontal-prev,
.menu-horizontal-next {
  position: relative;
  display: block;
  flex: 0 0 auto;
  inline-size: $menu-control-width;

  &::after {
    position: absolute;
    display: block;
    border: 1px solid;
    block-size: $menu-control-arrow-size;
    border-block-start: 0;
    content: "";
    inline-size: $menu-control-arrow-size;
    inset-block-start: 50%;
    inset-inline-start: 50%;
  }

  &.disabled {
    cursor: not-allowed;
  }
}

.menu-horizontal-prev::after {
  border-inline-end: 0;
  transform: translate(0, -50%) rotate(45deg);

  :dir(rtl) & {
    transform: translate(0, -50%) rotate(-45deg);
  }
}

.menu-horizontal-next::after {
  border-inline-start: 0;
  transform: translate(50%, -50%) rotate(315deg);

  :dir(rtl) & {
    transform: translate(-50%, -50%) rotate(-315deg);
  }
}

@include keyframes(menuDropdownShow) {
  0% {
    opacity: 0;
    transform: translateY(-.5rem);
  }

  100% {
    opacity: 1;
    transform: translateY(0);
  }
}
