/* ========================================
   BLT Events - Frontend Styles
   ======================================== */

/* --- Shared: ticket lists, fields, coupon, consent, messages ---
   Also used by the SureCart and FluentCart ticket pickers. The checkout
   rules further down refine them for the on-site registration flow. */

/* --- Ticket Selection --- */
.blt-ticket-selection {
	margin-bottom: 1.5rem;
	padding: 1.5rem;
	background: var(--blt-e-surface-alt);
	border-radius: var(--blt-e-radius);
}

.blt-ticket-selection h3 {
	margin: 0 0 1rem;
	font-size: 1.84rem;
	font-weight: 700;
	color: var(--blt-e-fg-strong);
}

.blt-ticket-type {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 0.875rem 0;
	flex-wrap: wrap;
	gap: 0.5rem;
}

/* A divider between rows only, not after the last one: :last-of-type
   doesn't work here since .blt-total-amount is a trailing sibling <div>,
   which keeps the last .blt-ticket-type from ever being "last of type". */
.blt-ticket-type + .blt-ticket-type {
	border-top: 1px solid var(--blt-e-border);
}

.blt-ticket-name {
	flex: 1;
	color: var(--blt-e-fg-soft);
	font-weight: 500;
	min-width: 120px;
}

.blt-ticket-desc {
	flex-basis: 100%;
	color: var(--blt-e-fg-muted);
	font-size: 1.4rem;
	order: 10;
}

.blt-ticket-price {
	margin: 0 1rem;
	color: var(--blt-e-success);
	font-weight: 600;
	white-space: nowrap;
}

.blt-quantity-controls {
	display: flex;
	align-items: center;
	gap: 0.25rem;
}

/* The +/- glyph is drawn with ::before/::after bars, not the button's own
   text: a font's "+"/"−" characters rarely sit dead-center in their line
   box, so no amount of padding/line-height tuning centers them reliably
   across browsers. The text node is still there for anyone overriding
   this rule, just visually hidden via font-size: 0. */
.blt-qty-btn {
	position: relative;
	cursor: pointer;
	padding: 0;
	font-size: 0;
	background: var(--blt-e-surface);
	height: 32px;
	width: 32px;
	border: 1px solid var(--blt-e-border-strong);
	border-radius: var(--blt-e-radius-sm);
	display: flex;
	justify-content: center;
	align-items: center;
	transition: border-color 0.15s;
	color: var(--blt-e-fg-soft);
	line-height: 1;
}

.blt-qty-btn::before {
	content: "";
	position: absolute;
	top: 50%;
	left: 50%;
	width: 10px;
	height: 2px;
	background: currentColor;
	transform: translate(-50%, -50%);
}

.blt-qty-btn.plus-btn::after {
	content: "";
	position: absolute;
	top: 50%;
	left: 50%;
	width: 2px;
	height: 10px;
	background: currentColor;
	transform: translate(-50%, -50%);
}

.blt-qty-btn:hover {
	border-color: var(--blt-e-primary);
	color: var(--blt-e-primary);
}

/* Tag- and ancestor-qualified (2 classes + 1 type), not just the bare
   class: a theme's own `input[type="number"] { margin: 0 0 10px; }`
   (1 class-tier + 1 type) otherwise outranks a plain `.sc-ticket-quantity`
   (1 class-tier only) and its margin bleeds through. */
.blt-registration-form input.blt-ticket-quantity,
.blt-ticket-selection input.sc-ticket-quantity,
.blt-ticket-selection input.blt-fc-quantity {
	width: 48px;
	margin: 0;
	text-align: center;
	border: 1px solid var(--blt-e-border-strong);
	border-radius: var(--blt-e-radius-sm);
	height: 32px;
	font-size: 1.52rem;
	color: var(--blt-e-fg-muted);
	-moz-appearance: textfield;
}

/* Toggled by JS (blt-events.js) once the quantity goes above 0. */
.blt-registration-form input.blt-ticket-quantity.has-qty,
.blt-ticket-selection input.sc-ticket-quantity.has-qty,
.blt-ticket-selection input.blt-fc-quantity.has-qty {
	color: var(--blt-e-fg-strong);
}

.blt-ticket-quantity::-webkit-inner-spin-button,
.sc-ticket-quantity::-webkit-inner-spin-button,
.blt-fc-quantity::-webkit-inner-spin-button {
	-webkit-appearance: none;
}

.blt-total-amount {
	margin-top: 1rem;
	padding-top: 0.75rem;
	border-top: 2px solid var(--blt-e-border);
	text-align: right;
	font-weight: 600;
	color: var(--blt-e-fg);
	font-size: 2rem;
}

/* --- SureCart / FluentCart ticket list --- */
.blt-ticket-selection {
	padding: 0;
	background: transparent;
	border-radius: 0;
}

.blt-ticket-header,
.blt-ticket-type {
	display: grid;
	grid-template-columns: minmax(120px, 1.2fr) minmax(120px, 1.6fr) minmax(75px, 0.7fr) minmax(130px, 0.8fr);
	column-gap: 1rem;
	align-items: center;
}

.blt-ticket-header {
	padding: 0.7rem 0;
	border-bottom: 1px solid var(--blt-e-border);
	color: var(--blt-e-fg-muted);
	font-size: 1.15rem;
	font-weight: 700;
	letter-spacing: 0.03em;
	text-transform: uppercase;
}

.blt-ticket-type {
	padding: 0.875rem 0;
	gap: 0;
}

/* Explicit grid-column on each: .blt-ticket-desc is only rendered when a
   ticket has a description, and without a fixed column, auto-placement
   would shift every column after it (including the quantity controls)
   one slot left whenever it's missing. */
.blt-ticket-name {
	grid-column: 1;
	min-width: 0;
	font-weight: 600;
}

.blt-ticket-desc {
	grid-column: 2;
	flex-basis: auto;
	order: 0;
}

.blt-ticket-price {
	grid-column: 3;
	margin: 0;
}

.blt-quantity-controls {
	grid-column: 4;
	align-items: center;
	justify-content: flex-end;
}

@media (max-width: 700px) {
	.blt-ticket-header {
		display: none;
	}

	.blt-ticket-type {
		grid-template-columns: 1fr auto;
		row-gap: 0.4rem;
	}

	.blt-ticket-desc {
		grid-column: 1 / -1;
		grid-row: 2;
	}

	.blt-ticket-price {
		grid-column: 1;
		grid-row: 3;
	}

	.blt-quantity-controls {
		grid-column: 2;
		grid-row: 1 / span 3;
	}
}

/* --- Fields Grid --- */
.blt-fields-section {
	margin-bottom: 1.5rem;
}

.blt-fields-grid {
	display: flex;
	flex-wrap: wrap;
	gap: 1rem;
}

.blt-field-wrap {
	margin-bottom: 0.25rem;
}

/* Always full width, stacked: an end-user-built fieldset can hold anything
   (a long multi-line question, a wide address block), so a fixed
   half/third column is never a safe assumption. */
.blt-field-full,
.blt-field-half,
.blt-field-third {
	flex: 0 0 100%;
}

.blt-field-wrap label {
	display: block;
	margin-bottom: 0.375rem;
	color: var(--blt-e-fg-soft);
	font-weight: 500;
	font-size: 1.52rem;
}

.blt-required {
	color: var(--blt-e-danger);
}

.blt-field-wrap input[type="text"],
.blt-field-wrap input[type="email"],
.blt-field-wrap input[type="tel"],
.blt-field-wrap input[type="url"],
.blt-field-wrap input[type="number"],
.blt-field-wrap input[type="date"],
.blt-field-wrap select,
.blt-field-wrap textarea {
	width: 100%;
	padding: 0.625rem 0.75rem;
	border: 1px solid var(--blt-e-border);
	border-radius: var(--blt-e-radius);
	font-size: 1.52rem;
	background: var(--blt-e-surface-alt);
	transition: border-color 0.2s, box-shadow 0.2s;
	box-sizing: border-box;
}

.blt-field-wrap input:focus,
.blt-field-wrap select:focus,
.blt-field-wrap textarea:focus {
	outline: none;
	border-color: var(--blt-e-primary);
	box-shadow: 0 0 0 3px var(--blt-e-focus-glow);
}

.blt-other-input {
	margin-top: 0.5rem;
}

.blt-field-desc {
	margin: 0.35rem 0 0;
	font-size: 1.28rem;
	color: var(--blt-e-fg-muted);
}

.blt-field-html {
	font-size: 1.52rem;
	color: var(--blt-e-fg-soft);
	line-height: 1.6;
}

.blt-field-html > *:first-child { margin-top: 0; }
.blt-field-html > *:last-child { margin-bottom: 0; }

/* Radio and checkbox groups */
.blt-choice-group {
	margin: 0;
	padding: 0;
	border: 0;
	min-width: 0;
}

.blt-choice-group legend {
	display: block;
	margin-bottom: 0.375rem;
	padding: 0;
	color: var(--blt-e-fg-soft);
	font-weight: 500;
	font-size: 1.52rem;
}

.blt-choices {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem 1rem;
}

.blt-choice {
	display: inline-flex !important;
	align-items: center;
	gap: 0.4rem;
	margin: 0 !important;
	font-weight: 400 !important;
	cursor: pointer;
}

.blt-choice-group .blt-other-input {
	flex-basis: 100%;
}

.blt-choice-group.blt-invalid legend {
	color: var(--blt-e-danger);
}

.blt-check-label {
	display: flex !important;
	align-items: flex-start;
	gap: 0.5rem;
	cursor: pointer;
	font-weight: 400 !important;
}

.blt-check-label input {
	margin-top: 0.2rem;
	flex-shrink: 0;
}

/* Hidden by conditional logic */
.blt-field-wrap[hidden] {
	display: none;
}

/* Scarcity hint */
.blt-event__registration .blt-registration-form .blt-spots-left {
	margin: -0.5rem 0 1rem;
	font-size: 1.36rem;
	font-weight: 600;
	color: var(--blt-e-warning);
}

/* --- Coupon --- */
.blt-coupon-section {
	margin-bottom: 1.5rem;
}

.blt-coupon-input {
	display: flex;
	gap: 0.5rem;
}

.blt-coupon-input input {
	flex: 1;
	padding: 0.625rem 0.75rem;
	border: 1px solid var(--blt-e-border);
	border-radius: var(--blt-e-radius);
	font-size: 1.52rem;
	background: var(--blt-e-surface-alt);
}

.blt-btn-secondary {
	padding: 0.625rem 1rem;
	background: var(--blt-e-surface-sunken);
	color: var(--blt-e-fg-soft);
	border: 1px solid var(--blt-e-border-strong);
	border-radius: var(--blt-e-radius);
	font-size: 1.52rem;
	cursor: pointer;
	white-space: nowrap;
	transition: background 0.15s;
}

.blt-btn-secondary:hover {
	background: var(--blt-e-border);
}

#blt-coupon-message {
	margin-top: 0.5rem;
	padding: 0.5rem 0.75rem;
	border-radius: var(--blt-e-radius-sm);
	font-size: 1.4rem;
}

#blt-coupon-message.blt-msg-success {
	background: var(--blt-e-success-bg);
	color: var(--blt-e-success);
	border: 1px solid var(--blt-e-success-border);
}

#blt-coupon-message.blt-msg-error {
	background: var(--blt-e-danger-bg);
	color: var(--blt-e-danger);
	border: 1px solid var(--blt-e-danger-border);
}

/* --- Consent --- */
.blt-consent-section {
	margin-bottom: 1.5rem;
}

.blt-consent-field {
	margin-bottom: 0.75rem;
}

.blt-consent-field label {
	display: flex;
	align-items: flex-start;
	gap: 0.5rem;
	font-size: 1.4rem;
	color: var(--blt-e-fg-soft);
	cursor: pointer;
}

.blt-consent-field input[type="checkbox"] {
	margin-top: 0.2rem;
	flex-shrink: 0;
}

/* --- Payment Section --- */
.blt-payment-section {
	margin-bottom: 1.5rem;
}

#blt-card-element {
	padding: 0.875rem;
	border: 1px solid var(--blt-e-border);
	border-radius: var(--blt-e-radius);
	background: var(--blt-e-surface-alt);
}

#blt-card-errors {
	color: var(--blt-e-danger);
	font-size: 1.4rem;
	margin-top: 0.5rem;
}

/* --- Form Messages --- */
#blt-form-messages {
	margin-bottom: 1rem;
	padding: 0.75rem 1rem;
	border-radius: var(--blt-e-radius);
	font-size: 1.52rem;
}

#blt-form-messages.blt-msg-success {
	background: var(--blt-e-success-bg);
	color: var(--blt-e-success);
	border: 1px solid var(--blt-e-success-border);
}

#blt-form-messages.blt-msg-error {
	background: var(--blt-e-danger-bg);
	color: var(--blt-e-danger);
	border: 1px solid var(--blt-e-danger-border);
}

/* --- Submit Button --- */
.blt-form-actions {
	margin-top: 1.5rem;
}

.blt-submit-btn {
	width: 100%;
	padding: 0.875rem 1rem;
	min-height: 48px;
	background: var(--blt-e-primary);
	color: white;
	border: none;
	border-radius: var(--blt-e-radius);
	font-size: 1.8rem;
	font-weight: 600;
	cursor: pointer;
	transition: background-color 0.2s, transform 0.1s;
}

.blt-submit-btn:hover:not(:disabled) {
	background: var(--blt-e-primary-hover);
	transform: translateY(-1px);
}

.blt-submit-btn:focus {
	outline: none;
	box-shadow: 0 0 0 3px var(--blt-e-focus-ring);
}

.blt-submit-btn:disabled {
	background: var(--blt-e-fg-subtle);
	cursor: not-allowed;
	transform: none;
}

/* --- SureCart Form --- */
.blt-surecart-form {
	margin: 2rem auto;
	padding: 2rem;
	background: var(--blt-e-surface);
	border-radius: var(--blt-e-radius);
	box-shadow: var(--blt-e-shadow);
}

.blt-checkout-actions {
	margin-top: 1.5rem;
	text-align: center;
}

.blt-event__registration .blt-checkout-actions .blt-checkout-note {
	margin-top: 0.5rem;
	color: var(--blt-e-fg-soft);
	font-size: 1.4rem;
	font-style: italic;
	text-wrap: balance;
}

.blt-checkout-message {
	margin-top: 1rem;
	padding: 0.75rem 1rem;
	border-radius: var(--blt-e-radius);
	font-size: 1.52rem;
}

.blt-sync-notice {
	padding: 1.5rem;
	background: var(--blt-e-warning-bg);
	border: 1px solid var(--blt-e-warning-border);
	border-radius: var(--blt-e-radius);
	text-align: center;
	color: var(--blt-e-warning);
}

/* --- Registration Closed / Sold Out --- */
.blt-registration-closed {
	margin: 2rem auto;
	padding: 2rem;
	background: var(--blt-e-surface-alt);
	border-radius: var(--blt-e-radius-sm);
	text-align: center;
	color: var(--blt-e-fg-muted);
}

.blt-registration-closed p:last-child {
	margin-bottom: 0;
}

/* --- Hidden attribute fallback --- */
.blt-registration-form [hidden] {
	display: none !important;
}

.blt-error {
	color: var(--blt-e-danger);
	padding: 1rem;
}

/* --- Registration checkout ---
   Three steps (Registration, Attendee details, Review & payment) inside a
   muted panel of white cards. Layout follows the width of the checkout
   itself (a container query), not the viewport, because the same form sits
   in a narrow event-page column or across a full-width page. */
.blt-registration-form {
	max-width: var(--blt-e-checkout-width, 1120px);
	margin: var(--blt-e-space-m) auto;
	padding: var(--blt-e-space-m);
	background: var(--blt-e-checkout-bg);
	border-radius: var(--blt-e-radius-lg);
	font-family: var(--blt-e-font);
	/* Themes often set large body text; the checkout sizes itself from the
	   root size instead so tables and cards keep their proportions. */
	font-size: 1.6rem;
	line-height: 1.5;
	color: var(--blt-e-fg);
	box-sizing: border-box;
	container: blt-checkout / inline-size;
}

.blt-registration-form *,
.blt-registration-form *::before,
.blt-registration-form *::after {
	box-sizing: border-box;
}

.blt-registration-form h3,
.blt-registration-form h4,
.blt-registration-form h5 {
	margin: 0;
}

/* Tag-qualified with the section wrapper (2 classes), not just
   `.blt-registration-form p` (1 class + 1 type): themes that style
   `body.single p` directly (1 class + 2 types) outrank the weaker form,
   so every paragraph across all four checkout variants needs the extra
   class to reliably win. */
.blt-event__registration .blt-registration-form p,
.blt-event__registration .blt-registration-closed p,
.blt-event__registration .blt-surecart-form p,
.blt-event__registration .blt-fluentcart-form p {
	margin: 0;
}

.blt-event__registration .blt-registration-closed p {
	text-wrap: balance;
}

.blt-icon {
	width: 1em;
	height: 1em;
	flex-shrink: 0;
	vertical-align: -0.125em;
}

/* Step visibility. The script also sets [hidden], which covers No-CSS mode;
   these rules stop other steps flashing before the script runs. */
.blt-reg[data-current-step="tickets"] [data-step-panel]:not([data-step-panel~="tickets"]),
.blt-reg[data-current-step="details"] [data-step-panel]:not([data-step-panel~="details"]),
.blt-reg[data-current-step="review"] [data-step-panel]:not([data-step-panel~="review"]),
.blt-reg[data-current-step="complete"] [data-step-panel]:not([data-step-panel~="complete"]) {
	display: none !important;
}

/* --- Progress --- */
.blt-reg__progress {
	display: flex;
	gap: 1rem;
	list-style: none;
	margin: 0 0 1.75rem;
	padding: 0;
	counter-reset: blt-step;
}

.blt-reg__progress-step {
	flex: 1;
	display: flex;
	align-items: center;
	gap: 0.5rem;
	margin: 0;
	padding-top: 0.6rem;
	border-top: 3px solid var(--blt-e-border-strong);
	font-size: 1.36rem;
	font-weight: 600;
	color: var(--blt-e-fg-subtle);
	counter-increment: blt-step;
}

.blt-reg__progress-step::before {
	content: counter(blt-step);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	width: 20px;
	height: 20px;
	border-radius: 50%;
	background: var(--blt-e-border-strong);
	color: var(--blt-e-fg-muted);
	font-size: 1.15rem;
}

.blt-reg__progress-step.is-current {
	border-top-color: var(--blt-e-primary);
	color: var(--blt-e-fg);
}

.blt-reg__progress-step.is-current::before {
	background: var(--blt-e-primary);
	color: var(--blt-e-on-primary);
}

.blt-reg__progress-step.is-done {
	border-top-color: var(--blt-e-primary);
	color: var(--blt-e-fg-soft);
}

.blt-reg__progress-step.is-done::before {
	content: "\2713";
	background: var(--blt-e-primary);
	color: var(--blt-e-on-primary);
}

/* --- Step headers --- */
.blt-reg__header {
	margin-bottom: 1.5rem;
}

.blt-registration-form .blt-reg__title {
	font-family: var(--blt-e-font-heading);
	font-size: 2.8rem;
	font-weight: 600;
	line-height: 1.2;
	color: var(--blt-e-fg-strong);
}

.blt-reg__title:focus {
	outline: none;
}

.blt-event__registration .blt-registration-form .blt-reg__subtitle {
	margin-top: 0.4rem;
	font-size: 1.44rem;
	color: var(--blt-e-fg-muted);
}

/* --- Layout: main column + summary --- */
.blt-reg__body {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: 1.5rem;
	align-items: start;
}

.blt-reg__main {
	display: flex;
	flex-direction: column;
	gap: 1.25rem;
	min-width: 0;
}

.blt-reg__step {
	display: flex;
	flex-direction: column;
	gap: 1.25rem;
}

.blt-reg__aside {
	display: flex;
	flex-direction: column;
	gap: 1rem;
	min-width: 0;
}

@container blt-checkout (min-width: 760px) {
	.blt-reg[data-current-step="details"] .blt-reg__body,
	.blt-reg[data-current-step="review"] .blt-reg__body {
		grid-template-columns: minmax(0, 1fr) minmax(260px, 340px);
	}

	.blt-reg__aside {
		position: sticky;
		top: 1.5rem;
	}
}

/* --- Cards --- */
.blt-reg__card {
	padding: 1.5rem;
	background: var(--blt-e-surface);
	border: 1px solid var(--blt-e-border);
	border-radius: var(--blt-e-radius);
}

/* --- Buttons ---
   Tag-qualified (button.blt-reg__btn, not just .blt-reg__btn): a bare
   class selector is easy for a theme/framework's own default <button>
   styling to outrank if it targets the element more specifically (the
   same kind of bleed-through the section padding had from ACSS). */
button.blt-reg__btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	width: 100%;
	min-height: 46px;
	padding: 0.75rem 1.25rem;
	border: 1px solid transparent;
	border-radius: var(--blt-e-radius-sm);
	font: inherit;
	font-size: 1.52rem;
	font-weight: 600;
	line-height: 1.2;
	cursor: pointer;
	transition: background-color 0.15s, border-color 0.15s;
}

button.blt-reg__btn--primary {
	background: var(--blt-e-primary);
	border-color: var(--blt-e-primary);
	color: var(--blt-e-on-primary);
}

button.blt-reg__btn--primary:hover:not(:disabled) {
	background: var(--blt-e-primary-hover);
	border-color: var(--blt-e-primary-hover);
	color: var(--blt-e-on-primary);
	/* This button also carries the legacy .blt-submit-btn class, whose own
	   :hover adds a translateY lift — not the flat background-only hover
	   every other primary button (e.g. .blt-event__cta-button) uses. */
	transform: none;
	/* Defensive: rules out a theme/framework default button:hover dimming
	   this via opacity or a darkening filter instead of a color change. */
	opacity: 1;
	filter: none;
}

button.blt-reg__btn:focus-visible,
.blt-reg__back-link:focus-visible,
.blt-reg__edit:focus-visible,
.blt-attendee-card__remove:focus-visible {
	outline: none;
	box-shadow: 0 0 0 3px var(--blt-e-focus-ring);
}

button.blt-reg__btn:disabled {
	background: var(--blt-e-fg-subtle);
	border-color: var(--blt-e-fg-subtle);
	color: var(--blt-e-on-primary);
	cursor: not-allowed;
}

.blt-reg__back-link,
.blt-reg__edit,
.blt-attendee-card__remove {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	padding: 0.25rem 0;
	background: none;
	border: 0;
	border-radius: var(--blt-e-radius-sm);
	font: inherit;
	font-size: 1.36rem;
	font-weight: 500;
	color: var(--blt-e-fg-muted);
	cursor: pointer;
}

.blt-reg__back-link {
	align-self: flex-start;
	color: var(--blt-e-fg-soft);
}

.blt-reg__back-link:hover,
.blt-reg__edit:hover,
.blt-attendee-card__remove:hover {
	color: var(--blt-e-fg);
}

/* --- Member rates --- */
.blt-member-login {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--blt-e-space-s);
	padding: var(--blt-e-space-s);
	background: var(--blt-e-primary-tint);
	border: 1px solid var(--blt-e-border);
	border-radius: var(--blt-e-radius-sm);
	font-family: var(--blt-e-font);
	font-size: 1.6rem;
	line-height: 1.5;
}

.blt-member-login__text {
	display: flex;
	flex-direction: column;
	gap: var(--blt-e-space-xs);
	flex: 1 1 240px;
	min-width: 0;
}

.blt-member-login__head {
	display: flex;
	align-items: center;
	gap: 0.4rem;
}

.blt-member-login__icon {
	display: inline-flex;
	color: var(--blt-e-primary);
	font-size: 2rem;
}

.blt-member-login .blt-member-login__title {
	margin: 0;
	font-weight: 600;
	color: var(--blt-e-fg);
}

.blt-event__registration .blt-member-login .blt-member-login__desc {
	margin: 0;
	font-size: 1.36rem;
	color: var(--blt-e-fg-soft);
}

.blt-member-login__btn {
	display: inline-flex;
	align-items: center;
	padding: 0.55rem 1rem;
	border: 1px solid var(--blt-e-primary);
	border-radius: var(--blt-e-radius-sm);
	background: var(--blt-e-surface);
	color: var(--blt-e-primary);
	font-size: 1.44rem;
	font-weight: 600;
	text-decoration: none;
	white-space: nowrap;
}

.blt-member-login__btn:hover,
.blt-member-login__btn:focus {
	background: var(--blt-e-primary);
	color: var(--blt-e-on-primary);
}

.blt-surecart-form .blt-member-login,
.blt-fluentcart-form .blt-member-login {
	margin-bottom: 1.25rem;
}

/* --- Step 1: ticket table --- */
.blt-ticket-table.blt-reg__card {
	padding: 0;
	overflow: hidden;
}

.blt-ticket-table .blt-ticket-header,
.blt-ticket-table .blt-ticket-type {
	display: grid;
	grid-template-columns: minmax(110px, 1.1fr) minmax(120px, 1.5fr) minmax(70px, 0.6fr) minmax(120px, 0.8fr) minmax(70px, 0.6fr);
	column-gap: 1rem;
	align-items: center;
	padding: 1rem 1.25rem;
}

.blt-ticket-table .blt-ticket-header {
	padding-top: 0.8rem;
	padding-bottom: 0.8rem;
	background: var(--blt-e-surface-alt);
	border-bottom: 1px solid var(--blt-e-border);
	color: var(--blt-e-fg-muted);
	font-size: 1.12rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
}

.blt-ticket-table .blt-ticket-type {
	border-bottom: 1px solid var(--blt-e-border);
	min-height: 64px;
}

.blt-ticket-table .blt-ticket-type:last-child {
	border-bottom: 0;
}

.blt-ticket-table .blt-ticket-type.is-selected {
	background: var(--blt-e-primary-tint);
}

.blt-ticket-table .blt-ticket-name {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	color: var(--blt-e-fg);
	font-size: 1.52rem;
	font-weight: 600;
}

.blt-ticket-table .blt-ticket-desc {
	color: var(--blt-e-fg-muted);
	font-size: 1.4rem;
}

.blt-ticket-table .blt-ticket-price {
	color: var(--blt-e-fg-soft);
	font-size: 1.44rem;
	font-weight: 500;
}

.blt-ticket-table .blt-ticket-line-total {
	color: var(--blt-e-fg);
	font-size: 1.52rem;
	font-weight: 600;
	text-align: right;
}

.blt-ticket-table .blt-ticket-header > :last-child {
	text-align: right;
}

.blt-ticket-table .blt-quantity-controls {
	justify-content: flex-start;
	gap: 0;
}

.blt-ticket-table .blt-qty-btn {
	width: 32px;
	height: 32px;
	border-radius: var(--blt-e-radius-sm);
	background: var(--blt-e-surface-alt);
}

.blt-ticket-table .blt-ticket-quantity {
	width: 44px;
	margin: 0 0.25rem;
	border-color: var(--blt-e-border);
	background: var(--blt-e-surface);
	color: var(--blt-e-fg);
}

.blt-ticket-pill {
	display: inline-flex;
	align-items: center;
	padding: 0.3rem 0.75rem;
	border-radius: var(--blt-e-radius-sm);
	background: var(--blt-e-surface-sunken);
	color: var(--blt-e-fg-muted);
	font-size: 1.28rem;
	font-weight: 500;
	white-space: nowrap;
}

a.blt-ticket-pill--members {
	background: var(--blt-e-primary-tint);
	color: var(--blt-e-primary);
	text-decoration: none;
}

a.blt-ticket-pill--members:hover,
a.blt-ticket-pill--members:focus {
	text-decoration: underline;
}

.blt-ticket-type--ended .blt-ticket-name,
.blt-ticket-type--ended .blt-ticket-price,
.blt-ticket-type--upcoming .blt-ticket-name,
.blt-ticket-type--upcoming .blt-ticket-price {
	color: var(--blt-e-fg-subtle);
}

.blt-ticket-type--members .blt-ticket-name .blt-icon {
	color: var(--blt-e-primary);
}

/* Tally + continue */
.blt-reg__tickets-footer {
	display: flex;
	flex-direction: column;
	align-items: stretch;
	gap: 1rem;
	width: 100%;
	max-width: 340px;
	margin-left: auto;
}

.blt-reg__tally {
	margin: 0;
}

.blt-reg__tally > div {
	display: flex;
	justify-content: space-between;
	gap: 1rem;
	padding: 0.75rem 0;
	border-top: 1px solid var(--blt-e-border-strong);
	font-size: 1.4rem;
}

.blt-reg__tally dt {
	color: var(--blt-e-fg-soft);
	font-weight: 500;
}

.blt-reg__tally dd {
	margin: 0;
	color: var(--blt-e-fg);
	font-weight: 600;
}

.blt-reg__step-error {
	padding: 0.6rem 0.8rem;
	border: 1px solid var(--blt-e-danger-border);
	border-radius: var(--blt-e-radius-sm);
	background: var(--blt-e-danger-bg);
	color: var(--blt-e-danger);
	font-size: 1.36rem;
}

/* Narrow checkout: each ticket becomes a compact block. */
@container blt-checkout (max-width: 620px) {
	.blt-ticket-table .blt-ticket-header {
		display: none;
	}

	.blt-ticket-table .blt-ticket-type {
		grid-template-columns: minmax(0, 1fr) auto;
		row-gap: 0.3rem;
	}

	.blt-ticket-table .blt-ticket-name { grid-column: 1; grid-row: 1; }
	.blt-ticket-table .blt-ticket-desc { grid-column: 1; grid-row: 2; }
	.blt-ticket-table .blt-ticket-price { grid-column: 1; grid-row: 3; }
	.blt-ticket-table .blt-ticket-qty { grid-column: 2; grid-row: 1 / span 2; justify-self: end; }
	.blt-ticket-table .blt-ticket-line-total { grid-column: 2; grid-row: 3; }

	.blt-ticket-table .blt-ticket-desc:empty {
		display: none;
	}

	.blt-reg__tickets-footer {
		max-width: none;
	}
}

/* --- Step 2: attendee cards --- */
.blt-attendees-list {
	display: flex;
	flex-direction: column;
	gap: 1.25rem;
}

.blt-attendees-list:empty {
	display: none;
}

.blt-attendee-card__head {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem 0.75rem;
	margin-bottom: 1.25rem;
}

.blt-registration-form .blt-attendee-card__title {
	font-size: 1.84rem;
	font-weight: 600;
	color: var(--blt-e-fg-strong);
}

.blt-attendee-card__title:focus {
	outline: none;
}

.blt-attendee-card__ticket {
	display: inline-flex;
	padding: 0.2rem 0.55rem;
	border-radius: var(--blt-e-radius-sm);
	background: var(--blt-e-surface-sunken);
	color: var(--blt-e-fg-soft);
	font-size: 1.15rem;
	font-weight: 600;
}

.blt-attendee-card__price {
	margin-left: auto;
	color: var(--blt-e-fg-soft);
	font-size: 1.36rem;
	font-weight: 600;
}

.blt-attendee-card__foot {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	margin-top: 1.25rem;
	padding-top: 1rem;
	border-top: 1px solid var(--blt-e-border);
}

.blt-attendee-card__count {
	margin-left: auto;
	color: var(--blt-e-fg-subtle);
	font-size: 1.28rem;
}

.blt-registration-form .blt-field-wrap input[type="text"],
.blt-registration-form .blt-field-wrap input[type="email"],
.blt-registration-form .blt-field-wrap input[type="tel"],
.blt-registration-form .blt-field-wrap input[type="url"],
.blt-registration-form .blt-field-wrap input[type="number"],
.blt-registration-form .blt-field-wrap input[type="date"],
.blt-registration-form .blt-field-wrap select,
.blt-registration-form .blt-field-wrap textarea {
	background: var(--blt-e-surface);
	border-radius: var(--blt-e-radius-sm);
	/* The entered value, not the placeholder — that keeps its own (dimmer)
	   browser-default color. */
	color: var(--blt-e-neutral);
}

.blt-registration-form .blt-field-wrap label,
.blt-registration-form .blt-label {
	display: block;
	margin-bottom: 0.375rem;
	color: var(--blt-e-fg-soft);
	font-size: 1.4rem;
	font-weight: 500;
}

.blt-consent-section.blt-reg__card {
	margin-bottom: 0;
}

.blt-consent-section.blt-reg__card .blt-consent-field:last-child {
	margin-bottom: 0;
}

/* --- Step 3: review --- */
.blt-review-card__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	margin-bottom: 1rem;
}

.blt-registration-form .blt-review-card__title {
	color: var(--blt-e-fg-muted);
	font-size: 1.2rem;
	font-weight: 600;
	letter-spacing: 0.05em;
	text-transform: uppercase;
}

.blt-review-table__row {
	display: grid;
	grid-template-columns: minmax(0, 2fr) minmax(60px, 1fr) minmax(50px, 0.7fr) minmax(70px, 1fr);
	gap: 1rem;
	align-items: center;
	padding: 0.75rem 0;
	border-bottom: 1px solid var(--blt-e-border);
	font-size: 1.4rem;
	color: var(--blt-e-fg-soft);
}

.blt-review-table__row > :last-child {
	text-align: right;
}

.blt-review-table__row--head {
	padding-top: 0;
	color: var(--blt-e-fg-muted);
	font-size: 1.12rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
}

.blt-review-table__name {
	display: flex;
	flex-direction: column;
	gap: 0.15rem;
}

.blt-review-table__name strong {
	color: var(--blt-e-fg);
	font-weight: 600;
}

.blt-review-table__name small {
	color: var(--blt-e-fg-muted);
	font-size: 1.25rem;
}

.blt-review-totals {
	margin: 0;
}

.blt-review-totals > div {
	display: flex;
	justify-content: space-between;
	gap: 1rem;
	padding-top: 0.75rem;
	font-size: 1.4rem;
}

.blt-review-totals dt {
	color: var(--blt-e-fg);
	font-weight: 600;
}

.blt-review-totals dd {
	margin: 0;
	font-weight: 600;
}

.blt-review-attendees {
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
	margin: 0;
	padding: 0;
	list-style: none;
}

.blt-review-attendee {
	display: grid;
	grid-template-columns: 32px minmax(0, 1fr) minmax(0, 1fr);
	gap: 0.75rem;
	align-items: center;
	margin: 0;
	font-size: 1.36rem;
}

.blt-review-attendee__num {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	border-radius: var(--blt-e-radius-sm);
	background: var(--blt-e-surface-sunken);
	color: var(--blt-e-fg-muted);
	font-size: 1.28rem;
	font-weight: 600;
}

.blt-review-attendee__who,
.blt-review-attendee__contact {
	display: flex;
	flex-direction: column;
	min-width: 0;
	overflow-wrap: anywhere;
}

.blt-review-attendee__who strong {
	color: var(--blt-e-fg);
	font-weight: 600;
}

.blt-review-attendee__who span,
.blt-review-attendee__email {
	color: var(--blt-e-fg-muted);
	font-size: 1.28rem;
}

.blt-review-attendee__email {
	color: var(--blt-e-link);
}

@container blt-checkout (max-width: 520px) {
	.blt-review-attendee {
		grid-template-columns: 32px minmax(0, 1fr);
	}

	.blt-review-attendee__contact {
		grid-column: 2;
	}

	.blt-review-table__row {
		grid-template-columns: minmax(0, 1fr) auto auto;
	}

	.blt-review-table__row > :nth-child(2) {
		display: none;
	}
}

/* Payment method */
.blt-payment-section.blt-reg__card {
	margin-bottom: 0;
}

.blt-payment {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: 1.25rem;
}

@container blt-checkout (min-width: 760px) {
	.blt-payment {
		grid-template-columns: minmax(150px, 0.8fr) minmax(0, 2fr);
	}

	.blt-payment #blt-card-errors {
		grid-column: 2;
	}
}

.blt-payment__method {
	display: flex;
	align-items: flex-start;
	gap: 0.6rem;
}

.blt-payment__radio {
	flex-shrink: 0;
	width: 16px;
	height: 16px;
	margin-top: 0.15rem;
	border: 5px solid var(--blt-e-primary);
	border-radius: 50%;
	background: var(--blt-e-surface);
}

.blt-payment__method-text {
	display: flex;
	flex-direction: column;
	gap: 0.4rem;
}

.blt-payment__method-label {
	color: var(--blt-e-fg);
	font-size: 1.4rem;
	font-weight: 600;
}

.blt-payment__brands {
	display: flex;
	flex-wrap: wrap;
	gap: 0.3rem;
}

.blt-payment__brand {
	padding: 0.1rem 0.35rem;
	border: 1px solid var(--blt-e-border);
	border-radius: 3px;
	color: var(--blt-e-fg-muted);
	font-size: 0.99rem;
	font-weight: 700;
	letter-spacing: 0.03em;
}

.blt-payment__fields {
	display: flex;
	flex-wrap: wrap;
	gap: 1rem;
}

#blt-card-errors:empty {
	display: none;
}

.blt-stripe-field {
	padding: 0.7rem 0.75rem;
	border: 1px solid var(--blt-e-border);
	border-radius: var(--blt-e-radius-sm);
	background: var(--blt-e-surface);
	transition: border-color 0.2s, box-shadow 0.2s;
}

.blt-stripe-field.StripeElement--focus {
	border-color: var(--blt-e-primary);
	box-shadow: 0 0 0 3px var(--blt-e-focus-glow);
}

.blt-stripe-field.StripeElement--invalid {
	border-color: var(--blt-e-danger);
}

/* --- Summary sidebar --- */
.blt-summary {
	display: flex;
	flex-direction: column;
	gap: 1.1rem;
}

.blt-registration-form .blt-summary__title {
	font-size: 1.68rem;
	font-weight: 600;
	color: var(--blt-e-fg-strong);
}

.blt-summary__event {
	display: flex;
	gap: 0.85rem;
	align-items: flex-start;
}

.blt-summary__thumb {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	width: 64px;
	height: 64px;
	overflow: hidden;
	border-radius: var(--blt-e-radius-sm);
	background: var(--blt-e-surface-sunken);
	color: var(--blt-e-fg-subtle);
	font-size: 2.24rem;
}

.blt-summary__thumb img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.blt-summary__facts {
	display: flex;
	flex-direction: column;
	gap: 0.3rem;
	min-width: 0;
}

.blt-registration-form .blt-summary__facts p {
	margin: 0;
}

.blt-registration-form .blt-summary__name {
	color: var(--blt-e-fg);
	font-size: 1.44rem;
	font-weight: 600;
	line-height: 1.3;
}

.blt-summary__meta {
	display: flex;
	flex-wrap: wrap;
	gap: 0.2rem 0.75rem;
	color: var(--blt-e-fg-muted);
	font-size: 1.25rem;
}

.blt-summary__meta span {
	display: inline-flex;
	align-items: center;
	gap: 0.3rem;
}

.blt-summary__section {
	padding-top: 1rem;
	border-top: 1px solid var(--blt-e-border);
}

.blt-registration-form .blt-summary__label {
	display: block;
	margin-bottom: 0.4rem;
	color: var(--blt-e-fg);
	font-size: 1.28rem;
	font-weight: 600;
}

.blt-summary__lines {
	margin: 0;
	padding: 0;
	list-style: none;
}

.blt-summary__lines li {
	display: flex;
	justify-content: space-between;
	gap: 1rem;
	margin: 0;
	padding: 0.15rem 0;
	color: var(--blt-e-fg-muted);
	font-size: 1.31rem;
}

.blt-summary__lines li > :last-child {
	color: var(--blt-e-fg-soft);
	white-space: nowrap;
}

.blt-summary .blt-coupon-section {
	margin-bottom: 0;
}

.blt-summary .blt-coupon-input input,
.blt-summary .blt-btn-secondary {
	padding: 0.5rem 0.7rem;
	border-radius: var(--blt-e-radius-sm);
	font-size: 1.36rem;
}

.blt-summary .blt-coupon-input input {
	min-width: 0;
	background: var(--blt-e-surface);
}

.blt-summary__totals {
	margin: 0;
	padding-top: 1rem;
	border-top: 1px solid var(--blt-e-border);
}

.blt-summary__row {
	display: flex;
	justify-content: space-between;
	gap: 1rem;
	padding: 0.2rem 0;
	font-size: 1.36rem;
}

.blt-summary__row dt {
	color: var(--blt-e-fg-soft);
	font-weight: 500;
}

.blt-summary__row dd {
	margin: 0;
	color: var(--blt-e-fg);
	font-weight: 600;
}

.blt-summary__row--total {
	font-size: 1.6rem;
}

/* .blt-summary__totals already opens with its own border-top; this one is
   only needed to separate Total from Subtotal/Discount rows above it. When
   Total is the only row (an unstepped/free event), skipping it avoids two
   divider lines stacked right on top of each other. */
.blt-summary__row--total:not(:first-child) {
	margin-top: 0.6rem;
	padding-top: 0.8rem;
	border-top: 1px solid var(--blt-e-border);
}

.blt-summary__row--total dt,
.blt-summary__row--total dd {
	color: var(--blt-e-fg-strong);
	font-weight: 700;
}

.blt-summary #blt-form-messages {
	margin-bottom: 0;
	font-size: 1.4rem;
}

.blt-event__registration .blt-registration-form .blt-summary__secure {
	display: flex;
	align-items: center;
	align-self: center;
	gap: 0.35rem;
	margin-top: -0.35rem;
	color: var(--blt-e-fg-soft);
	font-size: 1.2rem;
}

.blt-help {
	display: flex;
	gap: 0.75rem;
	align-items: flex-start;
	padding: 1rem 1.25rem;
}

.blt-help__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	width: 32px;
	height: 32px;
	border-radius: 50%;
	background: var(--blt-e-surface-sunken);
	color: var(--blt-e-fg-muted);
	font-size: 1.6rem;
}

.blt-registration-form .blt-help__title {
	color: var(--blt-e-fg);
	font-size: 1.36rem;
	font-weight: 600;
}

.blt-registration-form .blt-help__text {
	color: var(--blt-e-fg-muted);
	font-size: 1.28rem;
	overflow-wrap: anywhere;
}

.blt-help__text a {
	color: var(--blt-e-link);
}

/* --- Done --- */
.blt-reg__complete {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.75rem;
	padding: 2.5rem 1.5rem;
	text-align: center;
}

.blt-reg__complete:focus {
	outline: none;
}

.blt-reg__complete-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 56px;
	height: 56px;
	border-radius: 50%;
	background: var(--blt-e-success-bg);
	color: var(--blt-e-success);
	font-size: 2.8rem;
}

.blt-reg__complete p {
	max-width: 32rem;
	color: var(--blt-e-fg-muted);
}

@container blt-checkout (max-width: 560px) {
	.blt-reg__progress {
		gap: 0.4rem;
	}

	.blt-reg__progress-step {
		gap: 0.3rem;
		font-size: 1.12rem;
	}

	.blt-reg__progress-step::before {
		width: 18px;
		height: 18px;
		font-size: 1.04rem;
	}

	.blt-registration-form .blt-reg__title {
		font-size: 2.24rem;
	}
}

@media (max-width: 700px) {
	.blt-registration-form {
		margin: 1.5rem 0;
	}
}

.blt-reg__step.blt-ticket-selection {
	margin-bottom: 0;
}
