/* a11y — DECISIONS 076 (Carlos 2026-09-19/20): the accessibility overlay is ruled out; the theme itself
   meets WCAG 2.1 AA. Baseline measured 2026-09-20 (axe-core + Lighthouse, five stagings): the contrast bulk was
   the brand color carrying white text on FILLED buttons. Carlos's ruling per store is a TOKEN the child theme
   sets — never a literal here:

     --gv-button-fill-ink   the label color of a FILLED element-button (add-to-cart is NOT one: it is the
                            inverted style, brand text on white — DECISIONS 080 replaces it). Got Vape / GVWS:
                            #111 on their #FF8B00 (8.04:1, option B). Unset = the harvest's own white.

   Expressed the way the harvested settings.css expresses the FILL: on the element, with the same three color
   schemes excluded (their buttons carry the scheme's own colors — a dark label on a dark scheme background is
   the exact defect a blanket rule would create), at one class more of specificity than the harvest's (0,2,0),
   and as the element token, so a section's inline `--element-button-color-secondary` pair (the slideshow's)
   still wins. Enqueued unconditionally (bin/gv-css-guard.php). The harvest is never edited. */

.element-button:not(.element-button--inverted, .element-button--plain, .element-button--transparent):not(.color-scheme-1 *, .color-scheme-2 *, .color-scheme-3 *) {
	--element-button-color-secondary: var(--gv-button-fill-ink, var(--root-color-secondary, #ffffff));
}

/* The announcement bar is a slider: Expanse marks the non-selected slides aria-hidden while their links stay in
   the tab order (the axe aria-hidden-focus finding, one per hidden slide on every page). A hidden slide's links
   leave the tab order with it; the selected slide's come back the moment aria-hidden flips. */
.announcement-slider__slide[aria-hidden="true"] a,
.announcement-slider__slide[aria-hidden="true"] button {
	visibility: hidden;
}

/* The editorial eyebrows and card meta (the harvested article instance CSS and the author page's compiled rules:
   #777 on white = 4.47:1, a hair under AA). One class more of specificity than the harvest's single-class rules;
   the harvest is never edited. The author page's meta list colors its <li> through the list. */
.gvws-doc-eyebrow.gvws-doc-eyebrow,
.gvws-article-guide-shell__eyebrow.gvws-article-guide-shell__eyebrow,
.gvws-resource-card__eyebrow.gvws-resource-card__eyebrow,
.gvws-login-eyebrow.gvws-login-eyebrow,
.gvws-author-profile__card-eyebrow.gvws-author-profile__card-eyebrow,
.gvws-author-resource-card__eyebrow.gvws-author-resource-card__eyebrow,
.gvws-author-resource-card__meta.gvws-author-resource-card__meta {
	color: #6d6d6d;
}

/* The article aside's "View Product →" is 12 px black-weight text painted in the brand accent on the tile's #f7f7f7
   (each store's gvws-custom.css: Exxus green 2.08:1, Sutra blue 2.2:1, the orange stores 2.3:1, Wulf red 4.4:1 —
   none reaches AA). The label takes the body ink (17:1) and keeps the brand as a 2 px underline in the store's
   accent token, so the tile still reads as that store's without the accent carrying the words. */
.gvws-article-aside-product__cta.gvws-article-aside-product__cta {
	color: #111111;
	text-decoration: underline;
	text-decoration-color: var(--gv-accent, currentColor);
	text-decoration-thickness: 2px;
	text-underline-offset: 3px;
}


/* The skip link (header.php, first in the body) is Expanse's `visually-hidden` anchor and NOTHING reveals it — no
   `:focus` rule in the harvest, none on the live stores either — so a sighted keyboard user Tabs through an
   invisible first stop (WCAG 2.4.7, measured on the Wulf staging 2026-09-20: focused, 1×1, clip 0). On focus it
   surfaces as a small fixed card at the top-left corner in the store's own ink and ground with the harvest's focus
   color as its ring; wp-glue's admin-bar offset (`body.admin-bar .skip-link:focus`, one class more) still wins. */
.skip-link:focus {
	position: fixed;
	top: 0;
	left: 0;
	z-index: 10000;
	width: auto;
	height: auto;
	margin: 0;
	padding: 12px 18px;
	clip: auto;
	overflow: visible;
	background: var(--color-secondary, #ffffff);
	color: var(--color-primary, #111111);
	outline: 3px solid var(--color-focus, #4a9afc);
	outline-offset: -3px;
	text-decoration: underline;
	font-weight: 700;
}

/* A sold-out variant chip (Expanse `label.disabled > input[type=radio] + .element-button`) stays clickable — picking
   it shows "Sold out" — so it is an active control, and its label is mixed 70 % toward the chip's ground
   (`--element-button-shade-text--disabled`): #b3b3b3 on #e0e0e0, 1.58:1 (axe, the Got Vape PDPs with a mostly
   sold-out option). 35 % keeps the chip muted and lifts the label to ≈#595959 on the same ground, 5.3:1. The harvest
   reads the token on the element, so setting it there is the only change; the ground shade stays. */
.disabled > input[type="radio"] + .element-button {
	--element-button-shade-text--disabled: 35%;
}
