@import (reference) '../style/variables.less';

.@{prefix}-menu {
  position: fixed;
  z-index: 100;
  top: 0;
  left: 0;
  bottom: 0;
  width: @s-menu-width;
  background-color: #f2f5fa;
  box-sizing: border-box;
  transition: left 0.3s;

  &[data-hidden] {
    display: none;
  }

  @media @mobile {
    left: -@s-menu-mobile-width;
    top: @s-mobile-nav-height;
    display: block !important;
    width: @s-menu-mobile-width;
    background-color: #fff;

    &[data-mobile-show] {
      left: 0;
    }
  }

  // shadow
  &::after {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    display: block;
    width: 20px;
    background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.03));

    // use border on mobile devices
    @media @mobile {
      width: 1px;
      background: @c-border;
    }
  }

  &-header {
    position: relative;
    padding-top: 40px;
    text-align: center;
    border-bottom: 1px solid @c-border;

    @media @mobile {
      display: none;
    }

    .@{prefix}-menu-logo {
      display: inline-block;
      width: 66px;
      height: 65px;
      background: url(@img-logo) no-repeat 0 / contain;
    }

    h1 {
      margin: 10px 0 0;
      color: @c-heading;
      font-weight: 500;
      line-height: 1.40625;
    }

    p {
      margin: 0 0 5px;
      color: lighten(@c-secondary, 10%);

      // badges
      > object[data^='https://img.shields.io'] {
        max-height: 20px;
      }

      + p {
        margin-bottom: 10px;
      }
    }
  }

  &-doc-locale:not(:empty) {
    display: none;
    padding: 16px 0;
    text-align: center;
    border-bottom: 1px solid @c-border;

    @media @mobile {
      display: block;
    }
  }

  &-inner {
    width: 100%;
    height: 100%;
    overflow: auto;
    overscroll-behavior: contain;

    // common list styles
    ul {
      list-style: none;
      margin: 0;
      padding: 0;
      font-size: 16px;

      li {
        a,
        > span {
          position: relative;
          display: block;
          padding-right: 24px;
          color: @c-heading;
          line-height: 2.4;
          text-decoration: none;
          outline: none;
          transition: color 0.3s, background 0.3s;

          span {
            display: block;
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
          }

          &:hover,
          &.active {
            color: @c-primary;
          }

          &::before {
            content: '';
            position: absolute;
            top: 50%;
            left: -10px;
            margin-top: -2.5px;
            display: inline-block;
            width: 5px;
            height: 5px;
            background-color: @c-primary;
            border-radius: 50%;
            opacity: 0;
            transition: transform 0.2s, opacity 0.2s;
            transform: scale(0) translateX(-10px);
          }
        }

        &.active a,
        a.active {
          &::before {
            opacity: 1;
            transform: scale(1) translateX(0);
          }
        }

        // level larger, offset larger, font size smaller
        ul {
          font-size: 0.9em;
          padding-left: 1em;
        }
      }
    }

    // 1-level list styles
    > ul {
      > li > a {
        line-height: 2.875;

        &:not([href]) {
          padding-top: 24px;
          line-height: 1;
          font-weight: 500;
          color: @c-heading !important;
          background: transparent !important;
          cursor: default;
        }
      }

      > li:first-child > a:not([href]) {
        padding-top: 0;
      }
    }

    // n-level list styles
    > ul ul {
      a {
        color: @c-secondary;

        &.active {
          color: @c-primary;
        }
      }
    }

    .@{prefix}-menu-mobile-area {
      display: none;
      padding-bottom: 16px;
      margin-bottom: 16px;
      text-align: center;
      border-bottom: 1px solid @c-border;

      @media @mobile {
        display: block;
      }
    }

    // mobile nav list
    .@{prefix}-menu-nav-list {
      padding: 16px 0;

      > li > a,
      > li > span {
        padding-right: 0;
        line-height: 2.4;

        ul {
          padding-left: 0;

          a {
            padding-right: 0;
            font-size: 90%;
          }
        }
      }
    }

    // menu list
    .@{prefix}-menu-list {
      padding: 8px 0;
      margin-bottom: 40px;

      > li > a {
        @c-active-bg: #e8ecf4;

        padding-left: 28px;

        &.active {
          background: linear-gradient(to left, #e8ecf4, rgba(232, 236, 244, 0));
        }

        ~ ul {
          margin-top: 8px;
          margin-left: 28px;
        }

        @media @mobile {
          padding-left: 16px;

          ~ ul {
            margin-left: 16px;
          }
        }
      }
    }
  }

  &[data-mode='site'] {
    &::after {
      width: 1px;
      background: @c-border;
    }

    .@{prefix}-menu-list {
      padding: 0;

      > li > a {
        position: relative;

        &::after {
          content: '';
          position: absolute;
          top: 0;
          bottom: 0;
          right: 0;
          display: block;
          width: 3px;
          background-color: @c-primary;
          visibility: hidden;
          opacity: 0;
          transition: all 0.3s;
          border-radius: 1px;
        }

        &.active {
          z-index: 1;
          background: linear-gradient(to left, #f8faff, rgba(248, 250, 255, 0));

          &::after {
            opacity: 1;
            visibility: visible;
          }
        }
      }
    }

    @media @desktop {
      top: @s-nav-height;
      width: @s-site-menu-width;
      padding-top: 50px;
      background: transparent;

      .@{prefix}-menu-nav,
      .@{prefix}-menu-header {
        display: none;
      }

      .@{prefix}-menu-list > li > a {
        padding-left: 58px;

        ~ ul {
          margin-left: 58px;
        }
      }
    }
  }
}
