/*!
 * Component: Footer
 *
 * Full 4-column footer rendered by inc/components/footer.php —
 *   Brand · Newsletter teaser · Studio nav · Legal nav
 * sitting on the signature footer-tree-bg.png decorative band, with a social
 * icon row and copyright bar beneath.
 *
 * History:
 *   - Topic 17 RENDER-WP1: introduced partial during the FSE retreat.
 *   - Visual-restore (carry-over): added footer-tree-bg.png backdrop.
 *   - Topic 20 LAUNCH-WP3: full 4-col build-out, newsletter form, social row,
 *     two nav-menu locations with fallback callbacks.
 *   - Topic 23 REDESIGN-WP3: token sweep onto --mw-color-* + 3 brand variants
 *     scoped via [data-brand="studio|kworld|kaeros"] on <footer>. 4-column
 *     layout from LAUNCH-WP3 is untouched — brand variants change only the
 *     background, accent color, and heading typography weight, never the grid.
 *   - Topic 33 FIX-WP20: removed `.site-footer { margin-block-start: 4rem }`
 *     and the FIX-WP7 `:has()` escape rule that zeroed it on divider-ending
 *     pages. See the OWNER RULINGS block at .site-footer below — that block is
 *     now the only surviving record of ruling R2, so do not delete it.
 *
 * Brand variants (Topic 23 REDESIGN-WP3 spec):
 *   - Studio  (default) = --mw-color-bg-dark   (#0E0841) — light text on dark
 *   - K-World           = --kw-castle-stone    (#7A6E5C) — light text on stone (preserved Topic 13 token)
 *   - Kaeros            = --lore-parchment     (#F2E6CB) — dark text on parchment (preserved Topic 14 token)
 *
 * Responsive breakpoints (Topic 20 WP-3 spec — untouched by REDESIGN-WP3):
 *   - desktop: 4-col grid (brand 1.4fr · newsletter 1.2fr · studio 1fr · legal 1fr)
 *   - <= 960px: 2-col grid (brand + newsletter on row 1, navs on row 2)
 *   - <= 720px: 1-col stack with consistent spacing rhythm
 *
 * T-5 preservation: the newsletter form's CSS class names
 * (.site-footer__newsletter-form, __newsletter-row, __newsletter-input,
 * __newsletter-submit, __newsletter-blurb, __newsletter-disclosure) are kept
 * verbatim — this CSS recolors them per brand, never renames them.
 * inc/kit/newsletter-handler.php is untouched.
 *
 * @package Mystwood_Studios_AB
 * @since   Topic 17 RENDER-WP1
 * @since   Topic 20 LAUNCH-WP3 (4-col build-out, newsletter form, social row)
 * @since   Topic 23 REDESIGN-WP3 (token sweep + 3 brand variants via [data-brand])
 */

/* --- Base footer (Studio default) ------------------------------------- *
 * Signature footer-tree-bg.png decorative backdrop is painted directly on
 * .site-footer so it sits behind the column content without a pseudo +
 * z-index hack. The base background-color is --mw-color-bg-dark (#0E0841),
 * which matches the Studio brand-tier and stands in as the fallback color
 * behind the (transparent / watermark) regions of the PNG. Brand variants
 * below override background-color and accent token only — the tree image
 * stays consistent across brands.
 */
/* ⚠️ OWNER RULINGS — TWO SEPARATE ONES, BOTH REJECTIONS. DO NOT RE-ADD EITHER.
 *
 *   R2 (pre-Topic-33) rejected COMPENSATING FOOTER PADDING: adding top padding
 *   here to separate the footer from the last band re-introduced a two-page
 *   rhythm gap.
 *   FIX-WP20 (owner directive 2026-07-30, "Remove the kworld footer margin it
 *   pushes the content everywhere") rejected the OUTER MARGIN: `.site-footer`
 *   carried `margin-block-start: 4rem`, and FIX-WP7 had bolted on
 *   `.site-main:has(> .mw-divider:last-child) + .site-footer { margin: 0 }` to
 *   suppress it on the two pages that end in a divider. So the gap appeared or
 *   not depending on whether a page's last element happened to be a divider —
 *   which is exactly the inconsistency the owner was seeing. Both are gone.
 *
 * `.site-footer__inner`'s padding-block-start (clamp(2.5rem, 5vw, 4rem) — 40px
 * at 390, 64px at 1440) is now the ONLY breathing room above the footer
 * content, and it predates R2, so it is not the padding R2 rejected.
 *
 * Between them these two rulings close both directions: no outer margin, no
 * added inner padding. If a future WP wants to separate the footer from a band,
 * the answer is a divider on that page, not space here.
 *
 * (Deleting the `:has()` rule is safe, not merely tidy: on divider-ending pages
 * the divider's own `margin-block-end: calc(-1 * clamp(28px,4vw,56px))` collapses
 * against a 0 base to the same -56px it collapsed to against the old 4rem, so
 * those pages are byte-identical either way.) */
.site-footer {
	position: relative;
	background-color: var(--mw-color-bg-dark, #0E0841);
	background-image: url("../../img/decorative/footer-tree-bg.png");
	background-repeat: no-repeat;
	background-position: center top;
	background-size: cover;
	color: var(--mw-color-text-light, #FAF8FF);

	/* 🔴 OWNER RULING 2026-08-02, and it OVERRIDES FIX-WP35's removal:
	 * "Between the footer and the content there should be a divider but
	 * exactly like it was previously so the FOOTER always has a line divider
	 * everywhere like it was previously only a LINE".
	 *
	 * This does not contradict the earlier ruling it replaces. On 2026-08-01
	 * the instruction was "there should be never a STYLED divider on the
	 * footer" — that ban was on the zigzag/torn-paper divider family, and it
	 * still holds. A plain 1px rule is not a styled divider; it is the line
	 * the footer has always had, and removing it went further than the ruling
	 * asked.
	 *
	 * Restored at its original value. FIX-WP35's argument against it — that a
	 * 1px line drawn across the band-to-footer dissolve defeats the dissolve —
	 * is a real observation and was correct on its own terms. The owner has
	 * seen both and wants the line: a consistent, locatable footer edge on
	 * every page is worth more than an invisible join on some of them. Do not
	 * re-remove it on that argument; it has been made and answered. */
	border-top: 1px solid rgba(255, 255, 255, 0.06);

	/* Per-footer accent token — overridable by [data-brand] variants below.
	 * All hover / focus / submit color references read from this single
	 * custom property so a brand variant only sets --mw-footer-accent once. */
	--mw-footer-accent: var(--mw-color-primary, #6765E8);
	--mw-footer-accent-hover: var(--mw-color-primary-hover, #5F5DE2);
}

/* --- Band -> footer fade (Topic 33 FIX-WP35) ---------------------------
 *
 * Owner ruling (Q1, 2026-08-01): "just bleeding into/fade out into the
 * background color should work fine", and "there should be never a styled
 * divider on the footer". A divider is therefore forbidden at this join, so
 * the last band dissolves into the footer instead.
 *
 * THE TERMINUS IS THE FOOTER'S PAINTED TOP ROW, NOT ITS DECLARED COLOR.
 * All three `[data-brand]` background-colors above are dead pixels:
 * footer-tree-bg.png is fully opaque at `cover` and `center top` pins its
 * row 0 to the footer's top edge at every viewport. Measured off the decoded
 * bitmap (2560x937): alpha 255 everywhere, and rgb(4,3,33) on 2522 of 2560
 * px of row 0 — the tree silhouette does not reach the top. The stragglers
 * are rgb(6,4,41) and rgb(6,5,50), imperceptibly close. So #040321 is the
 * colour every page actually meets, including /clear-the-skies/, whose
 * footer *declares* K-World castle-stone rgb(122,110,92) and paints none of
 * it.
 *
 * WHY BOTH DARK TONES, when FIX-WP35 was written to cover only the twelve
 * studio-violet tails: because measuring inverted the WP's premise. WCAG
 * contrast is a luminance metric and is nearly blind to chroma-dominant
 * steps, so the WP reasoned from the wrong number. In CIELAB:
 *
 *     studio-violet -> footer   ratio 1.0532:1   deltaE   5.31
 *     studio-dark   -> footer   ratio 1.0861:1   deltaE  24.07
 *     (studio-violet vs studio-dark, for scale:  deltaE  19.15)
 *
 * The ten studio-dark tails carry an edge 4.5x stronger than the twelve the
 * WP listed — stronger, in fact, than the violet/dark difference this whole
 * topic exists to correct. Shipping the fade on the weak half only would
 * have fixed the near-invisible seam and left the visible one. Same rule,
 * one extra selector; drop the `studio-dark` lines to revert to WP scope.
 *
 * Painted as a background-image ON THE BAND, not as an absolutely positioned
 * ::after: `.mw-section` is `position: static`, so a pseudo would have forced
 * `position: relative` onto the band and re-anchored every absolutely
 * positioned descendant inside it. A background-image needs no containing
 * block, adds no height, and degrades to the band's flat token colour if the
 * gradient is ever dropped — the same failure-mode inversion _hero.css
 * records for the hero bleed. Verified: no `background:` shorthand and no
 * other background-image applies to these sections, so nothing is clobbered.
 *
 * The ramp itself lives in ONE place — sections/_hero.css, "THE SHARED
 * SMOOTHSTEP RAMP" — whose selector list includes the four selectors below.
 * This rule supplies only the tone and the geometry. A 2-stop linear ramp is
 * deliberately NOT used: it is steepest at its endpoint by construction and
 * always terminates on a corner the eye reads as a Mach band. Smoothstep
 * s(t) = t^2(3-2t) has zero slope at both ends.
 *
 * Do NOT "fix" a residual line here with `margin-block-start` or footer
 * padding — see the OWNER RULINGS block above, which rejects both.
 *
 * THIS RULE IS NO LONGER THE ONLY THING SETTING --mw-bleed-tone ON AN ELEMENT
 * (Topic 34 SEAM-WP1). That WP moved the hero tone declarations in
 * sections/_hero.css off `::after` and onto the hero element, so a seam shape
 * could read them. A hero is a `.mw-section`, so on a page whose LAST section
 * in .site-main is a hero carrying an image, those relocated rules and the
 * four selectors below would be setting the same property on the same element.
 *
 * No template does that today — SEAM-WP1's gate asserts it rather than
 * assuming it — but the two halves of THIS rule would not resolve it the same
 * way, which is the part worth writing down:
 *
 *   bare pair (the first two selectors below)
 *     .site-main > .mw-section:last-child[data-bg-token="..."]         (0,4,0)
 *     TIES the relocated hero painters. _hero.css wins, and only because
 *     functions.php runs the components enqueue loop BEFORE the sections loop,
 *     so sections/_hero.css prints later. A source-order win, nothing sturdier.
 *
 *   wrapped pair (the last two selectors below)
 *     .site-main > *:last-child > .mw-section:last-child[data-bg-token="..."]
 *                                                                      (0,5,0)
 *     BEATS the relocated painters on WEIGHT. Enqueue order is irrelevant, and
 *     #040321 below would win — which is the correct outcome for a footer fade,
 *     but it is the opposite resolution to the bare pair one line above it.
 *
 * So if this ever stops being hypothetical, the answer depends on whether the
 * band is wrapped, and any assertion covering only the direct-child shape
 * misses the half that behaves differently. Recorded here rather than only in
 * _hero.css because a reader arriving at this rule needs to know the property
 * has a second author now — the FIX-WP28 lesson about a comment that no longer
 * matches its code.
 * --------------------------------------------------------------------- */
.site-main > .mw-section:last-child[data-bg-token="studio-violet"],
.site-main > .mw-section:last-child[data-bg-token="studio-dark"],
.site-main > *:last-child > .mw-section:last-child[data-bg-token="studio-violet"],
.site-main > *:last-child > .mw-section:last-child[data-bg-token="studio-dark"] {
	--mw-bleed-tone: #040321;
	background-repeat: no-repeat;
	background-position: bottom center;
	background-size: 100% clamp(96px, 9vw, 150px);
}

/* --- Grid container --------------------------------------------------- */
.site-footer__inner {
	display: grid;
	gap: clamp(2rem, 4vw, 3rem);
	grid-template-columns: 1.4fr 1.2fr 1fr 1fr;
	max-width: var(--mw-wide-size, 1280px);
	margin-inline: auto;
	padding: clamp(2.5rem, 5vw, 4rem) clamp(1rem, 3vw, 2rem) clamp(2rem, 4vw, 3rem);
}

/* 2-col @ 960px: brand + newsletter on row 1, the two navs on row 2 */
@media (max-width: 960px) {
	.site-footer__inner {
		grid-template-columns: 1fr 1fr;
	}
}

/* 1-col stack @ 720px with rhythm via gap */
@media (max-width: 720px) {
	.site-footer__inner {
		grid-template-columns: 1fr;
		gap: 2.25rem;
	}
}

/* --- Columns ---------------------------------------------------------- */
.site-footer__col {
	min-width: 0;
}

.site-footer__heading {
	font-family: var(--mw-font-display, "Ice Cream Man", system-ui, sans-serif);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.55);
	margin: 0 0 1rem;
}

/* --- Brand column ----------------------------------------------------- */
.site-footer__logo {
	display: inline-block;
}

.site-footer__logo img {
	display: block;
	width: clamp(7rem, 14vw, 9rem);
	height: auto;
}

.site-footer__brand-text {
	font-family: var(--mw-font-display, "Ice Cream Man", system-ui, sans-serif);
	font-size: 1.25rem;
	font-weight: 700;
	margin: 0;
}

.site-footer__tagline {
	margin: 1rem 0 0;
	font-size: 0.9375rem;
	line-height: 1.55;
	color: rgba(255, 255, 255, 0.7);
	max-width: 32ch;
}

/* --- Newsletter column ------------------------------------------------ *
 * T-5 preservation: class names (.site-footer__newsletter-*) are the same
 * tokens that inc/kit/newsletter-handler.php targets indirectly via the
 * form contract in inc/components/footer.php. Only colors are retuned —
 * never the structural class names or the form contract.
 */
.site-footer__newsletter-blurb {
	margin: 0 0 0.875rem;
	font-size: 0.9375rem;
	line-height: 1.5;
	color: rgba(255, 255, 255, 0.78);
}

.site-footer__newsletter-form {
	margin: 0;
}

.site-footer__newsletter-row {
	display: flex;
	gap: 0.5rem;
	flex-wrap: wrap;
}

.site-footer__newsletter-input {
	flex: 1 1 12rem;
	min-width: 0;
	padding: 0.55rem 0.75rem;
	border: 1px solid rgba(255, 255, 255, 0.2);
	border-radius: 0.25rem;
	background: rgba(255, 255, 255, 0.08);
	color: var(--mw-color-text-light, #FAF8FF);
	font-size: 0.9375rem;
	line-height: 1.4;
	font: inherit;
	font-size: 0.9375rem;
}

.site-footer__newsletter-input::placeholder {
	color: rgba(255, 255, 255, 0.45);
}

.site-footer__newsletter-input:focus-visible {
	outline: 2px solid var(--mw-footer-accent);
	outline-offset: 2px;
	border-color: var(--mw-footer-accent);
}

/* Layout companion only — cosmetic style comes from .mw-btn--primary (banner shape).
 * flex:0 0 auto prevents the button from stretching inside .site-footer__newsletter-row (flex).
 * padding override needed because .mw-btn--primary re-declares padding after .mw-btn and the
 * default 0.85rem 1.6rem is taller than the adjacent email input; --sm cannot fix this cascade.
 * RTL note: padding-inline is symmetric so no RTL drift.
 * KLEI-WP1-A (2026-05-31). */
.site-footer__newsletter-submit.mw-btn {
	flex: 0 0 auto;
	padding: 0.55rem 1.05rem;
}

.site-footer__newsletter-disclosure {
	margin: 0.625rem 0 0;
	font-size: 0.8125rem;
	line-height: 1.45;
	color: rgba(255, 255, 255, 0.55);
}

/* --- Nav columns (footer-primary + footer-legal) ---------------------- */
.site-footer__menu {
	list-style: none;
	padding: 0;
	margin: 0;
	display: grid;
	gap: 0.5rem;
}

.site-footer__menu li {
	margin: 0;
	list-style: none;
}

.site-footer__menu a {
	color: rgba(255, 255, 255, 0.85);
	text-decoration: none;
	font-size: 0.9375rem;
	transition: color 0.15s ease;
}

.site-footer__menu a:hover,
.site-footer__menu a:focus-visible {
	color: var(--mw-footer-accent);
}

.site-footer__menu a:focus-visible {
	outline: 2px solid var(--mw-footer-accent);
	outline-offset: 2px;
	border-radius: 2px;
}

/* --- Social row (below grid, full-width within max-width) ------------ */
.site-footer__social-row {
	max-width: var(--mw-wide-size, 1280px);
	margin: 0 auto;
	padding: 0 clamp(1rem, 3vw, 2rem) clamp(1.5rem, 3vw, 2rem);
	display: flex;
	justify-content: flex-start;
}

.site-footer__social {
	list-style: none;
	padding: 0;
	margin: 0;
	display: flex;
	flex-wrap: wrap;
	gap: 0.625rem;
}

.site-footer__social li {
	margin: 0;
	list-style: none;
}

.site-footer__social a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2.25rem;
	height: 2.25rem;
	border-radius: 9999px;
	background: rgba(255, 255, 255, 0.08);
	color: rgba(255, 255, 255, 0.85);
	transition: background 0.15s ease, color 0.15s ease, transform 0.15s ease;
}

.site-footer__social a:hover,
.site-footer__social a:focus-visible {
	background: var(--mw-footer-accent);
	color: var(--mw-color-text-light, #FAF8FF);
	transform: translateY(-2px);
}

.site-footer__social a:focus-visible {
	outline: 2px solid var(--mw-color-text-light, #FAF8FF);
	outline-offset: 2px;
}

.site-footer__social svg {
	width: 1rem;
	height: 1rem;
	fill: currentColor;
}

/* --- Copyright bar ---------------------------------------------------- */
.site-footer__bar {
	border-top: 1px solid rgba(255, 255, 255, 0.06);
	padding: 1rem clamp(1rem, 3vw, 2rem);
	text-align: center;
}

.site-footer__copyright {
	margin: 0;
	font-size: 0.8125rem;
	color: rgba(255, 255, 255, 0.55);
}

/* =====================================================================
 * Brand variants — [data-brand="studio|kworld|kaeros"]
 * ---------------------------------------------------------------------
 * Scoped via attribute selector on the <footer> element itself (see
 * inc/components/footer.php — `data-brand="<?php echo esc_attr(
 * mystwood_studios_ab_current_brand() ); ?>"`). Variants override only
 * the footer's background, accent token, and heading weight — the 4-col
 * grid, font stack, and form contract from Topic 20 LAUNCH-WP3 are
 * inherited verbatim.
 *
 * Studio is the default (no [data-brand="studio"] selector needed — the
 * base rules above already paint it). The explicit selector below mirrors
 * the K-World / Kaeros pattern so all three tiers are visually grep-able.
 * =====================================================================
 */

/* Studio — default; explicit selector for parity with kworld/kaeros */
.site-footer[data-brand="studio"] {
	background-color: var(--mw-color-bg-dark, #0E0841);
	color: var(--mw-color-text-light, #FAF8FF);
	--mw-footer-accent: var(--mw-color-primary, #6765E8);
	--mw-footer-accent-hover: var(--mw-color-primary-hover, #5F5DE2);
}

/* K-World — stone-castle tier (Topic 13 palette). Light text on warm stone.
 * Heading typography weight bumps slightly heavier (700 → 800) so the
 * --kw-castle-stone backdrop reads at the same visual hierarchy as the
 * deeper Studio violet does. */
.site-footer[data-brand="kworld"] {
	background-color: var(--kw-castle-stone, #7A6E5C);
	color: var(--mw-color-text-light, #FAF8FF);
	--mw-footer-accent: var(--mw-color-accent-moon-gold, #9A98FF);
	--mw-footer-accent-hover: var(--mw-color-primary-glow, #A8A7FF);
}

.site-footer[data-brand="kworld"] .site-footer__heading {
	font-weight: 800;
	color: rgba(255, 255, 255, 0.7);
}

/* -----------------------------------------------------------------------
 * Kaeros footer chrome — DORMANT — Topic 24 WP-4
 *
 * Parked per user direction ("no special theme for now"). The Topic 14
 * lore identity (manuscript / codex tier, parchment surface, dark ink
 * text) is preserved verbatim below so a future re-enable does not
 * redesign from scratch. To re-enable:
 *
 *   1. Un-comment the rule block below (remove the surrounding slash-star
 *      / star-slash markers, leave the rules intact)
 *   2. Restore the kaeros branch in inc/brand.php's resolver
 *      (mystwood_studios_ab_current_brand) — see the commented re-enable
 *      reference in that file
 *   3. Restore lore-* tokens in lore/kaeros-hub.php's section args
 *      (hero, dividers, card-grid, faq, cta-band) — currently flipped to
 *      studio-dark / studio
 *   4. Restore the matching DORMANT block in assets/css/components/_header.css
 *   5. Topic 33 FIX-WP16 — flip the footer ring token to dark inside this
 *      block: `--mw-btn-focus-ring: var(--mw-color-text-dark, #040420);`
 *      FIX-WP14's `.site-footer { --mw-btn-focus-ring: light }` rule
 *      (_button.css:493-495) only enumerated the two footer variants that
 *      were live at the time — castle-stone on K-World, near-black on
 *      studio. This third variant fills with `--lore-parchment` #F2E6CB;
 *      light ink on it measures 1.18:1, WORSE than the defect FIX-WP16
 *      exists to fix. Not a live failure today (the block below is
 *      commented out), so not repaired in `_button.css` — but the
 *      un-parker must not inherit the inverted-polarity light ring
 *      unchanged, or this footer regresses the moment it goes live.
 *   6. Topic 33 FIX-WP9 / D7 — `assets/css/gravity-forms.css:483-496` carries
 *      a Kaeros twin of the exact dead-specificity defect FIX-WP8 fixed for
 *      K-World: `body.is-brand-kaeros .gform_wrapper .gform_footer
 *      .gform_button` computes (0,4,2), the framework's own submit compound
 *      (`.gform-theme--framework.gform-theme.gform_wrapper … .gform_button`,
 *      gravity-forms.css:349-352/408-414) computes (0,7,1) and always wins —
 *      so the intended oxblood submit fill (`--lore-oxblood` #6B2418) and
 *      gilt focus ring (`--lore-gilt` #A87D32) would render violet-on-violet
 *      the moment Kaeros goes live, exactly as WP8 found for K-World before
 *      its fix. The framework rules already read `--mw-gf-submit-bg` /
 *      `--mw-gf-submit-color` / `--mw-gf-submit-outline` (gravity-forms.css:
 *      294-306, 351-352, 412), so — mirroring WP8's re-key, not
 *      out-specifying the compound — replace the two dead
 *      `body.is-brand-kaeros` blocks with:
 *      `body.is-brand-kaeros { --mw-gf-submit-bg: var(--lore-oxblood,
 *      #6B2418); --mw-gf-submit-color: var(--mw-color-text-light, #FAF8FF);
 *      --mw-gf-submit-outline: var(--lore-gilt, #A87D32); }`
 *      Verify live before closing: submit fill oxblood, keyboard-focus ring
 *      gilt, on the un-parked Kaeros form host.
 *
 * Original Topic 14 design notes (preserved for context): dark text on
 * parchment is the only variant that inverts the text-color polarity, so
 * every rgba(255,255,255,...) reference inside this block was rewritten
 * to the dark-on-light equivalent. Newsletter form structural classes
 * remain unchanged (T-5) — they just inherit the inverted color stack.
 * -----------------------------------------------------------------------
 */
/*
.site-footer[data-brand="kaeros"] {
	background-color: var(--lore-parchment, #F2E6CB);
	color: var(--mw-color-text-dark, #040420);
	--mw-footer-accent: var(--mw-color-bg-dark, #0E0841);
	--mw-footer-accent-hover: var(--mw-color-surface-dark, #0B0A2E);
}

.site-footer[data-brand="kaeros"] .site-footer__heading {
	font-weight: 800;
	color: rgba(4, 4, 32, 0.6);
}

.site-footer[data-brand="kaeros"] .site-footer__tagline,
.site-footer[data-brand="kaeros"] .site-footer__newsletter-blurb {
	color: rgba(4, 4, 32, 0.78);
}

.site-footer[data-brand="kaeros"] .site-footer__newsletter-input {
	background: rgba(4, 4, 32, 0.06);
	border-color: rgba(4, 4, 32, 0.2);
	color: var(--mw-color-text-dark, #040420);
}

.site-footer[data-brand="kaeros"] .site-footer__newsletter-input::placeholder {
	color: rgba(4, 4, 32, 0.45);
}

.site-footer[data-brand="kaeros"] .site-footer__newsletter-submit {
	color: var(--mw-color-text-light, #FAF8FF);
}

.site-footer[data-brand="kaeros"] .site-footer__newsletter-disclosure {
	color: rgba(4, 4, 32, 0.55);
}

.site-footer[data-brand="kaeros"] .site-footer__menu a {
	color: rgba(4, 4, 32, 0.85);
}

.site-footer[data-brand="kaeros"] .site-footer__social a {
	background: rgba(4, 4, 32, 0.08);
	color: rgba(4, 4, 32, 0.85);
}

.site-footer[data-brand="kaeros"] .site-footer__bar {
	border-top-color: rgba(4, 4, 32, 0.1);
}

.site-footer[data-brand="kaeros"] .site-footer__copyright {
	color: rgba(4, 4, 32, 0.55);
}
*/

/* --- Legacy Topic-08 / FSE block-pattern footer rules (retained) ------
 * Carried forward for any orphan markup surviving Topic 17 (e.g.
 * block-editor inserted content). Can be dropped once a sweep confirms
 * no `.mw-footer-list` references in production templates.
 * --------------------------------------------------------------------- */
.mw-footer-list {
	list-style: none !important;
	padding-left: 0;
	margin: 0;
}

.mw-footer-list li {
	margin: 0;
	list-style: none;
}

.mw-footer-list li::marker {
	content: "";
}

.mw-footer-list a {
	color: var(--mw-color-text-light, #FAF8FF) !important;
	opacity: 0.85;
	text-decoration: none;
	transition: opacity 0.15s ease, color 0.15s ease;
}

.mw-footer-list a:hover,
.mw-footer-list a:focus-visible {
	opacity: 1;
	color: var(--mw-color-primary, #6765E8) !important;
}

/* --- Legacy Topic-17 .site-footer__col--info / --contact / --social --
 * Pre-WP-3 column variants. Retained for any third-party / cached page
 * still emitting old class names. Visual rules are kept for graceful
 * degradation if the partial is rolled back during debug. */
.site-footer__links {
	list-style: none;
	padding: 0;
	margin: 0;
	display: grid;
	gap: 0.5rem;
}

.site-footer__links li {
	margin: 0;
	list-style: none;
}

.site-footer__links a {
	color: rgba(255, 255, 255, 0.85);
	text-decoration: none;
	font-size: 0.9375rem;
	transition: color 0.15s ease;
}

.site-footer__links a:hover,
.site-footer__links a:focus-visible {
	color: var(--mw-color-primary, #6765E8);
}

.site-footer__contact-line {
	margin: 0 0 0.5rem;
	font-size: 0.9375rem;
	line-height: 1.5;
	color: rgba(255, 255, 255, 0.85);
}

.site-footer__contact-line a {
	color: inherit;
	text-decoration: underline;
	text-decoration-color: rgba(255, 255, 255, 0.25);
	text-underline-offset: 0.2em;
	transition: color 0.15s ease, text-decoration-color 0.15s ease;
}

.site-footer__contact-line a:hover,
.site-footer__contact-line a:focus-visible {
	color: var(--mw-color-primary, #6765E8);
	text-decoration-color: currentColor;
}

.site-footer__contact-line--muted {
	color: rgba(255, 255, 255, 0.55);
	font-size: 0.875rem;
}
