:root {
    --primary-colour: #3498db;
    --secondary-colour: #2ecc71;
    --background-colour: transparent;
    --text-colour: #011638;    

    --navbar-bg-colour: #011638;
    --navbar-fg-colour: #ffffff;    
    --navbar-highlight-colour: var(--navbar-bg-colour);
    --navbar-highlight-colour: color-mix(in srgb, var(--navbar-bg-colour) 75%, #ffffff);
   
    --navbar-padding-y: .75em;
    --navbar-padding-drop: .5em;

    --section-padding: 1rem;
    --form-padding: 1rem;
    --section-bg-colour-1: color-mix(in srgb, #F2CC8F 20%, #ffffff);
    --section-bg-colour-2: color-mix(in srgb, #BEB2C8 20%, #ffffff);
    --section-bg-colour-3: color-mix(in srgb, #483C46 15%, #ffffff);
    --section-bg-colour-0: color-mix(in srgb, #4D8B31 20%, #ffffff);

    --button-fg-colour: var(--navbar-fg-colour);
    --button-bg-colour: var(--navbar-bg-colour);
    
    --button-bg-colour-highlight: var(--navbar-bg-colour);
    --button-bg-colour-highlight: color-mix(in srgb, var(--navbar-bg-colour) 75%, #ffffff);

    --code-bg-colour: #444444;
    --code-fg-colour: #dddddd;
}

@media screen and (min-width: 1080px) {
    :root {
        --section-padding: calc(50vw - 540px);
        --form-padding: calc(50vw - 250px);
    }
}

html, body {
    height: 100%;
    margin: 0;
}

body {
    font-family: "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    margin: 0;
    padding: 0;
    color: var(--text-colour);
    background-color: var(--background-colour);
    display: flex;
    flex-direction: column;
    min-height: 100vh;    
}

h1,h2,h3,h4,h5,h6 {
    font-weight: 200;
    margin:0;
}

h1 {
    font-size: 5em;
}

h2 {
    font-size: 2.0em;
}

h3 {
    font-size: 1.5em;
}

h4, h5, h6 {
    font-size: 1.25em;
}

header {
    color: var(--navbar-fg-colour);
    background-color: var(--navbar-bg-colour);
    padding: 0 var(--section-padding); 
    display: flex;
    position: sticky;
    top: 0;    
}

main {
    flex: 1;
    flex-direction: column;
    display: flex;
}

footer {
    font-size: .875rem;
    color: var(--navbar-fg-colour);
    background-color: var(--navbar-bg-colour);
    padding: .5rem var(--section-padding); 
}

nav {
    display: inline-block;
    padding: 0; 
    flex-grow: 1;
}

nav:last-child{
    text-align: end;
}

nav ul {
    display: inline-block;
    list-style-type: none;
    padding: 0;
    margin: 0;
}

nav li {
    display: inline-block;
    position: relative;
    margin: 0 1rem 0 0;
}

nav ul ul hr {
    margin: .25em;
    border-color: var(--navbar-highlight-colour);
    border-style: solid;
    border-width: 1px 0 0 0;
}

nav:last-child li {
    margin: 0 0 0 1rem;
}

nav button {
    all: unset;
    background-color: var(--navbar-bg-colour);
    border:none;
    color: var(--navbar-fg-colour);
    border-radius: 0;
    box-sizing: border-box;
    font-size: 1em;
    cursor: pointer;
}

nav a, nav button {
    display: inline-block;
    text-decoration: none;
    color: var(--navbar-fg-colour);
    padding: var(--navbar-padding-y) .5em;    
    cursor: pointer;
    transition: background-color 0.3s, opacity 0.3s;
}

nav a:hover, nav button:hover, nav li.expanded > a, nav li.expanded > button {
    background-color: var(--navbar-highlight-colour);
}

nav button:focus  {
    outline: none;
}

nav ul ul {
    visibility: hidden;
    position:absolute;
    top:100%;
    left:0;
    background-color: var(--navbar-bg-colour);
    border: 1px solid var(--navbar-highlight-colour);
    white-space: nowrap;
    z-index: 100;    
    opacity: 0;
    transition: opacity 0.3s;
}

nav:last-child ul ul {
    left:auto;
    right:0;
}

nav ul ul li, nav:last-child ul ul li {
    display: block;
    margin: 0;
    padding: 0;
    text-align: start;
}

nav ul ul li a {
    padding: var(--navbar-padding-drop);
    display: block;
}

nav ul li.expanded ul {
    opacity: 1;
    visibility: visible;
}

nav ul li:has(> ul) > a::after, nav ul li:has(> ul) > button::after {
    content: ' \25BE';
}

section {
  padding: 1rem var(--section-padding);
}

section:nth-child(4n), html body .bg-colour-0 {
    background-color: var(--section-bg-colour-0);
}
section:nth-child(4n+1), html body .bg-colour-1 {
    background-color: var(--section-bg-colour-1);
}
section:nth-child(4n+2), html body .bg-colour-2 {
    background-color: var(--section-bg-colour-2);
}
section:nth-child(4n+3), html body .bg-colour-3 {
    background-color: var(--section-bg-colour-3);
}

section:last-child {
    flex: 1;
}

section::after {
    content: "";
    display: block;
    clear: both;
}

section img {
    max-width:40%;
    max-height:25vh;
    margin: 0.25em 0;
}

section img:nth-of-type(even) {
    float: right;
    margin-left: .5rem;
}

section img:nth-of-type(odd) {
    float: left;
    margin-right: .5rem;
}

footer p {
    margin: 0;
}

form {
    padding: 1rem var(--form-padding);
    text-align: center;
}

form input, form select, form label {
    text-align: start;
    display: block;
    width: 100%;    
}

form label {
    margin: .25em 0;
    padding: 0;
    height:auto;
}

form input, form select, form button {
    margin: 0 0 .5em 0;
}

form button {
    padding-left:2em;
    padding-right:2em;
}

form div {
    text-align: start;
    width: fit-content;
    margin: 1em auto;    
}

@media screen and (max-width: 720px) {
    section img, section img:nth-of-type(even), section img:nth-of-type(odd) {
        max-width: 100%;
        max-height:33vh;
        float: none;
        display: block;
        margin: 0.25em auto;
    }
}

figure {
    margin: 0;
    padding: 0;
    display: block;
}

figure img, section figure img:nth-of-type(even), section figure img:nth-of-type(odd) {
    max-width: 100%;
    max-height: 80vh;
    height: auto;
    display: block;
    margin: 0 auto;
    float: none;
}

a[target="_blank"]::after {
    content: "\00a0\u2197"; /* non-breaking space and NE arrow */
    vertical-align: text-top;
    font-size: smaller;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

button, a.button {
    all: unset;
    display: inline-block;
    padding: 0.5em 1em;
    background-color: var(--button-bg-colour);
    border:1px solid var(--button-bg-colour);
    color: var(--button-fg-colour);
    border-radius: 0.5em;
    height:2.5em;
    box-sizing: border-box;
    font-size: 1em;
    text-align: center;
    cursor: pointer;
    transition: background-color 0.2s, opacity 0.2s;
  }
  
  button:hover, button:active, a.button:hover, a.button:active {
    background-color: var(--button-bg-colour-highlight);
  }
  
  button:focus, a.button:focus {
    outline: 2px solid var(--button-bg-colour-highlight);
  }
  
  button:disabled, a.button:disabled {
    opacity: 0.6;
    cursor: not-allowed;
  }

input, select, select option {
    padding:0.5em;
    border:1px solid var(--button-bg-colour);
    border-radius: 0.5em;
    box-sizing: border-box;
    font-size:1em;
    height:2.5em;
}

input[type="checkbox"], input[type="radio"] {
    accent-color: var(--button-bg-colour);
    height:auto;
}

select option:hover {
    background-color: var(--button-bg-colour);
}

label {
    padding:0.5em 0.5em 0.5em 0;
    border-radius: 0.5em;
    box-sizing: border-box;
    font-size:1em;
    height:2.5em;
}

code {
    background-color: var(--code-bg-colour);
    color: var(--code-fg-colour);
    padding: 1em;
    border-radius: .5em;
    display: block;    
}  

blockquote {
    --text-colour-faded: color-mix(in srgb, currentColor 25%, transparent);
    border-left:0.5em solid var(--text-colour-faded);
    border-top: 1px solid var(--text-colour-faded); 
    border-bottom: 1px solid var(--text-colour-faded); 
    border-radius: .375em 0 0 .375em;
    margin: auto;
    max-width: max(50em, 90%);
    padding: 0 1em;
}

@media screen and (max-width: 600px) {
    header {
        --navbar-padding-y: 0.5rem;
        flex-direction:column;
        min-height: 2.5rem;
        padding-right: 2.5rem;
    }
    nav ul, nav li {
        display: none;
    }
    nav:last-child {
        text-align: start;
    }
    nav:last-child li {
        margin: 0 1rem 0 0;
    }
    header::after {
        position: absolute;
        top: .5rem;
        right: .5rem;
        width: 1.5rem;
        height: 1.5rem;
        cursor: pointer;
        content: '☰';
        text-align: center;
    }

    header.expanded {
        min-height: unset;
    }

    header.expanded::after {
        content: '✖';
    }

    header.expanded nav {
        display: inline-block;
    }

    header.expanded nav > ul, header.expanded nav li {
        display: block;
    }

    nav a, nav button {
        display: block;
        width: 100%;;
    }

    nav ul ul {
        visibility: unset;
        position: unset;
        top: unset;
        left: unset;
        opacity: unset;
        display: none;
        border: none;
    }
    nav ul li.expanded ul {
        display: block;
    }
    nav ul ul li, nav:last-child ul ul li {
        padding-left: 1.5rem;
    }
}