/**
 * Site chrome.
 *
 * Loaded on EVERY front-end page, because the footer it styles is on every page.
 * That makes the scoping rule here absolute rather than advisory:
 *
 * EVERY SELECTOR MUST BEGIN WITH .pcf-footer (or a future chrome class),
 * INCLUDING INSIDE MEDIA QUERIES. Those classes exist only in this theme's own
 * chrome markup, so a rule anchored to one cannot reach a page's content no
 * matter which page it loads on. A bare element selector -- `p {}`, `footer {}`,
 * `a {}` -- would land on 103 published Elementor pages and 285 default-template
 * posts and pages. There is a live example of exactly that failure documented at
 * the !important rule below; do not add a second one.
 *
 * This file is chrome only. Anything that styles a PAGE's content belongs in
 * style.css under .pcf-canvas / .pcf-upgraded, which stay gated per page while
 * the migration runs. See inc/chrome.php.
 *
 * Values come from theme.json via --wp--preset--* custom properties, which core
 * emits into global-styles-inline-css on every page. Add a token there rather
 * than a literal here.
 *
 * WHY THE FONT FAMILIES ARE NAMESPACED
 *
 * This site already serves Merriweather and Nunito Sans: Elementor's global kit
 * sets h1-h6 to Merriweather and loads both families through its "local Google
 * Fonts" feature (elementor-gf-local-merriweather-css). Declaring @font-face for
 * the bare names 'Merriweather' or 'Nunito Sans' would put two competing
 * definitions of one family on the same document, and which file the browser
 * fetches then depends on load order and unicode-range overlap.
 *
 * So our subsets are declared as 'PCF Merriweather' and 'PCF Nunito Sans', with
 * the bare names left further down the stack in theme.json as a fallback. Ours
 * cannot be shadowed and cannot shadow Elementor's. This also means the fonts
 * survive Elementor being removed, which is the point of the rebuild.
 *
 * The @font-face declarations themselves now live in assets/css/fonts.css, so
 * that the editor can load the same file; this stylesheet depends on it.
 */

/* -----------------------------------------------------------------------------
 * The page ground
 *
 * Rebuilt pages sit on the same cream the footer does, so the footer stops
 * reading as a tinted panel bolted to the bottom of a white page and starts
 * reading as where the page already was. It also gives the white cards in the
 * card grid something to be raised off; on white they were outlines around
 * nothing.
 *
 * SCOPED TO .pcf-upgraded, which is on <body> for rebuilt pages only. This
 * stylesheet loads everywhere, and a bare `body` rule here would repaint 103
 * published Elementor pages that were designed on white.
 *
 * The value is the token, not a copy of it: change --cream in theme.json and
 * the page and the footer move together, which is the whole point of them
 * matching.
 * -------------------------------------------------------------------------- */

.pcf-upgraded {
	background-color: var(--wp--preset--color--cream);
}

/* -----------------------------------------------------------------------------
 * Footer
 *
 * Demo A's footer: cream ground continuing the page, a hairline rule instead of
 * a box, and no heavy divider between the brand and the links. Demo B's social
 * links row is folded in as its own tier rather than as a third link column.
 *
 * Every declaration is explicit rather than inherited. Maisha and the Elementor
 * global kit both set element-level typography on this document (the kit styles
 * h1-h6 sitewide), so anything left to inherit is inheriting from them.
 * -------------------------------------------------------------------------- */

/*
 * THE GUTTER GOES INSIDE THE CAP, which is the whole reason this looks the way
 * it does now.
 *
 * The footer and the page content are capped at the same 1154px wide-size, but
 * they used to put the page gutter in different places. A content block is
 * `max-width: 1154px` with `padding: 60px 15px` INSIDE it, so what a reader
 * sees runs 1124px. The footer had its gutter on the band OUTSIDE the cap --
 * and on any screen wide enough for the cap to bind, that padding does nothing
 * at all, so the footer's text ran the full 1154px.
 *
 * Same number, two arrangements, and the result was a 15px step on each side:
 * on a 1440 screen the cards sat at 158-1282 and the footer's columns at
 * 143-1297, close enough to look like a mistake rather than a decision.
 *
 * So the horizontal padding moves to __inner, where it is inside the cap, and
 * becomes the same flat 15px every content block and the header bar use. The
 * band still spans the viewport -- the background is on this element and only
 * the vertical padding stays here.
 */
.pcf-footer {
	--pcf-footer-pad: 15px;
	--pcf-footer-pad-top: 52px;

	box-sizing: border-box;
	padding: var(--pcf-footer-pad-top) 0 40px;
	background-color: var(--wp--preset--color--cream);
	color: var(--wp--preset--color--contrast-warm);
	font-family: var(--wp--preset--font-family--body);
	font-size: 15px;
	line-height: 1.6;
}

.pcf-footer *,
.pcf-footer *::before,
.pcf-footer *::after {
	box-sizing: inherit;
}

/*
 * The one !important in this file, and it is defensive rather than lazy.
 *
 * Someone once pasted `p { font-family: 'Merriweather', sans-serif !important; }`
 * into the Custom CSS box of a text widget inside an Elementor popup. Elementor
 * emits widget Custom CSS UNSCOPED -- it does not prefix it with the widget's
 * own selector -- so that rule escaped the widget and became a global rule on
 * every page of the site. It now sits in 11 generated stylesheets under
 * uploads/elementor/css/ (the EOY story popups, which are copies of each other)
 * and they are enqueued everywhere because popups load sitewide.
 *
 * !important on a bare element selector beats any specificity a class can
 * reach, so every <p> in this footer -- mission, column headings, address,
 * legal, copyright -- renders in Elementor's Merriweather without this.
 *
 * Verified with a headless computed-style probe, not by reading CSS.
 *
 * The real fix is to rewrite those popups' custom CSS as `selector p { ... }`,
 * which scopes it to the widget. That is deliberately NOT done here: it would
 * change how legacy pages render, and legacy pages are frozen until their turn.
 * Drop this rule when Elementor goes, or when those popups are cleaned up.
 *
 * It is currently the ONLY !important declaration in all of Elementor's
 * generated CSS, so this single counter-rule closes the whole collision surface.
 */
.pcf-footer p {
	font-family: var(--wp--preset--font-family--body) !important;
}

.pcf-footer__inner {
	max-width: var(--wp--style--global--wide-size);
	margin: 0 auto;

	/* Inside the cap, so this lands on the same edges as the page content. */
	padding-inline: var(--pcf-footer-pad);
}

/*
 * Visually hidden, still announced.
 *
 * Carries the "(opens in a new tab)" note on the links that leave the site.
 * display:none or visibility:hidden would remove it from the accessibility tree
 * along with the pixels, which is the opposite of the point; the clip technique
 * keeps it in the tree while taking it out of the layout.
 *
 * white-space:nowrap matters -- without it the clipped text can still wrap and
 * force a scrollbar on the ancestor.
 *
 * Named __sr-only rather than a bare .pcf-sr-only because this file's rule is
 * that every selector is anchored to a chrome class. When header-pcf.php lands
 * and there is a shared chrome layer, promote this to one utility for both.
 */
.pcf-footer__sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

/* -- brand and link columns ------------------------------------------------ */

.pcf-footer__top {
	display: flex;
	flex-wrap: wrap;
	justify-content: flex-start;
	align-items: flex-start;
	gap: 36px;
	padding-bottom: 32px;
	border-bottom: 1px solid var(--wp--preset--color--rule);
}

.pcf-footer__brand {
	max-width: 320px;
}

.pcf-footer__logo-link {
	display: inline-block;
	border: 0;
}

/*
 * The wordmark carries four lines of type inside a 3.5:1 lockup, so it needs
 * real height before the smallest line ("Palestinian and Israeli Bereaved
 * Families for Peace") is legible at all. The width/height attributes on the
 * <img> are the file's true intrinsic size, which is what reserves the right
 * box before the image loads; this rule sets the displayed size.
 */
.pcf-footer__logo {
	display: block;
	height: 90px;
	width: auto;
	max-width: 100%;
	object-fit: contain;
	margin-bottom: 10px;
}

.pcf-footer__mission {
	margin: 0;
	font-size: 15px;
	line-height: 1.6;
	color: var(--wp--preset--color--contrast-warm);
}

/*
 * The seal opens the top row, left of the brand. It is a flex item of
 * .pcf-footer__top directly -- there is no wrapper grouping it with the link
 * columns any more.
 *
 * max-width keeps it inside its column once .pcf-footer__top stacks -- a fixed
 * width wider than the content box on a small phone would push the whole
 * document sideways.
 */
/*
 * The seals sit as one group against the brand, so the wrapper is what the row
 * spaces -- the gap between badges is this rule's business, not the row's.
 */
.pcf-footer__seals {
	display: flex;
	flex: 0 0 auto;
	flex-wrap: wrap;
	align-items: center;
	gap: 16px;
	max-width: 100%;
}

.pcf-footer__seal {
	flex: 0 0 auto;
	max-width: 100%;
}

/*
 * Sized by HEIGHT, not width, which is the change two seals forced.
 *
 * One seal could be a flat 180px wide. These two are different shapes -- Candid
 * is a square and Charity Navigator is very slightly taller than it is wide --
 * and matching their widths would have left the two badges visibly different
 * heights, reading as a layout mistake rather than a pair. Matching height is
 * what makes them a set; the widths then fall where the artwork says.
 *
 * aspect-ratio holds the box before the image arrives. Both files are close
 * enough to square that one ratio serves, and it only has to be right enough to
 * stop the footer reflowing on load.
 */
.pcf-footer__seal img {
	display: block;
	width: auto;
	height: 96px;
	max-width: 100%;
	aspect-ratio: 1 / 1;
	object-fit: contain;
	transition: opacity 0.18s ease;
}

/*
 * The seal is an image link, and the footer's text links carry a standing
 * transparent bottom border that turns maroon on hover -- on this one it would
 * draw a rule under the artwork. Suppress it and give the hover affordance with
 * opacity instead. The focus ring is deliberately NOT suppressed: it is
 * inherited from .pcf-footer a:focus-visible and is the only indication a
 * keyboard user gets that the seal is focusable at all.
 */
.pcf-footer__seal a {
	display: block;
	border-bottom: 0;
}

.pcf-footer__seal a:hover img,
.pcf-footer__seal a:focus-visible img {
	opacity: 0.82;
}

/*
 * The seal and the brand read as one lockup, so they stay adjacent at the head
 * of the row; only the columns are pushed to the far edge. A space-between on
 * the row would have spread all three evenly and floated the brand into the
 * middle, away from the seal.
 */
.pcf-footer__cols {
	display: flex;
	flex-wrap: wrap;
	gap: 48px;
	margin-left: auto;
}

.pcf-footer__col-head {
	margin: 0 0 12px;
	font-family: var(--wp--preset--font-family--body);
	font-size: 14px;
	font-weight: 800;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink-warm);
}

.pcf-footer__list,
.pcf-footer__social-list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.pcf-footer__list li {
	margin: 0 0 8px;
}

.pcf-footer__list li:last-child {
	margin-bottom: 0;
}

/*
 * A 24px minimum box on the column links, so each is a comfortable pointer and
 * touch target rather than exactly the height of its own text.
 *
 * inline-flex rather than inline-block: min-height does nothing to an inline
 * box, and centring keeps the label in the middle if the box ends up taller
 * than the line. It still shrink-wraps the text, so the hover underline hugs
 * the label instead of running the full width of the column, and a long label
 * ("Annual Reports & 990s") still wraps inside the box at narrow widths rather
 * than overflowing it.
 *
 * The padding is what opens the gap between the word and its underline: the
 * bar is a background painted at the bottom of the PADDING box, so padding
 * lowers it without moving the text or disturbing the line box.
 */
.pcf-footer__list a,
.pcf-footer__social-list a {
	display: inline-flex;
	align-items: center;
	padding-bottom: 3px;
}

.pcf-footer__list a {
	min-height: 24px;
}

/* -- social row ------------------------------------------------------------ */

.pcf-footer__social {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 12px 24px;
	padding: 24px 0;
	border-bottom: 1px solid var(--wp--preset--color--rule);
}

.pcf-footer__social .pcf-footer__col-head {
	margin: 0;
}

.pcf-footer__social-list {
	display: flex;
	flex-wrap: wrap;
	gap: 8px 24px;
}

/* -- links ----------------------------------------------------------------- */

/*
 * Baseline for every link in the chrome. Deliberately minimal: it strips what
 * Maisha and the Elementor kit put on links and nothing else.
 *
 * It used to also set colour, border and the hover wipe for every `a` in the
 * footer, which meant anything that was not a text link -- the logo, the seal,
 * a button -- had to opt back out one property at a time. That blanket rule is
 * (0,1,1) and a component's own `.pcf-thing` class is (0,1,0), so each opt-out
 * silently lost until it was written with matching specificity. It cost a
 * missing field line and a yellow bar under the logo, both invisible in the
 * source and only found by probing computed styles. The treatment now applies
 * to the three places that actually want it, and components brought in from
 * elsewhere -- the CTA band's buttons among them -- are simply left alone.
 */
/*
 * border-bottom is here to beat Maisha, not for tidiness. Its style.css:696
 * sets `a:hover, a:active { border-bottom: 2px solid currentColor }`, which is
 * (0,1,1) -- so a rule like `.pcf-footer__logo-link` at (0,1,0) loses and the
 * logo grows a grey line under it the moment a pointer touches it. This
 * selector is (0,2,1) and covers every chrome link in every state, which is
 * what the old blanket `.pcf-footer a` rule was quietly doing before it was
 * narrowed to the three text-link groups.
 */
.pcf-footer a:not(.pcf-btn) {
	border-bottom: 0;
	text-decoration: none;
	box-shadow: none;
}

.pcf-footer a:not(.pcf-btn):focus-visible {
	outline: 2px solid var(--wp--preset--color--maroon);
	outline-offset: 3px;
}

/*
 * THE :not(.pcf-btn) IS LOAD-BEARING.
 *
 * A component that ships its own states has to be able to keep them here.
 * `.pcf-footer a:focus-visible` is (0,2,1) and .pcf-btn:focus-visible is
 * (0,2,0), so without this the chrome quietly won and every button in the
 * footer drew the chrome's maroon ring instead of its own -- a maroon ring
 * around a maroon button, which reads as part of the button rather than as a
 * focus indicator. The component's rule was dead code and nothing said so.
 *
 * Same story for the two resets above: `box-shadow: none` and
 * `text-decoration: none` would strip any shadow or underline a component uses
 * as a hover cue.
 *
 * The rule this encodes: chrome styles chrome's own links; anything with a
 * component class styles itself. Add the class here when a new component
 * lands in the footer.
 */

/*
 * The underline wipes in from the left, in the site's accent yellow.
 *
 * Drawn as an animated background rather than a border or a positioned
 * ::after. A border cannot animate directionally -- border-color only
 * cross-fades -- and an absolutely positioned pseudo-element misbehaves on an
 * inline element that wraps across lines, which "Annual Reports & 990s" does at
 * the narrow end. A background-size transition wipes left to right and follows
 * the text wherever it breaks.
 *
 * Colour is not the only hover signal: the text also moves to maroon, so the
 * state survives for anyone who cannot pick the yellow out against cream.
 */
.pcf-footer__list a,
.pcf-footer__social-list a,
.pcf-footer__legal a {
	color: var(--wp--preset--color--contrast-warm);
	border-bottom: 0;
	background-image: linear-gradient(
		var(--wp--preset--color--accent),
		var(--wp--preset--color--accent)
	);
	background-repeat: no-repeat;
	background-position: 0 100%;
	background-size: 0 2px;
	transition: color 0.18s ease, background-size 0.24s ease;
}

.pcf-footer__list a:hover,
.pcf-footer__list a:focus-visible,
.pcf-footer__social-list a:hover,
.pcf-footer__social-list a:focus-visible,
.pcf-footer__legal a:hover,
.pcf-footer__legal a:focus-visible {
	color: var(--wp--preset--color--maroon);
	background-size: 100% 2px;
}


/*
 * Respect a reduced-motion preference by removing the wipe, not the underline:
 * the hover state still needs to be visible, it just arrives at once.
 */
@media (prefers-reduced-motion: reduce) {

	.pcf-footer__list a,
	.pcf-footer__social-list a,
	.pcf-footer__legal a {
		transition: color 0.18s ease;
	}
}

/* -- legal ----------------------------------------------------------------- */

.pcf-footer__legal {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: flex-end;
	gap: 12px 32px;
	padding-top: 24px;
	font-size: 14px;
	color: var(--wp--preset--color--contrast-warm-muted);
}

.pcf-footer__legal a {
	color: var(--wp--preset--color--contrast-warm-muted);
}

/*
 * The address block is prose, so a link inside it has no surrounding cue that
 * it is clickable -- unlike the nav columns, where position does that work.
 * It gets a standing underline and the link colour rather than the muted grey
 * of the text around it. Underline offset keeps it clear of the descenders in
 * the address that sits directly above.
 */
.pcf-footer__legal a.pcf-footer__email {
	color: var(--wp--preset--color--maroon);
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 2px;
	border-bottom: 0;

	/*
	 * Opted out of the yellow wipe. This link already carries a standing
	 * underline, and the wipe would land a second rule directly beneath it --
	 * two lines under one address. The standing underline is the affordance
	 * that matters here, so it keeps its own hover: maroon to ink, 1px to 2px.
	 */
	background-image: none;
}

.pcf-footer__legal a.pcf-footer__email:hover,
.pcf-footer__legal a.pcf-footer__email:focus-visible {
	color: var(--wp--preset--color--ink-warm);
	text-decoration-thickness: 2px;
}

.pcf-footer__address,
.pcf-footer__meta,
.pcf-footer__copy {
	margin: 0;
	font-size: 14px;
	line-height: 1.55;
}

.pcf-footer__meta {
	margin-top: 6px;
}

/*
 * The middot separators are drawn rather than typed, so the address block never
 * ends with a dangling divider when a field is left empty on the options screen.
 */
.pcf-footer__meta span + span::before {
	content: '·';
	margin: 0 8px;
	color: var(--wp--preset--color--rule);
}

/* -----------------------------------------------------------------------------
 * Responsive
 *
 * Breakpoints carried over from the comp. The .pcf-footer prefix is still
 * required in here -- see the warning at the top of this file.
 * -------------------------------------------------------------------------- */

@media (max-width: 1023px) {
	.pcf-footer__cols {
		gap: 28px 32px;
	}
}

/*
 * Its own range, not the max-width block above: below 768px the row turns to a
 * column, where the brand's flex-basis would become a 320px height.
 */
@media (min-width: 768px) and (max-width: 1023px) {
	/*
	 * Seals, brand and columns stay one row down to the phone breakpoint. At a
	 * fixed 320px the brand pushed the row past its container below ~930px and
	 * the whole column group wrapped under it, so here the brand is the item
	 * that gives: it shrinks, the logo scales with it (max-width: 100%), and the
	 * seals and gaps come down a step to leave it enough room at 768px.
	 */
	.pcf-footer__top {
		flex-wrap: nowrap;
		gap: 28px;
	}

	.pcf-footer__brand {
		flex: 1 1 320px;
		min-width: 0;
	}

	.pcf-footer__seals {
		gap: 12px;
	}

	.pcf-footer__seal img {
		height: 72px;
	}

	.pcf-footer__cols {
		flex: 0 0 auto;
		flex-wrap: nowrap;
	}
}

@media (max-width: 767px) {
	.pcf-footer {
		--pcf-footer-pad-top: 40px;
	}

	.pcf-footer__top {
		flex-direction: column;
		gap: 28px;
	}

	.pcf-footer__brand {
		max-width: none;
	}

	/*
	 * Two columns side by side rather than a single stacked list: eight links in
	 * one column pushes the legal block a full screen down on a phone.
	 */
	.pcf-footer__cols {
		display: grid;
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: 24px;
		width: 100%;

		/* No free space to absorb it once stacked, but be explicit. */
		margin-left: 0;
	}

	.pcf-footer__legal {
		flex-direction: column;
		align-items: flex-start;
	}

	/*
	 * At this width the EIN / email / tax line wraps, and a separator that was
	 * sitting between two items ends up first on the next line, reading as a
	 * stray bullet. Stack the items instead and drop the separators entirely --
	 * it matches the address block directly above, which is already one item
	 * per line.
	 */
	.pcf-footer__meta span {
		display: block;
	}

	.pcf-footer__meta span + span::before {
		content: none;
	}
}

/* -----------------------------------------------------------------------------
 * Header
 *
 * Demo A's two-tier header: a utility bar carrying the transactional links, and
 * a main bar carrying the logo and the sections. The comp's own note explains
 * the split -- "the main nav carries the sections someone browses, the utility
 * bar carries the things they came to do" -- which is why Contact, Get Updates,
 * Search and Donate sit above the nav rather than inside it.
 *
 * The dropdown and drawer behaviour is ported from the Goshen (goshen.in.gov)
 * child theme; see assets/js/header.js. The markup contract matters here: the
 * script toggles nothing but aria-expanded, so these rules key off that
 * attribute rather than off a state class. There is one source of truth for
 * whether a dropdown is open, and assistive technology reads the same one the
 * stylesheet does.
 *
 * FULL WIDTH, unlike the footer. Both bars run edge to edge on a flat 15px
 * gutter; see the note on --pcf-header-pad below. The footer
 * and the block canvas still sit inside wide-size, so the two ends of the page
 * are deliberately not symmetrical.
 *
 * NOT STICKY. The parent header sat in a .fixed wrapper. This does not, because
 * a sticky two-tier header eats 130px of a phone screen. To bring it back, give
 * .pcf-header position:sticky and top:0 -- but collapse the utility bar at the
 * same time, or it will follow the reader down the page.
 * -------------------------------------------------------------------------- */

/*
 * Same baseline, same reason, as the footer's: Maisha's
 * `a:hover { border-bottom: 2px solid currentColor }` (style.css:696) is
 * (0,1,1) and takes any link whose own rule is weaker. Buttons are excluded so
 * the component keeps its own states.
 */
.pcf-header a:not(.pcf-btn) {
	border-bottom: 0;
	text-decoration: none;
	box-shadow: none;
}

.pcf-header a:not(.pcf-btn):focus-visible,
.pcf-header button:focus-visible,
.pcf-modal a:not(.pcf-btn):focus-visible,
.pcf-modal button:not(.pcf-btn):focus-visible {
	outline: 2px solid var(--wp--preset--color--maroon);
	outline-offset: 3px;
}

/*
 * THE DRAWER AND THE PANELS RING IN GOLD, NOT MAROON.
 *
 * Same indicator, different ground. Maroon on #150f11 measures 1.5:1, well
 * under the 3:1 that WCAG 1.4.11 asks of a focus indicator -- on the dark
 * surfaces the ring would be there and unseeable. The accent measures 10.5:1
 * on the same ground.
 */
.pcf-mobile-drawer a:not(.pcf-btn):focus-visible,
.pcf-mobile-drawer button:not(.pcf-btn):focus-visible,
.pcf-header .pcf-dropdown a:focus-visible {
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 3px;
}

/*
 * A FOCUS THAT IS NOT A FOCUS-VISIBLE STILL GETS AN OUTLINE FROM THE PARENT.
 *
 * Maisha's `a:focus { outline: thin dotted }` (style.css:685) is (0,1,1) and
 * matches every focus; the ring above only matches :focus-visible. So anything
 * focused by a pointer or by script wore a dotted hairline that is not this
 * theme's focus indicator at all.
 *
 * It shows up wherever the scripts move focus for you: opening a dropdown or a
 * mega panel focuses its first link so a keyboard user lands inside, and after
 * a mouse click that focus is not focus-visible -- so the first item in every
 * panel opened with a mouse came up ringed. Same cause as the drawer's Donate
 * button, which the button component now handles for itself.
 *
 * Suppressing only the not-focus-visible case keeps the real ring intact: tab
 * to the same link and the maroon outline above still draws.
 *
 * The footer is included because the parent rule is: a clicked footer link took
 * the same dotted outline, it was just never reported.
 */
.pcf-header a:focus:not(:focus-visible),
.pcf-header button:focus:not(:focus-visible),
.pcf-footer a:focus:not(:focus-visible),
.pcf-footer button:focus:not(:focus-visible),
.pcf-mobile-drawer a:focus:not(:focus-visible),
.pcf-mobile-drawer button:focus:not(:focus-visible),
.pcf-modal a:focus:not(:focus-visible),
.pcf-modal button:focus:not(:focus-visible) {
	outline: none;
}

/*
 * THE SAME KIND OF BASELINE FOR BUTTONS, AND FOR A NASTIER REASON.
 *
 * Maisha styles every bare <button> as a chunky orange form button. Most of
 * that is overridden where each control is defined -- but two declarations only
 * appear on interaction, so they survive any inspection of the resting state:
 *
 *   style.css:560  button:hover  { padding-left: 1.7em; padding-right: 1.7em }
 *   style.css:569  button:focus  { box-shadow: inset 0 -1px 0 ...,
 *                                              inset 0 2px 5px ... }
 *
 * With `transition: padding .2s` on the base rule, the first makes every button
 * in this chrome visibly widen and shove its neighbours whenever a pointer
 * crosses it -- Search and English in the utility bar, the drawer toggle, the
 * language rows, the dialog closes. The second draws a pressed-in grey shadow
 * behind the label on focus, competing with the ring above, which is supposed
 * to be the focus indicator.
 *
 * Both are (0,1,1); a component's own `.pcf-thing` rule is (0,1,0), so the
 * parent wins on specificity no matter that our stylesheet loads later. This is
 * the trap that has now cost time five separate times in this file.
 *
 * box-shadow can be neutralised for all of them at once. Padding cannot -- each
 * control has its own resting value and there is no CSS way to say "keep what
 * you already had" -- so the inline padding is restated per group below. A new
 * chrome button must be added to one of them; the giveaway is a button that
 * shifts on hover.
 *
 * :focus rather than :focus-visible, because the parent rule is :focus.
 */
.pcf-header button:not(.pcf-btn):focus,
.pcf-mobile-drawer button:not(.pcf-btn):focus,
.pcf-modal button:not(.pcf-btn):focus {
	box-shadow: none;
}

/* Controls whose label runs to the edge of the control: no inline padding. */
.pcf-header .pcf-dropdown-trigger:hover,
.pcf-header .pcf-dropdown-trigger:focus,
.pcf-header__tool:hover,
.pcf-header__tool:focus,
.pcf-mobile-back:hover,
.pcf-mobile-back:focus,
.pcf-mobile-panel-trigger:hover,
.pcf-mobile-panel-trigger:focus,
.pcf-modal__close:hover,
.pcf-modal__close:focus {
	padding-inline: 0;
}

/*
 * ...and the third: `button:focus { border-color: #aaa #bbb #bbb }`
 * (style.css:570), which greys a bordered control's edge the moment it takes
 * focus. It is (0,1,1), same as the other two.
 *
 * This one was invisible until the drawer went dark AND started landing focus
 * on Close: a sand border turned #aaa on a near-black ground, on the one
 * control that is focused every time the menu opens.
 *
 * Like padding, it cannot be neutralised generically -- each control has its
 * own resting colour -- so every bordered chrome button restates its own here.
 * These are the RESTING colours: they sit above each component's hover rule, so
 * a real keyboard focus still takes the full treatment on source order.
 */
.pcf-mobile-close:focus,
.pcf-mobile-tool:focus {
	border-color: rgb(230 205 184 / 45%);
}

.pcf-mobile-toggle:focus {
	border-color: var(--wp--preset--color--ink-warm);
}

.pcf-modal__close:focus,
.pcf-language-list button:focus {
	border-color: var(--wp--preset--color--rule);
}

/* Controls that are boxes in their own right, all on the same 14px inset. */
.pcf-mobile-toggle:hover,
.pcf-mobile-toggle:focus,
.pcf-mobile-close:hover,
.pcf-mobile-close:focus,
.pcf-language-list button:hover,
.pcf-language-list button:focus {
	padding-inline: 14px;
}

.pcf-header,
.pcf-header *,
.pcf-header *::before,
.pcf-header *::after {
	box-sizing: border-box;
}

/*
 * The skip link. Off-screen until focused, then pinned to the top-left over
 * everything -- it is the first thing a keyboard user meets and it has to be
 * visible when it gets there.
 */
.pcf-header__skip {
	position: absolute;
	top: -100px;
	left: 8px;
	z-index: 100;
	padding: 12px 20px;
	background-color: var(--wp--preset--color--cream);
	color: var(--wp--preset--color--ink-warm);
	font-family: var(--wp--preset--font-family--body);
	font-size: 15px;
	font-weight: 700;
	transition: top 0.16s ease;
}

.pcf-header__skip:focus {
	top: 8px;
}

/*
 * FULL WIDTH. Both bars run edge to edge rather than being capped at
 * --wp--style--global--wide-size (1154px) the way the footer and the block
 * canvas are. The background always spanned the viewport, so the cap only ever
 * held the CONTENT in -- on a 1920 screen the logo floated 380px in from the
 * left with empty white beside it.
 *
 * The gutter is a flat 15px at every width, Jon's call: the logo and the nav
 * sit almost on the edges, which is the point of going full width. It is one
 * variable and it does not change at the breakpoint, so the utility bar, the
 * main bar and the mega panel below all stay aligned with each other by
 * construction rather than by three numbers agreeing.
 */
.pcf-header {
	--pcf-header-pad: 15px;

	position: relative;
	z-index: 20;

	/*
	 * The same cream the footer sits on and, on rebuilt pages, the page itself.
	 * The frame is one colour top and bottom rather than a white bar over a
	 * cream page.
	 *
	 * IT IS ON EVERY PAGE, INCLUDING THE 103 ELEMENTOR ONES, because the chrome
	 * is global -- see the note at the top of this file. Those pages keep their
	 * white content; only the bar above it changes. The logo carries a real
	 * alpha channel (checked: fully transparent corners), so it sits on the
	 * cream without a white box around it.
	 */
	background-color: var(--wp--preset--color--cream);
	font-family: var(--wp--preset--font-family--body);
}

/* -- utility bar ----------------------------------------------------------- */

.pcf-header__utility {
	border-bottom: 1px solid var(--wp--preset--color--rule);
}

.pcf-header__utility-inner {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: flex-end;
	gap: 10px 24px;
	padding: 9px var(--pcf-header-pad);
}

.pcf-header__utility-nav .pcf-header__list {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px 24px;
	margin: 0;
	padding: 0;
	list-style: none;
}

/*
 * THE UTILITY BAR CARRIES THE FOOTER'S COLUMN-LINK TREATMENT.
 *
 * Same recipe as .pcf-footer__list a: 15px at normal weight in contrast-warm,
 * an accent-yellow underline that wipes in from the left, and maroon text on
 * both hover and focus. The two secondary link sets are the same kind of thing
 * at opposite ends of the page, so they now read as the same thing.
 *
 * It replaces a 14px/600 muted-grey link that went ink-warm on hover -- darker
 * grey on hover was a weak signal, and the bar had no focus treatment of its
 * own beyond the shared ring.
 *
 * The wipe is an animated background rather than a border or an ::after, for
 * the reasons written out over the footer's copy of it: a border can only
 * cross-fade, and a positioned pseudo-element breaks on an inline box that
 * wraps. Do not "simplify" one of the two without the other.
 *
 * :not(.pcf-btn) because this is (0,1,1) and .pcf-btn--primary is (0,1,0) --
 * without it the bar's colour takes the Donate button's label and puts it on
 * maroon. That is the one control here that keeps its own styling.
 */
.pcf-header__utility a:not(.pcf-btn),
.pcf-header__utility .pcf-dropdown-trigger,
.pcf-header__tool {
	font-size: 15px;
	font-weight: 400;
	color: var(--wp--preset--color--contrast-warm);
	transition: color 0.18s ease;
}

/*
 * The underline is painted on the LABEL, not on the control.
 *
 * For the two links that is the same element. For the search and language
 * tools it is the inner <span>, because the control also holds a 15px icon and
 * a 7px gap -- underlining the whole button would run the bar out under the
 * glyph and stop the two sets matching, which is the entire point here.
 *
 * padding-bottom is what opens the gap between the word and the bar: the
 * background is painted at the bottom of the PADDING box, so it drops without
 * moving the text. min-height gives the same 24px pointer and touch target the
 * footer columns have.
 */
.pcf-header__utility a:not(.pcf-btn),
.pcf-header__utility .pcf-dropdown-trigger,
.pcf-header__tool > span {
	display: inline-flex;
	align-items: center;
	min-height: 24px;
	padding-bottom: 3px;
	background-image: linear-gradient(
		var(--wp--preset--color--accent),
		var(--wp--preset--color--accent)
	);
	background-repeat: no-repeat;
	background-position: 0 100%;
	background-size: 0 2px;
	transition: color 0.18s ease, background-size 0.24s ease;
}

/*
 * Colour is not the only hover signal -- the text moves to maroon as well, so
 * the state survives for anyone who cannot pick the yellow out against white.
 * Focus gets the same treatment as hover, on top of the shared maroon ring.
 */
.pcf-header__utility a:not(.pcf-btn):hover,
.pcf-header__utility a:not(.pcf-btn):focus-visible,
.pcf-header__utility .pcf-dropdown-trigger:hover,
.pcf-header__utility .pcf-dropdown-trigger:focus-visible,
.pcf-header__tool:hover,
.pcf-header__tool:focus-visible {
	color: var(--wp--preset--color--maroon);
}

.pcf-header__utility a:not(.pcf-btn):hover,
.pcf-header__utility a:not(.pcf-btn):focus-visible,
.pcf-header__utility .pcf-dropdown-trigger:hover,
.pcf-header__utility .pcf-dropdown-trigger:focus-visible,
.pcf-header__tool:hover > span,
.pcf-header__tool:focus-visible > span {
	background-size: 100% 2px;
}

/* -- main bar -------------------------------------------------------------- */

.pcf-header__bar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;

	/*
	 * Named, because the simple dropdowns have to clear it. They are
	 * positioned against their own <li>, not against this bar, so reaching the
	 * bar's bottom edge means the item's height PLUS whatever sits below it --
	 * see .pcf-header .pcf-dropdown. Two places, one number.
	 */
	--pcf-header-bar-pad-y: 5px;

	padding: var(--pcf-header-bar-pad-y) var(--pcf-header-pad);
}

.pcf-header__brand {
	display: inline-flex;
	flex: 0 0 auto;
	transition: opacity 0.18s ease;
}

.pcf-header__brand:hover {
	opacity: 0.82;
}

/*
 * Height drives the size and width is auto, because the file is 1400x397 and
 * the intrinsic width/height on the <img> only exist to reserve the right box
 * before it loads. At 96px tall the wordmark comes out ~338px wide -- it reads
 * as the anchor of the bar rather than as another item in it, which is what the
 * extra room from going full width was for.
 */
.pcf-header__logo {
	display: block;
	width: auto;
	height: 96px;
	max-width: 100%;
	object-fit: contain;
}

/*
 * The nav stretches to the bar's full content height and so do its items.
 *
 * They were centred, which left an item's box the height of its own label --
 * and a dropdown positioned against that box opened level with the middle of
 * the header rather than under it. Stretching costs nothing visually, because
 * each item centres its own label inside the taller box, and it gives the
 * panel below a bottom edge worth measuring from.
 */
.pcf-header__nav {
	align-self: stretch;
	display: flex;
	align-items: stretch;
}

.pcf-header__nav .pcf-header__list {
	display: flex;
	flex-wrap: wrap;
	align-items: stretch;
	gap: 0 30px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.pcf-header__nav .pcf-header__list > li {
	display: flex;
	align-items: center;
}

.pcf-header__nav a,
.pcf-header__nav .pcf-dropdown-trigger {
	font-size: 17px;
	font-weight: 600;
	letter-spacing: 0.3px;
	color: var(--wp--preset--color--contrast-warm);
	transition: color 0.18s ease;
}

.pcf-header__nav a:hover,
.pcf-header__nav .pcf-dropdown-trigger:hover {
	color: var(--wp--preset--color--maroon);
}

/*
 * THE MAIN NAV CARRIES THE SAME WIPING UNDERLINE AS EVERY OTHER LINK SET.
 *
 * It was the last one without it: the utility bar above, the dropdown panels
 * below and the footer columns all wipe an accent bar in from the left, and
 * the row between them changed colour only. Same mechanism as
 * .pcf-footer__list a -- an accent background grown from 0 to full width,
 * which is the only way to animate a bar directionally. Read the note over the
 * footer's copy before changing any of the four.
 *
 * ON THE LABEL, NOT THE CONTROL, for the items that open a panel: the trigger
 * also holds a 7px gap and a chevron, and painting the control would run the
 * bar out under the arrow -- so the <span> takes it and a trigger underlines
 * exactly as wide as a plain link beside it. Same reasoning as
 * .pcf-header__tool > span in the utility bar.
 *
 * The child chain keeps this off the dropdown panels' own links, which sit
 * inside these <li>s and already have their own full-row version.
 *
 * padding-bottom is what opens the gap between the word and the bar: the
 * background is painted at the bottom of the PADDING box, so the bar drops
 * without the label moving.
 */
.pcf-header__nav > .pcf-header__list > li > a,
.pcf-header__nav > .pcf-header__list > li > .pcf-dropdown-trigger > span {
	display: inline-flex;
	align-items: center;
	min-height: 24px;
	padding-bottom: 3px;
	background-image: linear-gradient(
		var(--wp--preset--color--accent),
		var(--wp--preset--color--accent)
	);
	background-repeat: no-repeat;
	background-position: 0 100%;
	background-size: 0 2px;
	transition: color 0.18s ease, background-size 0.24s ease;
}

.pcf-header__nav > .pcf-header__list > li > a:hover,
.pcf-header__nav > .pcf-header__list > li > a:focus-visible,
.pcf-header__nav > .pcf-header__list > li > .pcf-dropdown-trigger:hover > span,
.pcf-header__nav > .pcf-header__list > li > .pcf-dropdown-trigger:focus-visible > span {
	background-size: 100% 2px;
}

/*
 * An open panel holds its trigger's bar out, the way a pressed control stays
 * pressed: the label keeps the underline for as long as the thing it opened is
 * on screen, rather than dropping it the moment the pointer travels down into
 * the panel.
 */
.pcf-header__nav > .pcf-header__list > li > .pcf-dropdown-trigger[aria-expanded="true"] > span {
	background-size: 100% 2px;
}

/* The wipe goes, the bar stays -- same as the footer's copy of this. */
@media (prefers-reduced-motion: reduce) {

	.pcf-header__nav > .pcf-header__list > li > a,
	.pcf-header__nav > .pcf-header__list > li > .pcf-dropdown-trigger > span {
		transition: color 0.18s ease;
	}
}

/*
 * The page you are on. aria-current carries this for a screen reader; the rule
 * below is what a sighted reader gets, and it is a weight and an underline
 * rather than a colour alone.
 */
.pcf-header a[aria-current="page"] {
	color: var(--wp--preset--color--maroon);
	text-decoration: underline;
	text-decoration-thickness: 2px;
	text-underline-offset: 5px;
}

/*
 * ...except in the main nav, where the bar above IS the underline.
 *
 * The rule above draws a maroon text-decoration 5px under the baseline; the
 * wipe draws an accent bar a few pixels below that. On the current page's item
 * both fired at once and hovering it put two parallel lines under one word.
 * The current item shows the same bar as a hovered one, already drawn -- which
 * says "you are here" in the nav's own language -- and keeps the maroon label,
 * so the state still does not depend on seeing the bar.
 */
.pcf-header__nav > .pcf-header__list > li > a[aria-current="page"] {
	text-decoration: none;
	background-size: 100% 2px;
}

/*
 * The section you are in, on a trigger that is a <button>.
 *
 * A link says "you are here" with maroon and the accent bar. A dropdown trigger
 * could say neither, because it is not an <a> and every rule above is scoped to
 * one -- so a visitor on a program page saw the same header as on the front
 * page. PHP puts aria-current="true" on the trigger when the current page is
 * the section's own page or any link inside its panel; these two rules are the
 * sighted half of that.
 *
 * It is the SAME bar an open panel holds out, deliberately: "this section is
 * open" and "you are in this section" are one idea to a reader, and inventing a
 * second mark for the second one would only ask them to learn it. The colour is
 * what separates the current section from a merely hovered one.
 */
.pcf-header .pcf-dropdown-trigger[aria-current="true"] {
	color: var(--wp--preset--color--maroon);
}

.pcf-header__nav > .pcf-header__list > li > .pcf-dropdown-trigger[aria-current="true"] > span {
	background-size: 100% 2px;
}

/* -- dropdowns ------------------------------------------------------------- */

.pcf-header .pcf-has-dropdown {
	position: relative;
}

/*
 * The trigger is a <button> and has to be un-styled back to looking like the
 * links beside it. It is a button because it opens a panel rather than going
 * anywhere, which is the part a keyboard user feels.
 */
.pcf-header .pcf-dropdown-trigger {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin: 0;
	padding: 0;
	border: 0;
	background: none;
	font-family: inherit;
	line-height: inherit;
	cursor: pointer;

	/*
	 * Maisha styles bare <button> with its own case, which reached in here and
	 * shouted ABOUT US beside a sentence-case link.
	 *
	 * ONLY text-transform is reset. Size, weight and colour are already set by
	 * the nav rules above and were never the problem; resetting them to inherit
	 * as well pulled all three off the <li> instead -- 19px, weight 400, #333 --
	 * because this rule and the nav rule are both (0,2,0) and this one is later.
	 */
	text-transform: none;
}

.pcf-header__chevron {
	flex: 0 0 auto;
	transition: transform 0.18s ease;
}

.pcf-header .pcf-dropdown-trigger[aria-expanded="true"] .pcf-header__chevron {
	transform: rotate(180deg);
}

/*
 * Keyed off aria-expanded, not off a class. The script sets only that
 * attribute, so there is exactly one thing to be wrong about.
 */
/*
 * Flush to the bottom of the header, square across the top.
 *
 * The 12px gap this used to carry showed a stripe of page between the header
 * and the panel, and the rounded top corners notched the header's own bottom
 * edge -- the same two things the mega panel was corrected for, and these are
 * the same menu.
 *
 * The offset is the bar's bottom padding rather than 0: a mega panel resolves
 * against .pcf-header__bar and 100% of that already includes the padding,
 * while these resolve against their <li>, which stops at the bar's CONTENT
 * edge. Same visual result, two different containing blocks.
 */
.pcf-header .pcf-dropdown {
	display: none;
	position: absolute;
	top: calc(100% + var(--pcf-header-bar-pad-y, 0px));
	left: -16px;
	z-index: 30;
	min-width: 240px;
	padding: 12px 0;

	/*
	 * A near-black ground, so an open panel reads as a layer over the page
	 * rather than as more page. Literal rather than a token: it is a single
	 * surface colour used in one place, and adding a palette entry for it would
	 * offer it to the block editor as a background anyone could pick.
	 *
	 * The border goes translucent white with it. --rule is a warm hairline
	 * meant for cream and it disappears entirely against this.
	 */
	background-color: #150f11;
	border: 1px solid rgb(230 205 184 / 18%);
	border-radius: 4px;

	/* After the shorthand, or it puts the corners straight back. */
	border-top-left-radius: 0;
	border-top-right-radius: 0;
}

/*
 * The last item's panel opens leftwards, or it opens off-screen.
 *
 * A simple dropdown hangs off its own <li> at left: -16px and is at least
 * 240px wide. The nav is right-aligned in the bar, so the last item sits within
 * about 150px of the viewport edge and its panel ran 88px past it at 1440 --
 * measured, on Get Involved. It only showed up once Get Involved stopped being
 * a mega: a mega is anchored to the bar and spans it, which is why the panel
 * that USED to be there could not have this bug.
 *
 * Keyed off :last-child rather than a class, because the condition really is
 * positional -- whichever item ends the right-aligned row is the one nearest
 * the edge, whatever an editor reorders it to be.
 *
 * The overhang is the bar's own gutter, not the 16px its mirror image uses. A
 * flat -16px against a 15px gutter put the panel 1px past the viewport: no
 * scrollbar today, but a 1px overhang is not a decision, and the moment the
 * gutter changes the number stops meaning anything. Tied to the variable the
 * panel lands flush with the bar's edge at every width -- which is exactly
 * where the mega panel already sits, so the two agree.
 */
.pcf-header .pcf-header__list > li:last-child:not(.pcf-has-mega) > .pcf-dropdown {
	left: auto;
	right: calc(var(--pcf-header-pad) * -1);
}

.pcf-header .pcf-dropdown-trigger[aria-expanded="true"] + .pcf-dropdown {
	display: block;
}

.pcf-header .pcf-dropdown ul {
	margin: 0;
	padding: 0;
	list-style: none;
}

/*
 * The footer's wiping underline, on the dark ground.
 *
 * Same mechanism as .pcf-footer__list a -- an accent-coloured background image
 * grown from 0 to 100% of the width, which is the only way to animate a bar
 * directionally; a border can only cross-fade. The colour goes to the accent
 * gold at the same time, so the state does not depend on seeing the bar.
 *
 * ONE DEVIATION FROM THE FOOTER, deliberately. There the anchor shrink-wraps
 * its label and the bar is exactly as wide as the word. Here the anchor is a
 * full-width row, because a dropdown row that is only clickable across its text
 * is a worse target than one that is not -- so the bar runs the row. The
 * gesture is the same; the extent follows the control.
 */
.pcf-header .pcf-dropdown a {
	display: block;
	padding: 9px 20px 11px;
	font-size: 15px;
	font-weight: 600;
	line-height: 1.35;
	color: #e6cdb8;
	background-image: linear-gradient(
		var(--wp--preset--color--accent),
		var(--wp--preset--color--accent)
	);
	background-repeat: no-repeat;
	background-position: 0 100%;
	background-size: 0 2px;
	transition: color 0.18s ease, background-size 0.24s ease;
}

.pcf-header .pcf-dropdown a:hover,
.pcf-header .pcf-dropdown a:focus-visible {
	color: var(--wp--preset--color--accent);
	background-size: 100% 2px;
}

/* -- mobile toggle --------------------------------------------------------- */

/*
 * text-transform is reset on every <button> in the chrome, not just the
 * dropdown trigger: Maisha's bare button rule reaches the drawer as well, and
 * shouted ABOUT US / GET INVOLVED / CLOSE inside it.
 */
.pcf-mobile-toggle,
.pcf-mobile-close,
.pcf-mobile-back,
.pcf-mobile-panel-trigger {
	text-transform: none;
}

.pcf-mobile-toggle {
	display: none;
	align-items: center;
	gap: 10px;
	padding: 10px 14px;
	border: 2px solid var(--wp--preset--color--ink-warm);
	border-radius: 4px;
	background: none;
	font-family: var(--wp--preset--font-family--body);
	font-size: 15px;
	font-weight: 800;
	color: var(--wp--preset--color--ink-warm);
	cursor: pointer;
}

.pcf-mobile-toggle__bars {
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	width: 20px;
	height: 14px;
}

.pcf-mobile-toggle__bars span {
	display: block;
	height: 2px;
	background-color: currentColor;
}

/* -- mobile drawer --------------------------------------------------------- */

.pcf-mobile-backdrop {
	position: fixed;
	inset: 0;
	z-index: 90;
	background-color: rgb(43 32 24 / 55%);
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.28s ease, visibility 0.28s ease;
}

.pcf-mobile-backdrop.is-visible {
	opacity: 1;
	visibility: visible;
}

.pcf-mobile-drawer {
	position: fixed;
	top: 0;
	right: 0;
	bottom: 0;
	z-index: 95;
	width: min(400px, 88vw);

	/*
	 * The same ground as the desktop dropdowns, because it is the same object:
	 * the site's navigation, opened. A white drawer and a near-black dropdown
	 * were one menu wearing two faces depending on the width of the window.
	 *
	 * Everything inside is re-toned for it below -- and note the focus ring
	 * above, which has to change colour with the ground rather than with the
	 * component.
	 */
	background-color: #150f11;
	box-shadow: -12px 0 32px rgb(21 15 17 / 34%);
	transform: translateX(100%);
	transition: transform 0.3s cubic-bezier(0.22, 0.61, 0.36, 1);
	overflow: hidden;
}

.pcf-mobile-drawer.is-open {
	transform: translateX(0);
}

.pcf-mobile-drawer__inner {
	display: flex;
	flex-direction: column;
	height: 100%;
}

/*
 * Donate leads, Close closes. space-between rather than a gap, so Close stays
 * pinned to the right edge where a thumb expects it whether or not a Donate URL
 * has been set -- with flex-end and no Donate it would drift inward.
 */
/*
 * align-items:stretch, so Close matches whatever height Donate is. The two are
 * different components -- a .pcf-btn--small and the drawer's own close control
 * -- and matching their box models by hand means two sets of padding and font
 * sizes that have to be kept in agreement. Letting the shorter one stretch is
 * one declaration and cannot drift.
 */
.pcf-mobile-drawer__head {
	display: flex;
	align-items: stretch;
	justify-content: space-between;
	gap: 12px;
	flex: 0 0 auto;
	padding: 16px 20px;
	border-bottom: 1px solid rgb(230 205 184 / 18%);
}

/*
 * The lift on .pcf-btn:hover would push this button through the head's bottom
 * rule -- there is no room above it in a 16px band. The button keeps its shadow
 * change, which is the part that reads on a touch screen anyway.
 */
.pcf-mobile-donate:hover,
.pcf-mobile-donate:focus-visible {
	transform: none;
}

/*
 * A white ring on hover, to replace the lift this button gave up.
 *
 * It reads against the drawer's ground rather than against the button: white
 * on #150f11 is 12.6:1, where white on the gold fill is 1.8:1. The 2px offset
 * is what puts it there -- hugging the edge it would only thicken the button.
 *
 * :not(:focus-visible) so it cannot stand in for the focus ring. A hovered
 * button that also has keyboard focus shows the focus indicator, which is the
 * one that has to be unambiguous; hover is decoration on top of it.
 */
.pcf-mobile-donate:hover:not(:focus-visible) {
	outline: 2px solid #fff;
	outline-offset: 2px;
}

.pcf-mobile-close {
	padding: 8px 14px;
	/*
	 * 45%, not less. Blended over #150f11 this lands at 3.4:1, which is what
	 * WCAG 1.4.11 asks of the boundary that identifies a control; 38% measured
	 * 2.7 and looked fine while failing.
	 */
	border: 2px solid rgb(230 205 184 / 45%);
	border-radius: 4px;
	background: none;
	font-family: var(--wp--preset--font-family--body);
	font-size: 14px;
	font-weight: 800;
	color: #e6cdb8;
	cursor: pointer;
	transition: color 0.18s ease, border-color 0.18s ease;
}

/*
 * It had no hover at all: a bordered control that did nothing under the
 * pointer reads as disabled. Border and label move together to the accent, so
 * the state is a shape change as well as a colour one.
 */
.pcf-mobile-close:hover,
.pcf-mobile-close:focus-visible {
	border-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent);
}

/*
 * The panels stack in one grid cell so the root can slide out to the left as a
 * sub-panel slides in from the right. Both are in the layout the whole time --
 * only inert and aria-hidden decide which one is reachable, and the script owns
 * those.
 */
.pcf-mobile-panels {
	position: relative;
	display: grid;
	flex: 1 1 auto;
	overflow: hidden;
}

.pcf-mobile-panel {
	grid-area: 1 / 1;
	padding: 20px 24px 32px;
	overflow-y: auto;
	transition: transform 0.3s cubic-bezier(0.22, 0.61, 0.36, 1);
}

.pcf-mobile-panel:not(.pcf-mobile-panel--root) {
	transform: translateX(100%);
}

.pcf-mobile-panel.is-active {
	transform: translateX(0);
}

.pcf-mobile-panel--root.is-hidden {
	transform: translateX(-100%);
}

.pcf-mobile-panel ul {
	margin: 0 0 24px;
	padding: 0;
	list-style: none;
}

.pcf-mobile-panel li + li {
	margin-top: 4px;
}

/*
 * :not(.pcf-btn) because this rule is (0,2,1) and .pcf-btn--primary is (0,1,0),
 * so without it the drawer's own link styling won and the Donate button
 * rendered as a plain row of text.
 */
.pcf-mobile-panel a:not(.pcf-btn),
.pcf-mobile-panel-trigger {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	width: 100%;
	min-height: 44px;
	padding: 10px 0;
	border: 0;
	background: none;
	font-family: var(--wp--preset--font-family--body);
	font-size: 17px;
	font-weight: 600;
	text-align: left;
	color: #e6cdb8;
	cursor: pointer;

	/*
	 * The site's hover, on the drawer's rows: the accent bar wipes in from the
	 * left and the label goes gold with it. Same mechanism and same reasoning
	 * as the footer columns and the dropdowns -- a background-image is the only
	 * bar that can animate directionally.
	 *
	 * It runs the row rather than the word, as in the dropdowns, because these
	 * rows are full-width targets. A trigger also holds a chevron at the far
	 * end, and the bar running under both is what ties them into one control.
	 */
	background-image: linear-gradient(
		var(--wp--preset--color--accent),
		var(--wp--preset--color--accent)
	);
	background-repeat: no-repeat;
	background-position: 0 100%;
	background-size: 0 2px;
	transition: color 0.18s ease, background-size 0.24s ease;
}

.pcf-mobile-panel a:not(.pcf-btn):hover,
.pcf-mobile-panel a:not(.pcf-btn):focus-visible,
.pcf-mobile-panel-trigger:hover,
.pcf-mobile-panel-trigger:focus-visible {
	color: var(--wp--preset--color--accent);
	background-size: 100% 2px;
}

/*
 * And the same state in the drawer.
 *
 * The drawer is rendered OUTSIDE <header class="pcf-header"> -- see
 * pcf_header_markup() -- so every aria-current rule above misses it, and the
 * current page was unmarked here even when it was a plain link. Both halves are
 * set now: the row you are on, and the section that contains it.
 *
 * Gold rather than maroon, because these rows sit on the dark drawer where
 * maroon on near-black is not a contrast at all. It is the resting state of the
 * same hover the rows already have.
 */
.pcf-mobile-panel a:not(.pcf-btn)[aria-current="page"],
.pcf-mobile-panel-trigger[aria-current="true"],
.pcf-mobile-quick a:not(.pcf-btn)[aria-current="page"] {
	color: var(--wp--preset--color--accent);
	background-size: 100% 2px;
}

/* Gold over a gold rule, the same heading the mega columns use. */
.pcf-mobile-heading {
	margin: 0 0 8px;
	padding: 0 0 8px;
	border-bottom: 1px solid var(--wp--preset--color--accent);
	font-family: var(--wp--preset--font-family--body) !important;
	font-size: 13px;
	font-weight: 800;
	letter-spacing: 0.6px;
	text-transform: uppercase;
	color: var(--wp--preset--color--accent);
}

.pcf-mobile-quick a:not(.pcf-btn) {
	font-size: 15px;
}

/* The back chevron is the right-facing one turned round, so there is one icon. */
.pcf-mobile-back {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin-bottom: 16px;
	padding: 8px 0;
	border: 0;
	background: none;
	font-family: var(--wp--preset--font-family--body);
	font-size: 14px;
	font-weight: 800;
	color: rgb(230 205 184 / 72%);
	cursor: pointer;
	transition: color 0.18s ease;
}

.pcf-mobile-back:hover,
.pcf-mobile-back:focus-visible {
	color: var(--wp--preset--color--accent);
}

.pcf-mobile-back .pcf-header__chevron {
	transform: rotate(180deg);
}

/* -- pinned drawer foot ---------------------------------------------------- */

/*
 * Search and English, held below the panels.
 *
 * flex: 0 0 auto against the panels' flex: 1 1 auto -- the panels take the
 * space that is left and scroll inside it, so this strip stays on screen at
 * every scroll position and on every panel. It is the drawer's floor.
 *
 * Cream and a hairline mark it as a different register from the navigation
 * above: these two open dialogs rather than going anywhere.
 */
.pcf-mobile-drawer__foot {
	display: flex;
	flex: 0 0 auto;
	gap: 10px;
	padding: 14px 20px calc(14px + env(safe-area-inset-bottom));
	border-top: 1px solid rgb(230 205 184 / 18%);
	background-color: #150f11;
}

/*
 * The two share the width evenly. flex-basis 0 rather than auto, so "English"
 * and a longer language name ("Español") still produce two equal boxes instead
 * of one wide one -- the label is not allowed to set the layout.
 *
 * min-height 44px is the touch target, and it is the reason these are not
 * simply the utility bar's text links at a smaller size.
 */
.pcf-mobile-tool {
	display: inline-flex;
	flex: 1 1 0;
	align-items: center;
	justify-content: center;
	gap: 8px;
	min-height: 44px;
	padding: 10px 12px;
	border: 1px solid rgb(230 205 184 / 45%);  /* 3.4:1; see .pcf-mobile-close */
	border-radius: 4px;
	background-color: transparent;
	font-family: var(--wp--preset--font-family--body);
	font-size: 15px;
	font-weight: 600;
	line-height: 1.2;
	text-transform: none;
	color: #e6cdb8;
	cursor: pointer;
	transition: color 0.18s ease, border-color 0.18s ease;
}

/*
 * The border carries the state as well as the colour, so it survives a
 * greyscale screen -- and it is a real border rather than the utility bar's
 * wiping underline because these are boxes, not words.
 */
.pcf-mobile-tool:focus {
	padding: 10px 12px;
}

.pcf-mobile-tool:hover,
.pcf-mobile-tool:focus-visible {
	padding: 10px 12px;
	border-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent);
}

/*
 * No optical nudge here, unlike the utility bar's copy of these icons: the
 * label carries no underline padding in this context, so centring already puts
 * the icon on the text's line. It only has to be stopped from being squeezed by
 * the flex row.
 */
.pcf-mobile-tool > svg {
	flex: 0 0 auto;
}

/* -----------------------------------------------------------------------------
 * Header responsive
 *
 * One breakpoint, at 1024px: above it the desktop nav and dropdowns, below it
 * the drawer. The script watches the same width so a drawer left open while the
 * window grows cannot strand the page with overflow:hidden.
 * -------------------------------------------------------------------------- */

@media (max-width: 1023px) {

	.pcf-header__nav {
		display: none;
	}

	.pcf-mobile-toggle {
		display: inline-flex;
	}

	/*
	 * 64px is ~176px wide at the logo's real 2.75 aspect. On a 375px phone
	 * that leaves the 15px gutters and the drawer toggle comfortable room;
	 * the constraint is the toggle, so re-measure if this goes up again.
	 */
	.pcf-header__logo {
		height: 64px;
	}

	/*
	 * THE WHOLE UTILITY BAR GOES, not just its links.
	 *
	 * Everything it carries now lives in the drawer: the links under Quick
	 * Links, Donate at the top of it, Search and English pinned to its foot.
	 * Keeping the bar for Donate alone spent a full row of a phone screen on
	 * one button and pushed the logo down with it.
	 *
	 * display:none on the bar rather than on its parts, so nothing in it is
	 * left in the tab order announcing itself to a screen reader from a strip
	 * that is not on screen.
	 */
	.pcf-header__utility {
		display: none;
	}
}

@media (prefers-reduced-motion: reduce) {

	.pcf-mobile-drawer,
	.pcf-mobile-panel,
	.pcf-mobile-backdrop,
	.pcf-header__chevron,
	.pcf-header__skip {
		transition: none;
	}
}

/* -----------------------------------------------------------------------------
 * Header: mega menus, tools and dialogs
 * -------------------------------------------------------------------------- */

/*
 * Visually hidden but announced. Same clip technique as the footer's; the
 * header needs its own because chrome.css scopes by class and .pcf-footer__
 * would be a lie on a label inside the search dialog.
 */
.pcf-header__sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

/* -- utility tools --------------------------------------------------------- */

/*
 * Search and language are <button>s because they open dialogs. They have to be
 * un-styled back to matching the links beside them -- including the case, which
 * Maisha sets on bare buttons.
 *
 * Typography and colour are NOT here. They come from the utility-bar rule these
 * buttons are listed in, so the two links and the two tools cannot drift apart;
 * see the note there. This block is structure only.
 */
.pcf-header__tool {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 0;
	border: 0;
	background: none;
	font-family: inherit;
	line-height: inherit;
	text-transform: none;
	cursor: pointer;
}

/*
 * The icon is lifted to sit on the label's optical line.
 *
 * align-items:center centres the icon against the SPAN'S BOX, and that box
 * carries 3px of bottom padding holding the underline off the word -- so the
 * text centre is above the box centre and the icon rode low against it. A
 * bottom margin on the icon shifts it back by half its own value.
 *
 * 4px, not 3px: the padding accounts for 1.5px of the offset and the rest is
 * the font's own metrics, the glyphs not sitting centred in their line box.
 * The number is measured -- icon centre against a Range over the text node,
 * which lands on 0px difference at 4 and 1px at 3 -- not derived. Re-measure it
 * if the padding, the icon size or the face changes.
 */
.pcf-header__tool > svg {
	margin-bottom: 4px;
	flex: 0 0 auto;
}


/* -- mega menu ------------------------------------------------------------- */

/*
 * A mega panel spans the header bar rather than hanging off the item that
 * opened it.
 *
 * Centring it on the trigger -- which this did first -- only moves the problem:
 * an 880px panel centred on "Get Involved", the last item in the row, put half
 * its width past the right edge of the viewport. The panel is positioned
 * against .pcf-header__bar instead, which is why .pcf-has-mega is static: an
 * absolutely positioned child resolves against its nearest positioned ancestor,
 * so taking position off the <li> hands it to the bar.
 *
 * A simple dropdown still hangs off its own item -- it is narrow enough to, and
 * it should sit under the word it belongs to.
 */
.pcf-header__bar {
	position: relative;
}

.pcf-header .pcf-has-mega {
	position: static;
}

/*
 * A mega panel is flush to the bar, not floating below it.
 *
 * It inherits `top: calc(100% + 12px)` and a 4px radius from .pcf-dropdown,
 * It only has to override `top` now: 100% of the BAR already includes the
 * bar's bottom padding, whereas a simple dropdown resolves against its <li>
 * and has to add that padding back. The squared top corners are shared, in
 * .pcf-dropdown above.
 */
.pcf-header .pcf-dropdown--mega {
	top: 100%;
	left: 0;
	right: 0;
	min-width: 0;
	padding: 28px var(--pcf-header-pad);
}

/*
 * The columns keep the cap the bar gave up. A mega panel is positioned against
 * .pcf-header__bar, so when that went full width the panel followed it -- which
 * is right for the panel's background, and wrong for its content: auto-fit was
 * handing a 1920 screen seven columns of three links each. The panel spans, the
 * links stay readable, and they line up with the logo above them because both
 * sides use the same gutter.
 */
/*
 * The cap and the alignment moved here from .pcf-dropdown__cols when the
 * featured panel arrived: the two are siblings and the pair has to sit inside
 * one cap, or a panel with a featured section would be wider than one without.
 *
 * margin-LEFT auto: the content sits at the right of the panel, under the nav
 * that opened it, not at the left under the logo. The panel still spans the bar
 * -- that is its background's job -- but the content lines up with the row of
 * words a visitor just clicked, so the panel reads as hanging off the menu
 * rather than as a band that happens to appear.
 */
.pcf-header .pcf-dropdown__inner {
	display: flex;
	align-items: stretch;
	gap: 36px;
	max-width: var(--wp--style--global--wide-size);
	margin-left: auto;
}

.pcf-header .pcf-dropdown__cols {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
	gap: 28px 36px;

	/* Takes the room the featured panel does not, and nothing more. */
	flex: 1 1 auto;
	min-width: 0;
}

/*
 * Gold heading over a gold rule. It is the same accent the links wipe in on
 * hover, so a column reads as one object: the heading states the colour and a
 * hovered link answers it.
 */
.pcf-header .pcf-dropdown__heading {
	margin: 0 0 10px;
	padding: 0 0 8px;
	border-bottom: 1px solid var(--wp--preset--color--accent);
	font-family: var(--wp--preset--font-family--body) !important;
	font-size: 13px;
	font-weight: 800;
	letter-spacing: 0.6px;
	text-transform: uppercase;

	color: var(--wp--preset--color--accent);
}

/*
 * The mega columns keep the same underline; only the row padding differs,
 * because a column link has no inset to sit in. The old rule here replaced the
 * bar with a text-decoration underline -- two different hover treatments for
 * what a reader sees as one menu.
 */
.pcf-header .pcf-dropdown--mega a {
	padding: 7px 0 9px;
}

/* -- the featured panel ---------------------------------------------------- */

/*
 * A mega menu's one non-list. Ported from Goshen's callout: the whole panel is
 * a single anchor, so it is one tab stop and one hover target rather than a
 * picture, a heading and a link that all go the same place.
 *
 * THE SELECTORS CARRY THREE CLASSES ON PURPOSE. Every rule in here has to beat
 * `.pcf-header .pcf-dropdown a` (0,2,1) and `.pcf-dropdown--mega a` (0,2,1),
 * which between them set display, padding, colour and the hover underline that
 * every other link in the panel wants. A single class loses to both, silently:
 * the panel keeps the list link's 7px padding and grows an underline on hover.
 */
.pcf-header .pcf-dropdown .pcf-dropdown__featured {
	display: flex;
	flex: 0 0 clamp(200px, 22%, 290px);
	flex-direction: column;
	padding: 14px;
	background-color: rgb(230 205 184 / 6%);
	background-image: none;
	border: 1px solid rgb(230 205 184 / 18%);
	border-radius: 4px;
	transition: background-color 0.18s ease, border-color 0.18s ease;
}

.pcf-header .pcf-dropdown .pcf-dropdown__featured:hover,
.pcf-header .pcf-dropdown .pcf-dropdown__featured:focus-visible {
	background-color: rgb(230 205 184 / 10%);
	border-color: rgb(230 205 184 / 34%);
}

/*
 * A fixed ratio rather than a height, so the box is the same shape whatever is
 * dropped into it and the panel does not change height with the picture.
 */
.pcf-header .pcf-dropdown .pcf-dropdown__featured-img {
	display: block;
	margin-bottom: 12px;
	overflow: hidden;
	border-radius: 3px;
	aspect-ratio: 16 / 10;
}

.pcf-header .pcf-dropdown .pcf-dropdown__featured-img img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.pcf-header .pcf-dropdown .pcf-dropdown__featured-body {
	display: flex;
	flex: 1;
	flex-direction: column;
}

.pcf-header .pcf-dropdown .pcf-dropdown__featured-heading {
	display: block;
	margin-bottom: 6px;
	font-family: var(--wp--preset--font-family--heading);
	font-size: 16px;
	font-weight: 700;
	line-height: 1.3;
	color: var(--wp--preset--color--accent);
}

/*
 * Held to three lines. The field asks for a sentence or two, but a menu panel
 * is not the place to find out that someone pasted a paragraph -- the columns
 * beside it would be dragged taller to match.
 */
.pcf-header .pcf-dropdown .pcf-dropdown__featured-text {
	display: -webkit-box;
	margin-bottom: 10px;
	overflow: hidden;
	font-size: 14px;
	font-weight: 400;
	line-height: 1.5;
	color: rgb(230 205 184 / 78%);
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 3;
}

/* margin-top auto: the call to action sits at the foot however short the copy. */
.pcf-header .pcf-dropdown .pcf-dropdown__featured-cta {
	display: inline-flex;
	gap: 6px;
	align-items: center;
	margin-top: auto;
	font-size: 14px;
	font-weight: 700;
	color: var(--wp--preset--color--accent);
}

.pcf-header .pcf-dropdown .pcf-dropdown__featured:hover .pcf-dropdown__featured-cta,
.pcf-header .pcf-dropdown .pcf-dropdown__featured:focus-visible .pcf-dropdown__featured-cta {
	text-decoration: underline;
	text-underline-offset: 3px;
}

.pcf-header .pcf-dropdown .pcf-dropdown__featured-arrow {
	transition: transform 0.18s ease;
}

.pcf-header .pcf-dropdown .pcf-dropdown__featured:hover .pcf-dropdown__featured-arrow,
.pcf-header .pcf-dropdown .pcf-dropdown__featured:focus-visible .pcf-dropdown__featured-arrow {
	transform: translateX(4px);
}

@media (prefers-reduced-motion: reduce) {

	.pcf-header .pcf-dropdown .pcf-dropdown__featured,
	.pcf-header .pcf-dropdown .pcf-dropdown__featured-arrow {
		transition: none;
	}
}

/* -- dialogs --------------------------------------------------------------- */

/*
 * Both dialogs share this. display:none rather than opacity alone, because a
 * dialog that is merely transparent still takes clicks -- and `inert` is doing
 * the accessibility half, so the two have to agree.
 */
.pcf-modal {
	display: none;
	position: fixed;
	inset: 0;
	z-index: 120;
}

.pcf-modal.is-open {
	display: block;
}

.pcf-modal__backdrop {
	position: absolute;
	inset: 0;
	background-color: rgb(43 32 24 / 55%);
}

.pcf-modal__dialog {
	position: relative;
	width: min(560px, calc(100vw - 32px));
	margin: 10vh auto 0;
	padding: 24px;
	background-color: var(--wp--preset--color--base);
	border-radius: 6px;
	box-shadow: 0 24px 60px rgb(43 32 24 / 30%);
}

.pcf-modal__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	margin-bottom: 18px;
}

.pcf-modal__title {
	margin: 0;
	font-family: var(--wp--preset--font-family--body) !important;
	font-size: 22px;
	font-weight: 800;
	color: var(--wp--preset--color--ink-warm);
}

.pcf-modal__close {
	flex: 0 0 auto;
	width: 40px;
	height: 40px;
	padding: 0;
	border: 2px solid var(--wp--preset--color--rule);
	border-radius: 4px;
	background: none;
	font-size: 24px;
	line-height: 1;
	color: var(--wp--preset--color--ink-warm);
	cursor: pointer;
	transition: border-color 0.18s ease, background-color 0.18s ease;
}

.pcf-modal__close:hover {
	border-color: var(--wp--preset--color--ink-warm);
	background-color: var(--wp--preset--color--cream);
}

.pcf-modal__close:focus-visible,
.pcf-modal button:focus-visible,
.pcf-modal input:focus-visible {
	outline: 3px solid var(--wp--preset--color--maroon);
	outline-offset: 2px;
}

.pcf-search-modal__field {
	display: flex;
	gap: 10px;
}

.pcf-search-modal__field input[type="search"] {
	flex: 1 1 auto;
	min-width: 0;
	padding: 12px 14px;
	border: 2px solid var(--wp--preset--color--rule);
	border-radius: 4px;
	font-family: var(--wp--preset--font-family--body);
	font-size: 16px;
	color: var(--wp--preset--color--ink-warm);
}

.pcf-search-modal__field input[type="search"]:focus {
	border-color: var(--wp--preset--color--ink-warm);
}

.pcf-language-list {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
	gap: 8px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.pcf-language-list button {
	width: 100%;
	padding: 12px 14px;
	border: 2px solid var(--wp--preset--color--rule);
	border-radius: 4px;
	background: none;
	font-family: var(--wp--preset--font-family--body);
	font-size: 16px;
	font-weight: 600;
	text-align: left;
	text-transform: none;
	color: var(--wp--preset--color--ink-warm);
	cursor: pointer;
	transition: border-color 0.18s ease, background-color 0.18s ease;
}

.pcf-language-list button:hover {
	border-color: var(--wp--preset--color--ink-warm);
	background-color: var(--wp--preset--color--cream);
}

/* The language already in use, marked by more than colour. */
.pcf-language-list button.is-current {
	border-color: var(--wp--preset--color--maroon);
	background-color: var(--wp--preset--color--cream);
	font-weight: 800;
}

/*
 * GTranslate's own widget, kept out of the layout but NOT display:none --
 * the plugin's script measures and writes into this element, and hiding it
 * outright stops the translation applying at all.
 */
.pcf-language-plumbing,
.gtranslate_wrapper {
	position: absolute !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	pointer-events: none;
}

@media (max-width: 1023px) {

	.pcf-modal__dialog {
		margin-top: 6vh;
	}

	/* Tools live in the drawer at this width; the utility bar keeps Donate. */
	.pcf-header__utility .pcf-header__tool {
		display: none;
	}
}

/* -----------------------------------------------------------------------------
 * Donate panel
 *
 * The donation form as a sheet over the page, opened from any Donate link on
 * the site. Chrome rather than a block: it is rendered once per request in the
 * footer and belongs to the site, not to a page.
 *
 * Every selector here begins with .pcf-donate-panel, as this file requires.
 * -------------------------------------------------------------------------- */

.pcf-donate-panel {
	position: fixed;
	inset: 0;
	z-index: 130;
	visibility: hidden;
}

.pcf-donate-panel.is-open {
	visibility: visible;
}

.pcf-donate-panel__backdrop {
	position: absolute;
	inset: 0;
	background-color: rgb(21 15 17 / 55%);
	opacity: 0;
	transition: opacity 0.28s ease;
}

.pcf-donate-panel.is-open .pcf-donate-panel__backdrop {
	opacity: 1;
}

/*
 * The sheet comes in from the right, like the mobile drawer, so the two
 * overlays on this site behave the same way. Its own scroll: a donation form is
 * taller than a short viewport and the page behind it is locked.
 */
.pcf-donate-panel__sheet {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	width: min(520px, 100vw);
	overflow-y: auto;
	padding: 26px 26px calc(26px + env(safe-area-inset-bottom));
	background-color: var(--wp--preset--color--base);
	box-shadow: -12px 0 32px rgb(21 15 17 / 24%);
	transform: translateX(100%);
	transition: transform 0.3s cubic-bezier(0.22, 0.61, 0.36, 1);
}

.pcf-donate-panel.is-open .pcf-donate-panel__sheet {
	transform: translateX(0);
}

.pcf-donate-panel__head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
	margin-bottom: 6px;
}

.pcf-donate-panel__title {
	margin: 0;
	font-family: var(--wp--preset--font-family--heading);
	font-size: 26px;
	font-weight: 700;
	line-height: 1.2;
	color: var(--wp--preset--color--ink-warm);
}

.pcf-donate-panel__close {
	flex: none;
	padding: 8px 14px;
	border: 2px solid var(--wp--preset--color--rule);
	border-radius: 4px;
	background: none;
	font-family: var(--wp--preset--font-family--body);
	font-size: 14px;
	font-weight: 800;
	text-transform: none;
	color: var(--wp--preset--color--contrast-warm);
	cursor: pointer;
	transition: color 0.18s ease, border-color 0.18s ease;
}

/*
 * Restated on interaction, because Maisha's bare-button rules only fire then:
 * padding-inline against `button:hover { padding-left: 1.7em }`, border-color
 * against `button:focus { border-color: #aaa #bbb #bbb }`, and the inset shadow
 * against `button:focus`. See the note over the chrome button baseline above.
 */
.pcf-donate-panel__close:hover,
.pcf-donate-panel__close:focus,
.pcf-donate-panel__close:focus-visible {
	padding-inline: 14px;
	border-color: var(--wp--preset--color--maroon);
	box-shadow: none;
	color: var(--wp--preset--color--maroon);
}

.pcf-donate-panel__intro {
	margin: 0 0 18px;
	font-family: var(--wp--preset--font-family--body) !important;
	font-size: 15px;
	line-height: 1.6;
	color: var(--wp--preset--color--contrast-warm);
}

/*
 * Reserves height until the provider's iframe arrives, so the sheet does not
 * open empty and then lurch to full height a moment later.
 */
.pcf-donate-panel__frame {
	position: relative;
	min-height: 620px;
}

.pcf-donate-panel__frame.is-loaded {
	min-height: 0;
}

.pcf-donate-panel__frame:not(.is-loaded)::after {
	content: "Loading the donation form…";
	position: absolute;
	top: 0;
	right: 0;
	left: 0;
	font-family: var(--wp--preset--font-family--body);
	font-size: 15px;
	line-height: 1.6;
	color: var(--wp--preset--color--contrast-warm-muted);
}

/*
 * The provider did not answer. Saying so beats leaving "Loading…" on screen
 * for good; the fallback link below the frame is the way out, and it is
 * rendered whether or not the form ever arrives.
 */
.pcf-donate-panel__frame.is-failed {
	min-height: 0;
}

.pcf-donate-panel__frame.is-failed::after {
	content: "The donation form could not be loaded.";
	position: static;
	display: block;
	color: var(--wp--preset--color--contrast-warm);
}

.pcf-donate-panel__frame iframe {
	display: block;
	width: 100%;
	border: 0;
}

.pcf-donate-panel__fallback {
	margin: 18px 0 0;
	font-family: var(--wp--preset--font-family--body) !important;
	font-size: 14px;
}

.pcf-donate-panel__fallback a {
	color: var(--wp--preset--color--maroon);
}

.pcf-donate-panel a:focus-visible,
.pcf-donate-panel button:focus-visible {
	outline: 2px solid var(--wp--preset--color--maroon);
	outline-offset: 3px;
}

/*
 * Reduced motion keeps the panel and loses the travel: it still appears and
 * still covers the page, it just does not slide.
 */
@media (prefers-reduced-motion: reduce) {

	.pcf-donate-panel__sheet,
	.pcf-donate-panel__backdrop {
		transition: none;
	}
}

@media (max-width: 767px) {

	/* Full width on a phone -- 520px of sheet on a 390px screen is the page. */
	.pcf-donate-panel__sheet {
		width: 100vw;
		padding: 20px 16px calc(20px + env(safe-area-inset-bottom));
	}

	.pcf-donate-panel__title {
		font-size: 22px;
	}
}
