/**
 * Sitewide custom footer bar -- rendered by joetennis_child_site_footer_bar()
 * in functions.php, hooked onto Neve's `neve_after_footer_hook` rather than
 * overriding footer.php outright (see that function's own comment for why).
 * Neve's own footer builder areas (widgets, footer-menu location) are left
 * alone -- all empty -- and this renders as its own independent bar just
 * below them. Its copyright component is the one exception; see the
 * `.builder-item.cr` rule at the bottom of this file.
 *
 * Two chunks on the shared sitewide band (`var(--container)`, same as the
 * header/breadcrumb-utility/content rows): copyright left-aligned, nav +
 * "Get in touch" button grouped under `.joetennis-footer-right` and
 * right-aligned independently (`margin-left: auto`, not `space-between`,
 * so the right cluster still lands on the band's right edge even when
 * copyright is empty -- the live default today). Below 768px the nav list
 * hides and only the button remains on the right; copyright keeps its left
 * alignment. All on a solid neutral-grey background. That band used to be
 * #666 and existed to separate the bar from the page; v1.11.21 made it
 * #21232b to carry CONTRAST for the controls on it instead, and v1.13.3
 * lightened it to #403f3f. See the `.joetennis-site-footer` rule below.
 *
 * The "Get in touch" link reuses Neve's own `.button.button-primary`
 * classes so it inherits the exact same fill/hover styling as the header's
 * button, rather than a hand-rolled duplicate.
 */

.joetennis-site-footer {
	/* LIGHTENED 2026-09-22 to #403f3f, decision 4 of
	   SPEC-revision01-colour-adoption -- ruled from Joe's own revision01
	   design pass, with the contrast cost in front of him.

	   THE FULL HISTORY, because each move was about a DIFFERENT property
	   of the band and reading only the last one misleads:

	     #666      2026-09-16  separation from the page
	     #21232b   2026-09-21  contrast ON the band (v1.11.21)
	     #403f3f   2026-09-22  design (v1.13.3)

	   A warm near-neutral dark grey -- closer to "neutral" than #21232b's
	   desaturated blue-black was, so the oldest comments in this file calling
	   the band neutral read true again, though they describe the #666 era and
	   are not evidence about this value.

	   STILL A LITERAL, NOT A PALETTE TOKEN, for the original reason: none of
	   the active palette's slots hold a neutral, and introducing one would
	   change every other consumer of that slot sitewide.

	   WHAT IT COSTS, and it is the reverse of v1.11.21's trade. Every cell on
	   the band loses contrast -- white copyright ink 15.67:1 -> 10.50:1, cyan
	   hover and CTA edge 10.19:1 -> 6.83:1, all still clear -- except the
	   marker, which drops 3.96:1 -> 2.65:1 and is the exact cell v1.11.21
	   darkened the band to fix. Joe ruled it knowingly, 2026-09-22, to be
	   raised at review. Do NOT re-darken this band to "fix" the marker
	   without him: the figures live in the FOOTER NAV block of
	   site-interactive-states.css and checks/05 pins this literal so they
	   cannot go stale silently.

	   WHAT IT BUYS BACK. Separation from the page, which is what #21232b
	   traded away: against the dark page (#0a0e1a) the band now reads
	   1.83:1 where #21232b gave 1.23:1, and against the white page -- which
	   is the default ground since v1.13.0 and therefore most of the site --
	   10.50:1. The bar reads as a distinct block again. */
	background-color: #403f3f;
	/* THIS BAND IS THE THIRD GROUND, AND AS OF v1.11.21 IT NEEDS NO
	   BINDINGS. The token contract (SPEC-interactive-color-states) names
	   two grounds -- the dark page and Flush Split White -- and this is
	   neither, yet the primary nav, the copyright and the "Get in touch"
	   CTA all render on it, on every one of the seven templates.

	   On #666 that was a problem: footer nav hover measured 3.73:1 against
	   a 4.5:1 text floor, and it shipped failing because the band itself
	   was expected to change. It has. At #21232b the band sat close enough
	   to the dark page that EVERY `:root` default was already correct on it,
	   so the third ground cost zero declarations rather than a block --
	   the strongest form of the contract's claim that a ground supplies
	   values and never rules.

	   AT #403f3f THAT IS STILL TRUE OF THE DARK DEFAULTS and no longer true
	   of one white-ground value: the marker, counter-bound in
	   site-interactive-states.css, now measures 2.65:1 here at the value
	   that counter-binding exists to give it. The band still needs no block
	   of its OWN -- what changed is that one of the two counter-bindings
	   stopped being sufficient. It is a ruled trade, not a drift.

	   The measured figures, and the two KNOWN GAPS this closes, live in ONE
	   place: the FOOTER NAV block in site-interactive-states.css. Read them
	   there rather than keeping a second copy in sync here.

	   WHAT WAS TRADED AT v1.11.21, AND WHAT v1.13.3 TRADED BACK. Against the
	   dark page (#0a0e1a) #21232b separated by 1.23:1 where #666 gave
	   3.35:1 -- the bar stopped reading as a distinct block and read as the
	   page ending. #403f3f puts that at 1.83:1, and against the WHITE page
	   -- the default ground since v1.13.0, so most of the site -- at
	   10.50:1. Both calls are Joe's, 2026-09-21 and 2026-09-22, each made
	   with the number in front of him, and they pull in opposite
	   directions: v1.11.21 bought contrast with separation, v1.13.3 bought
	   separation back and paid the marker for it.

	   NO WCAG FLOOR APPLIES to the separation figure and none is implied by
	   quoting it: 1.4.11's 3:1 covers UI components and meaningful graphics,
	   not the join between two decorative surfaces. It is the only
	   measurement in this change with no floor beside it, and that is why.
	   The corollary the v1.11.21 note drew still holds in reverse: lightness
	   is the single dial trading these two against each other, so if the
	   marker is ever wanted back above the floor WITHOUT re-darkening the
	   band, it has to be re-picked as a value rather than bought here. */
	/* 20px vertical (Joe live review 2026-09-16, was 40px): the same
	   rhythm unit the Portfolio archive now uses throughout. Horizontal
	   stays 0 -- the band's own `--band-gutter` inset on .__inner is the only
	   horizontal inset, matching every other row. */
	padding: 20px 0;
	/* THE BUTTON'S BOX, ALIGNED TO THE HEADER'S -- v1.11.22, after Joe
	   reported "same button, same content, very different dimensions".

	   Both buttons are painted by ONE Neve rule,
	   `.button.button-primary { padding: var(--primarybtnpadding, 13px 15px) }`.
	   The divergence is not a second rule, it is scope: Neve emits
	   `--primarybtnpadding` per header BUILDER ITEM, and the header's is
	   8px 12px. This bar is not a builder item, so its button fell through
	   to the GLOBAL value -- 12px 32px at desktop, 13px 15px at mobile --
	   and rendered 165.2x46.8 against the header's 125.2x38.8 (measured at
	   1440px on /projects/public-site-strategy/).

	   So the header is the override and this bar was taking the site
	   default. Matching the header was the call, since the complaint was
	   that the footer cluster is the wider one; widening the header
	   instead would be the other way to make them agree.

	   THIS VALUE IS A COPY OF DATABASE STATE, which is the cost. The 8px
	   12px lives in a Customizer theme_mod with no version-controlled
	   artifact, so if that mod moves, the header follows and this does
	   not. CSS cannot read another element's custom property, so there is
	   no way to point at it rather than copy it. Recorded in CLAUDE.md's
	   database-only section under the standing rule for exactly this. */
	--primarybtnpadding: 8px 12px;
}

.joetennis-site-footer__inner {
	max-width: var(--container);
	margin: 0 auto;
	padding: 0 var(--band-gutter, 15px);
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 24px 40px;
}

/* Nav-to-button gap: 20px, matching the header, where the button carries
   `margin-left: 20px` against the nav list (v1.11.22, was 40px). With the
   button's box now also matching, this is the second of the two things
   that made the footer cluster wider than the header's: at 1440px the
   footer spanned 616.9px against the header's 567.7px, from +40px of
   button and +30px of gap -- even though the footer NAV was 20.8px
   narrower. The row gap stays 24px; it only applies once this wraps. */
.joetennis-footer-right {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 24px 20px;
	margin-left: auto;
}

/* Item rhythm: 20px, matching the header (v1.11.22, was 32px).

   The two menus reach the same spacing two different ways and that is
   kept, because the mechanisms are not interchangeable. The header is
   Neve's: `li { margin: 0 10px }` with `ul { margin: 0 -10px }` cancelling
   the outer half so the list still flushes to its edges -- 20px between
   items. This bar owns its own markup, so it uses flex `gap`, which needs
   no negative-margin counterweight and does not leak spacing onto the
   first and last items. Same 20px rhythm, stated once instead of twice.

   THE 15px TYPE DIFFERENCE IS GONE TOO, v1.11.23. It was left in place one
   build as a deliberate secondary-chrome choice; Joe's answer was that the
   two navs must be exact, so the rule below now matches the header on size,
   tracking and item padding. The two menus still reach that rhythm by
   different mechanisms, which is the part that stays. */
.joetennis-footer-nav {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 8px 20px;
	list-style: none;
	margin: 0;
	padding: 0;
}

/* TYPE AND BOX MATCHED TO THE HEADER NAV, v1.11.23. Joe's bar was "exact",
   and these three declarations are what exact costs. Verified by measuring
   the TEXT ink boxes (Range.getBoundingClientRect) rather than the element
   boxes, because the two menus put their 4px in different places and
   element boxes therefore disagree while the rendered text does not.

   Measured at 1440px on /about/, header vs footer, after this change:
     link text widths   46.8 / 64.3 / 86.6 / 34.1 / 60.3   -- identical
     gap between texts  28, 28, 28, 28                      -- identical
     last text -> CTA   24px                                -- identical
   Before it, the footer ran 15px type at 0.3px tracking with no item
   padding, which put its texts 20px apart and the whole cluster 58px
   narrower than the header's.

   WHY EACH ONE IS HERE, since none is arbitrary:

   `font-size: 16px` -- was 15px. Neve exposes NO custom property for nav
   typography (checked: --fontSize and friends are unset at :root, on body,
   and on the nav anchor itself), so the header's 16px cannot be referenced,
   only matched. This is a hand copy of a Customizer value, like the button
   padding above; if nav typography changes there, change it here too.

   `letter-spacing: normal` -- the footer was inheriting 0.3px from outside
   this theme (it is in no theme/*.css; Neve or wp-custom-css sets it) while
   the header nav escapes it through Neve's own nav typography block. Not a
   value we chose, which is why cancelling rather than restating is right.

   `padding: 0 4px` -- mirrors the header's `.wrap { padding: 0 4px }`. With
   the list's 20px gap this gives 4+20+4 = 28px between texts, the same
   figure the header reaches as 4+10+10+4 through `li { margin: 0 10px }`.
   Same rhythm, different mechanism -- see the note on the list above. */
.joetennis-footer-nav a {
	color: #ffffff;
	text-decoration: none;
	font-family: var(--font-body);
	font-weight: 500;
	font-size: 16px;
	letter-spacing: normal;
	padding: 0 4px;
}

/* The hover rule that used to sit here (`color: var(--nv-primary-accent)`,
   with no local fallback) has been retired to site-interactive-states.css,
   which now owns hover AND the focus ring this file never had -- the one
   sheet in the pre-spec inventory that carried hover but no focus at all.
   The rendered hover colour is unchanged; only its owner moved. */

.joetennis-footer-copyright {
	color: #ffffff;
	opacity: 0.85;
	font-family: var(--font-body);
	font-size: 14px;
	margin: 0;
}

/* Suppresses Neve's OWN copyright component, which its footer builder
   renders in the bottom row's left slot (`hfg_footer_layout_v2`).
   Both it and this file's `.joetennis-footer-copyright` read the same
   `footer_copyright_content` theme_mod, so the moment that mod holds a
   value the text renders TWICE -- once in Neve's dark bottom row, once
   in this bar. It went unnoticed until 2026-09-16 only because the mod
   had always been empty, which made Neve's copy invisible rather than
   absent: a latent duplicate, not a new one.

   Hidden here in CSS rather than by removing the component from
   `hfg_footer_layout_v2`, deliberately. That theme_mod is live-database
   state with no version-controlled artifact, so editing it would leave
   this behavior depending on an unreviewable, undiffable change (see
   CLAUDE.md on preferring code over one-off MCP writes). This rule is
   diffable, reversible, and self-documenting, and it keeps
   `footer_copyright_content` as the single Customizer-editable source of
   truth for the text itself. */
.nv-footer-content .builder-item.cr {
	display: none;
}

@media (max-width: 768px) {
	.joetennis-site-footer {
		/* Matches the base rule's 20px (was 32px) -- same rhythm unit at
		   every breakpoint, as on the archive. */
		padding: 20px 0;
	}

	.joetennis-site-footer__inner {
		gap: 16px 24px;
	}

	.joetennis-footer-nav {
		display: none;
	}
}
