/**
 * Donara Events — public event page.
 *
 * Builds on the core Donara public stylesheet (.donara base, form controls,
 * buttons, brand variables). Only Events-specific layout lives here. Mobile
 * first; the organization's brand variables drive every color.
 */

.donara-event {
	background: var(--donara-background);
	color: var(--donara-text);
	max-width: 44rem;
	margin: 0 auto;
	padding: 1rem;
}

@media (min-width: 64em) {
	.donara-event {
		max-width: 72rem;
		padding: 0 1.5rem 2rem;
	}
}

/*
 * Block-theme width compatibility (belt-and-braces, second line of defense
 * after the `alignfull` class the template already adds — see event.php).
 * Many block themes constrain any child of their content region to a global
 * content width via theme.json's `is-layout-constrained > *` mechanism, at
 * the same specificity as our own bare `.donara-event` rule above; whichever
 * stylesheet the theme happens to load later in the cascade then wins,
 * regardless of `alignfull`, in themes/embedding contexts that don't fully
 * honor that class (a classic, non-block theme; a shortcode dropped into a
 * context that strips alignment classes). Repeating the class together with
 * the `data-donara-event` attribute the template always renders raises the
 * specificity just enough to win deterministically, without an `!important`
 * and without touching anything outside this one component.
 */
.donara-event[data-donara-event] {
	max-width: 44rem;
}

@media (min-width: 64em) {
	.donara-event[data-donara-event] {
		max-width: 72rem;
	}
}

.donara-event__header {
	margin-bottom: 1.5rem;
}

/*
 * Layout. A single column, in source order (info, then registration), at
 * every width up to desktop — the order a screen reader or keyboard user
 * meets things never depends on viewport. At desktop the two regions become
 * side-by-side grid tracks: a compact organization/event info column and a
 * wider registration column. The registration column then splits itself
 * (further down) into a main stepper area and a sticky order-summary rail,
 * which is what reads as three columns at wide widths.
 */
.donara-event__layout {
	display: block;
}

.donara-event__info {
	min-width: 0;
}

@media (min-width: 64em) {
	.donara-event__layout {
		display: grid;
		grid-template-columns: 21rem minmax(0, 1fr);
		gap: 3rem;
		align-items: start;
	}

	.donara-event__info {
		position: sticky;
		top: 1.5rem;
	}
}

/*
 * Hero. Always a photo (organization-uploaded) or a branded two-color
 * gradient — never a broken image, an empty frame, or generic stock art. A
 * scrim sits under the title/type text in both cases so the same white text
 * stays readable regardless of what the photo looks like or which two brand
 * colors an organization picked; it is a bottom-weighted gradient, not a
 * flat dark panel over the whole image. Sized with aspect-ratio (not a fixed
 * pixel height) so the reserved space is correct before the image finishes
 * loading — no layout shift — while still scaling with viewport width.
 */
.donara-event__hero {
	position: relative;
	overflow: hidden;
	margin: -1rem -1rem 1.5rem;
	aspect-ratio: 16 / 9;
	background: linear-gradient(135deg, var(--donara-primary) 0%, var(--donara-primary-strong) 100%);
}

.donara-event__hero-img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.donara-event__hero-scrim {
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(0, 0, 0, 0.72) 0%, rgba(0, 0, 0, 0.32) 45%, rgba(0, 0, 0, 0) 75%);
}

.donara-event__hero-content {
	position: absolute;
	inset: auto 0 0 0;
	padding: 1.25rem 1rem;
}

.donara-event__hero .donara-event__logo {
	display: block;
	max-height: 40px;
	width: auto;
	margin-bottom: 0.75rem;
	filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.35));
}

.donara-event__hero .donara-event__type {
	margin: 0 0 0.25rem;
	font-size: 0.8125rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: #fff;
	opacity: 0.9;
}

.donara-event__hero .donara-event__title {
	margin: 0;
	font-family: var(--donara-font-heading);
	font-size: 1.5rem;
	line-height: 1.25;
	color: #fff;
	text-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
}

@media (min-width: 48em) {
	.donara-event__hero {
		aspect-ratio: 2.4 / 1;
		border-radius: var(--donara-radius);
		margin: 0 0 1.5rem;
	}

	.donara-event__hero-content {
		padding: 2rem 2.5rem;
	}

	.donara-event__hero .donara-event__title {
		font-size: 2.25rem;
	}
}

.donara-event__meta {
	display: grid;
	grid-template-columns: 1fr;
	gap: 0.875rem;
	margin: 0;
	padding: 1rem;
	background: var(--donara-surface);
	border: 1px solid var(--donara-border);
	border-radius: var(--donara-radius);
}

.donara-event__meta-item {
	display: flex;
	align-items: flex-start;
	gap: 0.625rem;
}

/* Each row's fact is its own single-pair <dl> (see event.php); reset the
   browser's default dl margin so it lays out flush with the icon exactly as
   the old wrapper div did. */
.donara-event__meta-item dl {
	margin: 0;
	min-width: 0;
}

.donara-event__meta-icon {
	flex: none;
	width: 1.25rem;
	height: 1.25rem;
	margin-top: 0.125rem;
	color: var(--donara-primary-strong);
}

.donara-event__meta-item dt {
	font-size: 0.75rem;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var(--donara-muted);
	margin: 0 0 0.125rem;
}

.donara-event__meta-item dd {
	margin: 0;
	color: var(--donara-heading);
}

.donara-event__tz {
	display: block;
	font-size: 0.8125rem;
	color: var(--donara-muted);
}

.donara-event__description,
.donara-event__instructions {
	margin: 1.25rem 0 0;
	line-height: 1.6;
}

/* Cancellation/refund policy card — the same visual language as the meta
   card, so it reads as one more fact about the event rather than a warning. */
.donara-event__policy {
	display: flex;
	align-items: flex-start;
	gap: 0.625rem;
	margin: 1.25rem 0 0;
	padding: 1rem;
	background: var(--donara-surface);
	border: 1px solid var(--donara-border);
	border-radius: var(--donara-radius);
}

.donara-event__policy .donara-event__meta-icon {
	margin-top: 0.1875rem;
}

.donara-event__policy-title {
	margin: 0 0 0.25rem;
	font-weight: 600;
	color: var(--donara-heading);
}

.donara-event__policy p {
	margin: 0 0 0.375rem;
	font-size: 0.875rem;
	color: var(--donara-text);
}

.donara-event__policy p:last-child {
	margin-bottom: 0;
}

.donara-event__register {
	margin-top: 2rem;
	padding-top: 1.5rem;
	border-top: 1px solid var(--donara-border);
}

.donara-event__register-heading {
	margin: 0 0 1rem;
	font-family: var(--donara-font-heading);
	font-size: 1.375rem;
	color: var(--donara-heading);
}

@media (min-width: 64em) {
	/* Second grid track already reads as its own column; the divider that
	   separated it from the info card above in the single-column layout
	   would just be a stray line floating beside the info card. */
	.donara-event__register {
		margin-top: 0;
		padding-top: 0;
		border-top: 0;
	}
}

/* Stepper ----------------------------------------------------------------
 * A progress indicator over the existing single-form/single-submit flow —
 * every field from every step stays mounted in the same <form> throughout,
 * so nothing about validation, focus handling, or what gets submitted
 * depends on which step is visually active. Compact and legible at every
 * width down to 320px: numbers only until there is room for labels too, no
 * cramped tiny text.
 */
.donara-event-stepper {
	display: flex;
	list-style: none;
	margin: 0 0 1.25rem;
	padding: 0;
	counter-reset: none;
}

.donara-event-stepper__step {
	flex: 1 1 0;
	display: flex;
	align-items: center;
	gap: 0.5rem;
	min-width: 0;
	font-size: 0.8125rem;
	color: var(--donara-muted);
	position: relative;
}

.donara-event-stepper__step:not(:last-child)::after {
	content: "";
	flex: 1 1 auto;
	height: 2px;
	background: var(--donara-border);
	margin: 0 0.375rem;
}

.donara-event-stepper__index {
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.75rem;
	height: 1.75rem;
	border-radius: 50%;
	border: 2px solid var(--donara-border);
	color: var(--donara-muted);
	font-weight: 700;
	font-size: 0.8125rem;
	background: var(--donara-surface);
}

.donara-event-stepper__label {
	display: none;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.donara-event-stepper__step--current .donara-event-stepper__index {
	border-color: var(--donara-primary);
	color: var(--donara-primary-strong);
	background: var(--donara-soft);
}

.donara-event-stepper__step--current .donara-event-stepper__label {
	color: var(--donara-heading);
	font-weight: 600;
}

.donara-event-stepper__step--done .donara-event-stepper__index {
	border-color: var(--donara-primary);
	background: var(--donara-primary);
	color: var(--donara-button-text);
}

@media (min-width: 30em) {
	.donara-event-stepper__label {
		display: inline;
	}
}

/* Form ------------------------------------------------------------------ */

.donara-event-form .donara-form__group {
	border: 1px solid var(--donara-border);
	border-radius: var(--donara-radius);
	background: var(--donara-surface);
	padding: 1rem;
	margin: 0 0 1rem;
	min-width: 0;
}

.donara-event-form .donara-form__legend {
	font-family: var(--donara-font-heading);
	font-size: 1.0625rem;
	font-weight: 600;
	color: var(--donara-heading);
	margin: 0 0 0.75rem;
	padding: 0;
}

.donara-event-form .donara-form__field {
	margin-bottom: 1rem;
}

.donara-event-form .donara-form__label {
	display: block;
	font-weight: 600;
	color: var(--donara-heading);
	margin-bottom: 0.375rem;
}

.donara-form__optional {
	font-weight: 400;
	color: var(--donara-muted);
}

.donara-event-form .donara-form__input,
.donara-event-form select.donara-form__input,
.donara-event-form textarea.donara-form__input {
	width: 100%;
	box-sizing: border-box;
	min-height: 44px;
	padding: 0.625rem 0.75rem;
	font: inherit;
	color: var(--donara-heading);
	background: var(--donara-background);
	border: 1px solid var(--donara-border);
	border-radius: var(--donara-radius-small);
}

.donara-event-form .donara-form__input:focus-visible,
.donara-event-form input[type="radio"]:focus-visible,
.donara-event-form input[type="checkbox"]:focus-visible,
.donara-event-form button:focus-visible {
	outline: 3px solid var(--donara-focus-ring);
	outline-offset: 2px;
}

.donara-form__choices {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem 1rem;
}

.donara-form__choice {
	display: inline-flex;
	align-items: center;
	gap: 0.5rem;
	min-height: 44px;
	cursor: pointer;
	color: var(--donara-heading);
}

.donara-form__choice input {
	width: 1.25rem;
	height: 1.25rem;
	accent-color: var(--donara-primary);
	margin: 0;
}

.donara-form__consent {
	align-items: flex-start;
	line-height: 1.5;
}

.donara-form__help {
	margin: 0.375rem 0 0;
	font-size: 0.875rem;
	color: var(--donara-muted);
}

.donara-form__error {
	margin: 0.375rem 0 0;
	font-size: 0.875rem;
	font-weight: 600;
	color: var(--donara-error);
}

.donara-form__field--error .donara-form__input {
	border-color: var(--donara-error);
}

.donara-participant {
	position: relative;
}

.donara-participant__remove,
.donara-participant__add {
	margin-top: 0.25rem;
}

.donara-event-form__participants > .donara-form__legend {
	margin-bottom: 0.75rem;
}

/* Step pages / nav -------------------------------------------------------- */

.donara-event-form__page[hidden] {
	display: none;
}

/* Focus lands here on a step change so assistive tech announces the step
   (see App.prototype.goToStep); same convention as the outcome pages below
   (confirmed/pending/full/payment) — no visible ring on the static container
   itself, since the meaningful state is the accessible name, not a box. */
.donara-event-form__page:focus {
	outline: none;
}

.donara-event-form__nav {
	display: flex;
	gap: 0.75rem;
	margin-top: 0.25rem;
}

.donara-event-form__nav .donara-cta-button {
	min-height: 48px;
}

.donara-event-form__nav .donara-cta-button--outline {
	flex: none;
}

.donara-event-form__nav .donara-button--donate {
	flex: 1 1 auto;
}

/* Main / aside layout ------------------------------------------------------
 * A single column on mobile — fields, then the order summary, in the same
 * order a keyboard or screen-reader user meets them. At desktop the form
 * becomes two tracks: the stepped fields, and a summary that stays in view
 * while scrolling, so the price is never a scroll away from the field that
 * changed it.
 */
.donara-event-form {
	display: block;
}

.donara-event-form__main {
	min-width: 0;
}

.donara-event-form__aside {
	margin-top: 1.5rem;
}

@media (min-width: 56em) {
	.donara-event-form {
		display: grid;
		grid-template-columns: minmax(0, 1fr) 20rem;
		gap: 2.5rem;
		align-items: start;
	}

	.donara-event-form__aside {
		margin-top: 0;
		position: sticky;
		top: 1.5rem;
	}
}

/* Summary --------------------------------------------------------------- */

.donara-event-form__summary {
	margin: 0;
	padding: 1.25rem;
	background: var(--donara-surface);
	border: 1px solid var(--donara-border);
	border-radius: var(--donara-radius);
}

.donara-event-summary {
	margin: 0;
	padding: 0.75rem 1rem;
	background: var(--donara-soft);
	border-radius: var(--donara-radius);
}

.donara-event-summary__row {
	display: flex;
	justify-content: space-between;
	gap: 1rem;
	padding: 0.25rem 0;
}

.donara-event-summary__row dt,
.donara-event-summary__row dd {
	margin: 0;
}

.donara-event-summary__row dt {
	/* Muted gray on the soft tint sits just under 4.5:1; use the heading color. */
	color: var(--donara-heading);
}

.donara-event-summary__row dd {
	font-variant-numeric: tabular-nums;
	color: var(--donara-heading);
}

.donara-event-summary__row--total {
	margin-top: 0.375rem;
	padding-top: 0.5rem;
	border-top: 1px solid var(--donara-border);
	font-weight: 700;
	color: var(--donara-heading);
}

.donara-event-form__submit {
	width: 100%;
	min-height: 48px;
	font-size: 1.0625rem;
}

.donara-event-form__submit[disabled] {
	opacity: 0.6;
	cursor: not-allowed;
}

/* Core's attribution line ships with opacity .8, which drops the muted gray
   below AA on white; full opacity keeps it subtle and readable (4.8:1). */
.donara-event .donara-powered {
	opacity: 1;
}

/* Outcomes -------------------------------------------------------------- */

.donara-event-confirmed,
.donara-event-pending,
.donara-event-full,
.donara-event-payment {
	padding: 1.25rem;
	border-radius: var(--donara-radius);
	background: var(--donara-surface);
	border: 1px solid var(--donara-border);
}

.donara-event-confirmed {
	border-color: var(--donara-success);
}

.donara-event-confirmed__title {
	margin: 0 0 0.5rem;
	font-family: var(--donara-font-heading);
	color: var(--donara-success);
}

.donara-event-confirmed__ref code {
	font-size: 0.875rem;
	word-break: break-all;
}

.donara-event-confirmed__details {
	margin: 1rem 0;
}

.donara-event-payment__element {
	margin: 1rem 0;
}

.donara-event-confirmed:focus,
.donara-event-pending:focus,
.donara-event-full:focus,
.donara-event-payment:focus {
	outline: none;
}

/* Larger screens -------------------------------------------------------- */

@media (min-width: 640px) {
	.donara-event {
		padding: 1.5rem;
	}

	.donara-event__title {
		font-size: 2.125rem;
	}

	.donara-event__meta {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.donara-event-form__submit {
		width: auto;
		min-width: 16rem;
	}
}

@media (prefers-reduced-motion: reduce) {
	.donara-event * {
		transition: none !important;
		animation: none !important;
	}
}

/* Manage registration ---------------------------------------------------- */

.donara-event-manage {
	padding: 1.25rem;
	border-radius: var(--donara-radius);
	background: var(--donara-surface);
	border: 1px solid var(--donara-border);
}

.donara-event-manage:focus {
	outline: none;
}

.donara-event-manage__participants {
	margin: 0 0 1rem;
	padding-left: 1.25rem;
	color: var(--donara-heading);
}

.donara-event-manage__cancel {
	margin-top: 1.25rem;
}

.donara-event-manage__confirm {
	margin-top: 0.75rem;
	padding: 1rem;
	border: 1px solid var(--donara-border);
	border-radius: var(--donara-radius-small);
	background: var(--donara-soft);
}
