/* WT26 Call Finder: frontend styles
 * Board (sidebar + results + map), cards, single job view, Apply and Submit
 * forms, badges, and the ported legacy password form. Used by the shortcodes,
 * the Gutenberg blocks, the Divi modules, the Breakdance elements and the
 * plugin templates. Theme-agnostic: no builder-specific selectors and NO
 * font-family declarations; the board inherits the host theme's type.
 *
 * ---------- Sizing text: max(em, rem), never a bare rem ----------
 * Eight ported WT themes set `html { font-size: 62.5% }`, so a bare rem is
 * 10px there; Divi's body is 14px and Enfold's 13px, so a bare em shrinks
 * those. Every text size is `max(<em>, <rem>)`: the em half tracks the host
 * theme, the rem half holds the size we designed. Inputs use
 * `max(1em, 16px)`: the 16px floor is literal (iOS zooms a focused input
 * below it).
 *
 * ---------- Sizing boxes: px ----------
 * Grid tracks, gaps, paddings, icon buttons, the map height and the sidebar
 * width are design constants and stay in px so they render at the drawn size
 * on every root font size.
 *
 * ---------- Colours: custom properties only ----------
 * Every colour is a `--wt26-cf-*` token with a neutral default, declared on
 * `:where(:root)` at zero specificity. A theme, a child theme or a site's
 * Additional CSS overrides them with any `:root { … }` or `.wt26-cf { … }`
 * rule. Text colour is inherited from the theme; tokens cover surfaces,
 * borders, the accent and the badges.
 *
 * ---------- Legacy layout rules ----------
 * The board keeps the legacy class names and ids (`.filter_job_results_
 * container`, `.wt_job_wrap`, `.wt_job_meta`, `#wt_search_text`, …) so the
 * per-site Additional CSS written against the 2023 plugin keeps matching.
 * Those legacy rules are re-stated below at their ORIGINAL specificity behind
 * a zero-cost `:where(.wt26-cf)` scope, and this sheet is enqueued in <head>
 * before the customizer CSS, so a site's own rule wins every tie by source
 * order exactly as it did before. Rules that fought the old float layout
 * (card width and float, the list's flex-wrap) are not re-stated: the grid
 * replaces them. Two legacy choices are dropped on purpose: `.wt_job_meta {
 * color: #000; text-transform: capitalize }` (forced black on dark themes and
 * mangled URLs and emails); text now inherits.
 *
 * ---------- Class contract (spec section 5; render.php is the spelling) ----------
 * Root `.wt26-cf.wt26-cf-board.filter_job_results_container`; board.js adds
 * `.wt26-cf--js` on init (reveals every `.wt26-cf__js-only` control),
 * `.wt26-cf--has-dialog` once the mobile filters dialog exists, and
 * `.wt26-cf--map-open` while the mobile map is shown. Sidebar
 * `aside.wt26-cf__filters` > `form.wt26-cf__form` with
 * `fieldset.wt26-cf__group[data-taxonomy]` > `ul.wt26-cf__options` > `li`
 * with `input[data-term-id]` + `label` + `span.wt26-cf__count` (the facet
 * pill). Mobile toggle `button.wt26-cf__filters-toggle` (+ `.wt26-cf__filters-
 * count`); `dialog.wt26-cf__dialog` with `.wt26-cf__dialog-head`,
 * `.wt26-cf__dialog-title`, `.wt26-cf__dialog-close`, `.wt26-cf__dialog-body`
 * (the aside is moved inside while open) and an optional `.wt26-cf__dialog-
 * foot`. Results `section.wt26-cf__results` > `#wt_job_overlay.wt26-cf__
 * overlay[role=status][aria-busy]` (with `span.wt26-cf__spinner` and the
 * screen-reader `.wt26-cf__overlay-text`), `.wt26-cf__toolbar` >
 * `h2.wt26-cf__heading` > `span.wt26-cf__result-count[data-wt26-cf-count]`
 * and `.wt26-cf__tools` (`.wt26-cf__filters-toggle`, `.wt26-cf__map-toggle`,
 * `select.wt26-cf__sort`, `.wt26-cf__layout` > `.wt26-cf__layout-btn[data-
 * wt26-cf-layout][aria-pressed]`), `.wt26-cf__map`, `.wt26-cf-search`,
 * `.wt26-cf__list.wt26-cf__list--grid|--list[aria-busy]` of
 * `article.wt26-cf__card` (`.wt26-cf__card--active` while its pin is hovered;
 * pins get `.wt-map-pin--active`), `.wt26-cf__empty`, `nav.wt26-cf__pagination`
 * (`--pagination` with page-numbers chips, `--load_more` with
 * `a.wt26-cf__load-more` + `span.wt26-cf__progress`). Shared controls:
 * `.wt26-cf-button` (+ `--primary`, `--secondary`, `--link`, `--small`),
 * `.wt26-cf-input`, `.wt26-cf-select`. Per-card accent: render.php prints
 * `style="--wt26-cf-job-color: #hex"` on cards whose primary term has a colour.
 */

/* ---------- Tokens ---------- */

:where(:root) {
	--wt26-cf-accent: #1d4ed8;            /* white on #1d4ed8 = 6.3:1 */
	--wt26-cf-accent-hover: #1e40af;
	--wt26-cf-accent-contrast: #fff;
	--wt26-cf-focus: #1d4ed8;
	--wt26-cf-surface: #fff;
	--wt26-cf-surface-muted: rgba(0, 0, 0, 0.035);
	--wt26-cf-surface-hover: rgba(0, 0, 0, 0.06);
	--wt26-cf-border: rgba(0, 0, 0, 0.14);
	--wt26-cf-border-strong: rgba(0, 0, 0, 0.32);
	--wt26-cf-muted-opacity: 0.74;         /* keeps AA against a near-white surface for body text down to #444 */
	--wt26-cf-radius: 8px;
	--wt26-cf-radius-small: 4px;
	--wt26-cf-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
	--wt26-cf-shadow-hover: 0 8px 24px rgba(0, 0, 0, 0.14);
	--wt26-cf-gap: 24px;
	--wt26-cf-card-min: 280px;
	--wt26-cf-card-padding: 16px;
	--wt26-cf-sidebar-width: 280px;
	--wt26-cf-sticky-top: 24px;
	--wt26-cf-map-height: 450px;
	--wt26-cf-image-fit: contain;          /* term logos are the common image; set to cover for photo boards */
	--wt26-cf-badge-bg: rgba(0, 0, 0, 0.08);
	--wt26-cf-badge-expired-bg: #fde8e8;
	--wt26-cf-badge-expired-fg: #8a1c1c;   /* 7.4:1 on #fde8e8 */
	--wt26-cf-badge-new-bg: #e3f1e6;
	--wt26-cf-badge-new-fg: #1b5e2a;
	--wt26-cf-badge-pending-bg: #fff4d6;
	--wt26-cf-badge-pending-fg: #7a4b00;
	--wt26-cf-pin-default: #e02b20;
	--wt26-cf-gate-accent: #1c3f95;        /* legacy password form colour */
	--wt26-cf-gate-input-bg: #eee;
	--wt26-cf-gate-input-fg: #444;         /* legacy shipped #999, which fails contrast on #eee */
}

/* ---------- Legacy layout rules, re-stated (see header) ---------- */

.filter_job_results_container:where(.wt26-cf) {
	display: flex;
	padding-bottom: 40px;
	box-sizing: border-box;
}

:where(.wt26-cf) .all_job_posts_container {
	flex: 1 0 0%;
	min-width: 0;
	width: 100%;
	box-sizing: border-box;
}

:where(.wt26-cf) .all_filter_list_sidebar {
	width: var(--wt26-cf-sidebar-width);
	min-width: var(--wt26-cf-sidebar-width);
	max-width: var(--wt26-cf-sidebar-width);
	flex-shrink: 0;
	padding: 0 10px 10px;
	box-sizing: border-box;
}

:where(.wt26-cf) .wt_job_filter_list h3 {
	font-size: max(1.25em, 1.25rem);
	font-weight: 500;
	line-height: 1.4;
	margin: 10px 0;
	padding: 0;
}

/* The two !important flags are the legacy plugin's own: content-area list
   resets in Divi (`#left-area ul`) and friends out-specify any class we could
   write, and the sites' CSS was authored against exactly this behaviour. */
:where(.wt26-cf) .wt_job_filter_list ul {
	list-style: none !important;
	padding: 0 !important;
}

:where(.wt26-cf) .wt_job_searchandfilter input[type="radio"],
:where(.wt26-cf) .wt_job_searchandfilter input[type="checkbox"],
:where(.wt26-cf) #filter_by_full_part label {
	cursor: pointer;
}

:where(.wt26-cf) #filter_by_midcouncil li,
:where(.wt26-cf) #filter_by_position li {
	padding: 7px 0;
}

:where(.wt26-cf) .wt_job_wrap {
	border: 1px solid var(--wt26-cf-border);
	padding: var(--wt26-cf-card-padding);
	overflow: hidden;
	box-sizing: border-box;
}

:where(.wt26-cf) .wt_job_wrap:hover {
	box-shadow: rgb(0 0 0 / 20%) 0 0 20px;
}

:where(.wt26-cf) .wt_job_image_bg {
	width: 100%;
	min-height: 0;
	aspect-ratio: 4 / 3;
	background-size: contain;
	background-position: center center;
	background-repeat: no-repeat;
	margin-bottom: 20px;
}

:where(.wt26-cf, .wt26-cf-single) .wt_job_meta {
	padding: 3px 0;
	font-size: inherit;
	font-weight: initial;
}

:where(.wt26-cf, .wt26-cf-single) .wt_job_meta_content h3 {
	font-size: max(1.0625em, 1.0625rem);
	font-weight: 700;
	line-height: 1.35;
}

/* Row classes the importer carries over from the legacy card builder. */
:where(.wt26-cf) .wt_job_wrap .wt_job_meta_content p.wt_church_name {
	font-size: max(0.875em, 0.875rem);
	padding-top: 0;
	margin-top: 0;
	line-height: 1.25;
}

:where(.wt26-cf) .wt_job_wrap .wt_job_meta_content span.wt_read_more {
	font-size: max(0.6875em, 0.6875rem);
	text-decoration: underline;
}

:where(.wt26-cf) .wt_job_wrap .wt_job_meta_content p.wt_brief_descript {
	line-height: 1.6;
}

:where(.wt26-cf) .wt-filter-unavailable {
	opacity: 0.55;
}

:where(.wt26-cf) .wt-filter-unavailable label {
	cursor: default;
}

:where(.wt26-cf) .is-hide {
	display: none;
}

/* Search bar (legacy selector kept whole so per-site overrides still tie). */
.filter_job_results_container .search_input.wt_seach_box #wt_search_text {
	width: 100%;
	padding: 15px;
	border-radius: 20px;
	margin: 20px 0;
}

/* Map canvas: same height as the legacy board, without the legacy horizontal
   padding (Leaflet measures the padding box and tiles overflowed into it). */
:where(.wt26-cf, .wt26-cf-single) div#mapJobCanvas {
	width: 100%;
	height: var(--wt26-cf-map-height);
}

.wt-map-pin {
	background: none !important;
	border: none !important;
}

:where(.leaflet-popup-content) .info_content p {
	margin: 0 0 5px;
}

/* Single job page (body and post classes are aliased in post-type.php). */
.single-wt24_call_finder #main-content .container:before {
	width: 0;
	height: 0;
}

:where(.single-wt24_call_finder) .single_wt_job_wrap {
	margin-top: 15px;
}

body.single-wt24_call_finder .post-meta {
	display: none;
}

:where(.single-wt24_call_finder) .wt25_job_single_container {
	width: 80%;
	margin: 0 auto;
	padding: 50px 0;
}

.wt_clear {
	clear: both;
}

@media only screen and (max-width: 991px) {
	.filter_job_results_container:where(.wt26-cf) {
		display: block;
	}

	:where(.wt26-cf) .all_filter_list_sidebar {
		width: auto;
		min-width: 0;
		max-width: none;
		margin-bottom: 15px;
	}

	:where(.wt26-cf) .all_job_posts_container {
		width: 100%;
		display: block;
	}

	:where(.single-wt24_call_finder) .wt25_job_single_container {
		width: 100%;
		padding: 24px 0;
	}
}

/* ---------- Board root and layout ---------- */

.wt26-cf-board {
	position: relative;
	gap: var(--wt26-cf-gap);
	align-items: flex-start;
	color: inherit;
}

.wt26-cf-board *,
.wt26-cf-board *::before,
.wt26-cf-board *::after {
	box-sizing: border-box;
}

.wt26-cf__results {
	display: flex;
	flex-direction: column;
	gap: 16px;
	min-width: 0;
}

/* Sticky sidebar on wide screens; its own scroll region when taller than the
   viewport so every group stays reachable. */
.wt26-cf__filters {
	position: sticky;
	top: var(--wt26-cf-sticky-top);
	align-self: flex-start;
	max-height: calc(100vh - var(--wt26-cf-sticky-top) - 16px);
	overflow-y: auto;
	scrollbar-gutter: stable;
	scrollbar-width: auto;
}

body.admin-bar .wt26-cf__filters {
	top: calc(var(--wt26-cf-sticky-top) + 32px);
	max-height: calc(100vh - var(--wt26-cf-sticky-top) - 48px);
}

/* ---------- Sidebar: form, title, groups ---------- */

.wt26-cf__form {
	display: flex;
	flex-direction: column;
	gap: 4px;
	margin: 0;
}

.wt26-cf__title,
.wt26-cf__filters-title,
.wt25_job_filter_main_title {
	margin: 0 0 8px;
	font-size: max(1.375em, 1.375rem);
	font-weight: 700;
	line-height: 1.25;
}

.wt26-cf__reset-wrap {
	margin: 0;
}

.wt26-cf__reset {
	align-self: flex-start;
	font-size: max(0.875em, 0.875rem);
	text-decoration: underline;
	text-underline-offset: 2px;
}

.wt26-cf__group {
	margin: 0 0 20px;
	padding: 0;
	border: 0;
	min-width: 0;
}

.wt26-cf__legend {
	display: block;
	width: 100%;
	margin: 0;
	padding: 0;
}

.wt26-cf__legend h3 {
	margin: 10px 0 6px;
}

/* Option lists. More than eight rows scroll inside a fixed height (the
   :has() rule needs no markup change; the modifier is the explicit switch). */
.wt26-cf__options {
	margin: 0;
	padding: 0;
	list-style: none;
}

.wt26-cf__options--scroll,
.wt26-cf__options:has(> li:nth-child(9)) {
	max-height: 288px;
	overflow-y: auto;
	scrollbar-gutter: stable;
	scrollbar-width: auto;
}

/* render.php prints the input as a SIBLING of its label (the legacy markup,
   wired with for=), so the row itself is the flex container. Making the
   label the row would push it onto its own line under the control. */
.wt26-cf__option,
.wt26-cf__options > li {
	display: flex;
	align-items: center;
	gap: 10px;
	margin: 0;
	padding: 0;
}

.wt26-cf__option-label,
.wt26-cf__options label {
	display: flex;
	flex: 1 1 auto;
	min-width: 0;
	align-items: center;
	gap: 10px;
	min-height: 36px;
	padding: 4px 6px;
	margin: 0;
	border-radius: var(--wt26-cf-radius-small);
	cursor: pointer;
	font-size: max(0.9375em, 0.9375rem);
	line-height: 1.35;
}

.wt26-cf__options label:hover {
	background: var(--wt26-cf-surface-muted);
}

.wt26-cf__options li:has(:checked) > label,
.wt26-cf__options label:has(:checked) {
	font-weight: 600;
}

.wt26-cf__options input[type="radio"],
.wt26-cf__options input[type="checkbox"] {
	flex: 0 0 auto;
	width: 18px;
	height: 18px;
	margin: 0;
	accent-color: var(--wt26-cf-accent);
}

.wt26-cf__options input:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 2px;
}

.wt26-cf__option-text {
	flex: 1 1 auto;
	min-width: 0;
}

.wt26-cf__swatch,
.wt26-cf-swatch {
	flex: 0 0 auto;
	display: inline-block;
	width: 12px;
	height: 12px;
	border-radius: 50%;
	background: var(--wt26-cf-swatch, transparent);
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.18);
	vertical-align: middle;
}

.wt26-cf__count {
	flex: 0 0 auto;
	margin-left: auto;
	min-width: 24px;
	padding: 0 6px;
	border-radius: 999px;
	background: var(--wt26-cf-badge-bg);
	font-size: max(0.75em, 0.75rem);
	font-weight: 600;
	line-height: 20px;
	text-align: center;
	font-variant-numeric: tabular-nums;
}

.wt26-cf__count:empty {
	display: none;
}

/* Zero-result options stay in the tab order and readable (opacity >= .55,
   no pointer-events: none) so a keyboard or screen reader user can still
   pick one and see the empty state explain itself. */
.wt-filter-unavailable label {
	text-decoration: line-through;
	text-decoration-color: rgba(0, 0, 0, 0.3);
}

.wt-filter-unavailable .wt26-cf__count {
	background: transparent;
	box-shadow: inset 0 0 0 1px var(--wt26-cf-border);
}

.wt26-cf__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 8px 0 0;
}

/* ---------- Shared controls: buttons, inputs, selects ---------- */

.wt26-cf-button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	min-height: 44px;
	padding: 10px 18px;
	border: 1px solid var(--wt26-cf-border-strong);
	border-radius: var(--wt26-cf-radius-small);
	background: var(--wt26-cf-surface);
	color: inherit;
	font-size: max(1em, 1rem);
	font-weight: 600;
	line-height: 1.2;
	text-decoration: none;
	cursor: pointer;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}

.wt26-cf-button:hover {
	background: var(--wt26-cf-surface-hover);
}

.wt26-cf-button:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 2px;
}

.wt26-cf-button:disabled,
.wt26-cf-button[aria-disabled="true"] {
	opacity: 0.6;
	cursor: default;
}

.wt26-cf-button--primary {
	border-color: var(--wt26-cf-accent);
	background: var(--wt26-cf-accent);
	color: var(--wt26-cf-accent-contrast);
}

.wt26-cf-button--primary:hover {
	border-color: var(--wt26-cf-accent-hover);
	background: var(--wt26-cf-accent-hover);
}

.wt26-cf-button--secondary {
	background: transparent;
}

.wt26-cf-button--link {
	min-height: 0;
	padding: 4px 0;
	border: 0;
	background: transparent;
	text-decoration: underline;
	text-underline-offset: 2px;
}

.wt26-cf-button--link:hover {
	background: transparent;
	text-decoration-thickness: 2px;
}

.wt26-cf-button--small {
	min-height: 36px;
	padding: 6px 12px;
	font-size: max(0.875em, 0.875rem);
}

.wt26-cf-button--icon {
	width: 44px;
	padding: 0;
}

.wt26-cf-button[aria-pressed="true"] {
	border-color: var(--wt26-cf-accent);
	background: var(--wt26-cf-accent);
	color: var(--wt26-cf-accent-contrast);
}

.wt26-cf-button svg,
.wt26-cf-icon {
	width: 20px;
	height: 20px;
	flex: 0 0 auto;
	fill: none;
	stroke: currentColor;
	stroke-width: 2;
	stroke-linecap: round;
	stroke-linejoin: round;
}

.wt26-cf-input,
.wt26-cf-select,
.wt26-cf-textarea,
.wt26-cf-form input:where(:not([type="checkbox"], [type="radio"], [type="file"], [type="submit"], [type="button"], [type="hidden"])),
.wt26-cf-form select,
.wt26-cf-form textarea {
	width: 100%;
	max-width: 100%;
	min-height: 44px;
	padding: 10px 12px;
	border: 1px solid var(--wt26-cf-border-strong);
	border-radius: var(--wt26-cf-radius-small);
	background: var(--wt26-cf-surface);
	color: inherit;
	font-size: max(1em, 16px);
	line-height: 1.4;
}

.wt26-cf-textarea,
.wt26-cf-form textarea {
	min-height: 140px;
	resize: vertical;
}

.wt26-cf-input:focus-visible,
.wt26-cf-select:focus-visible,
.wt26-cf-textarea:focus-visible,
.wt26-cf-form input:focus-visible,
.wt26-cf-form select:focus-visible,
.wt26-cf-form textarea:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 1px;
}

.wt26-cf-form input[type="checkbox"],
.wt26-cf-form input[type="radio"] {
	width: 18px;
	height: 18px;
	margin: 0;
	accent-color: var(--wt26-cf-accent);
}

/* ---------- JS-only controls, mobile filters: toggle button and dialog ---------- */

/* Controls that do nothing without board.js (the layout toggle, the filters
   and map toggles) stay hidden until it adds `.wt26-cf--js` to the board root.
   The two toggles also wait for the phone breakpoint further down. */
.wt26-cf__js-only,
.wt26-cf__filters-toggle,
.wt26-cf__map-toggle {
	display: none;
}

.wt26-cf--js .wt26-cf__js-only {
	display: inline-flex;
}

/* The two toggles are js-only too, but they wait for the phone breakpoint
   (the rule inside the max-width media query below wins by source order). */
.wt26-cf--js .wt26-cf__filters-toggle,
.wt26-cf--js .wt26-cf__map-toggle {
	display: none;
}

/* board.js hides controls with the `hidden` attribute (no Leaflet, desktop
   width); an author display rule must never show them again. */
.wt26-cf--js .wt26-cf__js-only[hidden],
.wt26-cf--js .wt26-cf__filters-toggle[hidden],
.wt26-cf--js .wt26-cf__map-toggle[hidden] {
	display: none;
}

.wt26-cf__dialog {
	position: fixed;
	inset: 0;
	width: 100%;
	max-width: 100%;
	height: 100%;
	max-height: 100%;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: var(--wt26-cf-surface);
	color: inherit;
	overflow: hidden;
}

.wt26-cf__dialog::backdrop {
	background: rgba(0, 0, 0, 0.5);
}

.wt26-cf__dialog[open] {
	display: flex;
	flex-direction: column;
}

.wt26-cf__dialog-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 12px 16px;
	border-bottom: 1px solid var(--wt26-cf-border);
}

.wt26-cf__dialog-title {
	margin: 0;
	font-size: max(1.125em, 1.125rem);
	font-weight: 700;
}

.wt26-cf__dialog-close {
	flex: 0 0 auto;
	margin-left: auto;
}

.wt26-cf__dialog-body {
	flex: 1 1 auto;
	min-height: 0;
	padding: 16px;
	overflow-y: auto;
	scrollbar-gutter: stable;
	scrollbar-width: auto;
}

.wt26-cf__dialog-foot {
	display: flex;
	gap: 8px;
	padding: 12px 16px;
	border-top: 1px solid var(--wt26-cf-border);
	background: var(--wt26-cf-surface);
}

.wt26-cf__dialog-foot .wt26-cf-button {
	flex: 1 1 auto;
}

/* Inside the dialog the aside is a plain block, not a sticky column. */
.wt26-cf__dialog .wt26-cf__filters,
.wt26-cf__dialog .all_filter_list_sidebar {
	display: block;
	position: static;
	width: auto;
	min-width: 0;
	max-width: none;
	max-height: none;
	overflow: visible;
	padding: 0;
	margin: 0;
}

@media only screen and (min-width: 992px) {
	/* A dialog opened at a narrow width and then widened: centre it. */
	.wt26-cf__dialog {
		inset: auto;
		top: 50%;
		left: 50%;
		transform: translate(-50%, -50%);
		width: min(440px, calc(100vw - 32px));
		height: auto;
		max-height: calc(100vh - 32px);
		border-radius: var(--wt26-cf-radius);
		box-shadow: var(--wt26-cf-shadow-hover);
	}
}

@media only screen and (max-width: 991px) {
	.wt26-cf-board {
		gap: 16px;
	}

	.wt26-cf__filters {
		position: static;
		max-height: none;
		overflow: visible;
	}

	/* With JS and a working <dialog> (board.js adds .wt26-cf--has-dialog) the
	   sidebar lives in the dialog and the toolbar shows the toggles. Without
	   JS, or in a browser with no dialog element, everything stays in flow. */
	.wt26-cf--has-dialog .wt26-cf__filters {
		display: none;
	}

	/* Inside the dialog it shows again, whether board.js appended the dialog
	   inside the board root or to <body>. */
	.wt26-cf__dialog .wt26-cf__filters,
	.wt26-cf--has-dialog .wt26-cf__dialog .wt26-cf__filters {
		display: block;
	}

	.wt26-cf--js .wt26-cf__filters-toggle,
	.wt26-cf--js .wt26-cf__map-toggle {
		display: inline-flex;
	}

	.wt26-cf--js:not(.wt26-cf--map-open) .wt26-cf__map {
		display: none;
	}
}

/* ---------- Results: loading status, toolbar, search, map ---------- */

/* Inline, non-blocking loading status: `#wt_job_overlay.wt26-cf__overlay
   [role=status]` holding `span.wt26-cf__spinner` and the screen-reader text
   in `.wt26-cf__overlay-text`. board.js flips aria-busy; the block is only
   painted while a fetch is running (the legacy overlay was a page mask). */
.wt26-cf__overlay {
	display: flex;
	align-items: center;
	gap: 10px;
	min-height: 28px;
	margin: 0;
	font-size: max(0.9375em, 0.9375rem);
	font-weight: 600;
}

.wt26-cf__overlay:not([aria-busy="true"]),
.wt26-cf__overlay[hidden] {
	display: none;
}

.wt26-cf__spinner {
	flex: 0 0 auto;
	display: inline-block;
	width: 20px;
	height: 20px;
	border: 3px solid var(--wt26-cf-border);
	border-top-color: var(--wt26-cf-accent);
	border-radius: 50%;
	animation: wt26-cf-spin 0.8s infinite linear;
}

/* The legacy inner `span.spinner` is kept for per-site CSS; a theme's own
   `.spinner` artwork must not paint inside ours. */
.wt26-cf__spinner > .spinner {
	display: none;
}

@keyframes wt26-cf-spin {
	100% {
		transform: rotate(360deg);
	}
}

.wt26-cf__toolbar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px 16px;
	padding-bottom: 12px;
	border-bottom: 1px solid var(--wt26-cf-border);
}

.wt26-cf__heading {
	margin: 0;
	font-size: max(1.25em, 1.25rem);
	font-weight: 700;
	line-height: 1.3;
}

.wt26-cf__heading:focus {
	outline: none;
}

.wt26-cf__heading:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 4px;
	border-radius: 2px;
}

/* The live result count. render.php prints it as `span.wt26-cf__result-count
   [data-wt26-cf-count]` inside the h2 heading, where it inherits the heading
   type; board.js falls back to a stand-alone `p.wt26-cf__result-count` on
   markup without one, and that reads as a muted line. */
.wt26-cf__result-count {
	margin: 0;
	font-size: max(0.9375em, 0.9375rem);
	opacity: var(--wt26-cf-muted-opacity);
	font-variant-numeric: tabular-nums;
}

.wt26-cf__heading .wt26-cf__result-count {
	font-size: inherit;
	font-weight: inherit;
	line-height: inherit;
	opacity: 1;
}

.wt26-cf__tools,
.wt26-cf__toolbar-controls {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px 12px;
	margin-left: auto;
}

/* Sort: render.php puts the class on the <select> itself (its label is
   screen-reader only); `.wt26-cf__sort-wrap` is for markup that wraps a
   visible label and the select together. */
.wt26-cf__sort-wrap {
	display: flex;
	align-items: center;
	gap: 8px;
	margin: 0;
}

.wt26-cf__sort-wrap label {
	margin: 0;
	font-size: max(0.875em, 0.875rem);
	font-weight: 600;
	white-space: nowrap;
}

select.wt26-cf__sort,
.wt26-cf__sort-wrap select,
.wt26-cf__sort-wrap .wt26-cf-select {
	width: auto;
	min-width: 160px;
	min-height: 40px;
	margin: 0;
	padding: 6px 32px 6px 10px;
}

/* Layout toggle: `.wt26-cf__layout` (render.php) is a group of text buttons,
   `.wt26-cf__layout-btn[data-wt26-cf-layout][aria-pressed]`; `.wt26-cf__view`
   is kept for icon-button markup. board.js presses the active one. */
.wt26-cf__layout,
.wt26-cf__view {
	display: inline-flex;
	gap: 0;
	border: 1px solid var(--wt26-cf-border-strong);
	border-radius: var(--wt26-cf-radius-small);
	overflow: hidden;
}

.wt26-cf__layout .wt26-cf-button,
.wt26-cf__view .wt26-cf-button {
	min-height: 40px;
	min-width: 44px;
	padding: 0 14px;
	border: 0;
	border-radius: 0;
	font-size: max(0.875em, 0.875rem);
}

.wt26-cf__view .wt26-cf-button {
	width: 44px;
	padding: 0;
}

.wt26-cf__layout .wt26-cf-button + .wt26-cf-button,
.wt26-cf__view .wt26-cf-button + .wt26-cf-button {
	border-left: 1px solid var(--wt26-cf-border-strong);
}

.wt26-cf__layout .wt26-cf-button:focus-visible,
.wt26-cf__view .wt26-cf-button:focus-visible {
	outline-offset: -3px;
}

.wt26-cf-search {
	position: relative;
	margin: 0;
}

.wt26-cf-search input[type="search"] {
	width: 100%;
	min-height: 48px;
	padding: 12px 16px;
	border: 1px solid var(--wt26-cf-border-strong);
	border-radius: 24px;
	background: var(--wt26-cf-surface);
	color: inherit;
	font-size: max(1em, 16px);
	line-height: 1.4;
	margin: 0;
}

/* Room for a search icon only when the markup carries one. */
.wt26-cf-search:has(.wt26-cf-search__icon) input[type="search"] {
	padding-left: 44px;
}

.wt26-cf-search input[type="search"]:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 1px;
}

.wt26-cf-search input[type="search"]::-webkit-search-cancel-button {
	cursor: pointer;
}

.wt26-cf-search__icon {
	position: absolute;
	top: 50%;
	left: 16px;
	width: 20px;
	height: 20px;
	transform: translateY(-50%);
	pointer-events: none;
	opacity: 0.6;
}

.wt26-cf-search label {
	display: block;
	margin: 0 0 6px;
	font-size: max(0.875em, 0.875rem);
	font-weight: 600;
}

.wt26-cf__map {
	position: relative;
	z-index: 1;
	width: 100%;
	min-height: 360px;
	height: var(--wt26-cf-map-height);
	border: 1px solid var(--wt26-cf-border);
	border-radius: var(--wt26-cf-radius);
	background: var(--wt26-cf-surface-muted);
	overflow: hidden;
}

/* Leaflet's own resets need the map's tiles to win against theme img rules. */
.wt26-cf__map .leaflet-tile,
.wt26-cf__map img.leaflet-tile {
	max-width: none;
	box-shadow: none;
	border-radius: 0;
}

.wt26-cf__map .leaflet-container {
	font-size: max(0.75em, 0.75rem);
}

.wt26-cf__map:focus-within {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 2px;
}

/* ---------- Map pins and popups ---------- */

/* The divIcon element (`.wt-map-pin`, built by map.js) holds
   `span.wt-map-pin__inner` > an inline SVG teardrop whose fill reads the
   `--wt26-cf-pin` custom property map.js sets on both nodes. Sized for
   iconSize [28, 42] with iconAnchor [14, 42]. Leaflet positions the root with
   a transform, so hover and active effects scale the inner span only.
   map.js toggles `.wt-map-pin--active` from card hover/focus. */
.wt-map-pin {
	position: relative;
	width: 28px;
	height: 42px;
	cursor: pointer;
}

.wt-map-pin__inner {
	display: block;
	width: 100%;
	height: 100%;
	color: var(--wt26-cf-pin, var(--wt26-cf-pin-default));
	filter: drop-shadow(0 2px 3px rgba(0, 0, 0, 0.35));
	transform-origin: 50% 100%;
	transition: transform 0.15s ease;
}

.wt-map-pin__inner svg {
	display: block;
	width: 100%;
	height: 100%;
	max-width: none;
	overflow: visible;
}

.wt-map-pin--active .wt-map-pin__inner,
.wt-map-pin:hover .wt-map-pin__inner,
.wt-map-pin:focus-visible .wt-map-pin__inner {
	transform: scale(1.15);
}

.wt-map-pin--active {
	z-index: 1000 !important;
}

/* Approximate locations (hide_exact_location): a lighter pin. */
.wt-map-pin__inner--approx {
	opacity: 0.8;
}

.wt-map-pin:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 2px;
	border-radius: 6px;
}

.leaflet-popup-content .info_content {
	font-size: max(0.875em, 0.875rem);
	line-height: 1.5;
	max-width: 260px;
}

.leaflet-popup-content .info_content a {
	font-weight: 700;
	text-decoration: underline;
}

.leaflet-popup-content .info_content .wt26-cf-badge {
	margin-top: 4px;
}

/* ---------- Results list: grid and list layouts ---------- */

.wt26-cf__list {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(var(--wt26-cf-card-min), 1fr));
	gap: var(--wt26-cf-gap);
	align-items: stretch;
	margin: 0;
	padding: 0;
	list-style: none;
	transition: opacity 0.15s ease;
}

.wt26-cf__list--list {
	grid-template-columns: minmax(0, 1fr);
	gap: 16px;
}

.wt26-cf__list[aria-busy="true"] > * {
	opacity: 0.5;
	pointer-events: none;
}

/* ---------- Card ---------- */

.wt26-cf__card {
	position: relative;
	display: flex;
	flex-direction: column;
	min-width: 0;
	margin: 0;
	border-top: 4px solid var(--wt26-cf-job-color, var(--wt26-cf-border));
	border-radius: var(--wt26-cf-radius);
	background: var(--wt26-cf-surface);
	box-shadow: var(--wt26-cf-shadow);
	transition: box-shadow 0.15s ease, transform 0.15s ease;
}

/* board.js adds `.wt26-cf__card--active` while the matching map pin is
   hovered, focused or has its popup open. */
.wt26-cf__card:hover,
.wt26-cf__card:focus-within,
.wt26-cf__card--active {
	box-shadow: var(--wt26-cf-shadow-hover);
}

.wt26-cf__card-link {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
	min-width: 0;
	color: inherit;
	text-decoration: none;
}

.wt26-cf__card-link:hover,
.wt26-cf__card-link:focus-visible {
	color: inherit;
}

.wt26-cf__card-link:hover .wt_job_title,
.wt26-cf__card-link:focus-visible .wt_job_title,
.wt26-cf__card-link:hover .wt26-cf-row--title,
.wt26-cf__card-link:focus-visible .wt26-cf-row--title {
	text-decoration: underline;
	text-underline-offset: 3px;
}

.wt26-cf__card-link:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 2px;
	border-radius: var(--wt26-cf-radius-small);
}

.wt26-cf__card .wt_job_image_bg {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: var(--wt26-cf-radius-small);
	background-color: var(--wt26-cf-surface-muted);
	overflow: hidden;
	margin-bottom: 16px;
}

/* render.php prints `img.wt26-cf__img` (+ `--placeholder` for the shipped
   SVG); `.wt26-cf__image` is kept for markup written against the earlier name. */
.wt26-cf__card .wt_job_image_bg img,
.wt26-cf__img,
.wt26-cf__image {
	display: block;
	width: 100%;
	height: 100%;
	max-width: 100%;
	object-fit: var(--wt26-cf-image-fit);
	object-position: center;
	padding: 0;
	margin: 0;
	border: 0;
	box-shadow: none;
}

.wt26-cf__card .wt_job_image_bg img.wt26-cf__img--cover,
.wt26-cf__card .wt_job_image_bg img.wt26-cf__image--cover {
	object-fit: cover;
}

.wt26-cf__card .wt_job_image_bg img.wt26-cf__img--placeholder,
.wt26-cf__card .wt_job_image_bg img.wt26-cf__image--placeholder {
	object-fit: contain;
	padding: 12%;
	opacity: 0.7;
}

.wt26-cf__card .wt_job_meta_content {
	display: flex;
	flex-direction: column;
	gap: 4px;
	flex: 1 1 auto;
	min-width: 0;
}

.wt26-cf__card .wt_job_meta_content > :last-child {
	margin-bottom: 0;
}

.wt26-cf__card .wt_job_meta_content .wt26-cf-row--summary {
	margin-top: auto;
	padding-top: 8px;
}

.wt26-cf__card-badges {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin: 0 0 8px;
}

/* Title row: an h3 in the card, the entry title lives outside on singles. */
.wt26-cf-row--title,
.wt_job_title {
	margin: 0 0 4px;
	overflow-wrap: anywhere;
}

/* Meta rows and their labels. */
.wt26-cf-row {
	margin: 0;
	font-size: max(0.9375em, 0.9375rem);
	line-height: 1.5;
	overflow-wrap: anywhere;
}

.wt26-cf-row a {
	text-decoration: underline;
	text-underline-offset: 2px;
}

.wt26-cf-label {
	display: inline;
	margin-right: 0.35em;
	font-weight: 400;
}

.wt26-cf-label--bold-same,
.wt26-cf-label--bold-new {
	font-weight: 700;
}

.wt26-cf-label--bold-new,
.wt26-cf-label--reg-new {
	display: block;
	margin-right: 0;
}

.wt26-cf-label--reg-new {
	opacity: var(--wt26-cf-muted-opacity);
	font-size: max(0.8125em, 0.8125rem);
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

.wt26-cf-row--organization {
	font-weight: 600;
}

.wt26-cf-row--posted_date,
.wt26-cf-row--remove_on,
.wt26-cf-row--city_state,
.wt26-cf-row--address_display {
	opacity: var(--wt26-cf-muted-opacity);
	font-size: max(0.875em, 0.875rem);
}

.wt26-cf-row--summary {
	opacity: 0.9;
}

/* Term lists inside a row: swatch + name chips. */
.wt26-cf-terms {
	display: inline-flex;
	flex-wrap: wrap;
	gap: 6px;
	vertical-align: middle;
}

.wt26-cf-term {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 2px 10px 2px 8px;
	border-radius: 999px;
	background: var(--wt26-cf-badge-bg);
	font-size: max(0.8125em, 0.8125rem);
	line-height: 1.5;
	white-space: nowrap;
}

.wt26-cf-term .wt26-cf__swatch {
	width: 10px;
	height: 10px;
}

/* List layout: image column left, text right. */
.wt26-cf__list--list .wt26-cf__card {
	border-top-width: 1px;
	border-left: 4px solid var(--wt26-cf-job-color, var(--wt26-cf-border));
}

.wt26-cf__list--list .wt26-cf__card-link {
	flex-direction: row;
	align-items: flex-start;
	gap: 16px;
}

.wt26-cf__list--list .wt26-cf__card .wt_job_image_bg {
	flex: 0 0 clamp(120px, 24vw, 200px);
	width: clamp(120px, 24vw, 200px);
	aspect-ratio: 4 / 3;
	margin-bottom: 0;
}

.wt26-cf__list--list .wt26-cf__card .wt_job_meta_content {
	flex: 1 1 auto;
}

@media only screen and (max-width: 560px) {
	.wt26-cf__list--list .wt26-cf__card-link {
		flex-direction: column;
	}

	.wt26-cf__list--list .wt26-cf__card .wt_job_image_bg {
		flex-basis: auto;
		width: 100%;
		margin-bottom: 16px;
	}
}

/* ---------- Badges ---------- */

.wt26-cf-badge {
	display: inline-flex;
	align-items: center;
	gap: 4px;
	padding: 2px 10px;
	border-radius: 999px;
	background: var(--wt26-cf-badge-bg);
	color: inherit;
	font-size: max(0.75em, 0.75rem);
	font-weight: 700;
	line-height: 1.6;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	white-space: nowrap;
	vertical-align: middle;
}

.wt26-cf-badge--expired {
	background: var(--wt26-cf-badge-expired-bg);
	color: var(--wt26-cf-badge-expired-fg);
}

.wt26-cf-badge--new {
	background: var(--wt26-cf-badge-new-bg);
	color: var(--wt26-cf-badge-new-fg);
}

.wt26-cf-badge--pending {
	background: var(--wt26-cf-badge-pending-bg);
	color: var(--wt26-cf-badge-pending-fg);
}

.wt26-cf-badge--approx {
	text-transform: none;
	font-weight: 600;
	letter-spacing: 0;
}

/* ---------- Empty state ---------- */

.wt26-cf__empty {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 12px;
	padding: 40px 24px;
	border: 1px dashed var(--wt26-cf-border-strong);
	border-radius: var(--wt26-cf-radius);
	text-align: center;
}

.wt26-cf__empty p,
.wt26-cf__empty-title {
	margin: 0;
	font-size: max(1.0625em, 1.0625rem);
}

.wt26-cf__empty-title {
	font-size: max(1.25em, 1.25rem);
	font-weight: 700;
	line-height: 1.3;
}

.wt26-cf__empty-actions {
	margin: 4px 0 0;
}

/* "Clear all filters": a link from render.php, a button from board.js. */
a.wt26-cf__clear {
	font-weight: 600;
	text-decoration: underline;
	text-underline-offset: 2px;
}

.wt26-cf__empty[hidden] {
	display: none;
}

/* ---------- Pagination and load more ---------- */

.wt26-cf__pagination {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 6px;
	margin: 8px 0 0;
}

/* render.php prints the nav with `hidden` when there is nothing to page to;
   board.js keeps that up to date. */
.wt26-cf__pagination[hidden] {
	display: none;
}

/* Load more mode: the nav stacks `a.wt26-cf__load-more` over the
   "Showing X of Y" line (`span.wt26-cf__progress`). */
.wt26-cf__pagination--load_more {
	flex-direction: column;
	align-items: center;
	gap: 8px;
}

/* paginate_links( type => list ) wraps the chips in ul.page-numbers; the
   wrapper must not be styled as a chip itself. */
.wt26-cf__pagination ul,
.wt26-cf__pagination ul.page-numbers {
	display: contents;
	margin: 0;
	padding: 0;
	border: 0;
	background: none;
	list-style: none;
}

.wt26-cf__pagination li {
	margin: 0;
	padding: 0;
}

.wt26-cf__pagination a.page-numbers,
.wt26-cf__pagination span.page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 44px;
	min-height: 44px;
	padding: 8px 12px;
	border: 1px solid var(--wt26-cf-border-strong);
	border-radius: var(--wt26-cf-radius-small);
	color: inherit;
	font-size: max(0.9375em, 0.9375rem);
	font-weight: 600;
	text-decoration: none;
	font-variant-numeric: tabular-nums;
}

.wt26-cf__pagination a.page-numbers:hover {
	background: var(--wt26-cf-surface-hover);
}

.wt26-cf__pagination a.page-numbers:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 2px;
}

/* The current page is a filled chip in the accent (never currentColor: the
   text is set to the contrast colour on the same rule). */
.wt26-cf__pagination span.page-numbers.current {
	border-color: var(--wt26-cf-accent);
	background: var(--wt26-cf-accent);
	color: var(--wt26-cf-accent-contrast);
}

.wt26-cf__pagination span.page-numbers.dots {
	border-color: transparent;
}

.wt26-cf__load-more-wrap {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	margin: 8px 0 0;
}

.wt26-cf__load-more {
	min-width: 220px;
}

.wt26-cf__load-more[hidden] {
	display: none;
}

.wt26-cf__progress {
	margin: 0;
	font-size: max(0.875em, 0.875rem);
	opacity: var(--wt26-cf-muted-opacity);
	font-variant-numeric: tabular-nums;
}

/* ---------- Skeleton placeholders (optional, inserted by board.js) ---------- */

.wt26-cf__skeleton {
	display: block;
	min-height: 220px;
	border-radius: var(--wt26-cf-radius);
	background: linear-gradient(90deg, var(--wt26-cf-surface-muted) 25%, var(--wt26-cf-surface-hover) 50%, var(--wt26-cf-surface-muted) 75%);
	background-size: 400% 100%;
	animation: wt26-cf-shimmer 1.4s ease infinite;
}

@keyframes wt26-cf-shimmer {
	0% {
		background-position: 100% 0;
	}

	100% {
		background-position: 0 0;
	}
}

/* ---------- Visually hidden helper ---------- */

/* `.screen-reader-text` is WordPress's own convention; every bundled theme
   styles it, but a few third-party themes do not. The scoped, zero-specificity
   fallback lets the theme's rule win while keeping our labels off screen. */
.wt26-cf-visually-hidden,
.wt26-cf-form__hp,
.wt26-cf__sr-only,
:where(.wt26-cf, .wt26-cf-single, .wt26-cf-form) .screen-reader-text {
	position: absolute !important;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	border: 0;
	overflow: hidden;
	clip: rect(1px, 1px, 1px, 1px);
	clip-path: inset(50%);
	white-space: nowrap;
}

/* ---------- Single job view ---------- */

.wt26-cf-single {
	margin: 0 0 32px;
}

.wt26-cf-single *,
.wt26-cf-single *::before,
.wt26-cf-single *::after {
	box-sizing: border-box;
}

.wt26-cf-single .wt_job_meta_content {
	display: flex;
	flex-direction: column;
	gap: 6px;
}

.wt26-cf-single .wt26-cf-row {
	font-size: max(1em, 1rem);
}

.wt26-cf-single .wt26-cf-row--title {
	margin: 0 0 8px;
	font-size: max(1.5em, 1.5rem);
}

.wt26-cf-single .wt26-cf-row--position_title {
	font-size: max(1.125em, 1.125rem);
	font-weight: 600;
}

/* The single image row also carries the legacy `wt_job_image_bg` class; undo
   the card-sized 4:3 box the legacy rule above gives that class. */
.wt26-cf-single .wt26-cf-row--image {
	width: auto;
	aspect-ratio: auto;
	min-height: 0;
	margin: 0 0 16px;
}

.wt26-cf-single .wt26-cf-row--image img {
	display: block;
	max-width: 360px;
	width: 100%;
	height: auto;
	border-radius: var(--wt26-cf-radius);
	background: var(--wt26-cf-surface-muted);
}

.wt26-cf-single .wt26-cf__card-badges {
	margin: 0 0 12px;
}

/* Rendered description keeps the theme's prose styling. */
.wt26-cf-single .wt_details,
.wt26-cf-single .wt26-cf-row--content {
	margin: 24px 0;
	font-size: inherit;
	line-height: inherit;
}

.wt26-cf-single .wt_details > :first-child {
	margin-top: 0;
}

.wt26-cf-pdf,
.position_pdf {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin: 8px 0;
	padding: 10px 16px;
	border: 1px solid var(--wt26-cf-border-strong);
	border-radius: var(--wt26-cf-radius-small);
	color: inherit;
	font-weight: 600;
	text-decoration: none;
}

.wt26-cf-pdf:hover,
.position_pdf:hover {
	background: var(--wt26-cf-surface-hover);
}

.wt26-cf-pdf:focus-visible,
.position_pdf:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 2px;
}

.wt26-cf-pdf__size {
	font-weight: 400;
	opacity: var(--wt26-cf-muted-opacity);
}

.single_job_posts_container {
	margin: 24px 0;
}

.wt26-cf-single .wt26-cf-row--contact_public {
	padding: 16px;
	border-radius: var(--wt26-cf-radius);
	background: var(--wt26-cf-surface-muted);
}

.wt26-cf-single .wt26-cf-row--tags .wt26-cf-terms {
	margin-left: 4px;
}

/* The theme's featured image is blanked server-side; some themes still print
   an empty wrapper that holds layout. */
.single-wt26_cf_job .featured-image:empty,
.single-wt26_cf_job .et_pb_post .entry-featured-image-url:empty {
	display: none;
}

/* ---------- Apply button and section ---------- */

.wt26-cf-apply {
	margin: 24px 0;
}

.wt26-cf-apply__intro {
	margin: 0 0 12px;
}

.wt26-cf-apply__fallback {
	margin: 0;
	padding: 16px;
	border-radius: var(--wt26-cf-radius);
	background: var(--wt26-cf-surface-muted);
}

.wt26-cf-apply-button {
	margin: 16px 0;
}

/* Plain style. Divi's `.et_pb_button` variant is excluded inside :where()
   (no extra specificity) so Divi keeps styling its own buttons. */
.wt26-cf-apply-button__link:where(:not(.et_pb_button)) {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	min-height: 48px;
	padding: 12px 28px;
	border: 2px solid var(--wt26-cf-accent);
	border-radius: var(--wt26-cf-radius-small);
	background: var(--wt26-cf-accent);
	color: var(--wt26-cf-accent-contrast);
	font-size: max(1.0625em, 1.0625rem);
	font-weight: 700;
	line-height: 1.2;
	text-decoration: none;
	cursor: pointer;
	transition: background-color 0.15s ease, border-color 0.15s ease;
}

.wt26-cf-apply-button__link:where(:not(.et_pb_button)):hover {
	background: var(--wt26-cf-accent-hover);
	border-color: var(--wt26-cf-accent-hover);
	color: var(--wt26-cf-accent-contrast);
}

.wt26-cf-apply-button__link:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 3px;
}

.wt26-cf-apply-button__link[aria-expanded="true"]:where(:not(.et_pb_button)) {
	background: transparent;
	color: inherit;
}

/* ---------- Forms (Apply, Submit a Job) ---------- */

.wt26-cf-form {
	max-width: 720px;
	margin: 0 0 32px;
}

.wt26-cf-form *,
.wt26-cf-form *::before,
.wt26-cf-form *::after {
	box-sizing: border-box;
}

.wt26-cf-form[hidden] {
	display: none;
}

.wt26-cf-form__intro {
	margin: 0 0 20px;
}

.wt26-cf-form__section {
	margin: 0 0 28px;
	padding: 0;
	border: 0;
	min-width: 0;
}

.wt26-cf-form__section-title {
	display: block;
	width: 100%;
	margin: 0 0 12px;
	padding: 0 0 8px;
	border-bottom: 1px solid var(--wt26-cf-border);
	font-size: max(1.125em, 1.125rem);
	font-weight: 700;
}

.wt26-cf-form__section-help {
	margin: -4px 0 16px;
	font-size: max(0.9375em, 0.9375rem);
	opacity: var(--wt26-cf-muted-opacity);
}

.wt26-cf-form__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: 0 20px;
}

.wt26-cf-form__field {
	display: flex;
	flex-direction: column;
	gap: 6px;
	margin: 0 0 18px;
	min-width: 0;
}

.wt26-cf-form__field--full {
	grid-column: 1 / -1;
}

.wt26-cf-form__field > label,
.wt26-cf-form__label {
	margin: 0;
	font-size: max(0.9375em, 0.9375rem);
	font-weight: 600;
	line-height: 1.4;
}

.wt26-cf-form__required {
	margin-left: 4px;
	color: var(--wt26-cf-badge-expired-fg);
	font-weight: 700;
}

.wt26-cf-form__help {
	margin: 0;
	font-size: max(0.875em, 0.875rem);
	opacity: var(--wt26-cf-muted-opacity);
}

.wt26-cf-form__error {
	margin: 0;
	font-size: max(0.875em, 0.875rem);
	font-weight: 600;
	color: var(--wt26-cf-badge-expired-fg);
}

.wt26-cf-form__error:empty {
	display: none;
}

.wt26-cf-form input[aria-invalid="true"],
.wt26-cf-form select[aria-invalid="true"],
.wt26-cf-form textarea[aria-invalid="true"] {
	border-color: var(--wt26-cf-badge-expired-fg);
}

/* Choice groups: checkboxes and radios in a fieldset. */
.wt26-cf-form__choices {
	display: flex;
	flex-wrap: wrap;
	gap: 8px 20px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.wt26-cf-form__choices--stack {
	flex-direction: column;
	gap: 6px;
}

.wt26-cf-form__choice {
	display: flex;
	align-items: center;
	gap: 10px;
	margin: 0;
	min-height: 32px;
	font-weight: 400;
	cursor: pointer;
}

.wt26-cf-form__choice .wt26-cf__swatch {
	width: 12px;
	height: 12px;
}

/* Repeatable rows. */
.wt26-cf-form__rows {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.wt26-cf-form__row {
	display: flex;
	align-items: center;
	gap: 8px;
}

.wt26-cf-form__row > input,
.wt26-cf-form__row > textarea {
	flex: 1 1 auto;
}

.wt26-cf-form__row-remove {
	flex: 0 0 auto;
}

.wt26-cf-form__add {
	align-self: flex-start;
}

/* File inputs. */
.wt26-cf-form input[type="file"] {
	width: 100%;
	padding: 10px;
	border: 1px dashed var(--wt26-cf-border-strong);
	border-radius: var(--wt26-cf-radius-small);
	background: var(--wt26-cf-surface-muted);
	font-size: max(1em, 16px);
}

.wt26-cf-form input[type="file"]:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 1px;
}

.wt26-cf-form__files-list {
	margin: 6px 0 0;
	padding: 0;
	list-style: none;
	font-size: max(0.875em, 0.875rem);
}

.wt26-cf-form__files-list li {
	display: flex;
	justify-content: space-between;
	gap: 12px;
	padding: 4px 0;
	border-bottom: 1px solid var(--wt26-cf-border);
}

/* Consent and terms lines. */
.wt26-cf-form__consent,
.wt26-cf-form__terms {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	margin: 0 0 18px;
	font-size: max(0.9375em, 0.9375rem);
	line-height: 1.5;
}

.wt26-cf-form__consent input,
.wt26-cf-form__terms input {
	margin-top: 4px;
}

.wt26-cf-form__consent a,
.wt26-cf-form__terms a {
	text-decoration: underline;
}

/* Status region: text only (no success/error class from the JS), shown as a
   quiet bordered note whenever it has content. */
.wt26-cf-form__status {
	margin: 0 0 16px;
	font-weight: 600;
}

.wt26-cf-form__status:not(:empty) {
	padding: 12px 16px;
	border: 1px solid var(--wt26-cf-border-strong);
	border-left-width: 4px;
	border-radius: var(--wt26-cf-radius-small);
	background: var(--wt26-cf-surface-muted);
}

.wt26-cf-form__status.is-error:not(:empty) {
	border-left-color: var(--wt26-cf-badge-expired-fg);
}

.wt26-cf-form__status.is-success:not(:empty) {
	border-left-color: var(--wt26-cf-badge-new-fg);
}

.wt26-cf-form__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
	margin: 0;
}

.wt26-cf-form__submit {
	min-height: 48px;
	padding: 12px 28px;
	border: 1px solid var(--wt26-cf-accent);
	border-radius: var(--wt26-cf-radius-small);
	background: var(--wt26-cf-accent);
	color: var(--wt26-cf-accent-contrast);
	font-size: max(1.0625em, 1.0625rem);
	font-weight: 700;
	line-height: 1.2;
	cursor: pointer;
	transition: background-color 0.15s ease;
}

.wt26-cf-form__submit:hover {
	background: var(--wt26-cf-accent-hover);
	border-color: var(--wt26-cf-accent-hover);
}

.wt26-cf-form__submit:focus-visible {
	outline: 3px solid var(--wt26-cf-focus);
	outline-offset: 3px;
}

.wt26-cf-form__submit:disabled {
	opacity: 0.6;
	cursor: default;
}

.wt26-cf-form__note {
	margin: 12px 0 0;
	font-size: max(0.875em, 0.875rem);
	opacity: var(--wt26-cf-muted-opacity);
}

.wt26-cf-form__note a {
	text-decoration: underline;
}

.wt26-cf-form__success {
	padding: 20px;
	border: 1px solid var(--wt26-cf-badge-new-fg);
	border-radius: var(--wt26-cf-radius);
	background: var(--wt26-cf-badge-new-bg);
	color: var(--wt26-cf-badge-new-fg);
}

.wt26-cf-form__success[hidden] {
	display: none;
}

/* Draft indicator (Submit form restores from sessionStorage). */
.wt26-cf-form__draft {
	margin: 0 0 16px;
	padding: 10px 14px;
	border-radius: var(--wt26-cf-radius-small);
	background: var(--wt26-cf-badge-pending-bg);
	color: var(--wt26-cf-badge-pending-fg);
	font-size: max(0.875em, 0.875rem);
}

.wt26-cf-form__draft:empty,
.wt26-cf-form__draft[hidden] {
	display: none;
}

/* ---------- Late additions: elements built by JS or printed by the form and
   shortcode renderers that had no rule yet ---------- */

/* board.js inserts this before the list when a search request fails. */
.wt26-cf__error {
	margin: 0 0 var(--wt26-cf-gap);
	padding: 10px 14px;
	border: 1px solid var(--wt26-cf-badge-expired-fg);
	border-left-width: 4px;
	border-radius: var(--wt26-cf-radius-small);
	background: var(--wt26-cf-badge-expired-bg);
	color: var(--wt26-cf-badge-expired-fg);
	font-size: max(0.875em, 0.875rem);
}

/* Sidebar group heading and body wrappers (the legend already carries the
   heading type; these only control spacing). */
.wt26-cf__group-title {
	margin: 0;
	font-size: inherit;
	font-weight: 700;
}

.wt26-cf__group-body {
	margin-top: 8px;
}

.wt26-cf__option--checked > .wt26-cf__option-text,
.wt26-cf__option--checked .sf-label-radio {
	font-weight: 700;
}

/* Results heading alias (board.js may create it when the server did not). */
.wt26-cf__results-heading {
	margin: 0;
}

/* Card internals. The image wrapper keeps its legacy class, so these only
   handle the body column and the read-more affordance. */
.wt26-cf__card-body {
	display: flex;
	flex-direction: column;
	gap: 4px;
	min-width: 0;
}

.wt26-cf__card-image {
	min-width: 0;
}

.wt26-cf__read-more {
	font-weight: 600;
	text-decoration: underline;
	white-space: nowrap;
}

/* Single view image and contact block (contact prints only when the job
   opts in with "Show contact publicly"). */
.wt26-cf-single__image {
	margin: 0 0 var(--wt26-cf-gap);
}

.wt26-cf-single__image img {
	width: 100%;
	height: auto;
	border-radius: var(--wt26-cf-radius);
}

.wt26-cf-contact__name {
	font-weight: 600;
}

.wt26-cf-contact__email,
.wt26-cf-contact__phone {
	overflow-wrap: anywhere;
}

/* Money input: a bordered group with the currency sign attached, so the
   prefix reads as part of the control rather than loose text. */
.wt26-cf-form__money {
	display: inline-flex;
	align-items: stretch;
	max-width: 220px;
	border: 1px solid var(--wt26-cf-border-strong);
	border-radius: var(--wt26-cf-radius-small);
	background: var(--wt26-cf-surface);
	overflow: hidden;
}

.wt26-cf-form__money:focus-within {
	outline: 2px solid var(--wt26-cf-focus);
	outline-offset: 1px;
}

.wt26-cf-form__money-prefix {
	display: flex;
	align-items: center;
	padding: 0 10px;
	border-right: 1px solid var(--wt26-cf-border);
	background: var(--wt26-cf-surface-muted);
	opacity: var(--wt26-cf-muted-opacity);
}

.wt26-cf-form__money input {
	flex: 1 1 auto;
	min-width: 0;
	border: 0;
	border-radius: 0;
	background: none;
}

.wt26-cf-form__money input:focus {
	outline: 0;
	box-shadow: none;
}

/* Chosen files list rows (apply-form.js builds these). */
.wt26-cf-form__file-name {
	overflow-wrap: anywhere;
}

.wt26-cf-form__file-size {
	margin-left: 6px;
	opacity: var(--wt26-cf-muted-opacity);
	font-size: max(0.8125em, 0.8125rem);
	white-space: nowrap;
}

/* Small print inside form labels and sections. */
.wt26-cf-form__optional,
.wt26-cf-form__required-note,
.wt26-cf-form__draft-text {
	opacity: var(--wt26-cf-muted-opacity);
	font-size: max(0.8125em, 0.8125rem);
	font-weight: 400;
}

.wt26-cf-form__draft-clear {
	margin-left: 6px;
}

.wt26-cf-form__success-text {
	font-weight: 600;
}

.wt26-cf-form__success-link {
	display: inline-block;
	margin-top: 6px;
}

.wt26-cf-form__choice-label {
	display: block;
	margin-bottom: 6px;
	font-weight: 600;
}

.wt26-cf-form__choice-text {
	min-width: 0;
}

.wt26-cf-form__choice--child {
	margin-left: 20px;
}

/* Apply and Submit wrappers, and the "submissions are closed" notice. */
.wt26-cf-apply-page__job {
	margin: 0 0 var(--wt26-cf-gap);
	font-weight: 600;
}

.wt26-cf-apply-page__notice,
.wt26-cf-submit__closed {
	margin: 0 0 var(--wt26-cf-gap);
	padding: 10px 14px;
	border-left: 4px solid var(--wt26-cf-border-strong);
	background: var(--wt26-cf-surface-muted);
}

.wt26-cf-apply-page__external {
	margin-top: var(--wt26-cf-gap);
}

/* Builder and editor placeholders. These never reach a visitor: they show in
   the block editor, the Divi builder and the Breakdance canvas. */
.wt26-cf-note,
.wt26-cf-placeholder,
.wt26-cf-block-notice,
.wt26-cf-block-message {
	margin: 0;
	padding: 12px 16px;
	border: 1px dashed var(--wt26-cf-border-strong);
	border-radius: var(--wt26-cf-radius-small);
	background: var(--wt26-cf-surface-muted);
	color: inherit;
	font-size: max(0.875em, 0.875rem);
	text-align: center;
}

.wt26-cf-note__text,
.wt26-cf-placeholder__text {
	margin: 0;
}

/* ---------- Ported legacy password form (password-form.php) ---------- */

/* Same markup and classes as the 2023 plugins, so the same selectors. The
   !important flags are the legacy plugin's own and stay for parity with the
   sites' existing overrides. Colours moved to tokens; the input text colour
   defaults darker than the legacy #999 for contrast on #eee. */
.boldgrid-section .post-password-form {
	max-width: 560px;
	margin: 0 auto;
	padding: 24px 0 8px;
}

.boldgrid-section .post-password-form h1 {
	margin: 0 0 12px;
	font-size: max(1.75em, 1.75rem);
	line-height: 1.2;
}

.boldgrid-section .post-password-form .wt26-cf-password-message {
	margin: 0 0 16px;
}

.boldgrid-section .post-password-form label {
	display: block;
	margin: 0 0 8px;
	font-weight: 600;
}

.boldgrid-section input[type="password"] {
	background-color: var(--wt26-cf-gate-input-bg);
	border: none !important;
	width: 100% !important;
	border-radius: 0 !important;
	font-size: max(1em, 16px);
	color: var(--wt26-cf-gate-input-fg) !important;
	padding: 16px !important;
	box-sizing: border-box;
	margin-top: 8px;
}

.boldgrid-section input[type="password"]:focus-visible {
	outline: 3px solid var(--wt26-cf-gate-accent);
	outline-offset: 1px;
}

.boldgrid-section .button-primary {
	color: var(--wt26-cf-gate-accent);
	display: block;
	float: right;
	margin: 8px auto 40px;
	cursor: pointer;
	font-size: max(1.25em, 1.25rem);
	font-weight: 500;
	padding: 0.3em 1em;
	line-height: 1.7em !important;
	background-color: transparent;
	background-size: cover;
	background-position: 50%;
	background-repeat: no-repeat;
	border: 2px solid;
	border-radius: 3px;
	transition-duration: 0.2s;
	transition-property: all !important;
	position: relative;
}

.boldgrid-section .button-primary:hover {
	background-color: var(--wt26-cf-gate-accent);
	color: #fff;
}

.boldgrid-section .button-primary:focus-visible {
	outline: 3px solid var(--wt26-cf-gate-accent);
	outline-offset: 3px;
}

/* ---------- Reduced motion ---------- */

@media (prefers-reduced-motion: reduce) {
	.wt26-cf-board *,
	.wt26-cf-single *,
	.wt26-cf-form *,
	.wt-map-pin__inner,
	.wt26-cf-apply-button__link,
	.boldgrid-section .button-primary {
		transition: none !important;
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		scroll-behavior: auto !important;
	}

	.wt26-cf__spinner {
		border-top-color: var(--wt26-cf-border);
		border-right-color: var(--wt26-cf-accent);
	}

	.wt26-cf__skeleton {
		animation: none;
		background: var(--wt26-cf-surface-muted);
	}
}

/* ---------- Print ---------- */

@media print {
	.wt26-cf__filters,
	.wt26-cf__filters-toggle,
	.wt26-cf__map-toggle,
	.wt26-cf__dialog,
	.wt26-cf__map,
	.single_job_posts_container,
	.wt26-cf__tools,
	.wt26-cf__toolbar-controls,
	.wt26-cf-search,
	.wt26-cf__overlay,
	.wt26-cf__pagination,
	.wt26-cf__load-more-wrap,
	.wt26-cf-apply,
	.wt26-cf-apply-button,
	.wt26-cf-form {
		display: none !important;
	}

	.filter_job_results_container:where(.wt26-cf) {
		display: block;
		padding-bottom: 0;
	}

	.wt26-cf__list {
		display: block;
	}

	.wt26-cf__card {
		break-inside: avoid;
		margin: 0 0 12px;
		border: 1px solid #999;
		box-shadow: none;
	}

	.wt26-cf__card .wt_job_image_bg {
		display: none;
	}

	.wt26-cf__card-link[href]::after {
		content: " (" attr(href) ")";
		display: block;
		margin-top: 4px;
		font-size: 10pt;
		word-break: break-all;
	}

	.wt26-cf-badge {
		border: 1px solid #999;
		background: none;
		color: inherit;
	}
}
