/*
 * Shared "Event Landing Page" visual system: design tokens (navy/gold/
 * cream, Playfair Display + Lato) plus a small set of reusable component
 * classes (hero, quick-details bar, info/contact cards, form-card wrapper,
 * footer). Only loaded on pages using page-event-landing.php - see
 * inc/landing-page.php's fp_theme_enqueue_landing_assets().
 *
 * Class names are deliberately namespaced (landing-*, quick-details-*,
 * elegant-footer, form-card-wrapper) rather than reusing Bootstrap's own
 * vocabulary (.card, .container, etc.), since forms-platform's Bootstrap
 * assets load unconditionally alongside this stylesheet on the same page.
 */

:root {
	--landing-navy: #05122f;
	--landing-navy-card: #0b204c;
	--landing-navy-banner: #011a43;
	--landing-gold: #e5ad36;
	--landing-gold-tint: rgba(229, 173, 54, 0.07);
	--landing-gold-border: #c5a55a;
	--landing-gold-btn-border: #dfcd8c;
	--landing-cream: #faf8f5;
	--landing-text-light: #e2e8f0;
	--landing-text-muted-dark: #475569;
	--landing-text-muted-light: #94a3b8;
	--landing-text-dark: #0f172a;
	--landing-border-light: #d1d5db;
	--landing-font-heading: 'Playfair Display', Georgia, serif;
	--landing-font-body: 'Lato', -apple-system, BlinkMacSystemFont, sans-serif;
	--landing-btn-focus-shadow-rgb: 5, 18, 47;
}

a:not(.wp-block-paragraph a):not(.btn):not(.landing-contact-card a) {
	color: var(--landing-navy-card);
}

.wp-block-paragraph a {
	color: var(--landing-gold);
}

.landing-contact-card a {
    color: #fff;
    text-decoration: none;
}

.btn-close:focus {
	box-shadow: none;
	outline: 0;
}

/*
 * Bootstrap's Reboot (always loaded on these pages - see fp_page_has_form in
 * inc/landing-page.php) already zeroes body margin and sets border-box
 * sizing globally, so no reset rules are needed here.
 */

.landing-hero,
.quick-details-bar,
.landing-section,
.landing-form-section,
.elegant-footer,
.form-card-wrapper {
	font-family: var(--landing-font-body);
}

/* ---------- Hero ---------- */

/* No horizontal padding here, deliberately - per Figma, the hero-section
   itself is edge-to-edge full width (the banner below is w-full with zero
   surrounding gutter); only the text/button content underneath it is
   inset, via .landing-hero-content's own padding. */
.landing-hero {
	background: var(--landing-navy);
	padding-bottom: 80px;
	gap: 80px;
}

.landing-hero-banner {
	background: var(--landing-navy-banner);
	padding: 80px 0 48px;
	gap: 24px;
}

.landing-hero-crest,
.fp-privacy-logo img {
	width: 100px;
	height: auto;
}

.landing-hero-ribbon {
	width: 100%;
	height: auto;
	display: block;
}

.landing-hero-content {
	max-width: 1024px;
	gap: 20px;
	padding: 0 24px;
}

.landing-hero-title {
	font-family: var(--landing-font-heading);
	font-weight: 400;
	font-size: clamp(42px, 5vw, 60px);
	line-height: 1.15;
	margin: 0 0 1rem;
}

.landing-hero-title-line {
  color: #fff;
}

.landing-hero-title-line-accent {
  color: var(--landing-gold);
}

.landing-hero-subtitle {
	font-family: var(--landing-font-heading);
	color: #fff;
	font-size: clamp(18px, 2.5vw, 26px);
	line-height: 1.3;
	margin: 0;
}

.landing-hero-quote {
	font-family: var(--landing-font-heading);
	font-style: italic;
	color: var(--landing-text-light);
	font-size: 18px;
	line-height: 1.6;
	margin: 0;
}

.landing-hero-description {
	color: var(--landing-text-light);
	font-size: 18px;
	line-height: 1.7;
	margin: 0;
}

body[data-landing-form="centenary-year-celebration"] .landing-hero-description {
    color: var(--bs-body-color);
}

.landing-hero-meta-line {
	color: #fff;
	font-size: 18px;
	margin: 0;
}

.landing-eyebrow {
	font-family: var(--landing-font-body);
	font-weight: 700;
	color: var(--landing-gold);
	font-size: 14px;
	letter-spacing: 3px;
	text-transform: uppercase;
	margin: 0 0 4px;
}

.landing-hero-buttons {
	gap: 20px;
	padding-top: 12px;
}

.landing-hero-buttons .btn {
	min-width: 100%;
}

/* Built on Bootstrap's own .btn (see hero.php/404.php markup) and recolored
   via --bs-btn-* custom properties rather than a from-scratch button, so
   Bootstrap's own :hover/:focus-visible/:disabled handling keeps working. */
.btn-landing-primary,
.btn-landing-secondary {
	--bs-btn-border-radius: 12px;
	--bs-btn-padding-x: 36px;
	--bs-btn-padding-y: 18px;
	--bs-btn-font-size: 16px;
	--bs-btn-font-weight: 700;
	--bs-btn-focus-shadow-rgb: var(--landing-btn-focus-shadow-rgb);
	font-family: var(--landing-font-body);
	text-transform: uppercase;
}

.btn-landing-primary {
	--bs-btn-color: var(--landing-navy);
	--bs-btn-bg: var(--landing-gold);
	--bs-btn-border-color: var(--landing-gold-btn-border);
	--bs-btn-hover-color: var(--landing-navy);
	--bs-btn-hover-bg: #d99e1f;
	--bs-btn-hover-border-color: #d99e1f;
	--bs-btn-active-color: var(--landing-navy);
	--bs-btn-active-bg: #d99e1f;
	--bs-btn-active-border-color: #d99e1f;
	box-shadow: 0 8px 8px rgba(197, 165, 90, 0.15);
}

.btn-landing-secondary {
	--bs-btn-color: var(--landing-gold);
	--bs-btn-border-color: var(--landing-gold);
	--bs-btn-hover-color: var(--landing-navy);
	--bs-btn-hover-bg: var(--landing-gold);
	--bs-btn-hover-border-color: var(--landing-gold);
	--bs-btn-active-color: var(--landing-navy);
	--bs-btn-active-bg: var(--landing-gold);
	--bs-btn-active-border-color: var(--landing-gold);
}

/* ---------- Quick-details bar ---------- */

/* No Bootstrap utility classes on this component's markup (see
   quick-details-bar.php's own comment) - display/alignment/gap/text-align/
   responsive-display are all plain properties here instead, replicating
   exactly what d-flex/align-items-center/justify-content-center/flex-wrap/
   gap-3/text-center/d-none/d-md-block used to provide, so a page-scoped
   override elsewhere in this file can win on ordinary specificity without
   needing !important anywhere. */
.quick-details-bar {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
	gap: 1rem;
	/* The Figma spec's rgba(229,173,54,0.07) is a subtle gold tint meant to
	   sit over this section's navy backdrop - since this section has no
	   navy ancestor of its own (each section paints its own background),
	   layering the tint over an explicit navy base is required, or the
	   7%-opacity gold composites against the page's plain white background
	   instead, producing a near-white bar that the white value text below
	   is then invisible against. */
	background-color: var(--landing-navy);
	background-image: linear-gradient(var(--landing-gold-tint), var(--landing-gold-tint));
	border-top: 1px solid var(--landing-gold);
	border-bottom: 1px solid var(--landing-gold);
	padding: 32px 24px;
}

.quick-details-item {
	flex: 1 1 160px;
	text-align: center;
}

.quick-details-value {
	color: #fff;
	font-size: 24px;
	font-weight: 700;
	margin: 4px 0 0;
}

.quick-details-divider {
	display: none;
	width: 1px;
	height: 48px;
	background: var(--landing-gold);
	opacity: 0.6;
}

@media (min-width: 768px) {
	.quick-details-divider {
		display: block;
	}
}

/* ---------- Content sections (info-cards/contact-cards, authored per page) ---------- */

.landing-section {
	background: var(--landing-navy);
	padding: 64px 24px;
	gap: 40px;
	color: #fff;
}

.landing-section--dark {
	background: var(--landing-navy);
}

.landing-section-inner {
	width: 100%;
	max-width: 1200px;
}

.landing-heading {
	font-family: var(--landing-font-heading);
	font-weight: 400;
	color: var(--landing-text-dark);
	font-size: clamp(28px, 4vw, 48px);
	line-height: 1.15;
	text-align: center;
	margin-bottom: 16px;
}

.landing-section--dark .landing-heading {
	color: #fff;
}

/* The smaller in-card headings ("The Creative Brief", "Quick Eligibility
   Note") are Bold, unlike the big 48-60px section/hero headings above
   which are Regular weight - a real, deliberate distinction in the design. */
.landing-subheading {
	font-family: var(--landing-font-heading);
	color: var(--landing-gold);
	font-size: 32px;
	margin: 0 0 16px;
}

.landing-lead {
	color: var(--landing-text-muted-dark);
	font-size: 16px;
	text-align: center;
	max-width: 620px;
	margin: 0 auto;
}

.landing-section--dark .landing-lead {
	color: var(--landing-text-light);
}

.landing-two-col.row {
	/* Figma's exact 40px gap doesn't land on Bootstrap's g-4(24px)/g-5(48px)
	   scale - set via the grid's own gutter variables instead of a bespoke
	   flex/gap property, so this still uses Bootstrap's row/col mechanism
	   rather than reintroducing custom layout CSS. */
	/* --bs-gutter-x: 2.5rem; */
	--bs-gutter-y: 2.5rem;
}

/* Bootstrap's default --bs-gutter-y is 0 - fine while these cards sit
   side-by-side at col-lg-3/col-lg-4, but at col-12 below lg they stack
   full-width with zero gap between them, since gutter-x (horizontal-only)
   is the only spacing these rows previously set. */
.landing-info-grid.row,
.landing-contact-cards.row {
	--bs-gutter-y: 1.5rem;
}

.landing-two-col p {
	color: var(--landing-text-light);
	font-size: 16px;
	line-height: 1.75;
}

.landing-note-card {
	background: var(--landing-navy-card);
	border: 1px solid var(--landing-gold);
	border-radius: 16px;
	padding: 32px;
	color: #fff;
}

.landing-note-card h3 {
	font-family: var(--landing-font-heading);
	color: var(--landing-gold);
	font-size: 24px;
	margin: 0 0 16px;
}

.landing-note-card p {
	color: var(--landing-text-light);
	line-height: 1.65;
	margin: 0;
}

.landing-info-card {
	background: var(--landing-navy-card);
	border: 1px solid var(--landing-gold);
	padding: 32px;
	box-shadow: 0 8px 12px rgba(0, 0, 0, 0.25);
}

.landing-icon-badge {
	width: 48px;
	height: 48px;
	background: var(--landing-gold-tint);
	border: 1px solid var(--landing-gold);
	color: var(--landing-gold);
	font-size: 20px;
}

.landing-info-card h3 {
	font-family: var(--landing-font-heading);
	color: var(--landing-gold);
	font-size: 22px;
	margin: 0 0 8px;
}

.landing-info-card p {
	color: var(--landing-text-light);
	font-size: 15px;
	line-height: 1.6;
	margin: 0;
}

.landing-contact-card {
	background: var(--landing-navy-card);
	border: 1px solid var(--landing-gold);
	border-radius: 20px;
	padding: 32px;
	display: flex;
    flex-direction: column;
	gap: 0;
	box-shadow: 0 0 24px rgba(229, 173, 54, 0.08), 0 10px 28px rgba(0, 0, 0, 0.25);
}

.landing-contact-card span:first-child {
	font-weight: 700;
	color: var(--landing-gold);
	font-size: 14px;
	letter-spacing: 3px;
	text-transform: uppercase;
	margin: 0 0 8px;
}

.landing-contact-card span:last-child {
	color: #fff;
	font-size: 24px;
	margin: 0;
}

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

.landing-form-section {
	background: var(--landing-cream);
	padding: 48px 24px;
	gap: 48px;
}

.form-card-wrapper {
	background: #fff;
	border: 1px solid var(--landing-gold);
	border-radius: 24px;
	box-shadow: 0 16px 24px rgba(5, 20, 53, 0.07);
	max-width: 768px;
}

/* forms-platform's own .fp-form caps at 640px for its default bare-embed
   use case; inside the wider landing form card, let it fill the card. */
.form-card-wrapper .fp-form {
	max-width: 100%;
	margin: 0;
}

/*
 * Reskins forms-platform's generic Bootstrap field/button markup to match
 * this page's design tokens - scoped entirely to .form-card-wrapper so the
 * plugin's own default look (used by every other form on the site) is
 * untouched. Sizing (48px field height, 8px radius, 14px bold labels) and
 * colors (border #d1d5db, required-asterisk #e11d48, placeholder #9ca3af)
 * come directly from the Figma spec.
 */
.form-card-wrapper .fp-form-inner {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

.form-card-wrapper .fp-field {
	margin-bottom: 0;
}

/*
 * forms-platform renders fields as a flat list (no row/pairing markup at
 * all), but the Figma form-card groups certain fields two-to-a-row (e.g.
 * First Name + Last Name). Reproducing that without changing the plugin's
 * generic rendering means a CSS grid keyed to each specific form's known
 * field order via its data-form-slug - fragile to a field-order change on
 * that one form, but doesn't touch shared plugin markup/rendering used by
 * every other form on the site. Breakpoint tracks Bootstrap's own `md`
 * (768px) rather than a one-off value - below that, the card's own
 * responsive padding (see .form-card-wrapper) still leaves too little room
 * for two fields side-by-side.
 */
@media (min-width: 768px) {
	[data-form-slug="coffee-table-book-cover-design-competition"] .fp-form-inner,
	[data-form-slug="centenary-year-celebration"] .fp-form-inner {
		display: grid;
		grid-template-columns: 1fr 1fr;
		column-gap: 24px;
		row-gap: 16px;
	}

	/* Artwork form order: [honeypot, first_name, last_name, email, mobile,
	   peterite, batch_year, artwork_file, submit] - peterite onward (the
	   6th .fp-field, since the honeypot is child #1) spans full width. */
	[data-form-slug="coffee-table-book-cover-design-competition"] .fp-form-inner > .fp-field:nth-child(n+6),
	[data-form-slug="coffee-table-book-cover-design-competition"] .fp-form-inner > .fp-btn-submit {
		grid-column: 1 / -1;
	}

	/* RSVP form order: [honeypot, first_name, last_name, email, mobile,
	   obu_number, batch, attendance, submit] - attendance onward (the 8th
	   .fp-field) spans full width. */
	[data-form-slug="centenary-year-celebration"] .fp-form-inner > .fp-field:nth-child(n+8),
	[data-form-slug="centenary-year-celebration"] .fp-form-inner > .fp-btn-submit {
		grid-column: 1 / -1;
	}
}

.form-card-wrapper .form-label,
.form-card-wrapper .fp-field > .form-label:not(label) {
	font-family: var(--landing-font-body);
	font-weight: 700;
	font-size: 16px;
	color: var(--landing-text-dark);
	margin-bottom: 8px;
	display: inline-flex;
	gap: 4px;
	align-items: center;
}

.form-card-wrapper .fp-required {
	color: #e11d48;
}

.form-card-wrapper .form-control,
.form-card-wrapper .form-select {
	height: 48px;
	border-radius: 8px;
	border-color: var(--landing-border-light);
	font-family: var(--landing-font-body);
	font-size: 16px;
	padding: 0 16px;
}

.form-card-wrapper .form-control::placeholder {
	color: #9ca3af;
}

.form-card-wrapper textarea.form-control {
	height: auto;
	padding: 12px 16px;
}

/* intl-tel-input wraps the tel field's real <input> in its own .iti div
   (see vendor CSS: `.iti { display:inline-block }`, no width set) - unlike
   every other field's .form-control, which is display:block/width:100%,
   the wrapper has nothing forcing it to fill the field, so it can end up
   narrower/shorter than its sibling in a paired grid row. */
.form-card-wrapper .iti {
	width: 100%;
}

.form-card-wrapper .form-text {
	font-family: var(--landing-font-body);
	color: var(--landing-text-muted-dark);
	font-size: 13px;
	margin-top: 0.5rem !important;
    display: block;
}

/* .fp-btn-submit already carries Bootstrap's own .btn class (see the
   plugin's templates/form-shell.php) - recolor via Bootstrap's own
   --bs-btn-* custom properties rather than raw property overrides, so
   Bootstrap's own :hover/:focus-visible handling (and focus ring) keeps
   working instead of being silently overridden by an unconditional rule
   at equal specificity. */
.form-card-wrapper .fp-btn-submit {
	--bs-btn-color: var(--landing-gold);
	--bs-btn-bg: var(--landing-navy);
	--bs-btn-border-color: var(--landing-navy);
	--bs-btn-hover-color: var(--landing-gold);
	--bs-btn-hover-bg: #0a1f47;
	--bs-btn-hover-border-color: #0a1f47;
	--bs-btn-active-color: var(--landing-gold);
	--bs-btn-active-bg: #0a1f47;
	--bs-btn-active-border-color: #0a1f47;
	--bs-btn-focus-shadow-rgb: var(--landing-btn-focus-shadow-rgb);
	--bs-btn-border-radius: 12px;
	--bs-btn-padding-x: 18px;
	--bs-btn-padding-y: 18px;
	--bs-btn-font-size: 16px;
	--bs-btn-font-weight: 700;
	font-family: var(--landing-font-body);
	text-transform: uppercase;
}

/* Same technique as .fp-btn-submit above - .fp-btn-verify already carries
   .btn (see templates/fields/field-email.php, field-tel.php, and the
   WhatsApp modal), so recolor via --bs-btn-* rather than raw properties. */
.form-card-wrapper .fp-btn-verify {
	--bs-btn-color: #fff;
	--bs-btn-bg: var(--landing-navy);
	--bs-btn-border-color: var(--landing-navy);
	--bs-btn-hover-color: #fff;
	--bs-btn-hover-bg: #1e293b;
	--bs-btn-hover-border-color: #1e293b;
	--bs-btn-active-color: #fff;
	--bs-btn-active-bg: #1e293b;
	--bs-btn-active-border-color: #1e293b;
	--bs-btn-focus-shadow-rgb: var(--landing-btn-focus-shadow-rgb);
	--bs-btn-border-radius: 8px;
	--bs-btn-padding-x: 16px;
	--bs-btn-font-size: 13px;
	--bs-btn-font-weight: 700;
	font-family: var(--landing-font-body);
	text-transform: uppercase;
}

/* File field: recolors the plugin's generic .fp-dropzone (see
   fp-public.css - icon badge, headline, hint, filename, browse button are
   all real sibling elements, not styling bolted onto the native input
   directly, since a native <input type="file"> can't contain child markup)
   to this page's navy/gold/cream palette. */
.form-card-wrapper .fp-dropzone {
	background: var(--landing-cream);
	border: 1px dashed var(--landing-gold);
	border-radius: 16px;
	padding: 40px 24px;
	gap: 16px;
}

.form-card-wrapper .fp-dropzone-icon {
	width: 56px;
	height: 56px;
	background: #fff;
	border: 1px solid var(--landing-gold);
	color: var(--landing-gold);
	font-size: 24px;
}

.form-card-wrapper .fp-dropzone-text {
	font-family: var(--landing-font-body);
	font-size: 16px;
	color: var(--landing-text-dark);
}

.form-card-wrapper .fp-dropzone-hint {
	font-family: var(--landing-font-body);
	font-size: 13px;
	color: var(--landing-text-muted-dark);
	margin-top: 0;
}

.form-card-wrapper .fp-dropzone-filename {
	font-family: var(--landing-font-body);
	font-size: 13px;
	color: var(--landing-text-dark);
}

.form-card-wrapper .fp-dropzone-browse-btn {
	--bs-btn-color: var(--landing-navy);
	--bs-btn-bg: var(--landing-gold);
	--bs-btn-border-color: var(--landing-gold);
	--bs-btn-border-radius: 8px;
	--bs-btn-padding-x: 20px;
	--bs-btn-padding-y: 10px;
	--bs-btn-font-size: 13px;
	font-family: var(--landing-font-body);
}

/* Peterite Yes/No: a compact horizontal toggle, distinct from the bigger
   icon-badge "cards" style used elsewhere (e.g. RSVP's Attendance field) -
   both are the same underlying `display: cards` field, restyled per-field
   here via its data-fp-key rather than a new plugin display variant. */
.form-card-wrapper [data-fp-key="peterite"] .fp-radio-cards {
	flex-direction: row;
}

.form-card-wrapper [data-fp-key="peterite"] .fp-radio-card {
	flex-direction: row;
	align-items: center;
	gap: 8px;
	padding: 12px 16px;
}

/* Selected-state gold theme for any cards-style radio field inside the
   landing form (peterite's row layout above AND the default column layout
   used by e.g. RSVP's attendance field) - the plugin's own default selected
   state is navy/black (see fp-public.css), with no landing override
   previously existing for any field but peterite, and even that one never
   set border-color, so it silently fell through to navy too. */
.form-card-wrapper .fp-radio-card:has(.fp-radio-card-input:checked) {
	background: var(--landing-gold-tint);
	border-color: var(--landing-gold);
	border-width: 2px;
}

.form-card-wrapper [data-fp-key="peterite"] .fp-radio-card-label {
	font-size: 14px;
	font-weight: 700;
	padding-right: 0;
}

.form-card-wrapper [data-fp-key="peterite"] .fp-radio-card-input {
	position: static;
	width: 16px;
	height: 16px;
	flex-shrink: 0;
}

/* Attendance (RSVP): the plugin's generic "cards" display only renders a
   bare label/description with a small corner radio dot - it has no concept
   of a per-option icon, so the Figma-spec icon badge (person/people in a
   40px circle) has to be injected here as a ::before, using bootstrap-icons'
   own webfont + codepoints directly (already loaded - see FP_Public) since
   there's no element in the plugin's markup to hang a real <i> tag on.
   Also corrects padding/radius/gap/label-size, which the plugin's defaults
   (16px/8px/12px/16px) don't match Figma's (24px/12px/24px/18px). */
.form-card-wrapper [data-fp-key="attendance"] .fp-radio-cards {
	gap: 24px;
}

.form-card-wrapper [data-fp-key="attendance"] .fp-radio-card {
	padding: 24px;
	border-radius: 12px;
}

.form-card-wrapper [data-fp-key="attendance"] .fp-radio-card-label {
	font-size: 18px;
}

.form-card-wrapper [data-fp-key="attendance"] .fp-radio-card::before {
	content: "\F4E1"; /* bi-person */
	font-family: "bootstrap-icons";
	font-weight: 400;
	font-style: normal;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	font-size: 20px;
	background: var(--landing-cream);
	color: var(--landing-text-muted-dark);
}

.form-card-wrapper [data-fp-key="attendance"] .fp-radio-card:nth-of-type(2)::before {
	content: "\f4d0"; /* bi-people */
}

.form-card-wrapper [data-fp-key="attendance"] .fp-radio-card:has(.fp-radio-card-input:checked)::before {
	background: var(--landing-gold);
	color: #fff;
}

/* Native radio dot accent color (peterite's inline dot, attendance's
   corner dot, the WhatsApp modal's confirm checkbox) - otherwise renders
   in the browser's default accent color instead of the landing gold. */
.form-card-wrapper input[type="radio"],
.form-card-wrapper input[type="checkbox"] {
	accent-color: var(--landing-gold);
}

/* ---------- Verification modals ----------
   The plugin's 3 verification modals (email/mobile OTP, WhatsApp) are
   page-level singletons FP_Shortcode appends to the same returned HTML as
   the form itself - since form-card.php echoes do_shortcode() inside
   .form-card-wrapper, the modals end up nested inside it too, so they can
   be themed entirely from here without touching the plugin. Their primary
   "Verify"/"Continue" buttons already inherit the .fp-btn-verify reskin
   above. The plugin's own .fp-modal (fp-public.css) already provides real
   chrome (radius/padding/shadow, via --bs-modal-* variables) sitewide - this
   only needs to recolor the border gold for the landing brand, again via
   the same --bs-modal-border-color/-width variables rather than a raw
   border property. */
.form-card-wrapper .modal-content {
	--bs-modal-border-width: 1px;
	--bs-modal-border-color: var(--landing-gold);
}

.form-card-wrapper .modal-title {
	font-family: var(--landing-font-heading);
	font-weight: 700;
	color: var(--landing-navy);
}

.form-card-wrapper .modal-body p {
	font-family: var(--landing-font-body);
	color: var(--landing-text-muted-dark);
}

/* Pin exact size/radius/border rather than relying on cascade order against
   the plugin's own .fp-otp-boxes .fp-otp-box rule (same specificity - which
   one wins depends on stylesheet enqueue order, too fragile to leave
   implicit). */
.form-card-wrapper .fp-otp-box {
	border-radius: 8px;
	border-color: var(--landing-border-light);
}

.form-card-wrapper .fp-otp-box:focus {
	border-color: var(--landing-gold);
	box-shadow: 0 0 0 0.2rem var(--landing-gold-tint);
}

/* Recolor via Bootstrap's own --bs-btn-* custom properties (no !important
   needed - these aren't utility classes) rather than fighting specificity
   with raw property overrides. */
.form-card-wrapper .btn-outline-secondary {
	--bs-btn-color: var(--landing-navy);
	--bs-btn-border-color: var(--landing-border-light);
	--bs-btn-hover-bg: var(--landing-navy);
	--bs-btn-hover-border-color: var(--landing-navy);
}

.form-card-wrapper .btn-link {
	--bs-btn-color: var(--landing-navy);
	--bs-btn-hover-color: var(--landing-navy-card);
}

/* Bootstrap's .bg-light utility carries !important by design (verified
   against bootstrap.min.css), so overriding it requires !important too -
   the one deliberate exception in this file. */
.form-card-wrapper .fp-whatsapp-code-box.bg-light {
	background: var(--landing-gold-tint) !important;
	border: 1px dashed var(--landing-gold);
}

.form-card-wrapper .fp-whatsapp-code {
	color: var(--landing-navy);
}

/* Defends against a real overflow case: the plugin's 6 OTP boxes at their
   default 44px width + gap-2 (8px) need 304px, which exceeds a ~272px
   modal content area on a 320px-wide phone (375px+ viewports clear it with
   room to spare). */
@media (max-width: 400px) {
	.form-card-wrapper .fp-otp-boxes {
		gap: 0.375rem;
	}

	.form-card-wrapper .fp-otp-box {
		width: 38px;
	}
}

/* ---------- Footer ---------- */

.elegant-footer {
	background: var(--landing-navy);
	border-top: 1px solid var(--landing-gold-border);
	padding: 32px 24px;
	gap: 12px;
}

.elegant-footer-copyright,
.elegant-footer-links a {
	color: var(--landing-text-muted-light) !important;
	font-size: 14px;
}

.elegant-footer-copyright {
	margin: 0;
}

.elegant-footer-links a {
	text-decoration: none;
}

.elegant-footer-links a:hover {
	text-decoration: underline;
}

/* 3-tier section padding (24px base / 48px tablet / 120px desktop) - no
   Bootstrap utility reaches 120px (max spacer is p-5=48px), so this stays
   custom, but the breakpoint values reuse Bootstrap's own md/xl thresholds
   rather than one-off numbers. .landing-hero itself is deliberately excluded
   (see its own rule above) - only .landing-hero-content, which already has
   its own max-width + centering, needs just enough padding to keep text off
   the viewport edge on mobile, so it doesn't need this same 3-tier escalation. */
@media (min-width: 768px) {
	.landing-section,
	.landing-form-section,
	.quick-details-bar,
	.landing-programme,
	.elegant-footer {
		padding-left: 48px;
		padding-right: 48px;
	}

	.landing-hero-crest,
	.fp-privacy-logo img {
    	width: 125px;
	}

	.landing-hero-buttons .btn {
		min-width: 35%;
	}
}

@media (min-width: 1200px) {
	.landing-section,
	.landing-form-section,
	.quick-details-bar,
	.landing-programme,
	.elegant-footer {
		padding-left: 120px;
		padding-right: 120px;
	}

	.landing-programme,
	.landing-form-section {
		padding-top: 80px !important;
		padding-bottom: 80px !important;
	}
}

/* ==========================================================================
   RSVP (Centenary Year Celebration) page redesign - scoped overrides only.
   Everything below targets body[data-landing-form="centenary-year-celebration"]
   (set by page-event-landing.php from the page's own _fp_landing_form_id
   meta - the same value already used by the [data-form-slug="..."] rules
   above) so the Coffee Table Book Cover page, which embeds a different
   form, is provably unaffected. Wrapper-level form-card rules use
   :has([data-form-slug="..."]) instead, since data-form-slug lives on a
   descendant (.fp-form) of .form-card-wrapper, not the wrapper itself -
   same technique already used by .fp-radio-card:has(...) above.
   ========================================================================== */

/* ---------- Hero: photo background, no navy banner strip ---------- */

body[data-landing-form="centenary-year-celebration"] .landing-hero-banner {
	background: transparent;
	padding-bottom: 0;
}

body[data-landing-form="centenary-year-celebration"] .landing-hero {
	background: linear-gradient(rgba(255, 253, 248, .72), rgba(255, 253, 248, .72)),
		url('../images/rsvp-hero-bg.jpg') center / cover no-repeat;
	gap: 40px;
}

body[data-landing-form="centenary-year-celebration"] .landing-hero-title-line {
	color: #7a5c00;
}

/* Content mapping is unchanged (hero_quote still holds "Honouring the
   Past...", hero_subtitle still holds "Opening Ceremony & Holy Mass") -
   only which element looks like the bigger statement vs. the smaller plain
   line swaps, per the updated Figma design. */
body[data-landing-form="centenary-year-celebration"] .landing-hero-quote {
	font-family: var(--landing-font-body);
	font-style: normal;
	font-size: 21px;
	color: #1a1a1a;
}

body[data-landing-form="centenary-year-celebration"] .landing-hero-subtitle {
	font-weight: 400;
	font-size: 21px;
	color: #1a1a1a;
}

body[data-landing-form="centenary-year-celebration"] .btn-landing-primary {
	--bs-btn-color: #fff;
	--bs-btn-bg: #c9960c;
	--bs-btn-hover-color: #fff;
	--bs-btn-hover-bg: #b8890b;
	--bs-btn-active-color: #fff;
	--bs-btn-active-bg: #b8890b;
	border: none;
	box-shadow: none;
}

/* ---------- Quick-details bar: real Figma layout is a 2-column x 2-row
   grid (Date+Time / Venue+Dress Code), one vertical divider per row -
   distinctly different from the shared component's default single loosely-
   wrapping row with a divider before every item. .quick-details-item is a
   <div> and .quick-details-divider is a <span> - different tag types, so
   :nth-of-type below counts only item positions (1st/2nd/3rd/4th...),
   letting CSS alone pick "the 2nd item of each row" without touching the
   shared quick-details-bar.php loop. ---------- */

/* CSS Grid rather than flex-wrap: a flex item sized via flex-basis:50%
   plus its own padding can push the pair fractionally past 100% of the
   row, and flex-wrap reflows to a new line the instant a row doesn't fit -
   collapsing to one item per row instead of two. A defined
   grid-template-columns track structure has no such content-driven
   reflow: it always places exactly 2 items per row at this breakpoint,
   full stop. No !important needed anywhere below - quick-details-bar.php
   carries no Bootstrap utility classes (see its own comment), so this
   selector's plain higher specificity is enough to win outright. */
body[data-landing-form="centenary-year-celebration"] .quick-details-bar {
	background: #fdf3d8;
	background-image: none;
	border-top-color: #c5962c;
	border-bottom-color: #c5962c;
	display: grid;
	grid-template-columns: 1fr;
	row-gap: 32px;
	column-gap: 0;
}

body[data-landing-form="centenary-year-celebration"] .quick-details-bar .landing-eyebrow {
	color: #8b6914;
}

body[data-landing-form="centenary-year-celebration"] .quick-details-value {
	color: #2d1f00;
	font-size: 24px;
}

/* Replaced by the border-based divider below, which can land between
   exactly the 2 items of each row - a divider before every item (the
   shared component's default) would put 3 dividers among 4 items instead
   of 1 per row. */
body[data-landing-form="centenary-year-celebration"] .quick-details-divider {
	display: none;
}

@media (min-width: 768px) {
	body[data-landing-form="centenary-year-celebration"] .quick-details-bar {
		grid-template-columns: 1fr 1fr;
	}

	body[data-landing-form="centenary-year-celebration"] .quick-details-item:nth-of-type(odd) {
		padding-right: 32px;
	}

	body[data-landing-form="centenary-year-celebration"] .quick-details-item:nth-of-type(even) {
		border-left: 1px solid #c5962c;
		padding-left: 32px;
	}
}

/* ---------- Form card: gold/cream field styling ---------- */

.form-card-wrapper:has([data-form-slug="centenary-year-celebration"]) {
	border-color: #c9960c;
}

.form-card-wrapper:has([data-form-slug="centenary-year-celebration"]) .form-control,
.form-card-wrapper:has([data-form-slug="centenary-year-celebration"]) .form-select {
	border-color: #d4af37;
}

/* Bootstrap's own .form-control:focus/.form-select:focus are hardcoded to
   its default blue, not driven by --bs-* custom properties like its
   buttons/modals are (verified against the vendored bootstrap.min.css) -
   a plain override is enough since Bootstrap's own rule carries no
   !important. Same gold already used for this page's primary button/
   attendance-selected state; ring proportions mirror Bootstrap's own
   default (0.25rem / 25% alpha), just recolored. */
.form-card-wrapper:has([data-form-slug="centenary-year-celebration"]) .form-control:focus,
.form-card-wrapper:has([data-form-slug="centenary-year-celebration"]) .form-select:focus {
	border-color: #c9960c;
	box-shadow: 0 0 0 0.25rem rgba(201, 150, 12, 0.25);
}

.form-card-wrapper:has([data-form-slug="centenary-year-celebration"]) .fp-required {
	color: #c0392b;
}

.form-card-wrapper:has([data-form-slug="centenary-year-celebration"]) .fp-btn-submit {
	--bs-btn-color: #fff;
	--bs-btn-bg: #c9960c;
	--bs-btn-border-color: #c9960c;
	--bs-btn-hover-color: #fff;
	--bs-btn-hover-bg: #b8890b;
	--bs-btn-hover-border-color: #b8890b;
	--bs-btn-active-color: #fff;
	--bs-btn-active-bg: #b8890b;
	--bs-btn-active-border-color: #b8890b;
}

.form-card-wrapper:has([data-form-slug="centenary-year-celebration"]) .fp-btn-verify {
	--bs-btn-color: #fff;
	--bs-btn-bg: #1a1a1a;
	--bs-btn-border-color: #1a1a1a;
	--bs-btn-hover-color: #fff;
	--bs-btn-hover-bg: #333;
	--bs-btn-hover-border-color: #333;
}

/* Attendance card colors - [data-fp-key="attendance"] only ever exists on
   this form's schema, so these are inherently safe without :has() scoping
   (same reasoning already used by the "peterite" field's own override
   above). Selected-state background/border/icon colors only - the shared
   .fp-radio-card:has(...) default above is left untouched since it's also
   used by the "peterite" field on the Coffee Table page. */
.form-card-wrapper [data-fp-key="attendance"] .fp-radio-card {
	border-color: #d4af37;
}

.form-card-wrapper [data-fp-key="attendance"] .fp-radio-card:has(.fp-radio-card-input:checked) {
	background: #fdf6e3;
	border-color: #c9960c;
}

.form-card-wrapper [data-fp-key="attendance"] .fp-radio-card::before {
	background: #fdf6e3;
}

.form-card-wrapper [data-fp-key="attendance"] .fp-radio-card:has(.fp-radio-card-input:checked)::before {
	background: #c9960c;
}

/* ---------- Event Programme (new section, no existing page uses it yet -
   literal Figma colors, no scoping needed) ---------- */

.landing-programme {
	background: #fdf6e3;
	padding: 48px 24px;
}

.landing-programme-inner {
	width: 100%;
	max-width: 860px;
}

.landing-programme-list {
	display: flex;
	flex-direction: column;
}

.landing-programme-row {
	gap: 24px;
	padding: 24px 0;
	border-bottom: 1px solid #e8d5a0;
}

.landing-programme-row:last-child {
	border-bottom: none;
	padding-bottom: 0;
}

.landing-programme-time {
	flex: 0 0 200px;
	font-family: var(--landing-font-body);
	font-weight: 700;
	color: #b8860b;
	font-size: 15px;
}

.landing-programme-desc {
	flex: 1 1 auto;
	font-family: var(--landing-font-body);
	color: #2d2d2d;
	font-size: 16px;
	line-height: 1.6;
}

@media (max-width: 575.98px) {
	.landing-programme-row {
		flex-direction: column;
		gap: 4px;
	}

	.landing-programme-time {
		flex: 0 0 auto;
	}
}

/* ---------- Footer: cream/gold instead of navy ---------- */

body[data-landing-form="centenary-year-celebration"] .elegant-footer {
	background: #fdf6e3;
	border-top-color: #c9960c;
}

body[data-landing-form="centenary-year-celebration"] .elegant-footer-copyright,
body[data-landing-form="centenary-year-celebration"] .elegant-footer-links a {
	color: #7a6030 !important;
}
