:root {
	--nav_width:400px;
	--page_max_width:min(1500px,100vw);
	--headings_colour:var(--colour1);
	--body_text_colour:var(--colour2);
	--bg_colour:var(--colour4);
	--blue:#4988c8;
	--padding:clamp(1rem,5vw,3rem);
	--global_block_padding:clamp(4rem,8vw,8rem);
	--global_inline_padding:clamp(1rem,5vw,4rem);
	--global_padding:var(--global_block_padding) var(--global_inline_padding);
}

html {
	scroll-behavior: smooth;
	scrollbar-gutter:stable;
}

.group:after {
  content: "";
  display: table;
  clear: both;
}

.no-select {
	user-select:none;
}

* {
    padding:0;
    margin:0;
    box-sizing: border-box;
	font-family:inherit;
	color:inherit;
}

img {
	vertical-align:middle;
	max-width:100%;
	height:auto;
	background-repeat: no-repeat;
	background-size:cover;
	font-style: italic;
	shape-margin:1rem;
}

#edit-page {
	position:fixed;
	top:0;
	right:1rem;
	background-color:#fff;
	color:#000;
	text-decoration: none;
	font-size:0.8rem;
}

.skip-nav-link {
	position:absolute;
	left:1rem;
	top:0;
	background-color:#000;
	color:#fff;
	padding:0.5rem 1.5rem;
	border-radius: 0 0 0.25rem 0.25rem;
	z-index:100;
	transform:translateY(-120%);
	transition:transform 0.325s ease-out;
}

	.skip-nav-link:focus {
		transform:translateY(0);
	}

::selection {
	background-color:#000;
	color:#fff;
}

:is(.b_theme,.dg_theme) *::selection {
	background-color:#fff;
	color:#000;
} 

body {
	background-color:var(--bg_colour);
	color:var(--body_text_colour);
	font-family: 'GeneralSans-Variable',Arial, Helvetica, sans-serif;
}

#logo {
	width:200px;
	& img {
		width:100%;
	}
}

.container {
	container-type: inline-size;
}

.wrap {
  position:relative;
  box-sizing: content-box;
  max-inline-size:min(var(--page_max_width),100%);
  padding:0 1rem;
  margin-inline:auto;
  clear:both;
}

header {
	position:fixed;
	width:100%;
	max-inline-size:min(var(--page_max_width),100%);
	left: calc((100vw - var(--page_max_width))/2);
	top:0;
	color:#fff;
	padding-block:3rem;
	padding-inline:var(--global_inline_padding);
	z-index:100;
	background-color:#0000;
	transition:background-color 0.5s ease-out, padding 0.5s ease-out;

	display:grid;
	grid-template-columns: 200px 1fr;
	gap:1rem;
	align-items: center;
	justify-self:center;

	&.smaller {
		background-color:#000f;
		padding-block:1rem;
	}
}


#burger {
    display: none;
    background: none;
    border: none;
    cursor: pointer;
	padding:0;
    z-index: 1100;

	& img {
		width: 38px;
    	filter: brightness(1000%);
	}
}

.nav-list {
    list-style: none;
    display: flex;
    justify-content: end;
    align-items: center;

	& li {
		position: relative;
		display: flex;
		align-items: center;
	}

	& a {
		text-decoration: none;
		padding:0.5rem 1rem;
		font-size: 0.9rem;
		display: block;
		transition: color 0.2s;

		&:hover,
		&.active {
			color:var(--blue);
		}

		&.cta {
			line-height:1;

			& span {
				font-size:0.8rem;
			}
		}
	}
}

.cta-outer {
	padding-left:2rem;
}

/* Submenu Toggles (Arrows) */
.submenu-toggle {
    background: none;
    border: none;
    cursor: pointer;
    width: 20px;
    height: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform 0.2s;

	&::after {
		content: '';
		width: 3.5px;
		height: 3.5px;
		border-right: 2px solid #fff;
		border-bottom: 2px solid #fff;
		transform: rotate(45deg);
		display: block;
		margin-top:-4px;
		transition:transform 0.25s ease-out, margin-top 0.25s ease-out;
	}

	&[aria-expanded="true"]::after {
		transform:rotate(-135deg);
		margin-top:2px;
		border-color:var(--lime_green);
	}
}

/* --- Desktop Dropdown Logic --- */
@media (min-width: 1025px) {
    .submenu {
        position: absolute;
        top: 100%;
        left: 0;
        background-color: var(--bg_green);
        min-width: 250px;
        display: none; /* Default hidden */
        box-shadow: 0 10px 15px rgba(0,0,0,0.3);
    }

    .submenu .submenu {
        left: 100%;
        top: 0;
    }

    li:hover > .submenu,
    .submenu.is-visible {
        display: block;
    }
    
    .nav-list li:has(.submenu) > a {
        padding-right: 0;
    }

	.nav-list li:has(.submenu) {
        padding-right: 1rem;
    }

	.submenu .submenu-toggle::after {
		transform: rotate(-45deg);
		margin-top:2px;
	}

	.submenu .submenu-toggle[aria-expanded="true"]::after {
		transform: rotate(135deg);
	}
}

/* --- Mobile Modal (Slide-in) --- */
@media (max-width: 1099px) {
	header {
		grid-template-columns: 250px 1fr;
	}
    #burger {
        display: block;
        order: 3;
		justify-self:end;
    }

    #main-navigation {
        position: fixed;
        top: 0;
        right: 0;
        bottom: 0;
        width: var(--nav_width);
        max-width: 85vw;
        background-color:#000;
		border-left:1px solid #fff;
        padding: 5rem 2rem;
        z-index: 1000;
		height:100vh;
        
        /* Slide hidden state */
        transform: translateX(100%);
        visibility: hidden;
        transition: transform 0.25s, visibility 0.25s;
        box-shadow: -10px 0 30px rgba(0,0,0,0.5);
        overflow-y: auto;
    }

    #main-navigation.is-open {
        transform: translateX(0);
        visibility: visible;
    }

    .nav-list {
        flex-direction: column;
        align-items: flex-start;
    }

    .nav-list li {
        width: 100%;
        flex-wrap: wrap;
    }

    .nav-list a {
        padding-block: 0.75rem;
        width: 100%;
        font-size: 1.1rem;
    }

    /* Mobile Submenu Expansion */
    .submenu {
        display: none;
        width: 100%;
        padding-left: 1.5rem;
        border-left: 1px solid var(--mid_green);
    }

    .submenu.is-visible {
        display: block;
    }

    .submenu-toggle {
        position: absolute;
        right: 0;
        top: 0.5rem;
        width: 44px; /* Minimum WCAG Touch Target */
        height: 44px;
    }

    .submenu-toggle[aria-expanded="true"] {
        transform: rotate(180deg);
    }

	.cta-outer {
		padding-left:1rem;
		padding-right:1rem;
		margin-top:1rem;
	}
}

.fcw {
  float:left;
  clear:left;
  width:100%;
}

h1,h2,h3,h4,h5,h6,
.h1,.h2,.h3,.h4,.h5,.h6 {
	margin-bottom:1lh;
	line-height:1.1;
	text-wrap:balance;
}

h1, .h1 {
	font-size:clamp(2rem,5vw,3rem);
}

h2, .h2 {
	font-size:clamp(1.6rem,2.7vw,1.6rem);
}

main {

	max-inline-size:min(var(--page_max_width),100%);
	margin-inline:auto;

	& :is(p,li){
		font-size:1rem;
		line-height:1.6;
		margin-bottom:1lh;
		clear:left;
		text-wrap:pretty;
	}

	& :is(ol,ul){
		margin-block:2rem;
		padding-left:1rem;

		& li {
			padding-left:1rem;
		}
	}

	& ul {
        list-style:none;

        & li::before {
            content:url('../img/bullet.svg');
            position: absolute;
            width: 0.6rem;
            margin-left: -1.5rem;
            margin-top: 0.15rem;
        }
    }
}

.text {
    & :is(p,li,ul,ol):last-child{
        margin-bottom:0;
    }
}

.align_left {float:left;}
.align_right { float:right;}
.align_center {text-align: center;}
img.align_left {margin:0.5rem 1rem 1rem 0;}
img.align_right {margin:0.5rem 0 1rem 1rem;}
img.align_center {
	display:block;
  	margin-left:auto;
  	margin-right:auto;
}

form {
	position:relative;

	&:has(:invalid) :is(*[type=submit],button.submit) {
		opacity:0.5;
		pointer-events: none;
	}

	&.htmx-swapping :is(input,textarea,button,label,select),
	&:has(.htmx-request) :is(input,textarea,button,label,select) {
		opacity:0.2;
		pointer-events:none;
	}

	&.htmx-swapping .htmx-indicator,
	&:has(.htmx-request) .htmx-indicator {
		opacity:1;
		display:grid;
		align-self:center;
		justify-self:center;
	}
}

.htmx-indicator {
	position:absolute;
	inset:0;
	display:none;
	text-align: center;

	& img {
		width:3rem;
	}
}


input,textarea,label,hr{
	display:block;
	clear:left;
	width:100%;
	margin-bottom:1rem;
	color:#fff;
}

label {
	margin-bottom:0.25rem;
}

input,textarea,select,option {
	width:100%;
	background-color:#fff4;
	border:none;
	padding:1rem;
	font-size:1rem;

	&:user-invalid,
	&.error {
		outline:3px solid red;
	}

	&:user-valid {
		outline:3px solid green;
	}
}

/* Accessible Honeypot Styling */
.hp-field {
    position: absolute;
    margin: 0;
    padding: 0;
    border: 0;
    height: 1px; 
    width: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0); /* Older browser support */
    clip-path: inset(50%); /* Modern browser support */
    white-space: nowrap;
}

.cta,
nav .cta {
	position:relative;
	display:inline-block;
	font-weight:500;
	padding:0.75rem 3rem 0.75rem 2rem;
	text-decoration: none;
	border-radius:10rem 0 0 10rem;
	background-color:#fff;
	border:1px solid #fff;
	color:#000;

	
	&::after {
		content:url('../img/cta-end.svg');
		position:absolute;
		right:0;
		top:0;
		height:100%;
		aspect-ratio:0.5;
	}

	&:hover {
		color:#000;
		border-color:#000;
		filter:invert();
	}

	.text & {
		margin-block:1rem;
	}
}

button,
.button {
	display:inline-block;
	text-decoration: none;
	background-color:#000;
	border:none;
	outline:none;
	cursor:pointer;
	padding:0.75rem;

	&.close,
	&:has(img) {
		display:Grid;
		grid-template-columns: 1rem 1fr;
		gap:0.5rem;
		align-items: center;
		text-align: left;
	}

	& p {
		font-size:0.8rem;
	}
}

.inputerror {
    border: 2px solid #d93025;
}

.errortext {
    color: #d93025;
    font-size: 0.875rem;
    display: block;
    margin-top: 4px;
    font-weight: bold;
}
  
footer {
	width:100%;
	max-inline-size:min(var(--page_max_width),100%);
	margin-inline:auto;
  	clear:both;
	text-align: center;
	background-color:#000;
	color:#fff;

	& .footer-logo {
		background-color:#fff;
		border:5px solid #fff;
		width:100%;
		& img {
			width:100%;
		}
	}

	& .copyright {
		font-size:0.7rem;
		padding:2rem;
		color:#aaa;
	}
}

.cookies {
	container-name: cookies-popup;
	container-type: inline-size;
	position:fixed;
	padding:1.5rem;
	background-color:#fff;
	color:#000;
	text-align: center;
	z-index:9999;
	box-shadow:0 10px 15px #0003;

	& .cookie-text {
		margin-bottom:1rem;
	}

	& .buttons {
		display:grid;
		grid-template-columns:repeat(auto-fit,minmax(min(150px,100%),1fr));
		gap:1rem;
	}

	& h3 {
		margin-bottom:0.5rem;
	}

	& p {
		font-size:0.9rem;
	}

	&.bar-bottom {
		bottom:0;
		left:0;
		width:100%;
		display:grid;
		grid-template-columns: 1fr max-content;
		gap:1rem;

		& .text {
			text-align: left;
		}
	}

	&.box-bottomleft,
	&.box-bottomright,
	&.box-centre {
		left:1rem;
		bottom:1rem;
		width:min(350px,100%);
	}
	&.box-bottomright {
		left:unset;
		right:1rem;
	}
	&.box-centre {
		inset:unset;
		left:50%;
		top:50%;
		transform:translate(-50%,-50%);
	}
}

.w_theme,
.lg_theme {
    background-color:#fff;
    color:#000;

    & .cta {
        background-color:#000;
        color:#fff;
        border:1px solid #000;

        &::after {
            filter:invert();
        }
        &:hover {
            border:1px solid #fff;
            color:#fff;
        }
    }
}

.two-col {
	display:Grid;
	grid-template-columns: 1fr 1fr;
	gap:1rem;
}

.spin {
	animation: spin 3s linear infinite;
}

@keyframes spin {
	from {transform:rotate(0deg);}
	to {transform:rotate(360deg);}
}

.anim-delay {
    animation-delay: calc(var(--delay) * 0.1s);
}

.slide_from_bottom,
.slide_from_top,
.slide_from_left,
.slide_from_right,
.fade_in {
	opacity:0;
	animation-duration: 1s;
	animation-iteration-count:1;
	animation-fill-mode: forwards;
	animation-timing-function: var(--ease_out);
}

.slide_from_top.run {
	animation-name: slide_from_top;
}

.slide_from_bottom.run {
	animation-name: slide_from_bottom;
}

.slide_from_left.run {
	animation-name: slide_from_left;
}

.slide_from_right.run {
	animation-name: slide_from_right;
}

.fade_in.run {
	animation-name: fade_in;
}

@keyframes slide_from_bottom {
	0% {opacity: 0; transform: translateY(100px);}
	100%{opacity:1; transform: translateY(0);}
}
@keyframes slide_from_top {
	0% {opacity: 0; transform: translateY(-100px);}
	100%{opacity:1; transform: translateY(0);}
}
@keyframes slide_from_left {
	0% {opacity: 0; transform: translateX(-100px);}
	100%{opacity:1; transform: translateX(0);}
}
@keyframes slide_from_right {
	0% {opacity: 0; transform: translateX(100px);}
	100%{opacity:1; transform: translateX(0);}
}
@keyframes fade_in {
	0% {opacity: 0;}
	100%{opacity:1;}
}

@media screen and (max-width:900px) {
	nav :is(ul,li,a) {
		float:left;
		clear:left;
		width:100%;
		text-align: left;
		padding-inline:0;
	}
}

@media screen and (max-width:500px) {
	.cookies {
		&.bar-bottom {
			grid-template-columns: 1fr;
			text-align: left;

			& .buttons {
				justify-content: start;
			}
		}
	}
}

@media screen and (max-width:350px){
	header {
		grid-template-columns: 220px 1fr;
	}
}