.visually-hidden {
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  height: 1px;
  overflow: hidden;
  position: absolute;
  white-space: nowrap;
  width: 1px;
}

.ss-menu:not(.ss-menu--off-screen) {
  display: none;
}

.ss-menu {
  --ssShift: 0;
  --ssShiftSpeed: 0.25s;
  --ssBaseLeft: 0;
  --ssBaseRight: auto;
  --ssAnimateYOffset: 0; /* The top offset used when animating sub-menus, e.g. to slide down on open. */
  --ssLeft: 100%;
  --ssRight: auto;
  --ssElementPadding: 1rem;
}

.ss-menu__nav > ul {
  display: flex;
}

.ss-menu ul {
  list-style-type: none;
}

.ss-menu li {
  display: flex;
  justify-content: space-between;
}

li.ss-menu__title {
  display: none;
}

.ss-menu a,
.ss-menu button {
  display: inline-block;
  padding: var(--ssElementPadding);
}

.ss-menu ul ul a {
  display: block;
  flex-grow: 1;
}

.ss-menu--bounce .ss-menu__next {
  margin-left: -1rem;
}

.ss-menu__next::before {
  font-family: monospace;
  content: "▾";
}

.ss-menu ul ul .ss-menu__next::before {
  content: "▸";
}

.ss-menu ul ul {
  display: none;
  transform: translate(0, var(--ssAnimateYOffset));
  transition: transform var(--ssShiftSpeed) cubic-bezier(0.85, 0, 0.15, 1), visibility var(--ssShiftSpeed);
  opacity: 0;
  pointer-events: none;
  position: absolute;
  z-index: 1;
  width: 20rem;
  left: var(--ssLeft);
  right: var(--ssRight);
}

.ss-menu ul li {
  position: relative;
}

.ss-menu--bounce li:hover > ul,
.ss-menu:not(.ss-menu--off-screen) li.is-open > ul {
  display: block;
  opacity: 1;
  z-index: 2;
  top: 100%;
  right: var(--ssBaseRight);
  left: var(--ssBaseLeft);
  transform: translate(0, 0);
  pointer-events: auto;
}

.ss-menu--bounce ul ul li:hover ul,
.ss-menu:not(.ss-menu--off-screen) ul ul li.is-open ul {
  left: var(--ssLeft);
  right: var(--ssRight);
  top: 0;
  transform: translate(var(--ssShift), 0);
}

/*
  Concertina mode: Requires click to open drop-downs rather than mouse hover. Compresses drop-down menus so they overlap and don't protrude off-screen.
*/
.ss-menu--concertina li {
  flex-direction: row-reverse;
}

.ss-menu--concertina .ss-menu__next::before,
.ss-menu--concertina ul ul .ss-menu__next::before {
  content: "+";
}

.ss-menu--concertina .is-open > .ss-menu__next::before,
.ss-menu--concertina ul ul .is-open > .ss-menu__next::before {
  content: "-";
}

.ss-menu--concertina .has-children > a {
  margin-left: -1rem;
}

/*
  Off screen mode
*/
.ss-menu--off-screen {
  --ssShift: 0;
  --ssShiftSpeed: 0.4s;
  --ssBaseLeft: 0;
  --ssBaseRight: auto;
  --ssLeft: 0;
  --ssRight: auto;
  --ssMenuWidth: 40vw;
  --ssMenuMinWidth: 300px;
  --ssMenuMaxWidth: 600px;
  --ssScrollbarWidth: 0.4rem;
  --ssScrollbarTrackColor: #222;
  --ssScrollbarHandleColor: #666;
  --ssScrollbarHandleColorHover: #999;
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  transform: translate(-100%, 0);
  transition: transform var(--ssShiftSpeed) cubic-bezier(0.85, 0, 0.15, 1), visibility var(--ssShiftSpeed);
  width: clamp(var(--ssMenuMinWidth), var(--ssMenuWidth), var(--ssMenuMaxWidth));
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  overflow-x: hidden;
  overflow-y: visible;
  visibility: hidden;
  -webkit-mask-image: -webkit-radial-gradient(white, black); /* Safari bug fix to prevent overflow from showing */
}

.ss-menu::-webkit-scrollbar-track {
  background-color: var(--ssScrollbarTrackColor);
}

.ss-menu::-webkit-scrollbar {
  width: var(--ssScrollbarWidth);
}

.ss-menu::-webkit-scrollbar-thumb {
  border-radius: var(--ssScrollbarWidth);
  background-color: var(--ssScrollbarHandleColor);
}

.ss-menu::-webkit-scrollbar-thumb:hover {
  background-color: var(--ssScrollbarHandleColorHover);
}

.ss-menu--off-screen.is-open,
.ss-menu--off-screen-only.is-open {
  transform: translate(0, 0);
  visibility: visible;
}

.ss-menu--off-screen .ss-menu__nav > ul {
  display: block;
}

.ss-menu--off-screen .ss-menu__next::before {
  content: "▸";
}

.ss-menu--off-screen li.ss-menu__title {
  display: flex;
  align-items: center;
  justify-content: center;
}

.ss-menu--off-screen .ss-menu__prev::before {
  content: "◂";
}

.ss-menu--off-screen ul ul {
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  width: clamp(var(--ssMenuMinWidth), var(--ssMenuWidth), var(--ssMenuMaxWidth));
  opacity: 1;
  flex-direction: column;
  transform: translate(100%, 0);
  display: flex;
  visibility: hidden;
}

.ss-menu--off-screen li.is-open > ul {
  transform: translate(0, 0);
  top: 0;
  z-index: 2;
  pointer-events: auto;
  visibility: visible;
}
/* Pseudo element to balance spacing and keep title-text centred */
.ss-menu__title::after {
  font-family: monospace;
  content: '\00a0';
  flex: 0 0;
  padding: var(--ssElementPadding);
}

.ss-menu__title-text {
  text-align: center;
  flex: 1;
}

.ss-menu__prev {
  flex: 0 0;
}

/* sm */
@media (min-width: 576px) {
}

/* md */
@media (min-width: 768px) {
}

/* lg */
@media (min-width: 992px) {
  .ss-menu-button {
    display: none;
  }

  .ss-menu:not(.ss-menu--off-screen) {
    display: flex;
    justify-content: space-between;
  }

  .ss-menu--off-screen.is-open:not(.ss-menu--off-screen-only) {
    transform: translateX(-100%, 0);
    visibility: hidden;
  }
}

/* xl */
@media (min-width: 1200px) {
}

/* xxl */
@media (min-width: 1400px) {
}
