// Site navigation desktop layout
// The main layout for the website navigation, for a desktop devices only.

// Settings
$absolute-navigation: true;
$use-dropdown-bubble: true;
$use-dropdown-toggle-animation: true;

// CSS variables
// These can be adjusted with media queries for in-between breakpoints
:root {
  // Dimensions, gaps and spacings
  --border-radius-sub-menu: 0;
  --box-shadow-navigation-static: 0 0 10px rgba(84, 87, 115, .1);
  --dropdown-toggle-size: 12px;
  --gap-dropdown: 1rem;
  --gap-between-dropdown-toggle: 1.5rem;
  --padding-main-level-vertical: .6rem;
  --padding-main-level-horizontal: 2rem;
  --padding-sub-menu-vertical: .6rem;
  --padding-sub-menu-horizontal: 1.5rem;
  --width-sub-menu: 22rem;

  // Colors
  --color-background-nav-desktop: var(--color-white);
  --color-background-sub-menu: var(--color-white);
  --color-border-sub-menu: rgba(41, 44, 61, .05);
  --color-dropdown-toggle: var(--color-valhalla);
  --color-sub-menu: var(--color-valhalla);
  --color-hover-main-level: var(--color-white);
  --color-hover-sub-menu: var(--color-valhalla);
  --color-main-level: var(--color-white);
  --color-current: var(--color-main);

  // Font styles
  --font-size-main-level: 17px;
  --font-size-sub-menu: 16px;
  --font-weight-main-level: var(--font-weight-bold);
  --font-weight-sub-menu: var(--font-weight-regular);
}

// General navigation resets
.site-header ul {
  list-style: none;
}

@media only screen and (min-width: $width-max-mobile) {
  .nav-container {
    @if $absolute-navigation == false {
      background-color: var(--color-background-nav-desktop);
      box-shadow: var(--box-shadow-navigation-static);
      position: relative;
      z-index: 222;
    }

    @if $absolute-navigation == true {
      background-color: transparent;
      position: absolute;
      width: 100%;
    }
  }

  @media only screen and (max-width: $width-max-mobile) {
    ul li:focus > ul,
    ul li:hover > ul {
      display: block;
    }
  }

  // Disable animations on IE10 + IE11
  @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
    // Enable hovers
    ul li:focus > ul,
    ul li:hover > ul {
      display: block;
    }
  }

  // Need to use display: none here to make sure mobile nav-toggle is visually hidden on desktop
  /* stylelint-disable a11y/no-display-none */
  .nav-toggle {
    display: none;
  }
  /* stylelint-enable */

  // Navigation wrapper
  .nav-primary {
    padding-bottom: 0;
    padding-top: 0;
  }

  // Navigation unordered list wrapper element
  .menu-items {
    align-items: center;
    background-color: transparent;
    display: flex;
    margin: 0;
    padding: 0;
    position: relative;
  }

  // Navigation list item
  .menu-item {
    margin: 0;
    position: relative;
  }

  // Menu items
  .menu-item > a {
    align-items: center;
    color: var(--color-main-level);
    display: inline-flex;
    font-size: var(--font-size-main-level);
    font-weight: var(--font-weight-main-level);
    padding-bottom: var(--padding-main-level-vertical);
    padding-left: var(--padding-main-level-horizontal);
    padding-right: var(--padding-main-level-horizontal);
    padding-top: var(--padding-main-level-vertical);
  }

  .menu-item .sub-menu a {
    align-items: center;
    color: var(--color-sub-menu);
    display: flex;
    font-size: var(--font-size-sub-menu);
    font-weight: var(--font-weight-sub-menu);
    line-height: 1.5;
    padding-bottom: var(--padding-sub-menu-vertical);
    padding-left: var(--padding-sub-menu-horizontal);
    padding-right: var(--padding-sub-menu-horizontal);
    padding-top: var(--padding-sub-menu-vertical);
  }

  // Current menu item color
  .menu-item.current-menu-parent > a,
  .menu-item.current-menu-item > a {
    color: var(--color-current);
  }

  // Let's make space for the nav-toggle/arrow
  .menu-item.menu-item-has-children a {
    padding-bottom: 0;
    padding-right: var(--gap-between-dropdown-toggle);
    padding-top: 0;
    transition: padding .2s cubic-bezier(.19, 1, .22, 1), background-color .2s cubic-bezier(.19, 1, .22, 1);
  }

  .menu-item > a:hover,
  .menu-item > a:focus {
    color: var(--color-hover-main-level);
  }

  .menu-item .sub-menu a:hover,
  .menu-item .sub-menu a:focus {
    color: var(--color-hover-sub-menu);
  }

  // Create animation illusion
  /* stylelint-disable no-descending-specificity */
  .sub-menu.toggled-on a,
  .sub-menu.toggled-on .sub-menu a,
  .menu-item.menu-item-has-children:hover .sub-menu a,
  .menu-item.menu-item-has-children:focus .sub-menu a {
    padding-bottom: var(--padding-sub-menu-vertical);
    padding-top: var(--padding-sub-menu-vertical);
  }
  /* stylelint-enable */

  .nav-primary > ul:first-of-type > .menu-item-has-children:focus::before,
  .nav-primary > ul:first-of-type > .menu-item-has-children:hover::before {
    transform: scale(1);
    transition: all .2s cubic-bezier(.19, 1, .22, 1);
  }

  // Dropdowns
  .sub-menu {
    background-color: var(--color-background-sub-menu);
    border-bottom: 1px solid var(--color-border-sub-menu);
    border-bottom-left-radius: var(--border-radius-sub-menu);
    border-bottom-right-radius: var(--border-radius-sub-menu);
    border-left: 1px solid var(--color-border-sub-menu);
    border-right: 1px solid var(--color-border-sub-menu);
    border-top-left-radius: var(--border-radius-sub-menu);
    border-top-right-radius: var(--border-radius-sub-menu);
    box-shadow: 0 25px 20px -10px rgba(5, 4, 25, .05);
    left: 5%;
    margin-left: 0;
    margin-top: var(--gap-dropdown);
    opacity: 0;
    padding-bottom: .5rem;
    padding-left: 0;
    padding-top: .5rem;
    position: absolute;
    top: -9999px;
    transition: padding .2s cubic-bezier(.19, 1, .22, 1);
    visibility: hidden;
    width: var(--width-sub-menu);
    z-index: 9;

    // All dropdowns in level 2 and after
    .sub-menu {
      left: 100%;
      margin-left: 0;
      margin-top: -5px;
      top: 0;
    }

    li {
      float: none;
      padding: 0;
      width: var(--width-sub-menu);
    }
  }

  // This is where the magic happens
  .menu-item-has-children > .sub-menu.toggled-on,
  .menu-item-has-children:focus > .sub-menu,
  .menu-item-has-children:hover > .sub-menu {
    // If you want to use "out"-animation, add this:
    // .menu-item-has-children.hover-intent > .sub-menu {
    opacity: 1;
    top: 100%;
    transform: translateY(0%);
    visibility: visible;
    z-index: 1;
  }

  .menu-item-has-children .sub-menu.toggled-on .sub-menu,
  .menu-item-has-children .sub-menu .sub-menu.toggled-on,
  .menu-item-has-children:focus .sub-menu .sub-menu,
  .menu-item-has-children:hover .sub-menu .sub-menu {
    margin-top: -5px;
    top: 0;
    z-index: 10;
  }

  // Sub menu items that have items under them
  .menu-item.menu-item-has-children {
    align-items: center;
    display: flex;
    justify-content: space-between;
    margin-right: .8rem;
    position: relative;

    // Add a pseudo element to fill the gap
    // between menu item and sub menu to help hovering
    &::after {
      content: '';
      display: block;
      height: var(--gap-dropdown);
      position: absolute;
      top: 100%;
      width: 100%;
    }
  }

  // Toggle icon dimensions on desktop
  .dropdown-toggle svg {
    height: var(--dropdown-toggle-size);
    width: var(--dropdown-toggle-size);

    @if $use-dropdown-toggle-animation == true {
      transition: all .35s cubic-bezier(.19, 1, .22, 1);
    }
  }

  // Main level toggle icon
  .dropdown-toggle.toggled-on svg {
    transform: rotateX(180deg);
  }

  .dropdown-toggle {
    align-items: center;
    background-color: transparent;
    border: 0;
    color: var(--color-dropdown-toggle);
    display: inline-flex;
    justify-content: center;
    padding: 0;
  }

  // Sub-menu toggle icon
  .sub-menu .dropdown-toggle {
    width: 3rem;
  }

  .sub-menu .dropdown-toggle svg {
    transform: rotate(-90deg) rotateX(0deg);
  }

  .sub-menu .dropdown-toggle.toggled-on svg {
    transform: rotate(-90deg) rotateX(180deg);
  }

  // Smooth animation
  @if $use-dropdown-toggle-animation == true {
    .menu-item.menu-item-has-children > .dropdown-toggle.toggled-on svg,
    .menu-item.menu-item-has-children:hover > .dropdown-toggle svg,
    .menu-item.menu-item-has-children:focus > .dropdown-toggle svg {
      transform: translateY(0%) rotate(180deg);
    }

    // Smooth animation
    /* stylelint-disable selector-max-specificity, selector-max-class */
    .menu-item.menu-item-has-children .menu-item.menu-item-has-children > .dropdown-toggle.toggled-on svg,
    .menu-item.menu-item-has-children .menu-item.menu-item-has-children:hover > .dropdown-toggle svg,
    .menu-item.menu-item-has-children .menu-item.menu-item-has-children:focus > .dropdown-toggle svg {
      transform: translateY(0%) rotate(90deg);
    }
    /* stylelint-enable */
  }

  // Don't use gap filler in sub menu items
  // Acceptable use of display: none here, for visual/technical purposes
  /* stylelint-disable a11y/no-display-none */
  .sub-menu .menu-item-has-children::after {
    display: none;
  }
  /* stylelint-enable */

  // Dropdown bubble
  @if $use-dropdown-bubble == true {
    .menu-item-has-children::before {
      // Use of non-variable is acceptable here because bubble needs it
      /* stylelint-disable sh-waqar/declaration-use-variable */
      border-color: transparent transparent var(--color-white);
      border-style: solid;
      border-width: 0 5px 5px;
      /* stylelint-enable */
      bottom: -10px;
      content: '';
      display: block;
      height: 0;
      left: 50%;
      margin-left: -20px;
      position: absolute;
      transform: scale(0);
      transform-origin: center bottom;
      transition: none;
      width: 0;
    }
  }
} // @media only screen and (min-width: $width-max-mobile)
