/* Shared top navigation + mobile hamburger menu.
   Load after the page stylesheet. Pages only set .topnav a { font-family } themselves. */
.topnav {
    z-index: 30;
    height: 5vw;
    top: 0;
    position: -webkit-sticky;
    position: sticky;
    background-color: #FFFFFF;
}
.topnav a {
    float: right;
    display: block;
    text-align: center;
    padding: 1.2vw 1.5vw;
    text-decoration: none;
    font-size: 2vw;
    color: #373097;
    transition: background-color 0.15s, color 0.15s;
}
.topnav a.active {
    background-color: #4d009a;
    color: white;
}
/* Only real pointers get hover, so a tap on a phone doesn't leave a link highlighted */
@media (hover: hover) {
    .topnav a:not(.active):hover {
        background-color: #e9d3ff;
        color: #8000ff;
    }
}

.hamburger {
    --bar: 1.3vw;
    --gap: 2.2vw;
    display: none;
    position: fixed;
    top: 0;
    right: 4vw;
    z-index: 200;
    width: 11vw;
    height: 15vw;
    padding: 0;
    flex-direction: column;
    justify-content: center;
    gap: var(--gap);
    cursor: pointer;
    appearance: none;
    -webkit-appearance: none;
    -webkit-tap-highlight-color: transparent;
    background: none;
    outline: none;
    border: none;
}
.hamburger:focus-visible {
    outline: 2px solid #8000ff;
    outline-offset: 4px;
}
.hamburger .bar, .hamburger::after, .hamburger::before {
    content: '';
    display: block;
    width: 100%;
    height: var(--bar);
    border-radius: var(--bar);
    background-color: #4229B9;
    transition: transform 0.25s, opacity 0.25s;
}
/* Outer bars move onto the middle one (bar height + gap), then rotate into an X */
.hamburger.is-active::before {
    transform: translateY(calc(var(--bar) + var(--gap))) rotate(45deg);
}
.hamburger.is-active::after {
    transform: translateY(calc(-1 * (var(--bar) + var(--gap)))) rotate(-45deg);
}
.hamburger.is-active .bar {
    opacity: 0;
}

.mobile-nav {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100vh;
    height: 100dvh;
    box-sizing: border-box;
    padding: calc(15vw + 5vh) 6vw 5vh;
    flex-direction: column;
    align-items: center;
    gap: 2.5vh;
    overflow-y: auto;
    background-color: #FFFFFF;
    /* Hidden by clipping, not by moving it off-screen: an off-screen fixed element makes
       Android Chrome zoom the whole page out to fit it, shrinking everything on the page. */
    clip-path: inset(0 0 0 100%);
    visibility: hidden;
    transition: clip-path 0.25s, visibility 0.25s;
}
.mobile-nav.is-active {
    clip-path: inset(0);
    visibility: visible;
}
.mobile-nav a {
    float: none;
    width: 100%;
    box-sizing: border-box;
    margin: 0;
    padding: 2.2vh 3vw;
    border-radius: 3.5vw;
    font-size: 9vw;
    line-height: 1.2;
    text-align: center;
    white-space: nowrap;
}
body.nav-open {
    overflow: hidden;
}

@media (prefers-color-scheme: dark) {
    .topnav, .mobile-nav {
        background-color: #181818;
    }
    .topnav a {
        color: #d3a7ff;
    }
    @media (hover: hover) {
        .topnav a:not(.active):hover {
            background-color: #8000ff;
            color: white;
        }
    }
    .hamburger .bar, .hamburger::after, .hamburger::before {
        background-color: white;
    }
}

@media (max-aspect-ratio: 3/4) {
    .topnav {
        height: 15vw;
    }
    #desktopNav {
        display: none;
    }
    .hamburger, .mobile-nav {
        display: flex;
    }
}
