/* =========================================================================
   FOTA Child — Design tokens & core app-shell styles
   Mobile-first, SaaS-dashboard feel over traditional-website feel.
   ========================================================================= */

:root {
	/* Canonical FOTA brand colors (docs/BRAND.md) — supersede all prior
	   placeholder values. Change the palette here, nowhere else. */
	--fota-navy: #042446;
	--fota-signal-blue: #0957bb;
	--fota-red: #c51b2b;
	--fota-white: #ffffff;

	/* Color system — existing token names kept so templates/JS that
	   already reference them don't need a mass rename; each now points
	   at the canonical brand color it represents. Use the --fota-navy /
	   --fota-signal-blue / --fota-red tokens above directly in new code. */
	--fota-rf-blue: var(--fota-signal-blue);
	--fota-rf-blue-dark: var(--fota-navy);
	--fota-deep-navy: var(--fota-navy);
	--fota-fair-red: var(--fota-red);
	--fota-neutral-gray: #6b7280;
	--fota-neutral-gray-light: #e5e7eb;
	--fota-neutral-gray-bg: #f7f8fa;

	--fota-success: #1a7f4b;
	--fota-warning: #b8860b;
	--fota-icon-disabled: var(--fota-neutral-gray);

	/* Typography — clean sans-serif, no decorative fonts */
	--fota-font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
	--fota-font-size-base: 1rem;
	--fota-line-height-base: 1.5;

	/* Spacing / shape */
	--fota-radius: 10px;
	--fota-radius-sm: 6px;
	--fota-shadow: 0 1px 2px rgba(11, 31, 58, 0.06), 0 1px 3px rgba(11, 31, 58, 0.08);
	--fota-shadow-elevated: 0 4px 16px rgba(11, 31, 58, 0.12);

	--fota-bottom-nav-height: 64px;
	--fota-touch-target: 44px;
}

/* =========================================================================
   Accessibility: visible focus (WCAG 2.4.7 / 2.4.11)
   A double ring (white inner + Fair Red outer) rather than a single
   color so it stays visible regardless of what's behind it — the brand
   blue used on most buttons/links would otherwise swallow a plain blue
   browser-default outline, and a single dark ring would disappear
   against the dark navy hero section.
   ========================================================================= */

:focus-visible {
	outline: 3px solid var(--fota-fair-red);
	outline-offset: 2px;
	box-shadow: 0 0 0 2px var(--fota-white);
}

.fota-hero :focus-visible {
	box-shadow: 0 0 0 2px var(--fota-deep-navy);
}

.fota-skip-link {
	position: absolute;
	top: -999px;
	left: 0;
	z-index: 10000;
	padding: 0.75rem 1.25rem;
	background: var(--fota-deep-navy);
	color: var(--fota-white);
	font-weight: 600;
	text-decoration: none;
	border-radius: 0 0 var(--fota-radius-sm) 0;
}

.fota-skip-link:focus {
	top: 0;
}

/* =========================================================================
   Primary logo (docs/BRAND.md)

   The source SVG's canvas has excess blank space on the right — its real
   artwork only fills the left ~60% of the canvas. `.fota-site-logo__crop`
   is sized to the *measured content* aspect ratio (not the canvas ratio)
   with `overflow: hidden`; the <img> inside renders at its natural,
   wider, full-canvas ratio via `height: 100%; width: auto`, so it
   overflows into the blank space on the right and gets clipped there —
   a ratio-based crop, not a hand-tuned pixel offset, so it keeps working
   if header height changes. The content already starts at x≈0 in the
   canvas, so no left offset is needed to align it.
   ========================================================================= */

.fota-site-logo {
	display: inline-flex;
	align-items: center;
	max-width: 100%;
}

.fota-site-logo__crop {
	display: block;
	height: clamp(32px, 6vw, 44px);
	width: auto;
	max-width: 100%;
	aspect-ratio: 1807.08 / 850.21;
	overflow: hidden;
}

.fota-site-logo__crop img {
	display: block;
	height: 100%;
	width: auto;
	max-width: none;
}

/* =========================================================================
   Icon system (vendored Lucide — docs/BRAND.md)

   Icons are inlined SVG (fota_icon() in inc/template-tags.php) using
   currentColor, so color is controlled entirely by these classes rather
   than by maintaining multiple recolored copies of each icon file.
   Default color is FOTA Navy; apply exactly one color modifier for a
   non-default role. Color is never the only indicator of meaning —
   every icon in this codebase is paired with visible text or an
   already-labelled control.
   ========================================================================= */

.fota-icon {
	display: inline-block;
	vertical-align: middle;
	flex-shrink: 0;
	color: var(--fota-navy);
}

/* Sizing: 16px dense metadata/small controls, 20px standard controls,
   24px primary navigation, 32px major visual elements. */
.fota-icon--sm {
	width: 16px;
	height: 16px;
}

.fota-icon--md {
	width: 20px;
	height: 20px;
}

.fota-icon--lg {
	width: 24px;
	height: 24px;
}

.fota-icon--xl {
	width: 32px;
	height: 32px;
}

/* Color roles — apply at most one. */
.fota-icon--interactive {
	color: var(--fota-signal-blue);
}

.fota-icon--destructive {
	color: var(--fota-red);
}

.fota-icon--on-dark {
	color: var(--fota-white);
}

.fota-icon--disabled {
	color: var(--fota-icon-disabled);
}

/* =========================================================================
   Reset & base document

   This theme has no parent theme, so nothing upstream provides a CSS
   reset, box-sizing normalization, or default typography — all of that
   has to live here now.
   ========================================================================= */

*,
*::before,
*::after {
	box-sizing: border-box;
}

html {
	-webkit-text-size-adjust: 100%;
}

body {
	margin: 0;
}

img,
svg,
video,
iframe {
	max-width: 100%;
	height: auto;
}

/* =========================================================================
   Typography defaults

   Applies everywhere (not scoped to .fota-app-shell), since page.php/
   single.php/comments.php render admin-authored content whose markup
   this theme doesn't control — a heading in post content still needs a
   sane default without an author having to fight inherited styles.
   ========================================================================= */

body {
	font-family: var(--fota-font-body);
	font-size: var(--fota-font-size-base);
	line-height: var(--fota-line-height-base);
	color: var(--fota-navy);
}

h1,
h2,
h3,
h4,
h5,
h6 {
	line-height: 1.25;
	font-weight: 700;
	color: var(--fota-navy);
}

h1 {
	font-size: clamp(1.75rem, 4vw, 2.5rem);
}

h2 {
	font-size: clamp(1.375rem, 3vw, 1.75rem);
}

h3 {
	font-size: 1.125rem;
}

p {
	margin: 0 0 1rem;
}

a {
	color: var(--fota-signal-blue);
}

a:hover {
	color: var(--fota-navy);
}

ul,
ol {
	padding-left: 1.5rem;
}

blockquote {
	margin: 0 0 1rem;
	padding: 0.5rem 0 0.5rem 1rem;
	border-left: 3px solid var(--fota-neutral-gray-light);
	color: var(--fota-neutral-gray);
}

code,
pre {
	font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

pre {
	overflow-x: auto;
	padding: 1rem;
	background: var(--fota-neutral-gray-bg);
	border-radius: var(--fota-radius-sm);
}

hr {
	border: none;
	border-top: 1px solid var(--fota-neutral-gray-light);
	margin: 2rem 0;
}

/* =========================================================================
   Base
   ========================================================================= */

body.fota-app-shell {
	font-family: var(--fota-font-body);
	font-size: var(--fota-font-size-base);
	line-height: var(--fota-line-height-base);
	color: var(--fota-deep-navy);
	background: var(--fota-neutral-gray-bg);
	padding-bottom: calc(var(--fota-bottom-nav-height) + env(safe-area-inset-bottom));
}

.fota-app-shell a {
	color: var(--fota-rf-blue);
}

.fota-app-shell :focus-visible {
	outline: 3px solid var(--fota-rf-blue);
	outline-offset: 2px;
}

.fota-founder-credit {
	font-size: 0.875rem;
	color: var(--fota-neutral-gray);
	text-align: center;
	padding: 1rem 1rem 2rem;
}

/* =========================================================================
   Site header + primary navigation (header.php)
   ========================================================================= */

.fota-header {
	position: sticky;
	top: 0;
	z-index: 900;
	background: var(--fota-white);
	border-bottom: 1px solid var(--fota-neutral-gray-light);
}

.fota-header__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	max-width: 1600px;
	margin: 0 auto;
	padding: 0.5rem 1rem;
}

.fota-nav-toggle {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: var(--fota-touch-target);
	min-height: var(--fota-touch-target);
	background: transparent;
	border: none;
	border-radius: var(--fota-radius-sm);
	color: var(--fota-navy);
	cursor: pointer;
}

.fota-nav-toggle:hover {
	background: var(--fota-neutral-gray-bg);
}

.fota-primary-menu {
	display: flex;
	align-items: center;
	gap: 1.25rem;
	list-style: none;
	margin: 0;
	padding: 0;
}

.fota-primary-menu .menu-item a,
.fota-primary-menu a {
	display: block;
	padding: 0.5rem 0;
	color: var(--fota-navy);
	text-decoration: none;
	font-weight: 600;
	font-size: 0.9375rem;
	white-space: nowrap;
}

@media (min-width:1100px) and (max-width:1399px) {
	.fota-primary-menu { gap:.75rem; }
	.fota-header__inner { gap:.65rem; }
}

.fota-primary-menu .menu-item a:hover,
.fota-primary-menu a:hover,
.fota-primary-menu .current-menu-item > a {
	color: var(--fota-signal-blue);
}

/* Purpose-built dropdown below the desktop breakpoint — matches the bottom
   nav's own 960px breakpoint so the header and bottom nav switch modes
   together. Toggled by fota-app.js (adds/removes .is-open + syncs
   aria-expanded); CSS-only fallback keeps the toggle at least focusable
   and the menu present in the DOM if JS fails to load. */
@media (max-width: 1099.98px) {
	.fota-header {
		z-index: 1200;
	}

	.fota-nav-toggle {
		display: inline-flex;
	}

	.fota-primary-menu {
		display: none;
		position: absolute;
		inset-inline: 0;
		top: 100%;
		width: 100%;
		max-width: 100%;
		max-height: calc(100vh - 61px - var(--fota-bottom-nav-height) - env(safe-area-inset-bottom));
		max-height: calc(100dvh - 61px - var(--fota-bottom-nav-height) - env(safe-area-inset-bottom));
		overflow-x: hidden;
		overflow-y: auto;
		overscroll-behavior: contain;
		box-sizing: border-box;
		flex-direction: column;
		align-items: stretch;
		gap: 0;
		background: var(--fota-white);
		border-bottom: 1px solid var(--fota-neutral-gray-light);
		box-shadow: var(--fota-shadow-elevated);
		padding: 0.5rem 1rem 1rem;
	}

	.fota-primary-nav {
		position: static;
	}

	.fota-primary-nav.is-open .fota-primary-menu {
		display: flex;
	}

	.fota-primary-menu .menu-item a,
	.fota-primary-menu a {
		width: 100%;
		min-height: var(--fota-touch-target);
		padding: 0.75rem 0;
		border-bottom: 1px solid var(--fota-neutral-gray-light);
		box-sizing: border-box;
		white-space: normal;
		overflow-wrap: anywhere;
	}

	.fota-primary-menu .menu-item:last-child a,
	.fota-primary-menu li:last-child a {
		border-bottom: none;
	}
}

@media (min-width: 1100px) {
	.fota-nav-toggle {
		display: none;
	}
}

/* Primary nav's "Account" item (logged in) carries a submenu — Dashboard /
   Settings / View Public Profile / Log Out — so a logout action is always
   reachable from the header, not only from the Dashboard/Settings pages
   themselves. CSS-only: revealed by hover/focus-within on desktop, always
   expanded inline once the off-canvas drawer itself is open on mobile (see
   the max-width block below) — no additional JS or dropdown framework. */
.fota-primary-menu .sub-menu {
	list-style: none;
	margin: 0;
	padding: 0;
}

@media (min-width: 960px) {
	.fota-primary-menu .menu-item-has-children {
		position: relative;
	}

	.fota-primary-menu .menu-item-has-children .sub-menu {
		display: none;
		position: absolute;
		inset-inline-end: 0;
		top: 100%;
		min-width: 200px;
		background: var(--fota-white);
		border: 1px solid var(--fota-neutral-gray-light);
		border-radius: var(--fota-radius-sm);
		box-shadow: var(--fota-shadow-elevated);
		padding: 0.25rem 0;
		z-index: 20;
	}

	.fota-primary-menu .menu-item-has-children:hover .sub-menu,
	.fota-primary-menu .menu-item-has-children:focus-within .sub-menu {
		display: block;
	}

	.fota-primary-menu .sub-menu .menu-item a {
		padding: 0.5rem 1rem;
		white-space: nowrap;
	}
}

@media (max-width: 959.98px) {
	.fota-primary-menu .sub-menu {
		padding-inline-start: 1rem;
	}

	.fota-primary-menu > .fota-nav-account,
	.fota-primary-menu > .fota-nav-login {
		margin-top: 0.5rem;
		border-top: 2px solid var(--fota-neutral-gray-light);
	}

	.fota-primary-menu .sub-menu .menu-item a {
		padding: 0.625rem 0;
		font-weight: 400;
	}

	.fota-header__inner {
		min-width: 0;
	}

	.fota-site-logo {
		min-width: 0;
		max-width: calc(100% - var(--fota-touch-target) - 1rem);
	}

	.fota-site-logo__crop {
		max-width: 100%;
	}
}

.fota-logout-link {
	display: inline-flex;
	align-items: center;
	gap: 0.375rem;
}

/* =========================================================================
   Site footer (footer.php)
   ========================================================================= */

.fota-footer {
	background: var(--fota-navy);
	color: var(--fota-white);
	margin-top: 2rem;
}

.fota-footer__inner {
	max-width: 1200px;
	margin: 0 auto;
	padding: 2rem 1rem;
	text-align: center;
}

.fota-footer__tagline {
	margin: 0 0 1rem;
	color: var(--fota-white);
	max-width: 560px;
	margin-inline: auto;
}

.fota-footer__ownership { max-width: 72ch; margin-inline: auto; color: #fff; line-height: 1.6; text-align: center; overflow-wrap: anywhere; }
.fota-password-field { display: flex; align-items: stretch; gap: .5rem; }
.fota-password-field .fota-input { min-width: 0; flex: 1; }
.fota-password-toggle { border: 2px solid var(--fota-rf-blue); border-radius: 4px; background: #fff; color: var(--fota-rf-blue); padding: .5rem .75rem; font-weight: 700; cursor: pointer; }
.fota-password-toggle:focus-visible { outline: 3px solid var(--fota-fair-gold); outline-offset: 2px; }

.fota-footer-menu {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 1rem 1.5rem;
	list-style: none;
	margin: 0 0 1rem;
	padding: 0;
}

.fota-footer-menu a {
	color: var(--fota-white);
	text-decoration: none;
	font-size: 0.875rem;
}

.fota-footer-menu a:hover {
	text-decoration: underline;
}

.fota-footer .fota-founder-credit {
	color: rgba(255, 255, 255, 0.75);
	padding: 0;
	margin: 0;
}

/* =========================================================================
   Bottom navigation (mobile-first, one-handed use)
   ========================================================================= */

.fota-bottom-nav {
	position: fixed;
	inset-inline: 0;
	bottom: 0;
	z-index: 1000;
	display: flex;
	justify-content: space-around;
	align-items: stretch;
	height: var(--fota-bottom-nav-height);
	padding-bottom: env(safe-area-inset-bottom);
	background: var(--fota-white);
	border-top: 1px solid var(--fota-neutral-gray-light);
	box-shadow: var(--fota-shadow-elevated);
}

.fota-bottom-nav__item {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 2px;
	flex: 1 1 0;
	min-width: var(--fota-touch-target);
	min-height: var(--fota-touch-target);
	color: var(--fota-neutral-gray);
	text-decoration: none;
	font-size: 0.6875rem;
}

.fota-bottom-nav__item:hover,
.fota-bottom-nav__item:focus-visible,
.fota-bottom-nav__item.is-active {
	color: var(--fota-rf-blue);
}

/* Nav icons track the item's own state color (gray / active Signal Blue)
   instead of the global default Navy, so the icon and label always
   change color together. */
.fota-bottom-nav__item .fota-icon {
	color: inherit;
}

@media (min-width: 960px) {
	.fota-bottom-nav {
		display: none;
	}

	body.fota-app-shell {
		padding-bottom: 0;
	}
}

/* =========================================================================
   Cards
   ========================================================================= */

.fota-card {
	display: block;
	background: var(--fota-white);
	border-radius: var(--fota-radius);
	box-shadow: var(--fota-shadow);
	overflow: hidden;
	text-decoration: none;
	color: inherit;
	transition: box-shadow 0.15s ease, transform 0.15s ease;
}

.fota-card:hover,
.fota-card:focus-visible {
	box-shadow: var(--fota-shadow-elevated);
	transform: translateY(-1px);
}

.fota-card__body {
	padding: 1rem;
}

/* Directory cards reserve the same landscape media area even when artwork is
   absent. Contain intrinsic-size images so logos and fair artwork stay intact
   and small sources are not needlessly enlarged. */
.fota-fair-card,
.fota-club-card {
	display: flex;
	flex-direction: column;
}

.fota-fair-card .fota-card__media,
.fota-club-card .fota-card__media {
	display: grid;
	place-items: center;
	aspect-ratio: 8 / 5;
	background: var(--fota-white);
}

.fota-fair-card .fota-card__media img,
.fota-club-card .fota-card__media img {
	display: block;
	width: auto;
	height: auto;
	max-width: 100%;
	max-height: 100%;
	object-fit: contain;
}

.fota-fair-card .fota-card__body,
.fota-club-card .fota-card__body {
	flex: 1;
}

.fota-card__id {
	display: inline-block;
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.02em;
	color: var(--fota-rf-blue);
}

/* =========================================================================
   FOTA reference badge (e.g. "US-IN-079") — docs/BRAND.md
   Reusable across fair cards, fair detail pages, map popups, activation
   pages, spots, and operator history. Not a Lucide icon; the reference
   text itself stays plain, selectable text — this only adds a compact
   brand-palette visual treatment around it. Never places the logo inside
   the badge.
   ========================================================================= */

.fota-id-badge {
	display: inline-flex;
	align-items: center;
	padding: 0.15rem 0.5rem;
	border-radius: var(--fota-radius-sm);
	background: color-mix(in srgb, var(--fota-signal-blue) 8%, var(--fota-white));
	border: 1px solid color-mix(in srgb, var(--fota-signal-blue) 35%, transparent);
	color: var(--fota-navy);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.02em;
	font-variant-numeric: tabular-nums;
	white-space: nowrap;
}

.fota-card__title {
	margin: 0.25rem 0;
	font-size: 1.05rem;
}

.fota-card__meta {
	margin: 0;
	color: var(--fota-neutral-gray);
	font-size: 0.875rem;
}

.fota-card__excerpt {
	margin: 0.5rem 0 0;
	color: var(--fota-neutral-gray);
	font-size: 0.875rem;
}

.fota-badge {
	display: inline-block;
	margin-top: 0.5rem;
	padding: 0.15rem 0.5rem;
	border-radius: 999px;
	font-size: 0.75rem;
	font-weight: 600;
	background: var(--fota-neutral-gray-light);
	color: var(--fota-deep-navy);
}

.fota-badge--active {
	background: rgba(26, 127, 75, 0.12);
	color: var(--fota-success);
}

.fota-badge--discontinued {
	background: rgba(214, 41, 59, 0.12);
	color: var(--fota-fair-red);
}

.fota-grid {
	display: grid;
	gap: 1rem;
	grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
	padding: 1rem;
}

/* =========================================================================
   Spotting board (FotaSpots — the one spotting UI, every surface mounts it)
   ========================================================================= */

.fota-visually-hidden {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

.fota-spots-block {
	padding: 0 1rem;
}

.fota-spots-filters {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	padding: 0.75rem 1rem;
	background: var(--fota-white);
	border-radius: var(--fota-radius);
	box-shadow: var(--fota-shadow);
	margin-bottom: 0.75rem;
}

.fota-spots-filters__search {
	flex: 1 1 240px;
}

.fota-spots-filters select,
.fota-spots-filters input:not(.fota-spots-filters__search) {
	flex: 0 1 120px;
	min-width: 90px;
}

.fota-spots-meta {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.75rem;
	padding: 0 0.25rem 0.5rem;
	font-size: 0.8125rem;
	color: var(--fota-neutral-gray);
}

.fota-spot-list {
	display: flex;
	flex-direction: column;
	gap: 0.5rem;
}

.fota-spot-list__empty {
	padding: 1.5rem 1rem;
	text-align: center;
	color: var(--fota-neutral-gray);
	background: var(--fota-white);
	border-radius: var(--fota-radius);
}

/* Dense desktop table row. One grid, reflowed to a stacked card at narrow
   widths below — same DOM from FotaSpots.renderSpotRow(), CSS handles the
   layout switch, so mobile never gets a squeezed copy of the desktop table. */
.fota-spot-row {
	display: grid;
	grid-template-columns: 110px 1.4fr 90px 90px 110px 110px 55px 1fr 70px 90px;
	align-items: center;
	gap: 0.5rem 0.75rem;
	background: var(--fota-white);
	border-radius: var(--fota-radius-sm);
	box-shadow: var(--fota-shadow);
	padding: 0.6rem 0.85rem;
	font-size: 0.875rem;
}

.fota-spot-row__cell {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.fota-spot-row__callsign {
	font-weight: 700;
	color: var(--fota-deep-navy);
}

.fota-spot-row__callsign a,
.fota-spot-row__fair a {
	color: inherit;
	text-decoration: none;
}

.fota-spot-row__callsign a:hover,
.fota-spot-row__fair a:hover {
	text-decoration: underline;
}

.fota-spot-row__freq {
	font-variant-numeric: tabular-nums;
	color: var(--fota-rf-blue);
	font-weight: 600;
}

.fota-spot-row__age,
.fota-spot-row__spotter,
.fota-spot-row__location {
	color: var(--fota-neutral-gray);
	font-size: 0.8125rem;
}

.fota-spot-row__comment {
	color: var(--fota-neutral-gray);
}

.fota-spot-row__status {
	display: inline-block;
	padding: 0.1rem 0.5rem;
	border-radius: 999px;
	font-size: 0.6875rem;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.02em;
	border: 1px solid currentColor;
}

.fota-status--active {
	color: var(--fota-success);
}

.fota-status--qrt {
	color: var(--fota-neutral-gray);
}

.fota-status--expired {
	color: var(--fota-fair-red);
}

.fota-spot-row__actions {
	text-align: right;
	overflow: visible;
}

.fota-spot-row__qrt {
	min-height: 36px;
	padding: 0 0.75rem;
	font-size: 0.75rem;
}

/* Compact embeds (homepage widget, fair/activation pages) drop the
   lower-priority columns rather than showing a cramped copy of everything. */
.fota-spots-mount--compact .fota-spot-row {
	grid-template-columns: 100px 1fr 80px 90px 70px;
}

.fota-spots-mount--compact .fota-spot-row__location,
.fota-spots-mount--compact .fota-spot-row__spotter,
.fota-spots-mount--compact .fota-spot-row__comment,
.fota-spots-mount--compact .fota-spot-row__status-cell {
	display: none;
}

@media (max-width: 900px) {
	.fota-spot-row {
		grid-template-columns: 1fr 1fr auto;
		grid-template-areas:
			'callsign callsign status'
			'fair fair fair'
			'freq mode age'
			'location location spotter'
			'comment comment comment'
			'actions actions actions';
	}

	.fota-spots-mount--compact .fota-spot-row {
		grid-template-columns: 1fr 1fr auto;
		grid-template-areas:
			'callsign callsign status'
			'fair fair fair'
			'freq mode age'
			'actions actions actions';
	}

	.fota-spots-mount--compact .fota-spot-row__location,
	.fota-spots-mount--compact .fota-spot-row__spotter,
	.fota-spots-mount--compact .fota-spot-row__comment {
		display: none;
	}

	.fota-spot-row__callsign { grid-area: callsign; white-space: normal; font-size: 1rem; }
	.fota-spot-row__status-cell { grid-area: status; text-align: right; }
	.fota-spot-row__fair { grid-area: fair; white-space: normal; font-weight: 600; }
	.fota-spot-row__location { grid-area: location; }
	.fota-spot-row__spotter { grid-area: spotter; text-align: right; }
	.fota-spot-row__comment { grid-area: comment; white-space: normal; }
	.fota-spot-row__age { grid-area: age; text-align: right; }
	.fota-spot-row__freq { grid-area: freq; }
	.fota-spot-row__mode { grid-area: mode; }

	.fota-spot-row__actions {
		grid-area: actions;
		text-align: left;
	}
}

.fota-spots-page__header {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding: 1.25rem 1rem 1rem;
}

.fota-spots-page__header h1 {
	margin: 0;
}

.fota-spot-cta {
	white-space: nowrap;
}

.fota-spot-panel {
	margin: 0 1rem 1rem;
	padding: 1rem;
	background: var(--fota-white);
	border-radius: var(--fota-radius);
	box-shadow: var(--fota-shadow-elevated);
}

.fota-spots-view-all {
	text-align: center;
	margin-top: 0.75rem;
}

.fota-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: var(--fota-touch-target);
	min-width: var(--fota-touch-target);
	padding: 0 1rem;
	border-radius: var(--fota-radius-sm);
	border: none;
	background: var(--fota-rf-blue);
	color: var(--fota-white);
	font-weight: 600;
	text-decoration: none;
	cursor: pointer;
}

/*
 * .fota-btn is used on both <button> and <a> elements. When it's an <a>,
 * the generic link-color rules (`a`, `.fota-app-shell a`) have equal or
 * higher specificity than plain `.fota-btn` and would otherwise win,
 * rendering blue link text on the identically-blue button background —
 * invisible until :hover changes the background. Pin every state
 * explicitly on the `.fota-app-shell a.fota-btn*` compound selector
 * (specificity 0,2,1), which always beats `.fota-app-shell a` (0,1,1)
 * regardless of source order, so this can't regress if the generic link
 * rules are ever reordered.
 */
.fota-app-shell a.fota-btn,
.fota-app-shell a.fota-btn:visited,
.fota-app-shell a.fota-btn:hover,
.fota-app-shell a.fota-btn:focus-visible,
.fota-app-shell a.fota-btn:active {
	color: var(--fota-white);
}

.fota-btn:hover {
	background: var(--fota-rf-blue-dark);
}

.fota-btn--danger {
	background: var(--fota-fair-red);
}

.fota-btn--ghost {
	background: transparent;
	color: var(--fota-deep-navy);
	border: 1px solid var(--fota-neutral-gray-light);
}

.fota-btn--ghost:hover,
.fota-btn--ghost:focus-visible,
.fota-app-shell a.fota-btn--ghost:hover,
.fota-app-shell a.fota-btn--ghost:focus-visible {
	background: var(--fota-rf-blue-dark);
	border-color: var(--fota-rf-blue-dark);
	color: var(--fota-white);
}

.fota-btn:focus-visible { outline: 3px solid var(--fota-fair-gold); outline-offset: 2px; }
.fota-btn:disabled { background: var(--fota-neutral-gray); color: var(--fota-deep-navy); cursor: not-allowed; opacity: 1; }

.fota-app-shell a.fota-btn--ghost,
.fota-app-shell a.fota-btn--ghost:visited,
.fota-app-shell a.fota-btn--ghost:hover,
.fota-app-shell a.fota-btn--ghost:focus-visible,
.fota-app-shell a.fota-btn--ghost:active {
	color: var(--fota-deep-navy);
}

.fota-app-shell a.fota-btn--ghost:hover,
.fota-app-shell a.fota-btn--ghost:focus-visible,
.fota-app-shell a.fota-btn--ghost:active {
	color: var(--fota-white);
}

/* =========================================================================
   Spot submission form
   ========================================================================= */

.fota-spot-form {
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
	max-width: 420px;
	margin: 0 1rem;
	padding: 1rem;
	background: var(--fota-white);
	border-radius: var(--fota-radius);
	box-shadow: var(--fota-shadow);
}

.fota-spot-form__row {
	display: flex;
	flex-direction: column;
	gap: 0.25rem;
}

.fota-spot-form__row label {
	font-size: 0.8125rem;
	font-weight: 600;
	color: var(--fota-neutral-gray);
}

.fota-input {
	min-height: var(--fota-touch-target);
	padding: 0 0.75rem;
	border-radius: var(--fota-radius-sm);
	border: 1px solid var(--fota-neutral-gray-light);
	font-size: 1rem;
	background: var(--fota-white);
	color: var(--fota-deep-navy);
}

.fota-spot-form__status {
	margin: 0;
	font-size: 0.875rem;
	color: var(--fota-success);
	min-height: 1.25em;
}

.fota-spot-form__status--error {
	color: var(--fota-fair-red);
}

.fota-spot-form__login {
	margin: 1rem;
}

/* =========================================================================
   Generic form (registration, etc.)
   ========================================================================= */

.fota-section--narrow {
	max-width: 480px;
	margin: 0 auto;
}

.fota-form {
	display: flex;
	flex-direction: column;
	gap: 1rem;
}

/* The HTML hidden state is authoritative, including on flex/grid components. */
[hidden] {
	display: none !important;
}

.fota-form__row {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 0.25rem;
}

.fota-form__row label {
	font-size: 0.875rem;
	font-weight: 600;
	color: var(--fota-deep-navy);
}

.fota-form__row--checkbox label {
	display: flex;
	align-items: flex-start;
	gap: 0.5rem;
	font-weight: 400;
}

/* Spam-mitigation honeypot field (e.g. the Contact form's "website" trap):
   visually and audibly hidden from real visitors without display:none,
   which some bots skip when deciding which fields to fill. */
.fota-honeypot {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}

.fota-form__hint {
	font-size: 0.8125rem;
	color: var(--fota-neutral-gray);
}

/* Loading/error state for a dynamically-populated select (State/County
   on Submit a Fair) — a modifier on .fota-form__hint rather than a new
   block, so it inherits its layout and only swaps color/weight. */
.fota-form__hint--error {
	color: var(--fota-fair-red);
	font-weight: 600;
}

.fota-form__hint .fota-btn {
	margin-left: 0.5rem;
	padding: 0.1rem 0.6rem;
	font-size: 0.8125rem;
}

.fota-welcome-time-buttons {
	display: flex;
	gap: 0.5rem;
	flex-wrap: wrap;
}

.fota-welcome-time-buttons .fota-btn[aria-pressed="true"] {
	background: var(--fota-neutral-gray-bg);
	font-weight: 700;
}

.fota-settings-image {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	flex-wrap: wrap;
}

.fota-settings-image__preview {
	width: 64px;
	height: 64px;
	border-radius: 50%;
	overflow: hidden;
	background: var(--fota-neutral-gray-bg);
	flex-shrink: 0;
}

.fota-settings-image__preview img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.fota-form__error {
	margin: 0;
	padding: 0.75rem 1rem;
	border-radius: var(--fota-radius-sm);
	background: color-mix(in srgb, var(--fota-fair-red) 12%, transparent);
	color: var(--fota-fair-red);
	font-weight: 600;
}

.fota-form__status {
	margin: 0;
	font-size: 0.875rem;
	color: var(--fota-success);
	min-height: 1.25em;
}

/* General-purpose inline notice — used across the theme (forum, logbook,
   activation log, club membership, news editor) wherever a small
   success/error/informational message needs to render near the control
   that triggered it, instead of a page-top banner or a browser alert(). */
.fota-notice {
	margin: 0.5rem 0;
	padding: 0.6rem 0.9rem;
	border-radius: var(--fota-radius-sm);
	background: var(--fota-neutral-gray-bg);
	color: var(--fota-deep-navy);
	font-size: 0.875rem;
}

.fota-notice--success {
	background: color-mix(in srgb, var(--fota-success) 12%, transparent);
	color: var(--fota-success);
	font-weight: 600;
}

.fota-notice--error {
	background: color-mix(in srgb, var(--fota-fair-red) 12%, transparent);
	color: var(--fota-fair-red);
	font-weight: 600;
}

.fota-notice--pending {
	background: color-mix(in srgb, var(--fota-rf-blue) 10%, transparent);
	color: var(--fota-rf-blue-dark);
	font-weight: 600;
}

.fota-form__alt-action {
	text-align: center;
	margin-top: 1rem;
}

/* =========================================================================
   Auth-required prompt (logged-out click on an action that needs an account)
   ========================================================================= */

.fota-auth-prompt {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.75rem;
	margin: 0.75rem 1rem;
	padding: 1rem;
	background: var(--fota-white);
	border: 1px solid var(--fota-neutral-gray-light);
	border-radius: var(--fota-radius);
	box-shadow: var(--fota-shadow);
}

.fota-auth-prompt p {
	flex-basis: 100%;
	margin: 0 0 0.25rem;
	color: var(--fota-deep-navy);
}

.fota-auth-brand {
	display: block;
	width: min(18rem, 80vw);
	margin: 0 auto 1.5rem;
}

.fota-auth-brand img {
	display: block;
	width: 100%;
	height: auto;
	max-height: 8rem;
	object-fit: contain;
}

/* =========================================================================
   Dashboard: account status, panels, lists
   ========================================================================= */

.fota-dashboard-status {
	display: flex;
	flex-wrap: wrap;
	gap: 1rem;
	margin: 1rem 0;
	padding: 1rem;
	background: var(--fota-white);
	border-radius: var(--fota-radius);
	box-shadow: var(--fota-shadow);
}

.fota-dashboard-status__item {
	display: flex;
	flex-direction: column;
	gap: 0.25rem;
}

.fota-dashboard-status__label {
	font-size: 0.75rem;
	font-weight: 600;
	color: var(--fota-neutral-gray);
	text-transform: uppercase;
	letter-spacing: 0.03em;
}

.fota-profile-completion { margin: 1rem 0 2rem; }
.fota-profile-completion__heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; }
.fota-profile-completion__heading h2 { margin-top: 0; }
.fota-profile-completion__heading p { margin-bottom: .75rem; }
.fota-profile-completion__heading > strong { flex: 0 0 auto; font-size: 1.35rem; color: var(--fota-signal-blue); }
.fota-profile-completion__progress { display: block; width: 100%; height: 1rem; accent-color: var(--fota-success); }
.fota-profile-completion__checklist { display: grid; gap: .65rem; margin: 1rem 0; padding: 0; list-style: none; }
.fota-profile-completion__checklist li { display: flex; align-items: center; justify-content: space-between; gap: 1rem; min-width: 0; }

@media (max-width: 30rem) {
	.fota-profile-completion__heading { flex-direction: column; gap: 0; }
	.fota-profile-completion__checklist li { align-items: flex-start; }
}

.fota-badge {
	display: inline-block;
	padding: 0.15rem 0.6rem;
	border-radius: 999px;
	font-size: 0.8125rem;
	font-weight: 600;
	background: var(--fota-neutral-gray-light);
	color: var(--fota-deep-navy);
	width: fit-content;
}

.fota-badge--ok {
	background: color-mix(in srgb, var(--fota-success) 18%, transparent);
	color: var(--fota-success);
}

.fota-badge--pending {
	background: color-mix(in srgb, var(--fota-fair-red) 12%, transparent);
	color: var(--fota-fair-red);
}

.fota-dashboard-panel {
	overflow-wrap: anywhere;
	margin: 1.5rem 0;
	padding: 1rem;
	background: var(--fota-white);
	border-radius: var(--fota-radius);
	box-shadow: var(--fota-shadow);
}

.fota-dashboard-panel h2 {
	margin-top: 0;
}

.fota-dashboard-list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.fota-dashboard-list__item {
	padding: 0.5rem 0;
	border-bottom: 1px solid var(--fota-neutral-gray-light);
}

.fota-dashboard-list__item:last-child {
	border-bottom: none;
}

/* =========================================================================
   Callsign verification (page-settings.php)
   ========================================================================= */

#fota-callsign-verification-section .fota-dashboard-status {
	margin: 1rem 0;
}

#fota-callsign-verification-section code {
	padding: 0.15rem 0.5rem;
	border-radius: var(--fota-radius);
	background: var(--fota-neutral-gray-light);
	font-size: 1rem;
	letter-spacing: 0.03em;
}

.fota-callsign-verification__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
	margin-top: 1rem;
}

/* =========================================================================
   Map
   ========================================================================= */

.fota-map {
	position: relative;
	width: 100%;
	height: 60vh;
	min-height: 320px;
	border-radius: var(--fota-radius);
	overflow: hidden;
}

.fota-map--full {
	height: calc(100vh - var(--fota-bottom-nav-height));
	border-radius: 0;
}

.fota-map-empty {
	position: absolute;
	top: 1rem;
	left: 50%;
	transform: translateX(-50%);
	z-index: 1000;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.75rem;
	padding: 1rem 1.5rem;
	background: var(--fota-white);
	border-radius: var(--fota-radius);
	box-shadow: var(--fota-shadow-elevated);
	text-align: center;
	max-width: calc(100% - 2rem);
}

.fota-map-empty p {
	margin: 0;
	color: var(--fota-deep-navy);
	font-weight: 600;
}

.fota-map-controls {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.75rem 1rem;
	padding: 0.75rem 1rem;
	background: var(--fota-white);
	border-bottom: 1px solid var(--fota-neutral-gray-light);
}

.fota-map-controls__search {
	flex: 1 1 220px;
}

.fota-map-controls label {
	display: inline-flex;
	align-items: center;
	gap: 0.35rem;
	font-size: 0.875rem;
	color: var(--fota-deep-navy);
	white-space: nowrap;
}

.fota-map-marker--live {
	background: var(--fota-fair-red);
	border-radius: 50%;
	border: 2px solid var(--fota-white);
	box-shadow: var(--fota-shadow);
}

.fota-map-marker--upcoming {
	background: var(--fota-rf-blue);
	border-radius: 50%;
	border: 2px solid var(--fota-white);
	box-shadow: var(--fota-shadow);
}

/* =========================================================================
   Global search
   ========================================================================= */

.fota-search {
	position: relative;
	max-width: 480px;
	margin-inline: auto;
}

.fota-search__input {
	width: 100%;
	min-height: var(--fota-touch-target);
	padding: 0 1rem 0 2.75rem;
	border-radius: 999px;
	border: 1px solid var(--fota-neutral-gray-light);
	font-size: 1rem;
}

.fota-search__icon {
	position: absolute;
	top: 50%;
	left: 0.875rem;
	transform: translateY(-50%);
	color: var(--fota-neutral-gray);
	pointer-events: none;
}

.fota-search__results {
	position: absolute;
	inset-inline: 0;
	top: calc(100% + 4px);
	background: var(--fota-white);
	border-radius: var(--fota-radius);
	box-shadow: var(--fota-shadow-elevated);
	overflow: hidden;
	z-index: 1100;
}

.fota-search__result {
	display: block;
	width: 100%;
	padding: 0.6rem 1rem;
	text-decoration: none;
	color: var(--fota-deep-navy);
	border: none;
	border-bottom: 1px solid var(--fota-neutral-gray-light);
	background: none;
	font: inherit;
	text-align: left;
	cursor: pointer;
}

.fota-search__result:last-child {
	border-bottom: none;
}

.fota-search__result:hover,
.fota-search__result:focus-visible {
	background: var(--fota-neutral-gray-bg);
}

.fota-search__empty {
	padding: 1rem;
	text-align: center;
}

.fota-search__empty p {
	margin: 0 0 0.75rem;
	color: var(--fota-deep-navy);
}

.fota-search__empty-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.5rem;
}

.fota-search__empty-actions .fota-btn {
	min-height: 36px;
	padding: 0 0.75rem;
	font-size: 0.8125rem;
}

/* =========================================================================
   WordPress-generated content (page.php / single.php / comments.php)

   Prose width is capped for readability — this is the one place the
   theme deliberately narrows content rather than letting it run full
   width, since it's free-form editorial text rather than a card grid or
   data table that already self-limits.
   ========================================================================= */

.fota-content {
	max-width: 760px;
	margin: 0 auto;
}

.fota-content h1,
.fota-content h2,
.fota-content h3,
.fota-content h4 {
	margin: 1.5rem 0 0.75rem;
}

.fota-content > *:first-child {
	margin-top: 0;
}

.fota-content ul,
.fota-content ol {
	margin: 0 0 1rem;
}

.fota-content img {
	max-width: 100%;
	height: auto;
	border-radius: var(--fota-radius-sm);
}

/* Optional "Additional CSS class" utilities an administrator can add to any
   image block in the editor (Block settings -> Advanced) for a bounded
   max-height crop, or a smaller/larger max-width than WP's default
   size presets — no page-builder plugin, just standard block editor
   capability. See docs/ABOUT-EDITING.md. */
.fota-content .fota-img-bounded {
	max-height: 28rem;
	width: 100%;
	object-fit: cover;
}
.fota-content .fota-img-narrow { max-width: 420px; }
.fota-content .fota-img-medium { max-width: 640px; }

.fota-content figure {
	margin: 0 0 1.5rem;
}

.fota-content figcaption {
	font-size: 0.8125rem;
	color: var(--fota-neutral-gray);
	text-align: center;
	margin-top: 0.5rem;
}

.fota-content .alignwide {
	max-width: 1000px;
	margin-left: calc(50% - 500px);
	margin-right: calc(50% - 500px);
	width: auto;
}

.fota-content .alignfull {
	max-width: none;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
	width: 100vw;
}

.fota-content .alignleft {
	float: left;
	margin: 0.25rem 1.5rem 1rem 0;
}

.fota-content .alignright {
	float: right;
	margin: 0.25rem 0 1rem 1.5rem;
}

.fota-content .aligncenter {
	display: block;
	margin-left: auto;
	margin-right: auto;
}

.fota-content .wp-caption,
.fota-content .wp-block-gallery {
	max-width: 100%;
}

/* =========================================================================
   Tables — WordPress content tables and WooCommerce cart/checkout tables
   share this base rather than each maintaining its own.
   ========================================================================= */

table {
	width: 100%;
	border-collapse: collapse;
	margin: 0 0 1.5rem;
}

th,
td {
	padding: 0.6rem 0.75rem;
	text-align: left;
	border-bottom: 1px solid var(--fota-neutral-gray-light);
}

th {
	font-weight: 700;
	color: var(--fota-navy);
	background: var(--fota-neutral-gray-bg);
}

/* =========================================================================
   Form elements — native controls beyond .fota-input (used by
   comments.php's comment_form() and any admin-authored block-editor form
   markup, which don't go through fota_render_spot_form()'s own markup).
   ========================================================================= */

textarea,
select {
	min-height: var(--fota-touch-target);
	padding: 0.5rem 0.75rem;
	border-radius: var(--fota-radius-sm);
	border: 1px solid var(--fota-neutral-gray-light);
	font-family: inherit;
	font-size: 1rem;
	background: var(--fota-white);
	color: var(--fota-navy);
}

textarea {
	min-height: 8rem;
	width: 100%;
}

button {
	font-family: inherit;
}

.fota-comment-form textarea,
.fota-comment-form input[type="text"],
.fota-comment-form input[type="email"],
.fota-comment-form input[type="url"] {
	width: 100%;
	margin-bottom: 0.75rem;
}

/* =========================================================================
   Comments (comments.php)
   ========================================================================= */

.fota-comments {
	max-width: 760px;
	margin: 2rem auto 0;
	padding: 0 1rem;
}

.fota-comment-list {
	list-style: none;
	margin: 0 0 1.5rem;
	padding: 0;
}

.fota-comment-list .comment-body {
	padding: 1rem 0;
	border-bottom: 1px solid var(--fota-neutral-gray-light);
}

.fota-comment-list .comment-author .fn {
	font-weight: 700;
	color: var(--fota-navy);
	font-style: normal;
}

.fota-comment-list .comment-metadata {
	font-size: 0.8125rem;
	color: var(--fota-neutral-gray);
}

.fota-comment-list .children {
	list-style: none;
	margin: 0;
	padding-left: 1.5rem;
}

/* =========================================================================
   WooCommerce

   Standard WooCommerce theme support only (functions.php) — no plugin
   template overrides. WooCommerce falls back to header.php/footer.php
   plus its own default markup wrappers, which these rules restyle to
   match the rest of FOTA rather than replacing.
   ========================================================================= */

.woocommerce ul.products {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 1rem;
	list-style: none;
	margin: 0;
	padding: 0;
}

.woocommerce ul.products li.product {
	background: var(--fota-white);
	border-radius: var(--fota-radius);
	box-shadow: var(--fota-shadow);
	padding: 1rem;
}

.woocommerce ul.products li.product img {
	border-radius: var(--fota-radius-sm);
	margin-bottom: 0.5rem;
}

.woocommerce span.price,
.woocommerce ul.products li.product .price {
	color: var(--fota-navy);
	font-weight: 700;
}

.woocommerce a.button,
.woocommerce button.button,
.woocommerce #respond input#submit,
.woocommerce input.button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: var(--fota-touch-target);
	padding: 0 1rem;
	border-radius: var(--fota-radius-sm);
	border: none;
	background: var(--fota-signal-blue);
	color: var(--fota-white);
	font-weight: 600;
	cursor: pointer;
}

.woocommerce a.button:hover,
.woocommerce button.button:hover,
.woocommerce input.button:hover {
	background: var(--fota-navy);
	color: var(--fota-white);
}

.woocommerce table.cart,
.woocommerce table.shop_table {
	background: var(--fota-white);
	border-radius: var(--fota-radius);
	overflow: hidden;
}

.woocommerce .woocommerce-message,
.woocommerce .woocommerce-info {
	border-top-color: var(--fota-signal-blue);
	background: color-mix(in srgb, var(--fota-signal-blue) 8%, var(--fota-white));
}

.woocommerce .woocommerce-error {
	border-top-color: var(--fota-red);
	background: color-mix(in srgb, var(--fota-red) 8%, var(--fota-white));
}

/* =========================================================================
   Sections
   ========================================================================= */

.fota-section {
	padding: clamp(2rem, 5vw, 4rem) 1rem;
}

.fota-section__header {
	max-width: 640px;
	margin: 0 auto 1.5rem;
	text-align: center;
}

.fota-hero {
	background: linear-gradient(135deg, var(--fota-deep-navy), var(--fota-rf-blue-dark));
	color: var(--fota-white);
	text-align: center;
	padding: clamp(3rem, 8vw, 6rem) 1rem;
}

.fota-hero h1 {
	color: var(--fota-white);
	margin-bottom: 0.5rem;
}

.fota-homepage > .fota-hero {
	padding-inline: clamp(1.25rem, 4vw, 2rem);
}

.fota-homepage > .fota-hero > h1 {
	margin: 0 0 1.25rem;
}

.fota-homepage > .fota-hero > p {
	max-width: 65ch;
	margin: 0 auto 1.75rem;
	font-size: clamp(1.125rem, 1rem + 0.5vw, 1.25rem);
	line-height: 1.6;
}

.fota-history-timeline {
	max-width: 720px;
	margin: 0 auto;
	padding: clamp(2rem, 5vw, 4rem) 1rem;
	line-height: 1.7;
}

.fota-history-timeline li {
	margin-bottom: 0.5rem;
}

/* Public profile and forum application shells. */
.fota-profile-shell,.fota-forum-shell,.fota-club-single{width:min(100% - 2rem,72rem);margin-inline:auto;padding-block:clamp(1.25rem,3vw,3rem)}
.fota-member-directory__back{display:inline-block;margin-bottom:1rem}.fota-member-directory__header{margin-bottom:1.5rem}.fota-member-directory__header h1{margin-bottom:.35rem}
.fota-member-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}
.fota-member-card{min-width:0;min-height:10.5rem;display:flex;flex-direction:column;padding:1rem;border:1px solid var(--fota-border,#d7dee7);border-radius:.75rem;background:#fff;overflow:hidden}
.fota-member-card__link{min-width:0;display:grid;grid-template-columns:6rem minmax(0,1fr);align-items:center;gap:1rem;color:inherit;text-decoration:none;border-radius:.4rem}
.fota-member-card__link:focus-visible,.fota-pagination a:focus-visible{outline:3px solid var(--fota-signal-blue,#0957bb);outline-offset:3px}
.fota-member-card__avatar{width:6rem;height:6rem;min-width:0;display:grid;place-items:center;overflow:hidden}
.fota-member-card__identity{min-width:0;display:flex;flex-direction:column;gap:.15rem;line-height:1.35}
.fota-member-card__callsign{font-size:1.1rem;color:var(--fota-rf-blue-dark,#064a91)}
.fota-member-card__name{font-size:.95rem}.fota-member-card__handle{color:var(--fota-muted,#596579)}
.fota-member-card__callsign,.fota-member-card__name,.fota-member-card__handle{max-width:100%;overflow-wrap:anywhere;word-break:normal}
.fota-member-card__footer{min-width:0;margin-top:auto;padding-top:.75rem;border-top:1px solid var(--fota-border,#d7dee7)}
.fota-member-card__footer .fota-social-actions--member-list{min-width:0;margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:.4rem}
.fota-member-card__footer .fota-social-action{max-width:100%}
@media(max-width:64rem){.fota-member-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:40rem){.fota-member-grid{grid-template-columns:minmax(0,1fr)}.fota-member-card{min-height:0}.fota-member-card__link{grid-template-columns:5.5rem minmax(0,1fr)}}
.fota-pagination{margin-top:2rem}.fota-pagination__links{display:flex;flex-wrap:wrap;gap:.5rem}.fota-pagination a{display:grid;place-items:center;min-width:2.75rem;min-height:2.75rem;border:1px solid currentColor;border-radius:.35rem;text-decoration:none}.fota-pagination a[aria-current=page]{color:#fff;background:var(--fota-navy,#042446)}
.fota-club-profile__hero{display:grid;grid-template-columns:minmax(14rem,24rem) minmax(0,1fr);gap:clamp(1.25rem,4vw,3rem);padding:clamp(1.25rem,3vw,2rem);background:var(--fota-white);border-radius:var(--fota-radius);box-shadow:var(--fota-shadow)}
.fota-club-profile__media{display:grid;place-items:center;min-height:14rem;padding:1rem;background:var(--fota-neutral-gray-light);border-radius:var(--fota-radius);overflow:hidden}
.fota-club-profile__media img{display:block;width:100%;height:100%;max-width:22rem;max-height:22rem;object-fit:contain}
.fota-club-profile__identity{min-width:0}.fota-club-profile__identity h1{margin:.65rem 0}.fota-club-membership-action{margin-top:1rem}.fota-club-membership-action .fota-notice{margin:.5rem 0}
.fota-club-profile .fota-profile-section{margin-top:1.25rem}.fota-club-profile .fota-card{padding:clamp(1rem,2vw,1.5rem)}
@media(max-width:48rem){.fota-club-profile__hero{grid-template-columns:1fr}.fota-club-profile__media{min-height:10rem}.fota-club-profile__media img{max-height:16rem}}
.fota-profile-header{display:grid;grid-template-columns:minmax(9rem,14rem) minmax(0,1fr);gap:clamp(1.25rem,4vw,3rem);align-items:start;padding:clamp(1.25rem,3vw,2rem);background:var(--fota-white);border-radius:var(--fota-radius);box-shadow:var(--fota-shadow)}
.fota-profile-portrait{width:min(100%,14rem)}.fota-profile-metadata{display:flex;flex-direction:column;gap:.35rem;margin-top:.85rem;color:var(--fota-neutral-gray);font-size:.875rem;line-height:1.35}.fota-profile-location{display:flex;align-items:center;gap:.3rem;margin-top:.15rem}
.fota-profile-identity h1{margin-top:0}.fota-profile-bio{max-width:65ch;text-align:left;overflow-wrap:anywhere}.fota-profile-bio p{white-space:pre-line}
.fota-profile-links{display:flex;flex-wrap:wrap;gap:.6rem 1rem;margin:1rem 0}.fota-profile-links a{display:inline-flex;align-items:center;gap:.25rem}
.fota-profile-section{padding-block:clamp(1.25rem,3vw,2rem)}.fota-profile-section>h2{text-align:left;margin-top:0}.fota-profile-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem}.fota-profile-stat strong{display:block;font-size:clamp(1.5rem,3vw,2.25rem)}
.fota-profile-activity{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2rem}.fota-profile-list,.fota-forum-boards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,15rem),1fr));gap:1rem}.fota-empty-state{padding:1rem;background:var(--fota-neutral-gray-light);border-radius:var(--fota-radius)}
.fota-forum-profile-action{display:flex;justify-content:space-between;align-items:center;gap:1rem}.fota-page-heading{max-width:48rem;margin-bottom:2rem}.fota-forum-section{margin-block:2rem}.fota-forum-section>h2{border-bottom:2px solid var(--fota-rf-blue);padding-bottom:.5rem}.fota-forum-activity-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
@media(max-width:52rem){.fota-profile-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.fota-profile-activity{grid-template-columns:1fr}}
@media(max-width:38rem){.fota-profile-header{grid-template-columns:1fr}.fota-profile-portrait{width:min(100%,10rem)}.fota-profile-stats,.fota-forum-activity-grid{grid-template-columns:1fr}.fota-forum-profile-action{align-items:flex-start;flex-direction:column}}
.fota-fair-profile__hero{display:grid;grid-template-columns:minmax(14rem,24rem) minmax(0,1fr);gap:clamp(1.25rem,4vw,3rem);padding:clamp(1.25rem,3vw,2rem);background:var(--fota-white);border-radius:var(--fota-radius);box-shadow:var(--fota-shadow)}
.fota-fair-profile__media{display:grid;place-items:center;min-height:14rem;background:var(--fota-neutral-gray-light);border-radius:var(--fota-radius);overflow:hidden}.fota-fair-profile__media img{width:100%;height:auto;max-height:24rem;object-fit:contain}.fota-fair-profile__identity h1{margin:.65rem 0}.fota-fair-profile__facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem 1.5rem}.fota-fair-profile__facts div{min-width:0}.fota-fair-profile__facts dt{font-size:.8rem;font-weight:700;text-transform:uppercase}.fota-fair-profile__facts dd{margin:0}.fota-fair-profile__dates{display:flex;flex-direction:column;margin:1.25rem 0;padding:1rem;border-left:.3rem solid var(--fota-fair-red);background:var(--fota-neutral-gray-light)}.fota-fair-profile__dates span{font-size:clamp(1.2rem,3vw,1.65rem);font-weight:700}.fota-fair-profile__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem}.fota-fair-profile .fota-card{padding:clamp(1rem,2vw,1.5rem)}.fota-fair-profile address span{display:block}.fota-fair-profile__map{height:min(55vh,28rem);border-radius:var(--fota-radius);overflow:hidden}
@media(max-width:48rem){.fota-fair-profile__hero,.fota-fair-profile__grid{grid-template-columns:1fr}.fota-fair-profile__media{min-height:10rem}.fota-fair-profile__facts{grid-template-columns:1fr}}


/* Keep the home discovery search and Live Map visually related. */
.fota-homepage > .fota-section[aria-label="Search for a fair"] { padding-bottom: 1rem; }
.fota-homepage > .fota-section[aria-label="Search for a fair"] + .fota-section { padding-top: 1rem; }
.fota-resource-list { display:grid; gap:.875rem; padding:0; list-style:none; }
.fota-resource-row { display:grid; grid-template-columns:3rem minmax(0,1fr); gap:1rem; align-items:center; min-width:0; }
.fota-resource-row__logo { display:grid; place-items:center; width:3rem; height:3rem; }
.fota-resource-icon { display:block; width:100%; height:100%; object-fit:contain; }
.fota-resource-row__content { min-width:0; text-align:left; line-height:1.45; }
.fota-resource-row__title { display:inline; font-weight:700; }
.fota-resource-row__description { margin:.15rem 0 0; }

/* WordPress remains the editorial CMS: image/gallery blocks, captions and
   alignments stay responsive inside the restrained content measure. */
.entry-content img,
.entry-content figure,
.fota-editorial-hero img { max-width: 100%; height: auto; }
.fota-editorial-hero { margin: 1.25rem 0 0; max-height: 30rem; overflow: hidden; border-radius: var(--fota-radius, .5rem); }
.fota-editorial-hero img { display: block; width: 100%; max-height: 30rem; object-fit: cover; }
.entry-content .wp-block-gallery { display: flex; flex-wrap: wrap; gap: 1rem; }
.entry-content figcaption { color: var(--fota-color-muted, #6b7280); font-size: .875rem; }
.fota-news-editor .fota-form { max-width: 52rem; }
.fota-news-editor input[type="text"], .fota-news-editor textarea { width: 100%; }
.fota-news-editor label { display: block; font-weight: 700; margin-bottom: .35rem; }
.fota-news-editor .description { display: block; color: var(--fota-color-muted, #6b7280); font-size: .875rem; }
@media (max-width: 48rem) {
	.fota-homepage > .fota-section[aria-label="Search for a fair"] { padding-bottom: 0.75rem; }
	.fota-homepage > .fota-section[aria-label="Search for a fair"] + .fota-section { padding-top: 0.75rem; }
}

/* Sectional fair workflow: digestible on desktop and a single fluid column on phones. */
.fota-fair-workflow{display:grid;gap:1.25rem}.fota-fair-step{padding:clamp(1rem,3vw,1.75rem);background:var(--fota-white);border:1px solid var(--fota-neutral-gray-light);border-radius:var(--fota-radius);box-shadow:var(--fota-shadow)}.fota-fair-step h2{margin-top:0;text-align:left}.fota-fair-step fieldset label,.fota-fair-step #fota-fair-type-wrap label{display:block;margin:.65rem 0}.fota-form__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.fota-form__grid>*{min-width:0}.fota-location-preview{margin-top:1rem}.fota-location-preview #fota-location-map{width:100%;height:clamp(16rem,42vw,24rem);border-radius:var(--fota-radius)}.fota-optional{font-weight:400;color:var(--fota-color-muted,#6b7280)}
@media(max-width:40rem){.fota-form__grid{grid-template-columns:1fr}.fota-fair-step{padding:1rem}.fota-fair-workflow input,.fota-fair-workflow select,.fota-fair-workflow textarea{max-width:100%;width:100%}}
.fota-image-preview{display:grid;gap:.65rem;margin-top:.75rem;justify-items:start}.fota-image-preview img{display:block;max-width:min(100%,28rem);max-height:20rem;border-radius:var(--fota-radius);object-fit:contain}.fota-duplicate-warning{margin-top:.75rem;padding:1rem;border:2px solid var(--fota-fair-gold);border-radius:var(--fota-radius);background:#fff8db}.fota-duplicate-warning .fota-form-actions{display:flex;flex-wrap:wrap;align-items:center;gap:1rem}.fota-form__status:focus{outline:none}
.fota-club-image-preview { display:block; width:10rem; height:10rem; margin-top:.75rem; object-fit:contain; border:1px solid var(--fota-border, #d8dee4); border-radius:.75rem; background:#fff; }
.fota-forum-moderation { display:flex; flex-wrap:wrap; align-items:center; gap:.5rem; margin:1rem 0; padding:.75rem; border:1px solid var(--fota-border, #d8dee4); border-radius:.75rem; font-size:.875rem; }
.fota-forum-moderation form, .fota-forum-inline-control { display:inline-flex; gap:.4rem; margin:0; }
.fota-forum-hidden { opacity:.72; border-style:dashed; }

/* Contact logging: manual logger, logbook, import preview, share/embed. */
.fota-contact-workspace { max-width:64rem; }
.fota-contact-logger__actions { display:flex; flex-wrap:wrap; gap:.5rem; margin:.75rem 0 1rem; }
.fota-contact-logger__primary { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:1rem; align-items:start; }
.fota-contact-logger__primary .fota-form__row:first-child { grid-column:span 2; }
.fota-input--callsign { text-transform:uppercase; font-size:1.25rem; font-weight:700; letter-spacing:.03em; }
.fota-contact-logger__datetime { display:flex; gap:.5rem; align-items:center; }
.fota-contact-logger__advanced { margin:1rem 0; padding:.75rem 1rem; border:1px solid var(--fota-border, #d8dee4); border-radius:var(--fota-radius); }
.fota-contact-logger__advanced summary { cursor:pointer; font-weight:600; }
.fota-contact-logger__advanced summary:focus-visible { outline:3px solid var(--fota-fair-gold); outline-offset:3px; }
.fota-contact-logger__recent { margin-top:1.5rem; }
@media (max-width:40rem) {
	.fota-contact-logger__primary { grid-template-columns:1fr; }
}

.fota-log-recent-list { display:grid; gap:.65rem; }
.fota-log-card__row { display:flex; align-items:center; justify-content:space-between; gap:.5rem; }
.fota-log-card__callsign { font-size:1.1rem; font-weight:700; letter-spacing:.02em; }
.fota-log-card--hunter .fota-log-card__callsign { color:var(--fota-signal-blue, #0957BB); }

.fota-logbook-shell { width:min(100% - 2rem,72rem); margin-inline:auto; padding-block:clamp(1.25rem,3vw,3rem); }
.fota-logbook__header { display:flex; flex-wrap:wrap; align-items:flex-start; justify-content:space-between; gap:1rem; }
.fota-logbook__actions { display:flex; gap:.5rem; flex-wrap:wrap; }
.fota-logbook__toolbar { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:.75rem; margin-bottom:1rem; }.fota-logbook__toolbar h2{margin:0}
.fota-logbook__filter-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:1rem; align-items:end; }
.fota-logbook__filters label { display:flex; flex-direction:column; gap:.25rem; font-size:.85rem; font-weight:600; }
.fota-logbook__filter-actions { display:flex; flex-wrap:wrap; gap:.5rem; grid-column:span 2; }.fota-logbook__export { display:flex; flex-wrap:wrap; gap:.5rem; }
.fota-logbook__pagination { display:flex; flex-wrap:wrap; gap:.35rem; margin-top:1rem; }
.fota-logbook__page-context { flex-basis:100%; margin:0 0 .4rem; font-weight:600; }
.fota-logbook__table { width:100%; border-collapse:collapse; background:#fff; }
.fota-logbook__table th,.fota-logbook__table td { padding:.75rem .6rem; border-bottom:1px solid var(--fota-border,#d6d9dc); text-align:left; vertical-align:top; }
.fota-logbook__table th { background:#17324d; color:#fff; }
.fota-logbook__row-actions { display:flex; flex-wrap:wrap; gap:.5rem; }
.fota-logbook__mobile { display:none; }
.fota-log-card header { display:flex; justify-content:space-between; gap:1rem; }
.fota-log-card dl { display:grid; grid-template-columns:1fr 1fr; gap:.65rem; margin:.75rem 0; }
.fota-log-card dl div { min-width:0; }.fota-log-card dt{font-size:.75rem;font-weight:700;text-transform:uppercase}.fota-log-card dd{margin:0;overflow-wrap:anywhere}
.fota-logbook__loading { padding:2rem; text-align:center; font-weight:700; }
.fota-logbook-editor { position:fixed; inset:0; z-index:10000; display:flex; justify-content:flex-end; background:rgba(4,15,25,.68); }
.fota-logbook-editor[hidden] { display:none; }.fota-dialog-open{overflow:hidden}
.fota-logbook-editor__panel { width:min(100%,42rem); height:100%; overflow:auto; background:#fff; padding:clamp(1rem,4vw,2rem); box-shadow:-.5rem 0 2rem rgba(0,0,0,.25); }
.fota-operator-editor { margin-top:1.5rem; min-width:0; }
.fota-attribution-audit article, [data-rollback-preview] article { padding:1rem 0; border-bottom:1px solid #d5dadd; overflow-wrap:anywhere; }
.fota-attribution-audit h3, [data-rollback-preview] h3, .fota-restore-selection h3 { font-size:1.125rem; }
.fota-restore-selection, .fota-logbook__rollback { margin-top:1.5rem; overflow-wrap:anywhere; }
.fota-operator-history nav, #fota-bulk-rollback-form nav { display:flex; flex-wrap:wrap; gap:.75rem; margin:1rem 0; }
.fota-logbook-editor header,.fota-logbook-editor footer { display:flex; align-items:center; justify-content:space-between; gap:1rem; }.fota-logbook-editor__close{font-size:2rem;min-width:2.75rem;min-height:2.75rem;background:transparent;border:0}.fota-logbook-editor__grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.fota-logbook-editor__notes{grid-column:1/-1}.fota-logbook-editor footer{justify-content:flex-end;margin-top:1rem}
.fota-logbook__sharing { margin-bottom:1rem; }

.fota-switch { display:inline-flex; align-items:center; gap:.5rem; font-weight:600; cursor:pointer; }
.fota-switch input[type="checkbox"] { width:2.5rem; height:1.4rem; accent-color:var(--fota-signal-blue, #0957BB); }

.fota-import-preview { margin-top:1.5rem; }
.fota-import-summary { margin-bottom:1rem; font-weight:600; }
.fota-import-preview-table { width:100%; border-collapse:collapse; font-size:.9rem; }
.fota-import-preview-table th, .fota-import-preview-table td { padding:.5rem .6rem; border-bottom:1px solid var(--fota-border, #d8dee4); text-align:left; }
.fota-import-history { margin-top:2rem; }

.fota-activation-log-summary__sharing { margin:1rem 0; }
.fota-activation-single { width: 100%; }
.fota-activation-single__inner { width: min(100%, 72rem); margin-inline: auto; padding-inline: clamp(1rem, 4vw, 2rem); }
.fota-activation-single__inner > .fota-section { padding: clamp(1.25rem, 3vw, 2rem) 0; min-width: 0; }
.fota-activation-single__inner .fota-section__header { max-width: none; margin-inline: 0; text-align: left; overflow-wrap: anywhere; }
.fota-activation-single .fota-profile-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.fota-activation-single__inner :is(p, a, h1, h2, h3, li, label, .fota-entry-content) { overflow-wrap: anywhere; }
.fota-activation-capabilities { margin-top: 1.5rem; padding: 1rem; border-left: .25rem solid var(--fota-signal-blue); background: var(--fota-neutral-gray-bg); }
.fota-activation-capabilities h2 { margin-top: 0; }
.fota-activation-actual-activity { margin-block: 1rem; }
.fota-activation-actual-activity p { margin: .35rem 0; }
@media (max-width: 36rem) {
	.fota-activation-single .fota-profile-stats { grid-template-columns: minmax(0, 1fr); }
}
.fota-share { margin:1rem 0; }
.fota-share__actions { display:flex; flex-wrap:wrap; gap:.5rem; }

.fota-log-embed-card { display:block; margin:.75rem 0; max-width:28rem; }
.fota-log-embed-card__line { font-weight:700; margin:0 0 .25rem; }
.fota-log-embed-card__cta { display:inline-block; margin-top:.4rem; font-size:.85rem; font-weight:600; color:var(--fota-signal-blue, #0957BB); }

.fota-badge--void { background:#f3f4f6; color:#6b7280; }
.fota-badge--active { background:#e6f4ea; color:#1e7e34; }

@media (max-width:40rem) {
	.fota-logbook__filter-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media(max-width:48rem){.fota-logbook__desktop{display:none}.fota-logbook__mobile{display:grid;gap:1rem}.fota-logbook-editor__panel{width:100%}.fota-logbook-editor__grid{grid-template-columns:1fr}.fota-logbook-editor__notes{grid-column:auto}}
@media(max-width:36rem){.fota-logbook__filter-grid{grid-template-columns:1fr}.fota-logbook__filter-actions{grid-column:auto}.fota-logbook__actions,.fota-logbook__filter-actions,.fota-logbook__filter-actions .fota-btn{width:100%}.fota-logbook__actions .fota-btn{flex:1}.fota-logbook__toolbar{align-items:flex-start;flex-direction:column}.fota-logbook__row-actions .fota-btn{min-height:2.75rem;flex:1}}

/* =========================================================================
   Recognition: global avatar/identity component, badges, social links
   ========================================================================= */

.screen-reader-text { border:0; clip:rect(1px,1px,1px,1px); clip-path:inset(50%); height:1px; margin:-1px; overflow:hidden; padding:0; position:absolute !important; width:1px; word-wrap:normal !important; }

.fota-dashboard-header { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:1rem; }
.fota-dashboard-clubs { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr)); gap:1rem; }

.fota-forum-nav { display:flex; flex-wrap:wrap; align-items:center; gap:1rem; margin-bottom:1.25rem; padding-bottom:.75rem; border-bottom:1px solid var(--fota-neutral-gray-light); font-size:.9rem; }
.fota-forum-nav a { color:var(--fota-deep-navy); font-weight:600; }
.fota-forum-nav a.is-active { color:var(--fota-signal-blue); }
.fota-forum-nav__cta { margin-left:auto; background:var(--fota-signal-blue); color:var(--fota-white) !important; padding:.4rem .9rem; border-radius:999px; }
.fota-badge-count { display:inline-flex; align-items:center; justify-content:center; min-width:1.25rem; height:1.25rem; padding:0 .3rem; border-radius:999px; background:var(--fota-red); color:var(--fota-white); font-size:.7rem; font-weight:700; }

.fota-identity { display:flex; align-items:center; gap:.6rem; margin:.4rem 0; }
.fota-identity--tiny { gap:.35rem; }
.fota-identity--profile { gap:1rem; }
.fota-identity__avatar { position:relative; display:inline-flex; flex-shrink:0; }
.fota-identity__avatar-img, .fota-identity__avatar svg { width:2.25rem; height:2.25rem; border-radius:50%; object-fit:cover; }
.fota-identity--tiny .fota-identity__avatar-img, .fota-identity--tiny .fota-identity__avatar svg { width:1.5rem; height:1.5rem; }
.fota-identity--profile .fota-identity__avatar-img, .fota-identity--profile .fota-identity__avatar svg { width:5rem; height:5rem; }
.fota-identity__avatar .fota-badge { position:absolute; bottom:-.2rem; right:-.4rem; margin:0; padding:.05rem; border-radius:50%; background:var(--fota-white); box-shadow:var(--fota-shadow); }
.fota-identity__avatar .fota-badge--art { width:1.1rem; height:1.1rem; }
.fota-identity__avatar .fota-badge--text { width:1.1rem; height:1.1rem; display:inline-flex; align-items:center; justify-content:center; font-size:.55rem; padding:0; }
.fota-identity__body { display:flex; flex-direction:column; line-height:1.3; }
.fota-identity__name { font-weight:700; color:var(--fota-deep-navy); }
.fota-identity__meta { margin:0; font-size:.78rem; color:var(--fota-neutral-gray); }

.fota-badge--art { background:none; padding:0; margin:0; border-radius:0; width:1.25rem; height:1.25rem; vertical-align:middle; }
.fota-badge--text { background:var(--fota-neutral-gray-light); color:var(--fota-deep-navy); }

.fota-social-links { display:flex; flex-wrap:wrap; gap:.5rem; margin:.75rem 0; }
.fota-social-link { display:inline-flex; align-items:center; gap:.35rem; padding:.3rem .7rem; border-radius:999px; background:var(--fota-neutral-gray-bg); color:var(--fota-deep-navy); font-size:.8rem; font-weight:600; }
.fota-social-link img { display:block; }
.fota-social-link:hover { background:var(--fota-neutral-gray-light); }

.fota-external-link { position:relative; }
.fota-external-link__badge { font-size:.75em; opacity:.7; margin-left:.15em; }
.fota-external-link__warning { position:absolute; left:0; bottom:100%; margin-bottom:.3rem; padding:.25rem .5rem; border-radius:.4rem; background:var(--fota-deep-navy); color:var(--fota-white); font-size:.72rem; font-weight:600; white-space:nowrap; opacity:0; pointer-events:none; transition:opacity .12s ease; z-index:5; }
.fota-external-link:hover .fota-external-link__warning, .fota-external-link:focus .fota-external-link__warning { opacity:1; }

.fota-forum-attachments { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,10rem),14rem)); gap:.75rem; margin:.75rem 0; }
.fota-forum-attachment-link { display:flex; align-items:center; justify-content:center; min-width:0; }
.fota-forum-image-selection li { overflow-wrap:anywhere; margin-block:.4rem; }
.fota-forum-attachment-img { max-width:min(100%,14rem); max-height:14rem; width:auto; height:auto; border-radius:var(--fota-radius-sm); object-fit:cover; }
.fota-forum-gallery { width:min(96vw,80rem); max-width:96vw; max-height:96vh; padding:1rem; border:0; border-radius:var(--fota-radius-sm); background:var(--fota-white); color:var(--fota-deep-navy); overflow:auto; }
.fota-forum-gallery[open] { display:flex; flex-direction:column; gap:.75rem; }
.fota-forum-gallery::backdrop { background:rgba(0,0,0,.85); }
.fota-forum-gallery__header, .fota-forum-gallery__navigation { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:.5rem; }
.fota-forum-gallery h2, .fota-forum-gallery p { margin:0; }
.fota-forum-gallery button { min-width:2.75rem; min-height:2.75rem; }
.fota-forum-gallery button:focus-visible { outline:3px solid currentColor; outline-offset:3px; }
.fota-forum-gallery__image { display:flex; justify-content:center; min-height:0; }
.fota-forum-gallery__image img { display:block; max-width:100%; max-height:65vh; max-height:65dvh; width:auto; height:auto; object-fit:contain; }
#fota-forum-gallery-help { font-size:.85rem; }
.fota-forum-attachments figure { margin:0; min-width:0; }
.fota-forum-author-controls { display:flex; flex-wrap:wrap; align-items:baseline; gap:.75rem; margin-block:.5rem; }
.fota-forum-author-controls summary { cursor:pointer; text-decoration:underline; }

.fota-forum-post-actions { display:flex; flex-wrap:wrap; align-items:center; gap:.75rem; margin-top:.5rem; font-size:.85rem; }
.fota-forum-report summary { cursor:pointer; color:var(--fota-neutral-gray); font-weight:600; list-style:none; }
.fota-forum-report summary::-webkit-details-marker { display:none; }
.fota-forum-report[open] summary { color:var(--fota-red); }
.fota-forum-report form { display:flex; flex-wrap:wrap; align-items:flex-end; gap:.5rem; margin-top:.5rem; padding:.6rem; background:var(--fota-neutral-gray-bg); border-radius:var(--fota-radius-sm); }
.fota-forum-report label { display:flex; flex-direction:column; font-size:.78rem; gap:.2rem; }

.fota-forum-reports { display:flex; flex-direction:column; gap:1rem; }

@media (max-width:38rem) {
	.fota-forum-nav { gap:.6rem; }
	.fota-forum-nav__cta { margin-left:0; width:100%; text-align:center; }
}

/* -----------------------------------------------------------------
   Social Layer — Follow/Message/Mute/Block, reactions, entity follow,
   notification bell, Notification Center, Messages, Activity feed,
   Dashboard lists. See docs/SOCIAL-LAYER.md. Icon-only controls always
   carry a visible text fallback or an aria-label — never color alone.
   ----------------------------------------------------------------- */

.fota-social-actions { display:flex; flex-wrap:wrap; align-items:center; gap:.4rem; margin:.35rem 0; }
.fota-social-actions--forum { gap:.3rem; margin:.15rem 0 .35rem; }
.fota-social-action {
	display:inline-flex; align-items:center; gap:.3rem;
	padding:.2rem .5rem; border:1px solid var(--fota-neutral-gray-light); border-radius:999px;
	background:var(--fota-white); color:var(--fota-neutral-gray); font-size:.78rem; line-height:1;
	cursor:pointer; text-decoration:none;
}
.fota-social-actions--forum .fota-social-action { padding:.15rem .4rem; font-size:.72rem; }
.fota-social-action:focus-visible { outline:2px solid var(--fota-rf-blue); outline-offset:1px; }
.fota-social-action img { width:14px; height:14px; display:block; }
.fota-social-action.is-active { border-color:var(--fota-red); color:var(--fota-red); }
.fota-social-action--follow.is-active { background:color-mix(in srgb, var(--fota-success) 12%, transparent); border-color:var(--fota-success); color:var(--fota-success); }
.fota-social-actions__error { margin:.3rem 0 0; font-size:.78rem; }

.fota-reactions { display:flex; flex-wrap:wrap; align-items:center; gap:.5rem; }
.fota-reaction {
	display:inline-flex; align-items:center; gap:.3rem;
	padding:.15rem .45rem; border:none; background:transparent; color:var(--fota-neutral-gray);
	font-size:.78rem; cursor:pointer; border-radius:999px;
}
.fota-reaction:hover { background:var(--fota-neutral-gray-bg); }
.fota-reaction:focus-visible { outline:2px solid var(--fota-rf-blue); outline-offset:1px; }
.fota-reaction.is-active { color:var(--fota-red); font-weight:600; }
.fota-reaction img { width:16px; height:16px; display:block; }
.fota-reaction__count { min-width:1ch; }

.fota-entity-follow { display:flex; align-items:center; gap:.6rem; margin-top:.5rem; }
.fota-entity-follow__button.is-active { background:color-mix(in srgb, var(--fota-success) 12%, transparent); border-color:var(--fota-success); color:var(--fota-success); }
.fota-entity-follow__count { font-size:.82rem; color:var(--fota-neutral-gray); }

.fota-notification-bell {
	position:relative; display:inline-flex; align-items:center; gap:.3rem;
	margin-right:.75rem; font-size:.85rem; color:inherit; text-decoration:none;
}
.fota-notification-bell .fota-icon { width:1.25rem; height:1.25rem; }
.fota-notification-bell .fota-badge-count { position:static; }

.fota-notifications-list { display:flex; flex-direction:column; gap:.5rem; margin-top:1rem; }
.fota-notification { display:flex; align-items:center; justify-content:space-between; gap:.75rem; padding:.6rem .75rem; border:1px solid var(--fota-neutral-gray-light); border-radius:var(--fota-radius-sm); background:var(--fota-white); }
.fota-notification.is-unread { border-left:3px solid var(--fota-red); background:color-mix(in srgb, var(--fota-red) 4%, var(--fota-white)); }
.fota-notification a { flex:1; text-decoration:none; color:inherit; }
.fota-notifications-pager { margin-top:1rem; text-align:center; }

.fota-messages-shell { max-width:60rem; margin:0 auto; }
.fota-messages-layout { display:grid; grid-template-columns:minmax(18rem, 22rem) minmax(0, 1fr); gap:1.5rem; align-items:start; }
.fota-messages-inbox { display:flex; flex-direction:column; gap:.35rem; border-right:1px solid var(--fota-neutral-gray-light); padding-right:1rem; }
.fota-messages-inbox__item { display:grid; grid-template-columns:2.5rem minmax(0,1fr); gap:.55rem; padding:.65rem; border-radius:var(--fota-radius-sm); text-decoration:none; color:inherit; font-size:.85rem; }
.fota-messages-inbox__avatar { width:2.5rem; height:2.5rem; object-fit:cover; border-radius:50%; grid-row:1 / span 2; }
.fota-messages-inbox__body { display:flex; flex-direction:column; min-width:0; }
.fota-messages-inbox__body > span { color:var(--fota-neutral-gray); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.fota-messages-inbox__preview { margin-top:.15rem; }
.fota-messages-inbox__meta { grid-column:2; font-size:.72rem; color:var(--fota-neutral-gray); }
.fota-messages-inbox__item.is-unread { font-weight:700; background:color-mix(in srgb, var(--fota-red) 6%, transparent); }
.fota-messages-inbox__item:hover { background:var(--fota-neutral-gray-bg); }
.fota-messages-thread__log { display:flex; flex-direction:column; gap:.5rem; margin-bottom:1rem; }
.fota-messages-thread__header { display:flex; flex-direction:column; gap:.25rem; padding-bottom:.75rem; margin-bottom:1rem; border-bottom:1px solid var(--fota-neutral-gray-light); }
.fota-messages-thread__participant { font-size:1.1rem; font-weight:700; color:inherit; }
.fota-messages-back { display:none; }
.fota-messages-thread__message { display:flex; flex-direction:column; padding:.5rem .75rem; border-radius:var(--fota-radius-sm); border-left:3px solid var(--fota-rf-blue); background:var(--fota-neutral-gray-bg); max-width:32rem; }
.fota-messages-thread__who { font-size:.7rem; font-weight:700; color:var(--fota-neutral-gray); }
.fota-messages-thread__message.is-mine { align-self:flex-end; background:color-mix(in srgb, var(--fota-success) 10%, var(--fota-white)); }
.fota-messages-thread__message.is-mine { border-left:0; border-right:3px solid var(--fota-success); text-align:right; }
.fota-messages-composer { display:flex; gap:.5rem; align-items:flex-end; }
.fota-messages-composer textarea { flex:1; min-height:3rem; }

.fota-activity-feed { display:flex; flex-direction:column; gap:.5rem; margin-top:1rem; }
.fota-activity-feed__item { padding:.6rem .75rem; border:1px solid var(--fota-neutral-gray-light); border-radius:var(--fota-radius-sm); margin:0; }
.fota-activity-feed__pager { margin-top:1rem; text-align:center; }

.fota-dashboard-social-lists { display:flex; flex-direction:column; gap:.4rem; margin:.5rem 0; }
.fota-dashboard-social-list summary { cursor:pointer; font-weight:600; color:var(--fota-neutral-gray); }
.fota-dashboard-social-list[open] summary { color:var(--fota-red); }
.fota-dashboard-social-list ul { margin:.4rem 0 0; padding-left:1.2rem; font-size:.85rem; }

@media (max-width:40rem) {
	.fota-messages-layout { grid-template-columns:1fr; }
	.fota-messages-inbox { border-right:none; border-bottom:1px solid var(--fota-neutral-gray-light); padding-right:0; padding-bottom:1rem; }
	.fota-messages-layout.is-thread-open .fota-messages-inbox { display:none; }
	.fota-messages-back { display:inline-block; }
	.fota-social-actions { gap:.3rem; }
	.fota-social-action { padding:.2rem .4rem; }
}

/* Canonical recognition composition slots. Pins orbit the lower-right status artwork. */
.fota-recognition-composite{--canvas:6rem;--avatar:4rem;--frame:4.65rem;--status:2.75rem;position:relative;width:var(--canvas);height:var(--canvas);display:inline-block;flex:0 0 var(--canvas);isolation:isolate}
.fota-recognition-composite__avatar{position:absolute;left:.25rem;top:.25rem;width:var(--avatar)!important;height:var(--avatar)!important;border-radius:50%;object-fit:cover;z-index:1;display:grid;place-items:center}
.fota-recognition-composite__avatar>svg{width:100%;height:100%}
.fota-recognition-composite>img:not(.fota-recognition-composite__avatar){position:absolute;object-fit:contain;pointer-events:none}
.fota-recognition-composite__frame{left:calc(.25rem + (var(--avatar) - var(--frame))/2);top:calc(.25rem + (var(--avatar) - var(--frame))/2);width:var(--frame);height:var(--frame);z-index:2}
/* The approved Partner asset has a rounded-square opening, not a circular one. */
.fota-recognition-composite--framed .fota-recognition-composite__avatar{border-radius:22%;left:calc(.25rem + var(--avatar)*.015);top:calc(.25rem + var(--avatar)*.015);width:calc(var(--avatar)*.97)!important;height:calc(var(--avatar)*.97)!important}
.fota-recognition-composite__status{right:.05rem;bottom:.2rem;width:var(--status);height:var(--status);z-index:3}
/* These three slots attach to the status perimeter, leaving its medallion clear. */
.fota-recognition-composite__hunter-star{right:.12rem;bottom:2.45rem;width:1.15rem;height:1.15rem;z-index:5}
.fota-recognition-composite__hunter-stripes{right:.9rem;bottom:2.55rem;width:1.65rem;height:.75rem;z-index:4}
.fota-recognition-composite__contributor{right:1.85rem;bottom:.05rem;width:1.2rem;height:.85rem;z-index:5}
.fota-recognition-composite__activator{right:-.05rem;bottom:-.05rem;width:1rem;height:1.15rem;z-index:5}
.fota-recognition-composite--profile{--canvas:14rem;--avatar:9rem;--frame:10.5rem;--status:6.25rem}.fota-recognition-composite--profile .fota-recognition-composite__hunter-star{right:.3rem;bottom:5.5rem;width:2.4rem;height:2.4rem}.fota-recognition-composite--profile .fota-recognition-composite__hunter-stripes{right:2rem;bottom:5.75rem;width:3.7rem;height:1.6rem}.fota-recognition-composite--profile .fota-recognition-composite__contributor{right:4.2rem;width:2.5rem;height:1.7rem}.fota-recognition-composite--profile .fota-recognition-composite__activator{width:2rem;height:2.3rem}
.fota-recognition-composite--dashboard{--canvas:8rem;--avatar:5.25rem;--frame:6rem;--status:3.6rem}
.fota-recognition-composite--forum{--canvas:6rem;--avatar:4rem;--frame:4.65rem;--status:2.75rem}
.fota-recognition-composite--card{--canvas:4.7rem;--avatar:3.1rem;--frame:3.6rem;--status:2.15rem;transform:scale(.9);transform-origin:left center;margin-right:-.4rem}.fota-recognition-composite--card .fota-recognition-composite__hunter-star{bottom:1.9rem;width:.9rem;height:.9rem}.fota-recognition-composite--card .fota-recognition-composite__hunter-stripes{right:.7rem;bottom:2rem;width:1.25rem;height:.55rem}.fota-recognition-composite--card .fota-recognition-composite__contributor{right:1.4rem;width:.9rem;height:.65rem}.fota-recognition-composite--card .fota-recognition-composite__activator{width:.8rem;height:.9rem}
.fota-recognition-composite--directory{--canvas:6rem;--avatar:4rem;--frame:4.65rem;--status:2.75rem;max-width:6rem;max-height:6rem}
.fota-recognition-composite--compact{transform:scale(.72);transform-origin:left center;margin-right:-1.6rem}
.fota-recognition-collection{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,13rem),1fr));gap:1rem}.fota-recognition-collection--dashboard{grid-template-columns:repeat(auto-fit,minmax(min(100%,11rem),1fr))}.fota-recognition-item .fota-badge--art{width:5rem;height:5rem;object-fit:contain}
@media(max-width:38rem){.fota-recognition-composite--profile{--canvas:10rem;--avatar:6.4rem;--frame:7.4rem;--status:4.5rem}.fota-recognition-collection{grid-template-columns:1fr}}
/* Award catalog: transparent standalone badges retain their full silhouette. */
.fota-award-filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.25rem}.fota-award-filters a{padding:.55rem .9rem;border:1px solid var(--fota-border,#d8dee6);border-radius:999px;text-decoration:none}.fota-award-filters a.is-active{background:#173f35;color:#fff}.fota-award-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1.25rem}.fota-award-card{display:flex;flex-direction:column;color:inherit;text-decoration:none;background:#fff;border:1px solid var(--fota-border,#d8dee6);border-radius:16px;overflow:hidden}.fota-award-art{height:260px;padding:22px;display:grid;place-items:center;background:linear-gradient(180deg,#f7faf8,#fff)}.fota-award-art img,.fota-award-detail__art img{width:100%;height:100%;max-width:240px;object-fit:contain}.fota-award-card__body{padding:1.1rem}.fota-award-type{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#52665f}.fota-award-fallback{width:150px;height:150px;display:grid;place-items:center;border:6px double #b99436;border-radius:50%;background:#173f35;color:#fff;font-weight:800;font-size:1.4rem}.fota-award-detail{display:grid;grid-template-columns:minmax(250px,420px) 1fr;gap:3rem;align-items:center}.fota-award-detail__art{height:420px;display:grid;place-items:center}@media(max-width:700px){.fota-award-detail{grid-template-columns:1fr}.fota-award-detail__art{height:300px}.fota-award-art{height:220px}}
/* Reciprocal public user/club membership tiles. */
.fota-club-tile-grid,.fota-member-tile-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:1rem}.fota-club-tile,.fota-member-tile{aspect-ratio:1/1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.7rem;padding:1rem;text-align:center;background:#fff;border:1px solid var(--fota-border,#d8dee6);border-radius:16px}.fota-club-tile__logo{width:68%;aspect-ratio:1;display:grid;place-items:center}.fota-club-tile__logo img{width:100%;height:100%;object-fit:contain}.fota-club-tile__fallback{width:100%;height:100%;display:grid;place-items:center;border-radius:16px;background:#173f35;color:#fff;font-weight:800}.fota-club-tile h3{margin:0}.fota-member-tile__avatar{display:grid;place-items:center}.fota-member-tile__identity{display:flex;flex-direction:column;text-decoration:none}.fota-member-tile__identity span{font-size:.82rem;color:#52665f}@media(max-width:420px){.fota-club-tile-grid,.fota-member-tile-grid{grid-template-columns:1fr}}@media(min-width:421px) and (max-width:700px){.fota-club-tile-grid,.fota-member-tile-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.fota-mention{font-weight:700;text-decoration:underline;text-decoration-thickness:.08em}.fota-mention-autocomplete{position:relative;z-index:20;max-height:15rem;overflow:auto;border:1px solid var(--fota-border,#d8dee6);border-radius:.5rem;background:#fff;box-shadow:0 .5rem 1.25rem #0002}.fota-mention-autocomplete button{display:flex;width:100%;gap:.5rem;flex-direction:column;text-align:left;padding:.65rem;border:0;border-bottom:1px solid #eee;background:#fff;color:inherit}.fota-mention-autocomplete button.is-selected,.fota-mention-autocomplete button:focus{outline:3px solid #0957bb;outline-offset:-3px}.fota-mention-autocomplete span{font-size:.85rem;color:#52606d}
/* Canonical activation identity is kept visible in every list, including narrow screens. */
.fota-activation-card{min-width:0;margin:12px 0}
.fota-activation-card .fota-card__body{display:flex;flex-direction:column;align-items:flex-start;gap:8px}
.fota-activation-card .fota-card__title,.fota-activation-card p{margin:0;overflow-wrap:anywhere}
.fota-activation-status{display:inline-flex;flex:none;white-space:nowrap;font-size:13px;line-height:1.3;padding:5px 9px;border-radius:4px;border:1px solid currentColor}
.fota-activation-status--scheduled{background:#fff4cd;color:#715100}
.fota-activation-status--active{background:#e2f2e6;color:#225b32}
.fota-activation-status--completed{background:#e9edf1;color:#354854}
.fota-activation-status--cancelled{background:#f8e5e5;color:#833333}
.fota-activation-single .fota-section{padding-block:24px}

/* Compact current collections preserve original artwork and reserve their display box. */
.fota-recognition-collection--profile{grid-template-columns:repeat(auto-fit,minmax(min(100%,18rem),1fr));gap:.75rem}
.fota-recognition-collection--profile .fota-recognition-item{min-width:0}
.fota-recognition-collection--profile .fota-card__body{display:grid;grid-template-columns:5rem minmax(0,1fr);column-gap:.8rem;padding:.8rem;align-items:start}
.fota-recognition-collection--profile .fota-badge,.fota-recognition-collection--profile .fota-award-fallback{grid-column:1;grid-row:1 / span 4;width:5rem;height:5rem;max-width:100%;object-fit:contain}
.fota-recognition-collection--profile .fota-card__body>h3,.fota-recognition-collection--profile .fota-card__body>p,.fota-recognition-collection--profile .fota-card__body>a{grid-column:2;min-width:0;overflow-wrap:anywhere;margin:0 0 .4rem}
.fota-recognition-collection--profile h3{font-size:1rem;line-height:1.3}
.fota-recognition-collection--profile p{font-size:.875rem;line-height:1.4}
.fota-activation-log-card{padding:1rem;margin:.75rem 0;overflow-wrap:anywhere}
.fota-activation-log-card>a{display:inline-block;margin:.4rem 1rem .4rem 0}
[data-activation-log-summary]{overflow-wrap:anywhere}
@media(max-width:38rem){.fota-recognition-collection--profile{grid-template-columns:minmax(0,1fr)}.fota-activation-log-card>a{display:block}}
/* The certificate keeps its approved internal geometry; surrounding controls reflow. */
.fota-certificate-section{max-width:1100px;margin-inline:auto}
.fota-certificate{margin:0;max-width:100%;min-width:0;overflow-wrap:anywhere}
.fota-certificate figcaption{margin-block:1rem;font-size:1rem}
.fota-certificate svg{display:block;width:100%;height:auto;max-width:100%}
.fota-certificate details{margin-block:1rem}
.fota-certificate dl{margin:1rem 0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:.5rem}
.fota-certificate dd{margin:0;min-width:0;overflow-wrap:anywhere}
.fota-certificate dt{font-weight:700}
.fota-certificate-preview{padding:1rem}
.fota-certificate-preview summary,.fota-certificate summary{cursor:pointer;overflow-wrap:anywhere}
.fota-certificate-preview summary:focus-visible,.fota-certificate summary:focus-visible{outline:3px solid #145f45;outline-offset:4px}
.fota-award-catalog-item{min-width:0;max-width:100%}
.fota-award-catalog-item .fota-award-art{grid-template-rows:minmax(0,1fr)}
.fota-award-catalog-item .fota-award-art img{min-width:0;min-height:0;max-height:100%}
.fota-certificate-unavailable{padding-inline:1rem;font-size:.9rem}
@media(max-width:400px){.fota-certificate dl{grid-template-columns:minmax(0,1fr)}}

/* Certificate presentation is readable independently of the scaled artwork. */
.fota-certificate-qr { text-align: center; margin: 1rem auto; break-inside: avoid; }
.fota-certificate-qr img { display: block; width: 246px; height: 246px; max-width: 100%; margin: auto; }
@media print {
  body:has(.fota-certificate) .fota-header,
  body:has(.fota-certificate) .site-header,
  body:has(.fota-certificate) .fota-bottom-nav,
  body:has(.fota-certificate) .site-footer,
  body:has(.fota-certificate) #wpadminbar,
  body:has(.fota-certificate) nav { display: none !important; }
  .fota-certificate { break-inside: avoid; }
  .fota-certificate-qr, .fota-certificate details { display: none; }
}
