// Reset
.fleximenu, .fleximenu-sub {
  margin: 0;
  padding: 0;
  list-style: none;
}

.fleximenu-link {
  text-decoration: none;
  color: currentColor;
  outline: none;
}

.fleximenu-item {
  padding: 0;
  margin: 0;
}

// Variables
.fleximenu-box {
  --flexi-menu_offset_block: 0;
  --flexi-menu_offset_inline: 0;
  --flexi-menu_offset: calc(var(--flexi-menu_offset_block) * 1px) calc(var(--flexi-menu_offset_inline) * 1px);

  --flexi-menu_padding_inline: 0;
  --flexi-menu_padding_block: 8;
  --flexi-menu_padding: calc(var(--flexi-menu_padding_block) * 1px) calc(var(--flexi-menu_padding_inline) * 1px);

  --flexi-menu_bg: #ffffff;
  --flexi-menu_min_w: 10;
  --flexi-menu-w: auto;
  --flexi-menu-h: auto;

  --flexi-items_gap: 0;

  --flexi-menu-transition: 0.25s ease;
  --flexi-menu-shadow: rgba(0, 0, 0, 0) 0 0 0 0, rgba(0, 0, 0, 0) 0 0 0 0, rgba(0, 0, 0, 0.1) 0 1px 3px 0, rgba(0, 0, 0, 0.1) 0 1px 2px -1px;

  --flexi-menu_radius: 4;

  --flexi-submenu_offset: 8;

  --flexi-link_gap: 8;
  --flexi-link_padding_inline: 16;
  --flexi-link_padding_block: 8;
  --flexi-link_padding: calc(var(--flexi-link_padding_block) * 1px) calc(var(--flexi-link_padding_inline) * 1px);
  --flexi-link_hover_bg: #F3F4F6;

  --flexi-icon_size: 16;
  --flexi-icon_box: 16;
  --flexi-icon_color: #383838;
  --flexi-icon_bg: rgba(255, 255, 255, 0);

  --flexi-label_size: 16;
  --flexi-label_color: #383838;
  --flexi-label_padding_inline: 0;
  --flexi-label_padding_block: 0;
  --flexi-label_padding: calc(var(--flexi-label_padding_block) * 1px) calc(var(--flexi-label_padding_inline) * 1px);
  --flexi-label_weight: 400;
  --flexi-label_style: normal;

  box-sizing: border-box;

  & * {
    box-sizing: border-box;
  }
}

// Base
.fleximenu-box {
  position: absolute;
  border-style: none;
  border-color: initial;
  border-width: 0;
  display: inline-block;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  z-index: 1;
  margin: var(--flexi-menu_offset);

  &.-absolute {
    position: absolute;
  }

  &.-static {
    position: static;
  }

  &.-active {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
  }

  &.-shadow {
    .fleximenu,
    .fleximenu-sub {
      box-shadow: var(--flexi-menu-shadow);
    }
  }

  &.-icon-shadow {
    .fleximenu-icon {
      box-shadow: var(--flexi-menu-shadow);
    }
  }


  &.-min-width {
    .fleximenu,
    .fleximenu-sub {
      min-width: calc(var(--flexi-menu_min_w) * 1px);
    }
  }


  &.-rounded {
    .fleximenu,
    .fleximenu-sub {
      border-radius: calc(var(--flexi-menu_radius) * 1px);
    }

    .fleximenu-icon {
      border-radius: calc(var(--flexi-menu_radius) * 1px);
    }

    .fleximenu--icon .fleximenu-label {
      border-radius: calc(var(--flexi-menu_radius) * 1px);
    }
  }

}

.fleximenu,
.fleximenu-sub {
  position: relative;
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  min-width: auto;
  max-width: max-content;
  width: auto;
  padding: var(--flexi-menu_padding);
  z-index: 1;
  background-color: var(--flexi-menu_bg);
  gap: calc(var(--flexi-items_gap) * 1px);
}


.fleximenu-item {
  position: relative;
}

// Li has submenu
.fleximenu-item--has-sub {
  --_hover_bg: var(--flexi-link_hover_bg);

  > .fleximenu-link:after {
    --_size: calc(var(--flexi-label_size) * 1px);
    --_color: var(--flexi-label_color);
    content: '';
    width: calc(var(--_size) / 2 - 1px);
    height: calc(var(--_size) / 2 - 1px);
    transform-origin: center;
    transform: rotate(45deg);
    border-top: 1px solid var(--_color);
    border-right: 1px solid var(--_color);
    border-bottom: 0 transparent;
    border-left: 0 transparent;
    margin-inline: auto calc(var(--_size) / 2 - 1px);
  }

  &:hover,
  &.-open {

    > .fleximenu-link {
      background-color: var(--_hover_bg);

      .fleximenu-label,
      .fleximenu-icon {
        background-color: var(--_hover_bg);
      }
    }

    > .fleximenu-sub {
      opacity: 1;
      visibility: visible;
      pointer-events: auto;
    }
  }

}

.fleximenu-link {
  --_gap: calc(var(--flexi-link_gap) * 1px);
  --_hover-bg: var(--flexi-link_hover_bg);
  --_transition: var(--flexi-menu-transition);

  position: relative;
  display: flex;
  gap: var(--_gap);
  align-items: center;
  transition: background-color var(--_transition);
  padding: var(--flexi-link_padding);
  line-height: 1;

  &:hover {
    background-color: var(--_hover-bg);

    .fleximenu-label,
    .fleximenu-icon {
      background-color: var(--_hover-bg);
    }
  }

}


.fleximenu-icon {
  --_size: calc(var(--flexi-icon_size) * 1px);
  --_box: calc(var(--flexi-icon_box) * 1px);
  --_color: var(--flexi-icon_color);
  --_bg: var(--flexi-icon_bg);
  font-size: var(--_size);
  inline-size: var(--_box);
  block-size: var(--_box);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--_color);
  background-color: var(--_bg);
  img {
    width: var(--_size);
    height: var(--_size);
  }
}


.fleximenu-label {
  --_size: calc(var(--flexi-label_size) * 1px);
  --_color: var(--flexi-label_color);
  --_padding: var(--flexi-label_padding);
  --_weight: var(--flexi-label_weight);
  --_style: var(--flexi-label_style);

  white-space: nowrap;
  font-size: var(--_size);
  color: var(--_color);
  padding: var(--_padding);
  font-weight: var(--_weight);
  font-style: var(--_style);

}

.fleximenu-sub {
  position: absolute;
  top: 0;
  left: calc(100% + calc(var(--flexi-submenu_offset) * 1px));
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  z-index: 2;

  &:after {
    content: '';
    position: absolute;
    height: calc(100% + calc(var(--flexi-submenu_offset) * 1px * 2));
    width: calc(100% + calc(var(--flexi-submenu_offset) * 1px * 2));
    top: calc((var(--flexi-submenu_offset) * 1px) * -1);
    left: calc((var(--flexi-submenu_offset) * 1px) * -1);
    z-index: -1;
  }

  &.-opposite-x {
    right: calc(100% + calc(var(--flexi-submenu_offset) * 1px));
    left: auto;

    .fleximenu-sub {
      right: calc(100% + calc(var(--flexi-submenu_offset) * 1px));
      left: auto;
    }
  }

  &.-opposite-y {
    top: auto;
    bottom: calc(calc(var(--flexi-submenu_offset) * 1px) * -1);
  }

}

// Reverse
.fleximenu.-reverse {
  .fleximenu-link {
    flex-direction: row-reverse;

    &:after {
      transform: rotate(225deg);
      margin-inline: calc(var(--_size) / 2 - 1px) auto;
    }
  }
}

// Position
.fleximenu-box {

  &.-right {
    top: 50%;
    right: 0;
    transform: translateY(-50%);
  }

  &.-right-bottom {
    bottom: 0;
    right: 0;
  }

  &.-right-top {
    top: 0;
    right: 0;
  }

  &.-left {
    top: 50%;
    left: 0;
    transform: translateY(-50%);
  }

  &.-left-bottom {
    bottom: 0;
    left: 0;
  }

  &.-left-top {
    top: 0;
    left: 0;
  }

}

// Icon Style
.fleximenu--icon {
  min-width: auto;

  .fleximenu-sub {
    min-width: auto;
  }

  .fleximenu-item--has-sub {
    > .fleximenu-link .fleximenu-label,
    > .fleximenu-link:after {
      display: none;
    }
  }

  .fleximenu-label {
    --_padding: var(--flexi-label_padding);
    position: absolute;
    top: 0;
    left: 0;
    opacity: 0;
    visibility: hidden;
    padding: var(--_padding);
    height: 100%;
    display: flex;
    align-items: center;
  }

  .fleximenu-link:hover .fleximenu-label {
    left: calc(100% + calc(var(--flexi-link_gap) * 1px));
    opacity: 1;
    visibility: visible;
  }

  .fleximenu-label.-active {
    left: calc(100% + calc(var(--flexi-link_gap) * 1px));
    opacity: 1;
    visibility: visible;
  }

  .fleximenu-sub.-opposite-x .fleximenu-link:hover .fleximenu-label {
    left: auto;
    right: calc(100% + calc(var(--flexi-link_gap) * 1px));
  }

  &.-label-opposite > .fleximenu-item .fleximenu-link:hover .fleximenu-label {
    left: auto;
    right: calc(100% + calc(var(--flexi-link_gap) * 1px));
  }

  &.-label-opposite > .fleximenu-item .fleximenu-label.-active {
    left: auto;
    right: calc(100% + calc(var(--flexi-link_gap) * 1px));
  }

}

// Inline Style
.fleximenu--inline {
  flex-direction: row;

  > .fleximenu-item--has-sub {
    > .fleximenu-link .fleximenu-label {
      display: inline;
    }

    > .fleximenu-link:after {
      transform: rotate(135deg);
    }

    > .fleximenu-sub {
      left: auto;
      top: calc(100% + calc(var(--flexi-submenu_offset) * 1px));

      &.-opposite-y {
        top: auto;
        bottom: calc(100% + calc(var(--flexi-submenu_offset) * 1px));
      }

      &.-opposite-x {
        right: 0;
        left: auto;
      }
    }

    &:hover,
    &.-open {
      > .fleximenu-link .fleximenu-label {
        position: static;
        opacity: 1;
        visibility: visible;
      }
    }
  }

  > .fleximenu-item > .fleximenu-link:hover .fleximenu-label {
    position: static;
  }

  > .fleximenu-item > .fleximenu-link:hover .fleximenu-label {
    position: static;
  }

  > .fleximenu-item > .fleximenu-link .fleximenu-label.-active {
    position: static;
  }

}