// 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: 160;
  --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-icon_rotate: 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;
  }

  ul, ul ul, ul ul ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li {
    padding: 0;
    margin: 0;
  }

  a {
    text-decoration: none;
    color: currentColor;
    outline: none;
    cursor: pointer;
  }


}

// Base
.fleximenu-box {
  position: fixed;
  border-style: none;
  border-color: initial;
  border-width: 0;
  display: inline-block;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  z-index: 1;
  margin-block: calc(var(--flexi-menu_offset_block) * 1px) !important;
  margin-inline: calc(var(--flexi-menu_offset_inline) * 1px) !important;

  &.-absolute {
    position: absolute;
  }

  &.-relative {
    position: relative;
  }

  &.-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);
}


li.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;
    }
  }

}

a.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);
  transform-origin: center;

  img,
  span {
    --_flip: 1;
    transform: rotate(calc(var(--flexi-icon_rotate) * 1deg)) scale(var(--_flip));

    &.-flip-horizontal {
      --_flip: -1, 1;
    }

    &.-flip-vertical {
      --_flip: 1, -1;
    }

    &.-flip-both {
      --_flip: -1, -1;
    }
  }

  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%);

    &.-out {
      transform: translateY(-50%) translateX(100%);
    }
  }

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

    &.-out {
      transform: translateX(100%);
    }
  }

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

    &.-out {
      transform: translateX(100%);
    }
  }

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

    &.-out {
      transform: translateX(-100%) translateY(-50%);
    }
  }

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

    &.-out {
      transform: translateX(-100%);
    }
  }

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

    &.-out {
      transform: translateX(-100%);
    }
  }

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

    &.-out {
      transform: translateX(-50%) translateY(-100%);
    }
  }

  &.-bottom {
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);

    &.-out {
      transform: translateX(-50%) translateY(100%);
    }
  }

}

// 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;
    background-color: var(--_hover-bg);
  }

  .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;
  }

}

// Dialog

html:has(.fleximenu-dialog[open]),
body:has(.fleximenu-dialog[open]) {
  overflow: hidden;
  scrollbar-gutter: stable;
}

.fleximenu-dialog {
  --flexi-dialog_border_width: 0;
  --flexi-dialog_border_color: #383838;
  --flexi-dialog_max_width: 550;
  --flexi-dialog_max_height: 450;
  --flexi-dialog_radius: 4;
  --flexi-dialog_backdrop: rgba(0, 0, 0, 0.2);
  --flexi-dialog_close: #000000;

  border-width: calc(var(--flexi-dialog_border_width) * 1px);
  border-color: var(--flexi-dialog_border_color);
  max-width: calc(var(--flexi-dialog_max_width) * 1px);
  max-height: calc(var(--flexi-dialog_max_height) * 1px);
  border-radius: calc(var(--flexi-dialog_radius) * 1px);

  &[open] {
    display: inline-flex;
  }

  &.-shadow {
    box-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;
  }

  &::backdrop {
    background-color: var(--flexi-dialog_backdrop);
  }

  .fleximenu-dialog-close {
    position: sticky;
    top: 0;
    background-color: transparent;
    padding: 0;
    border: none;
    width: 1rem;
    height: 1rem;
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
    transform: translateY(-100%) translateX(100%);
    &:after,
    &:before {
      content: '';
      position: absolute;
      width: 0.8125rem;
      height: 1px;
      background-color: var(--flexi-dialog_close);
      top: 50%;
      left: 50%;
      transform-origin: center;
      transition: opacity 0.15s ease-in-out;
      opacity: 0.75
    }

    &:hover {
      &:after,
      &:before {
        opacity: 1;
      }
    }

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

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

  .fleximenu-dialog-content {
    flex: 1;
    p:first-of-type {
      margin-top: 0;
    }
    p:last-of-type {
      margin-bottom: 0;
    }
  }


}