/**
 * Base styles: reset, typography, layout primitives, global elements.
 */

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

body {
	margin: 0;
	background-color: var(--surface-page);
	color: var(--text-primary);
	font-family: var(--font-body);
	font-size: var(--fs-body);
	line-height: var(--lh-body);
	transition: background-color var(--duration-base) var(--ease-standard), color var(--duration-base) var(--ease-standard);
}

img, svg, video { max-width: 100%; height: auto; display: block; }

h1, h2, h3, h4 {
	font-family: var(--font-display);
	font-weight: 800;
	line-height: var(--lh-heading);
	margin: 0 0 var(--space-sm);
	color: var(--text-primary);
}
h1 { font-size: var(--fs-h1); line-height: var(--lh-tight); }
h2 { font-size: var(--fs-h2); }
h3 { font-size: var(--fs-h3); }

p { margin: 0 0 var(--space-sm); color: var(--text-secondary); }

a { color: var(--color-accent); text-decoration: none; }
a:hover { color: var(--color-accent-dark); }

/* Script accent word used inside headings, e.g. <span class="accent-script">Excellence</span> */
.accent-script {
	font-family: var(--font-script);
	font-style: italic;
	font-weight: 700;
	color: var(--color-accent);
}

.eyebrow {
	display: inline-block;
	font-size: var(--fs-eyebrow);
	font-weight: 700;
	letter-spacing: var(--tracking-eyebrow);
	text-transform: uppercase;
	color: var(--color-accent);
	margin-bottom: var(--space-xs);
}

/* Visually hidden but accessible */
.screen-reader-text {
	position: absolute;
	width: 1px; height: 1px;
	margin: -1px; padding: 0;
	overflow: hidden;
	clip: rect(0,0,0,0);
	white-space: nowrap;
	border: 0;
}
.screen-reader-text:focus {
	position: fixed;
	top: var(--space-sm); left: var(--space-sm);
	width: auto; height: auto;
	padding: var(--space-xs) var(--space-sm);
	background: var(--color-accent);
	color: #fff;
	z-index: 100000;
	border-radius: var(--radius-sm);
}

/* Consistent, visible focus ring for keyboard users across both modes */
a:focus-visible,
button:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible,
[tabindex]:focus-visible {
	outline: 3px solid var(--color-focus);
	outline-offset: 2px;
	border-radius: var(--radius-sm);
}

.container {
	max-width: var(--container-width);
	margin-inline: auto;
	padding-inline: var(--container-padding);
}

.section {
	padding-block: var(--space-2xl);
}
.section--tight { padding-block: var(--space-xl); }
.section--alt { background-color: var(--surface-alt); }
.section--inverse {
	background-color: var(--surface-inverse);
	color: var(--text-inverse);
}
.section--inverse p { color: var(--text-inverse-secondary); }
.section--inverse h1, .section--inverse h2, .section--inverse h3 { color: var(--text-inverse); }

.section__header {
	max-width: 640px;
	margin-bottom: var(--space-lg);
}
.section__header--split {
	display: flex;
	justify-content: space-between;
	align-items: flex-end;
	gap: var(--space-md);
	max-width: none;
}

/* Buttons */
.btn {
	display: inline-flex;
	align-items: center;
	gap: 0.5em;
	font-family: var(--font-display);
	font-weight: 700;
	font-size: var(--fs-small);
	letter-spacing: 0.02em;
	padding: 0.85em 1.75em;
	border-radius: var(--radius-sm);
	border: 2px solid transparent;
	cursor: pointer;
	transition: background-color var(--duration-fast) var(--ease-standard),
		color var(--duration-fast) var(--ease-standard),
		border-color var(--duration-fast) var(--ease-standard),
		transform var(--duration-fast) var(--ease-standard);
}
.btn:active { transform: translateY(1px); }

.btn--primary {
	background-color: var(--color-accent);
	color: #fff;
	border-color: var(--color-accent);
}
.btn--primary:hover { background-color: var(--color-accent-dark); border-color: var(--color-accent-dark); color: #fff; }

.btn--outline {
	background-color: transparent;
	color: var(--text-primary);
	border-color: var(--border-strong);
}
.btn--outline:hover { border-color: var(--color-accent); color: var(--color-accent); }

.btn--link {
	padding: 0;
	border: none;
	background: none;
	color: var(--color-accent);
	font-weight: 700;
}
.btn--link:hover { color: var(--color-accent-dark); gap: 0.75em; }

.btn--sm { padding: 0.6em 1.25em; font-size: 0.8125rem; }

/* Grid helpers */
.grid { display: grid; gap: var(--space-md); }
.grid--2 { grid-template-columns: repeat(2, 1fr); }
.grid--3 { grid-template-columns: repeat(3, 1fr); }
.grid--4 { grid-template-columns: repeat(4, 1fr); }

@media (max-width: 900px) {
	.grid--3, .grid--4 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
	.grid--2, .grid--3, .grid--4 { grid-template-columns: 1fr; }
	.section { padding-block: var(--space-xl); }
	.section__header--split { flex-direction: column; align-items: flex-start; }
}

/* Horizontal scroll-snap carousel (used for mobile card rows) */
.hscroll {
	display: flex;
	gap: var(--space-md);
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	-webkit-overflow-scrolling: touch;
	scrollbar-width: none;
	padding-bottom: var(--space-xs);
}
.hscroll::-webkit-scrollbar { display: none; }
.hscroll > * { scroll-snap-align: start; flex: 0 0 auto; }

@media (min-width: 601px) {
	.hscroll { overflow: visible; display: grid; }
}

/* Dot pagination, shared by all carousels */
.dots {
	display: flex;
	gap: 0.5rem;
	justify-content: center;
	margin-top: var(--space-md);
	list-style: none;
	padding: 0;
}
.dots button {
	width: 8px; height: 8px;
	border-radius: 50%;
	border: none;
	background: var(--border-strong);
	padding: 0;
	cursor: pointer;
}
.dots button[aria-current='true'] { background: var(--color-accent); width: 22px; border-radius: var(--radius-pill); transition: width var(--duration-base) var(--ease-standard); }

/* Arrow nav, shared by hero/events/insights carousels */
.carousel-arrow {
	width: 44px; height: 44px;
	border-radius: 50%;
	border: 1px solid var(--border-strong);
	background: var(--surface-card);
	color: var(--text-primary);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
}
.carousel-arrow:hover { border-color: var(--color-accent); color: var(--color-accent); }

/* Skip link target offset for sticky header */
:target { scroll-margin-top: 100px; }

.visually-hidden-focusable:not(:focus):not(:focus-within) {
	position: absolute !important;
	clip: rect(0 0 0 0);
}
