/*
 * MagsBC component styles. colors_and_type.css holds tokens; this file
 * consumes them. Bump MAGSBC_STYLE_VER in functions.php on every change.
 */

body {
	margin: 0;
	font-family: var(--font-body);
	color: var(--fg);
	background: var(--bg);
	font-size: var(--type-body);
	font-weight: var(--weight-body);
	line-height: 1.5; /* measured live: 24px/16px on the "We advocate..." card paragraph */
}

/* Skip-to-content link (accessibility audit, Sept 10, 2026): off-screen
   until keyboard-focused, then drops into view above everything else. */
.skip-link {
	position: absolute;
	top: -100%;
	left: 8px;
	z-index: 1000;
	background: var(--magsbc-olive);
	color: var(--magsbc-white);
	padding: 12px 20px;
	border-radius: 0 0 4px 4px;
	text-decoration: none;
	font-weight: 700;
}

.skip-link:focus {
	top: 0;
}

/* Respect the OS-level reduced-motion preference for every hover/focus
   transition site-wide, rather than opting each one in individually. */
@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
}

/* Found Sept 10, 2026 while removing the highlight background from two
   page titles: there was no generic h1 rule anywhere in the theme at
   all. Every plain <h1> site-wide (About, Resources, Members, News,
   Jobs, People, Programs/Podcasts/Videos, single posts, the page.php
   fallback — anywhere that isn't one of the few pages with their own
   scoped h1 rule) had been rendering at the browser default (32px/700,
   Chrome's UA-stylesheet 2em/bold) instead of the real --type-h1/
   --weight-h1 tokens (48px/900) this whole time. Not visible before now
   because the pages that DID have a real 48px/900 title got it from a
   scoped rule or the highlight wrapper, not a shared base style. */
h1 {
	font-size: var(--type-h1);
	font-weight: var(--weight-h1);
	margin: 0 0 16px;
}

/* Sept 10, 2026: every plain text link on the site (Read More, Learn More,
   inline content links) had been wired to --cta (bright coral, meant for
   solid-fill buttons) instead of the kit's own dedicated, darker "Links"
   colour, which existed in the token file but was never actually used
   anywhere. This is the real default now; components that are solid-fill
   buttons override it explicitly with --cta as a *background*, not a text
   colour. */
/* Underline + rollover added per direction. Every "whole card is a link"
   component (news-grid__item-link, board-grid__item, resource-card,
   magazine-grid__item, program-card__link, etc.) and every button/pill
   already sets its own text-decoration:none directly on the anchor, so
   this only actually reaches plain inline/text links, as intended. */
a {
	color: var(--link);
	text-decoration: underline;
	text-underline-offset: 2px;
	transition: color 0.15s ease;
}

/* :not([class]) is deliberate, not decorative: a pseudo-class like :hover
   counts in the SAME specificity column as a plain class, so a bare
   "a:hover" (element + pseudo-class) actually OUTRANKS a class selector's
   own un-pseudo'd color rule (e.g. .site-header__cta { color: white })
   the moment a class-based component doesn't also declare its own
   :hover color. That's exactly what broke live: the header's "Become a
   Member!" button's white text flipped to coral on hover — the same
   coral as its own background — making the label invisible. Every
   styled component in this file has a class, so excluding classed
   anchors here scopes this rule to plain inline content links only,
   which was the actual intent all along. */
a:not([class]):hover,
a:not([class]):focus {
	color: var(--cta);
}

/*
 * Site-wide container standard. Sept 10, 2026: found three different
 * container systems in use (header max-width:1400px, hero with no
 * centering at all — just flat padding, so its content sat closer to the
 * true edge than everything else on a wide viewport — and footer/home-*
 * sections at 1200px). 1200px was already the dominant value used
 * everywhere on the homepage, so that's the standard everything else now
 * matches, not a new invented number.
 */
.container {
	max-width: 1200px;
	margin: 0 auto;
	padding: 0 24px;
}

/* Shared social icon glyphs (header + footer). Rewritten Sept 10, 2026 —
   were plain colored circles with no glyph at all; magsbc_social_icons()
   now prints a real inline SVG per platform, this just sizes/colors it. */
.social-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	border-radius: 50%;
	background: var(--cta);
	color: var(--magsbc-white);
	flex: 0 0 auto;
}

.social-icon svg {
	width: 16px;
	height: 16px;
}

/* Main header bar: logo left, nav center, CTA right. Rewritten Sept 10,
   2026 — submenus used to render as a permanently-expanded inline list,
   which inflated the nav's rendered width and pushed the CTA button off
   the right edge of the viewport. Fixed by positioning submenus
   absolutely (see .sub-menu below) so they no longer take up horizontal
   space in the closed state, plus min-width:0 on the flex children so the
   nav is actually allowed to shrink instead of forcing an overflow. */
.site-header {
	background: var(--magsbc-yellow);
}

.site-header__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
	padding: 16px 24px;
	max-width: 1200px; /* was 1400px — now matches the site-wide 1200px standard */
	margin: 0 auto;
}

.site-header__logo,
.site-header__nav {
	min-width: 0;
}

.site-header__logo img {
	display: block;
	max-height: 60px;
	width: auto;
}

.site-header__menu {
	display: flex;
	flex-wrap: wrap;
	gap: 24px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.site-header__menu li {
	position: relative;
}

.site-header__menu > li > a {
	color: var(--fg);
	text-decoration: none;
	font-weight: var(--weight-small);
	text-transform: none;
	font-size: var(--type-small);
	display: inline-flex;
	align-items: center;
	gap: 4px;
	white-space: nowrap;
	transition: color 0.15s ease;
}

.site-header__menu > li > a:hover,
.site-header__menu > li > a:focus {
	color: var(--cta);
}

/* Chevron on items with a submenu, matching the live site */
.site-header__menu li.menu-item-has-children > a::after {
	content: "";
	width: 6px;
	height: 6px;
	border-right: 1.5px solid currentColor;
	border-bottom: 1.5px solid currentColor;
	transform: rotate(45deg);
	margin-top: -3px;
}

/*
 * Sept 10, 2026: the dropdown had a real "dead zone" bug — margin-top:8px
 * left an 8px unhoverable gap between the nav link and the dropdown box.
 * Since :hover is tied to the <li>'s own box, moving the mouse down into
 * that gap (which happens on almost any non-perfectly-vertical mouse path)
 * closed the menu before a submenu item could be clicked. Fixed by
 * removing the margin (the dropdown now sits flush against the parent,
 * so the hoverable area is continuous) and adding the visual gap back as
 * padding-top on the dropdown itself instead, which stays inside the
 * hoverable box.
 */
.site-header__menu .sub-menu {
	display: none;
	position: absolute;
	top: 100%;
	left: 0;
	min-width: 220px;
	background: var(--bg);
	border: 1px solid var(--border);
	border-radius: 4px;
	list-style: none;
	margin: 0;
	padding: 8px 0;
	z-index: 100;
}

.site-header__menu li:hover > .sub-menu,
.site-header__menu li:focus-within > .sub-menu {
	display: block;
}

.site-header__menu .sub-menu a {
	display: block;
	padding: 8px 16px;
	color: var(--fg);
	text-decoration: none;
	text-transform: none;
	font-weight: 400;
	font-size: 14px;
	white-space: normal;
	transition: background-color 0.15s ease, color 0.15s ease;
}

.site-header__menu .sub-menu a:hover,
.site-header__menu .sub-menu a:focus {
	background: var(--border);
	color: var(--cta);
}

.site-header__cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--cta);
	color: var(--magsbc-white);
	padding: 10px 24px;
	border-radius: 4px;
	text-decoration: none;
	font-weight: var(--weight-small);
	font-size: var(--type-small);
	text-transform: none;
	white-space: nowrap;
	flex: 0 0 auto;
	transition: filter 0.15s ease;
}

.site-header__cta:hover,
.site-header__cta:focus {
	filter: brightness(0.92);
}

/* Footer — funders section rebuilt Sept 10, 2026 as its own light-background
   section, separate from the dark footer proper. Confirmed by measuring
   element position on the live site: the funders row sits ~470px above
   where the dark background actually starts. Divider between them is the
   live site's own measured value: 10px solid var(--magsbc-teal). */
.site-footer__funders-section {
	background: var(--magsbc-white);
	border-bottom: 10px solid var(--magsbc-teal);
	padding: 64px 24px;
}

.site-footer__funders {
	display: flex;
	flex-wrap: wrap;
	gap: 48px 64px;
	align-items: center;
	justify-content: center;
	max-width: 1200px;
	margin: 0 auto;
}

.site-footer__funders img {
	max-height: 56px;
	width: auto;
}

.site-footer {
	background: var(--magsbc-dark-tone);
	color: var(--magsbc-white);
	padding: 56px 24px 32px;
}

/* Restyled Sept 10, 2026 against a direct reference: left-aligned
   brandmark and acknowledgement (were centred), copyright + social icons
   sharing one row at the very bottom.
   Simplified/corrected several more times, same day: the standalone
   contact column and the newsletter's fake email input are gone, the
   newsletter block folded into this single bottom section (paired with
   the brand column), and finally the contact address/phone/email folded
   into the copyright line itself rather than its own separate line —
   see the file docblock for the full history. */
.site-footer__bottom-top {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 40px;
	flex-wrap: wrap;
	margin-bottom: 28px;
}

.site-footer__newsletter {
	max-width: 380px;
	flex: 0 0 auto;
}

.site-footer__newsletter h2 {
	font-size: var(--type-h2);
	font-weight: var(--weight-h2);
	margin: 0 0 12px;
}

.site-footer__newsletter p {
	max-width: 320px;
	margin: 0 0 16px;
	font-size: var(--type-small); /* was inheriting body's 16px — matched to the rest of the footer's small text (acknowledgement, copyright, contact line), all 13px, per direction */
	line-height: 1.7;
	color: var(--fg-on-dark-muted);
}

/* Text link + arrow, not a solid pill button, per direct reference. */
.site-footer__newsletter-link {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	color: var(--magsbc-white);
	font-weight: 700;
	text-decoration: underline;
	text-underline-offset: 3px;
	transition: color 0.15s ease;
}

.site-footer__newsletter-link svg {
	width: 18px;
	height: 18px;
	transition: transform 0.15s ease;
}

.site-footer__newsletter-link:hover,
.site-footer__newsletter-link:focus {
	color: var(--magsbc-coral);
}

.site-footer__newsletter-link:hover svg,
.site-footer__newsletter-link:focus svg {
	transform: translateX(3px);
}

/* Outlined, not solid — matches the reference (a thin ring, not a
   filled coral circle like the header/footer icons used elsewhere). */
.site-footer__social {
	display: flex;
	gap: 12px;
}

.site-footer__social .social-icon {
	width: 32px;
	height: 32px;
	background: none;
	border: 1px solid var(--border-on-dark, rgba(255, 255, 255, 0.3));
	color: var(--magsbc-white);
	transition: border-color 0.15s ease, color 0.15s ease;
}

.site-footer__social .social-icon:hover,
.site-footer__social .social-icon:focus {
	border-color: var(--magsbc-coral);
	color: var(--magsbc-coral);
}

.site-footer__social .social-icon svg {
	width: 14px;
	height: 14px;
}

/* No longer has its own top border/padding — that was separating it
   from .site-footer__top, which is gone; .site-footer__funders-section's
   teal divider is now the only rule above this section. */
.site-footer__bottom {
	max-width: 1200px;
	margin: 0 auto;
}

.site-footer__brandmark {
	margin: 0 0 20px;
}

/* The logo file itself (assets-logo/HORIZONTAL/REVERSE/MAGSBC_H-R.png)
   has a transparent margin baked into its canvas — measured via its real
   pixel bounding box: 360x216 canvas, glyph content starting at x=30, so
   an 8.3% left inset before the mountain mark itself starts. At this
   height that's 13px, which left the "M" visibly indented versus the
   acknowledgement text below it — pulled back with a matching negative
   margin so the mark's own left edge lines up with the text. */
.site-footer__brandmark img {
	max-height: 96px; /* was 48px, then 72px — enlarged further per direction */
	width: auto;
	display: block;
	margin-left: -13px;
}

.site-footer__acknowledgement {
	max-width: 640px;
	margin: 0 0 28px;
	font-size: var(--type-small);
	line-height: 1.7;
	color: var(--fg-on-dark-muted);
	text-align: left;
}

.site-footer__meta-row {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	padding-top: 24px;
	border-top: 1px solid var(--border-on-dark, rgba(255, 255, 255, 0.14));
}

.site-footer__copyright {
	margin: 0;
	font-size: var(--type-small);
	color: var(--fg-on-dark-muted);
}

.site-footer__copyright a {
	color: var(--fg-on-dark-muted);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.site-footer__copyright a:hover { color: var(--magsbc-white); }

/* Homepage hero — yellow band + illustration, both section-level settings
   on the live site, not part of post_content. See front-page.php for the
   known fragility around where "hero" ends and "rest" begins. */
.home-hero {
	background-color: var(--magsbc-yellow);
	background-repeat: no-repeat;
	background-position: right center;
	background-size: contain;
	padding: 112px 24px; /* was 64px — more height per direction */
}

/* Was max-width:640px with no centering — sat flush at the section's flat
   24px padding, closer to the true edge than every other section on a
   wide viewport. Now uses the site-wide 1200px container; the 640px
   figure moves to the heading/subhead themselves so the text still
   doesn't stretch full-width. */
.home-hero__inner {
	max-width: 1200px;
	margin: 0 auto;
}

.home-hero__inner h2:first-child {
	max-width: 640px;
	font-size: var(--type-display); /* was the same clamp() hand-copied instead of using the token */
	font-weight: var(--weight-display);
	line-height: 1.2;
	margin: 0 0 16px;
}

.home-hero__inner h2:nth-child(2) {
	max-width: 640px;
	font-weight: var(--weight-lead);
	font-size: var(--type-lead);
	margin: 0 0 24px;
}

.home-hero__inner a {
	display: inline-block;
	background: var(--cta);
	color: var(--magsbc-white);
	padding: 12px 28px;
	border-radius: 4px;
	text-decoration: none;
	font-weight: 700;
}

.home-content {
	max-width: 1200px; /* was 1000px — this is the page.php-canvas container used by Programs/Podcasts/Videos/Non-Traditional Newsstands, so it needs to match the site-wide 1200px standard, not its own value */
	margin: 0 auto;
	padding: 48px 24px;
}

.home-content img {
	max-width: 100%;
	height: auto;
}

/* Homepage sections, rebuilt Sept 10, 2026 to match the real live layout.
   Every section below reuses --type-* tokens rather than ad hoc sizes. */

.home-intro {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 64px;
	max-width: 1200px;
	margin: 0 auto;
	padding: 80px 24px 48px;
	align-items: start;
}

.home-intro h2 {
	font-size: var(--type-h2);
	font-weight: var(--weight-h2);
	line-height: 1.2;
	margin: 0;
}

.home-intro p {
	/* Was --type-body — measured live against the real "MagsBC is
	   dedicated..." paragraph: 25.6px/300/38.4px line-height, i.e.
	   --type-lead, not body copy. */
	font-size: var(--type-lead);
	font-weight: var(--weight-lead);
	line-height: 1.5;
	margin: 0;
}

.home-cards {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 40px;
	max-width: 1200px;
	margin: 0 auto;
	padding: 24px 24px 80px;
}

/* Filled-background icon badge, one per intro card — added Sept 10, 2026
   per direction to give these four cards a little personality. Each
   variant just swaps the fill colour; kept off var(--cta) so it doesn't
   compete with real buttons on the page. */
.home-card__icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 48px;
	height: 48px;
	border-radius: 50%;
	color: var(--magsbc-white);
	margin-bottom: 16px;
}

.home-card__icon svg {
	width: 24px;
	height: 24px;
}

.home-card__icon--teal-light {
	background: var(--magsbc-teal-light);
	color: var(--magsbc-olive);
}

.home-card__icon--coral {
	background: var(--magsbc-coral);
}

/* Gold from the brand swatch (#ECBA3D) — deliberately distinct from
   --magsbc-yellow (#F9D777, used for CTAs/highlights elsewhere) so these
   four badges read as four genuinely different colours, not two near-
   duplicates of yellow. Scoped here rather than promoted to a token
   since it's only used for this one badge so far. */
.home-card__icon--gold {
	background: #ECBA3D;
	color: var(--magsbc-olive);
}

.home-card__icon--soft-green {
	background: var(--magsbc-soft-green);
}

.home-card h3 {
	font-size: var(--type-h3);
	font-weight: var(--weight-h3);
	margin: 0 0 12px;
}

.home-card p {
	font-size: var(--type-body);
	margin: 0 0 12px;
}

/* Sized to match every other card's "Read More"/"Learn More" link
   (.news-grid__read-more) — was body-sized (16px), the only "more" link
   on the site not on the shared small/uppercase/bold scale. */
.home-card__link {
	color: var(--link);
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	text-decoration: none;
}

.home-matter {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 64px;
	max-width: 1200px;
	margin: 0 auto;
	padding: 64px 24px;
	align-items: start; /* was center — reference shows content top-anchored per column, not vertically centred */
}

/* Corrected Sept 10, 2026: this section's post_content is one flat blob
   (heading, copy, a paragraph mixing both CTA buttons with the magazine
   image, then a caption) — laid directly against the 2-column grid above,
   the buttons+image and caption landed in whichever cell auto-flow put
   them rather than under the heading/copy. front-page.php now splits it
   into two explicit column wrappers instead. */
.home-matter__buttons {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	margin-top: 8px;
}

.home-matter h1 {
	font-size: var(--type-h1);
	font-weight: var(--weight-h1);
	margin: 0 0 16px;
}

/* Sept 10, 2026 correction: only the FIRST paragraph ("From culture and
   politics...") is lead-sized on the reference — the second paragraph
   ("Become part of a network...") and the "Check out TURNING A PAGE"
   caption are regular body copy. The original pass wrongly sized every
   paragraph in this section as lead. */
.home-matter__text p:first-of-type {
	font-size: var(--type-lead);
	font-weight: var(--weight-lead);
	line-height: 1.5;
	margin: 0 0 20px;
}

.home-matter p a {
	color: var(--link);
	font-weight: 700;
	text-decoration: none; /* was inheriting the browser default underline */
}

.home-matter img {
	width: 100%;
	height: auto;
	border-radius: 4px;
}

/* The "Check out TURNING A PAGE..." caption under the magazine spread —
   was inheriting oversized text with no rule of its own; pinned to body
   size like every other caption/plain paragraph on the site. */
.home-matter__image p {
	font-size: var(--type-body);
	font-weight: var(--weight-body);
	margin: 12px 0 0;
}

.home-matter a[href*="become-a-member"] {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--cta);
	color: var(--magsbc-white);
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	padding: 16px 32px;
	border-radius: 4px;
	text-decoration: none;
	margin-right: 12px;
	transition: filter 0.15s ease;
}

.home-matter a[href*="become-a-member"]:hover,
.home-matter a[href*="become-a-member"]:focus {
	filter: brightness(0.92);
}

.home-matter a[href$="/about/"] {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: none;
	color: var(--fg);
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	padding: 16px 32px;
	border: 1px solid var(--border);
	border-radius: 4px;
	text-decoration: none;
	transition: background-color 0.15s ease;
}

.home-matter a[href$="/about/"]:hover,
.home-matter a[href$="/about/"]:focus {
	background: var(--border);
}

.home-news {
	max-width: 1200px;
	margin: 0 auto;
	padding: 24px 24px 64px;
}

.home-news h2 {
	font-size: var(--type-h3);
	font-weight: var(--weight-h3);
	margin: 0 0 20px;
}

/* Generalized Sept 10, 2026 (was .home-news-scoped only) so the same
   native get_search_form() markup used on the News page and search
   results looks the same as the homepage's own search preview. */
.search-form {
	display: flex;
	gap: 0;
	margin: 24px 0 32px;
	max-width: 600px;
}

.search-field {
	flex: 1 1 auto;
	padding: 12px 16px;
	border: 1px solid var(--border);
	border-radius: 0;
	font-size: var(--type-body);
}

.search-submit {
	background: var(--magsbc-olive);
	color: var(--magsbc-white);
	border: none;
	padding: 12px 24px;
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	cursor: pointer;
	transition: filter 0.15s ease;
}

.search-submit:hover,
.search-submit:focus {
	filter: brightness(0.85);
}

.home-news .news-grid {
	padding: 0;
	margin: 0 0 32px;
}

/* Sept 10, 2026: made universal (was .home-news .news-grid__item only) —
   every other card type on the site (board-grid, resource-card,
   magazine-grid) is bordered/padded; the plain News/Jobs/Professional
   Development pages' cards were the one card type left unboxed. Padding
   normalized to 24px everywhere too — board-grid/magazine-grid had
   drifted to 20px while resource-card/sidebar-card used 24px. */
.news-grid__item {
	border: 1px solid var(--border);
	border-radius: 4px;
	padding: 24px;
}

.home-news__more {
	text-align: right;
}

.home-news__more-link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border: 1px solid var(--fg);
	color: var(--fg);
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	padding: 14px 28px;
	text-decoration: none;
	border-radius: 4px;
	transition: background-color 0.15s ease, color 0.15s ease;
}

.home-news__more-link:hover,
.home-news__more-link:focus {
	background: var(--fg);
	color: var(--magsbc-white);
}

/* Magazine category bands — full-bleed colour, real cover grids pulled by
   category via WP_Query, not hardcoded images. */
.home-band {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 48px;
	align-items: center;
	padding: 64px 24px;
}

.home-band--arts-culture { background: var(--magsbc-yellow); }
.home-band--writing-visual-arts { background: var(--magsbc-coral); }
.home-band--business-community { background: var(--magsbc-teal-light); }
.home-band--lifestyle-leisure { background: var(--magsbc-soft-green); }

.home-band__text {
	max-width: 480px;
	margin: 0 auto;
}

.home-band__text h2 {
	font-size: var(--type-h2);
	font-weight: var(--weight-h2);
	margin: 0 0 16px;
}

.home-band__text p {
	font-size: var(--type-body);
	margin: 0 0 20px;
}

.home-band__link {
	font-weight: 700;
	color: var(--magsbc-olive);
	text-decoration: none;
}

.home-band__grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 12px;
}

/* Sept 10, 2026: real magazine covers vary in aspect ratio (some near-
   square, some tall), so without a fixed crop the grid cells came out
   uneven heights row to row. Fixed 3:4 (standard magazine cover ratio)
   with object-fit:cover, same fix applied to .magazine-grid below.
   Corrected same day, second pass, per direct reference: a floating
   drop-shadow read as "lifted card" and didn't match the flatter,
   bordered-card language used everywhere else on the site (resource-
   card, board-grid, magazine-grid) — swapped for the same thin border +
   small radius instead. */
.home-band__grid a {
	display: block;
	aspect-ratio: 3 / 4;
	overflow: hidden;
	border: 1px solid rgba(20, 24, 10, 0.15);
	border-radius: 4px;
	background: var(--magsbc-white);
}

.home-band__grid img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.2s ease;
}

.home-band__grid a:hover img,
.home-band__grid a:focus img {
	transform: scale(1.05);
}

/* Testimonial carousel */
.home-testimonials {
	max-width: 800px;
	margin: 0 auto;
	padding: 80px 24px;
	text-align: center;
}

.home-testimonials h2 {
	font-size: var(--type-h1);
	font-weight: var(--weight-h1);
	margin: 0 0 40px;
}

.testimonial-slide blockquote {
	font-size: var(--type-lead);
	font-style: italic;
	font-weight: var(--weight-lead);
	margin: 0 0 24px;
}

.testimonial-slide__name {
	font-weight: 700;
	margin: 0;
}

.testimonial-slide__role {
	font-size: var(--type-small);
	text-transform: none;
	font-weight: var(--weight-small);
	opacity: 0.7;
	margin: 4px 0 0;
}

.testimonial-dots {
	display: flex;
	justify-content: center;
	gap: 8px;
	margin-top: 32px;
}

.testimonial-dot {
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--border);
	border: none;
	padding: 0;
	cursor: pointer;
}

.testimonial-dot.is-active {
	background: var(--fg);
}

/* Non-Traditional Newsstands' carousel additionally has prev/next arrow
   buttons either side of the slide (the homepage's own carousel uses
   dots only) — reuses the page's own two arrow <svg>s from post_content. */
.testimonial-carousel--arrows {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 16px;
}

.testimonial-content {
	flex: 1 1 auto;
	min-width: 0;
}

.testimonial-nav {
	flex: 0 0 auto;
	width: 32px;
	height: 32px;
	padding: 8px;
	border-radius: 50%;
	border: 1px solid var(--border);
	background: none;
	color: var(--fg);
	cursor: pointer;
	transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

.testimonial-nav svg {
	width: 100%;
	height: 100%;
	fill: currentColor;
}

.testimonial-nav:hover,
.testimonial-nav:focus {
	background: var(--cta);
	border-color: var(--cta);
	color: var(--magsbc-white);
}

/* Non-Traditional Newsstands — two-column hero (real photo left, title/
   copy right), matching the live site. The second <h1> in post_content
   is the mission-statement sentence; live renders it lede-sized, not as
   a second giant heading, so it's output as .page-lede here instead of
   literally re-emitting it as an <h1>. */
.ntn-hero {
	display: grid;
	grid-template-columns: minmax(240px, 380px) 1fr;
	gap: 48px;
	max-width: 1200px;
	margin: 0 auto;
	padding: 48px 24px;
	align-items: start;
}

.ntn-hero__image img {
	width: 100%;
	height: auto;
	display: block;
	border-radius: 4px;
}

.ntn-hero__text h1 {
	font-size: var(--type-h1);
	font-weight: var(--weight-h1);
	margin: 0 0 16px;
}

.ntn-hero__text p {
	margin: 0 0 16px;
}

.ntn-hero__cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--cta);
	color: var(--magsbc-olive);
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	padding: 12px 24px;
	border-radius: 4px;
	text-decoration: none;
	margin-top: 8px;
	transition: filter 0.15s ease;
}

.ntn-hero__cta:hover,
.ntn-hero__cta:focus {
	filter: brightness(0.95);
}

@media (max-width: 800px) {
	.ntn-hero {
		grid-template-columns: 1fr;
	}
}

@media (max-width: 800px) {
	.home-intro,
	.home-matter,
	.home-band {
		grid-template-columns: 1fr;
	}

	.home-cards {
		grid-template-columns: 1fr 1fr;
	}

	.home-band__grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

/* News landing page grid */
.news-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
	gap: 32px;
	max-width: 1200px;
	margin: 0 auto 32px;
	padding: 0 24px;
}

/* Professional Development and Jobs both nest this same .news-grid
   inside .site-main--with-sidebar's content column, which already
   provides the page's real gutter — the grid's own 24px padding on top
   of that pushed the cards 24px further right than the h1/lede above
   them, out of alignment with the rest of the page. */
.site-main--with-sidebar .news-grid {
	max-width: none;
	margin: 0 0 32px;
	padding: 0;
}

/* Sept 10, 2026: featured images were inconsistent card-to-card (some
   portrait, some landscape, no fixed ratio), and the title/link text was
   rendering as default unstyled blue/underlined browser link colour —
   the <h4> sits inside the thumbnail-and-title <a>, and nothing reset
   that anchor's inherited link styling. Fixed both: a fixed-ratio crop
   on every thumbnail, and an explicit colour/no-underline reset on the
   wrapping link.
   Corrected again Sept 10: the excerpt and "Read More" were outside that
   link, so only the photo+title were clickable. .news-grid__item-link now
   IS the card (front-page.php/page-news.php/page-professional-
   development.php put it directly on the <a>, not nested inside it),
   wrapping the thumb, title, excerpt and Read More label together, same
   "whole card is the link, photo zooms on rollover" treatment as
   .board-grid__item/.resource-card above. */
.news-grid__item-link {
	text-decoration: none;
	display: block;
}

.news-grid__thumb {
	display: block;
	aspect-ratio: 4 / 3;
	overflow: hidden;
	border-radius: 4px;
	border: 1px solid var(--border);
	margin-bottom: 12px;
}

.news-grid__thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.2s ease;
}

.news-grid__item-link:hover .news-grid__thumb img,
.news-grid__item-link:focus .news-grid__thumb img {
	transform: scale(1.05);
}

/* Rollover, per direction: title turns orange, card gets a very light
   grey wash — applied the same way across every "whole card is a link"
   type (news-grid, board-grid, resource-card, magazine-grid below).
   The card itself needs its own explicit color: without it, this being
   a bare <a> meant every child text (excerpt, in particular) inherited
   the sitewide link colour instead of body text colour, since only the
   h4 title had its own (hover-only) colour rule below — confirmed live,
   the excerpt was rendering fully orange, not just the title. */
.news-grid__item-link {
	color: var(--fg);
	transition: background-color 0.15s ease;
}

.news-grid__item-link:hover,
.news-grid__item-link:focus {
	background: var(--hover-wash);
}

.news-grid__item-link:hover h4,
.news-grid__item-link:focus h4 {
	color: var(--link);
}

.news-grid__item h4 {
	font-size: var(--type-h4);
	font-weight: var(--weight-h4);
	margin: 0 0 8px;
}

.news-grid__date {
	display: block;
	font-size: var(--type-small);
	font-weight: 700; /* bolded per direction — was the same weight as body text, easy to miss */
	color: var(--fg-muted, var(--fg));
	opacity: 0.7;
	margin: 0 0 8px;
}

.news-grid__read-more {
	color: var(--link);
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	text-decoration: none;
	transition: color 0.15s ease;
}

/* Corrected per direction: excerpt and Read More shouldn't change
   colour on rollover, just the title (and the whole-card background
   wash already provides a second, colour-independent cue). Underline
   alone still makes Read More's own rollover legible. */
.news-grid__item-link:hover .news-grid__read-more,
.news-grid__item-link:focus .news-grid__read-more {
	text-decoration: underline;
}

.news-pagination {
	display: flex;
	justify-content: center;
	gap: 8px;
	max-width: 1200px;
	margin: 0 auto 48px;
	padding: 0 24px;
}

.news-pagination a,
.news-pagination span {
	padding: 8px 14px;
	border: 1px solid var(--border);
	border-radius: 4px;
	text-decoration: none;
	color: var(--fg);
}

.news-pagination .current {
	background: var(--cta);
	border-color: var(--cta);
	color: var(--magsbc-white);
}

/* 404 */
.error-404 {
	display: flex;
	align-items: center;
	gap: 48px;
	max-width: 1000px;
	margin: 0 auto;
	padding: 64px 24px;
	flex-wrap: wrap;
}

.error-404__number {
	font-size: 8rem;
	font-weight: 900;
	line-height: 1;
}

.error-404__body h1 {
	margin-top: 0;
}

/* Icon library */
.icon-search {
	display: block;
	width: 100%;
	max-width: 400px;
	padding: 10px 16px;
	border: 1px solid var(--border);
	border-radius: 20px;
	font-size: var(--type-body); /* was hardcoded 16px, same value as the token */
	margin-top: 16px;
}

.icon-count {
	font-size: var(--type-small); /* was a hand-picked 13px, off the scale */
	opacity: 0.7;
	margin: 8px 0 0;
}

.icon-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
	gap: 4px;
	max-width: 1200px;
	margin: 24px auto 64px;
	padding: 0 24px;
}

.icon-grid__item {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 6px;
	padding: 16px 8px;
	background: none;
	border: 1px solid transparent;
	border-radius: 4px;
	cursor: pointer;
	font-family: var(--font-body);
}

.icon-grid__item:hover {
	border-color: var(--border);
}

.icon-grid__item img {
	width: 28px;
	height: 28px;
}

.icon-grid__item span {
	font-size: var(--type-micro);
	color: var(--fg);
	text-align: center;
	word-break: break-word;
	line-height: 1.3;
}

/* Removed Sept 10, 2026 per direction: Professional Development/Magazine
   Coach Program used to have a highlighter-style teal background behind
   the title (.page-title--highlight); both templates now just use a
   plain <h1>, styled by the standard rule below. */

/* About page — Board of Directors & Staff grid.
   Corrected Sept 10, 2026: the photo wasn't a link at all (only the
   separate "Read More" text was), inconsistent with every other card
   type on the site. Cards are now a single <a> wrapping photo + title +
   excerpt + the Read More label, same pattern as .magazine-grid__item —
   the whole card is clickable, with a zoom rollover on the photo so the
   image itself visibly responds to hover, matching the sweep applied to
   .resource-card, .news-grid__item and .magazine-grid__item below. */
.board-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 24px;
	margin: 32px 0 48px;
}

.board-grid__item {
	display: block;
	border: 1px solid var(--border);
	border-radius: 4px;
	padding: 24px; /* was 20px, normalized to match every other card type */
	color: var(--fg);
	text-decoration: none;
	transition: background-color 0.15s ease;
}

.board-grid__photo {
	display: block;
	aspect-ratio: 1 / 1;
	overflow: hidden;
	border-radius: 4px;
	border: 1px solid var(--border);
	margin-bottom: 16px;
}

.board-grid__photo img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.2s ease;
}

.board-grid__item:hover .board-grid__photo img,
.board-grid__item:focus .board-grid__photo img {
	transform: scale(1.05);
}

.board-grid__item:hover,
.board-grid__item:focus {
	background: var(--hover-wash);
}

.board-grid__item:hover h4,
.board-grid__item:focus h4 {
	color: var(--link);
}

.board-grid__item h4 {
	font-size: var(--type-h4);
	font-weight: var(--weight-h4);
	margin: 0 0 8px;
}

.board-grid__item p {
	margin: 0 0 8px;
}

/* Video grid — Videos page + Commitment to Inclusivity's YouTube lists.
   Real videos, no live iframes (dozens per page would be a real
   performance cost) — a thumbnail + play-button overlay linking out to
   the real video on YouTube instead. */
.video-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 20px;
	margin: 24px 0 40px;
}

.video-grid__item {
	display: block;
	min-width: 0;
}

.video-grid__item h3 {
	font-size: 1rem;
	line-height: 1.4;
	margin: 12px 0 0;
	color: var(--magsbc-dark-tone);
}

.video-grid__thumbnail {
	position: relative;
	display: block;
	aspect-ratio: 16 / 9;
	overflow: hidden;
	border-radius: 4px;
	border: 1px solid var(--border);
	background: var(--magsbc-dark-tone);
}

.video-grid__item img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.2s ease;
}

.video-grid__item:hover img,
.video-grid__item:focus img {
	transform: scale(1.05);
}

.video-grid__play {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 48px;
	height: 48px;
	color: var(--magsbc-white);
	filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.5));
	pointer-events: none;
}

.video-grid__play svg {
	width: 100%;
	height: 100%;
}

.video-category h2 {
	font-size: var(--type-h3);
	font-weight: var(--weight-h3);
	margin: 40px 0 0;
}

/* Resources page — icon cards. Same "whole card is the link, image
   zooms on rollover" treatment as .board-grid__item above. */
.resource-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 24px;
	max-width: 1200px;
	margin: 32px auto 64px;
	padding: 0 24px;
}

.resource-card {
	display: block;
	border: 1px solid var(--border);
	border-radius: 4px;
	padding: 24px;
	color: var(--fg);
	text-decoration: none;
	transition: background-color 0.15s ease;
}

/* Corrected Sept 10, 2026: these featured images are the site's own
   resource-topic icon graphics (a small glyph pre-composed on a big white
   500x282 canvas — confirmed by fetching the actual file, and confirmed
   identical on the live site's own resource cards), not photography. A
   border here drew a second box around mostly-white image content
   sitting inside the card's own border — a redundant nested frame the
   live reference doesn't have. Removed; the icon now sits directly on
   the card like the reference. */
.resource-card__thumb {
	display: block;
	aspect-ratio: 500 / 282;
	overflow: hidden;
	margin-bottom: 16px;
}

.resource-card__thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.2s ease;
}

.resource-card:hover .resource-card__thumb img,
.resource-card:focus .resource-card__thumb img {
	transform: scale(1.05);
}

.resource-card:hover,
.resource-card:focus {
	background: var(--hover-wash);
}

.resource-card:hover h4,
.resource-card:focus h4 {
	color: var(--link);
}

.resource-card h4 {
	font-size: var(--type-h4);
	font-weight: var(--weight-h4);
	margin: 0 0 8px;
}

.resource-card p {
	margin: 0 0 12px;
}

/* Programs page */
.programs-funding-note {
	color: var(--link);
	font-weight: 700;
}

.programs-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 24px;
	margin-top: 32px;
}

/* Redesigned per direct reference: filled light card (was bordered
   white), a status badge per program, left-aligned (was centred), and a
   pill-shaped "Learn More" button (was a plain rounded rect). */
.program-card {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	background: rgba(20, 24, 10, 0.05);
	border-radius: var(--radius-md);
	padding: 32px;
}

.program-card__badge {
	display: inline-flex;
	align-items: center;
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	letter-spacing: 0.02em;
	padding: 6px 16px;
	border-radius: var(--radius-pill, 999px);
	margin-bottom: 16px;
}

.program-card__badge--teal {
	background: var(--magsbc-teal-light);
	color: var(--magsbc-olive);
}

.program-card__badge--coral {
	background: var(--magsbc-coral);
	color: var(--magsbc-white);
}

.program-card h3 {
	font-size: var(--type-h2);
	font-weight: var(--weight-h2);
	margin: 0 0 20px;
}

.program-card p {
	margin: 0 0 16px;
}

.program-card__link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--cta);
	color: var(--magsbc-white);
	padding: 10px 24px;
	border-radius: var(--radius-pill, 999px);
	text-decoration: none;
	font-weight: var(--weight-small);
	font-size: var(--type-small);
	text-transform: none;
	margin-top: auto;
	transition: filter 0.15s ease;
}

.program-card__link:hover,
.program-card__link:focus {
	filter: brightness(0.92);
}

@media (max-width: 800px) {
	.programs-grid {
		grid-template-columns: 1fr;
	}
}

/* Members page — category filter + magazine grid */
.magazine-filters {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	max-width: 1200px; /* was 1000px, swept to the site-wide standard */
	margin: 0 auto 32px;
	padding: 0 24px;
}

/* Was briefly corrected to plain uppercase text tabs against a live
   reference; reverted back to pill buttons per direction. */
.magazine-filters a {
	display: inline-flex;
	align-items: center;
	color: var(--fg);
	text-decoration: none;
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	padding: 8px 20px;
	border: 1px solid var(--border);
	border-radius: var(--radius-pill, 999px);
	transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease;
}

.magazine-filters a:hover,
.magazine-filters a:focus {
	color: var(--cta);
	border-color: var(--cta);
}

.magazine-filters a.is-active {
	background: var(--cta);
	color: var(--magsbc-white);
	border-color: var(--cta);
}

.magazine-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 24px;
	max-width: 1200px; /* was 1000px, swept to the site-wide standard */
	margin: 0 auto 48px;
	padding: 0 24px;
}

/* Restyled Sept 10, 2026 to match the live reference: was a bare
   cover+name link with no description; now the same bordered card +
   Learn More treatment as .resource-card/.board-grid__item. */
.magazine-grid__item {
	display: block;
	border: 1px solid var(--border);
	border-radius: 4px;
	padding: 24px; /* was 20px, normalized to match every other card type */
	color: var(--fg);
	text-decoration: none;
	transition: background-color 0.15s ease;
}

.magazine-grid__item:hover,
.magazine-grid__item:focus {
	background: var(--hover-wash);
}

.magazine-grid__item:hover h4,
.magazine-grid__item:focus h4 {
	color: var(--link);
}

.magazine-grid__item h4 {
	font-size: var(--type-h4);
	font-weight: var(--weight-h4);
	margin: 0 0 8px;
}

.magazine-grid__item p {
	margin: 0 0 12px;
}

.magazine-grid__item .magazine-grid__cover {
	display: block;
	aspect-ratio: 3 / 4;
	overflow: hidden;
	border-radius: 4px;
	border: 1px solid var(--border);
	margin-bottom: 16px;
}

.magazine-grid__item img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.2s ease;
}

.magazine-grid__item:hover img,
.magazine-grid__item:focus img {
	transform: scale(1.05);
}

/* WooCommerce content. Deliberately keeps woocommerce_content() as the
   single source of truth (gallery, price, add-to-cart, variation
   selectors are WooCommerce's own logic, not reimplemented here) — this
   only rearranges the 3 real direct children of .product into 2 columns
   per direction: picture above the write-up on the left, tabs on the
   right. Confirmed the real DOM Sept 10, 2026: .product's direct
   children are always .woocommerce-product-gallery, .summary.entry-
   summary, .woocommerce-tabs, then .related.products — same order on
   every product checked, so this is safe to target by class alone. */
.woocommerce-content {
	max-width: 1200px; /* was 1000px, swept to the site-wide standard */
	margin: 0 auto;
	padding: 32px 24px;
}

.product {
	display: grid;
	/* minmax(0, 1fr), not bare 1fr — a bare 1fr track has an implicit
	   minimum of auto (its content's own min-content size), so the tabs
	   column (long paragraphs, form fields) was forcing itself wider
	   than 50% instead of actually splitting evenly. minmax(0, 1fr)
	   removes that implicit floor. */
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	gap: 40px;
	align-items: start;
}

/* The REAL cause of "the left/right columns aren't using their full
   width," found live: WooCommerce's own default stylesheet
   (woocommerce-layout.css) ships ".woocommerce div.product div.images"
   and "div.summary" at float:left/right + width:48% — a higher-
   specificity selector (3 classes + 2 elements) than our own
   ".product > .woocommerce-product-gallery" (2 classes), so it was
   still winning. That 48% computed against each element's OWN grid
   cell (not the whole row), shrinking the gallery and the summary
   column to under half of their already-50%-wide track — the
   width:100% fix below was necessary but not sufficient; THIS is what
   actually made both columns look like they were floating in a much
   wider, mostly-empty cell. !important is the right tool for
   overriding a third-party plugin's own baked-in layout CSS here, not
   a specificity workaround to avoid. */
.product > .woocommerce-product-gallery,
.product > .summary.entry-summary {
	float: none !important;
	width: auto !important;
}

.product > .woocommerce-product-gallery {
	grid-column: 1;
	grid-row: 1;
}

/* Some products' cover images are much smaller graphics than others
   (e.g. Affiliate Membership's is a small square, others are tall
   photo covers) — without an explicit width, the image just rendered at
   its own natural pixel size instead of filling its grid column, which
   looked like "the left column isn't using its full width" even though
   the column track itself was sized correctly all along. */
.product > .woocommerce-product-gallery img {
	width: 100%;
	height: auto;
	display: block;
	border-radius: 4px;
	border: 1px solid var(--border);
}

.product > .summary.entry-summary {
	grid-column: 1;
	grid-row: 2;
}

.product > .summary.entry-summary .price {
	color: var(--fg);
	font-size: var(--type-h3);
	font-weight: var(--weight-h3);
}

.product > .woocommerce-tabs {
	grid-column: 2;
	grid-row: 1 / 3;
	border: 1px solid var(--border);
	border-radius: 4px;
	padding: 24px 32px;
}

.product > .related.products {
	grid-column: 1 / -1;
	margin-top: 24px;
}

/* Related products was positioned as a grid child but the actual card
   loop inside it (WooCommerce's own ul.products/li.product markup) was
   never styled at all — left rendering with WooCommerce's bare default
   CSS, which reads as cramped/misaligned next to the rest of the site's
   card language. Matched to the same bordered-card treatment as
   .magazine-grid__item elsewhere. */
.related.products h2 {
	font-size: var(--type-h3);
	font-weight: var(--weight-h3);
	margin: 0 0 20px;
}

.related.products ul.products {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 24px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.related.products ul.products li.product {
	border: 1px solid var(--border);
	border-radius: 4px;
	padding: 24px;
}

.related.products ul.products li.product img {
	width: 100%;
	height: auto;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	display: block;
	border-radius: 4px;
	margin-bottom: 16px;
}

.related.products ul.products li.product a.woocommerce-loop-product__link {
	color: var(--fg);
	text-decoration: none;
	display: block;
}

.related.products ul.products li.product .woocommerce-loop-product__title {
	font-size: var(--type-h4);
	font-weight: var(--weight-h4);
	margin: 0 0 8px;
}

.related.products ul.products li.product .price {
	display: block;
	color: var(--fg-muted, var(--fg));
	margin-bottom: 16px;
}

.related.products ul.products li.product .button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--cta);
	color: var(--magsbc-white);
	padding: 8px 20px;
	border-radius: var(--radius-pill, 999px);
	text-decoration: none;
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	transition: filter 0.15s ease;
}

.related.products ul.products li.product .button:hover,
.related.products ul.products li.product .button:focus {
	filter: brightness(0.92);
}

.woocommerce-tabs ul.tabs {
	display: flex;
	gap: 24px;
	list-style: none;
	margin: 0 0 24px;
	padding: 0 0 16px;
	border-bottom: 1px solid var(--border);
}

.woocommerce-tabs ul.tabs li {
	margin: 0;
	padding: 0;
}

.woocommerce-tabs ul.tabs li a {
	color: var(--fg);
	opacity: 0.6;
	text-decoration: none;
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
}

.woocommerce-tabs ul.tabs li.active a {
	opacity: 1;
	color: var(--cta);
}

@media (max-width: 800px) {
	.product {
		grid-template-columns: 1fr;
	}

	.product > .woocommerce-product-gallery,
	.product > .summary.entry-summary,
	.product > .woocommerce-tabs {
		grid-column: 1;
		grid-row: auto;
	}
}

/* page.php's lede paragraph (the post excerpt, rendered directly under the
   title). Dead .page-hero/.page-content rules removed Sept 10 — the
   redesign dropped the colored hero band entirely; page.php now reuses
   .single-post/.site-main--with-sidebar like single.php does.
   Was a hand-typed 1.15rem/300 that didn't match anything real — swept
   Sept 10 to the actual measured --type-lead (25.6px/300/1.5), same
   value now used everywhere a lead paragraph appears. */
.page-lede {
	font-size: var(--type-lead);
	font-weight: var(--weight-lead);
	line-height: 1.5;
	margin: 0 0 24px;
}

/* Single post + sidebar layout, shared by single.php and the per-CPT
   singles that reuse the same sidebar cards. */
.site-main--with-sidebar {
	display: flex;
	gap: 40px;
	max-width: 1200px;
	margin: 0 auto;
	padding: 32px 24px;
	align-items: flex-start;
}

.single-post {
	flex: 1 1 auto;
	min-width: 0;
}

/* Single post featured image — added Sept 10, 2026 (there was none
   before), originally square/capped-width. Corrected same day, second
   pass, per direction: a consistent horizontal crop spanning the full
   content column instead. */
.single-post__thumb {
	display: block;
	aspect-ratio: 16 / 9;
	width: 100%;
	overflow: hidden;
	border-radius: 4px;
	border: 1px solid var(--border);
	margin-bottom: 24px;
}

.single-post__thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

/* Related Posts — under the article, scoped to the post's own category
   (see magsbc_related_posts()), separate from the sidebar's "More
   Posts" widget which is always All News regardless of context. */
.related-posts {
	margin-top: 48px;
	padding-top: 32px;
	border-top: 1px solid var(--border);
}

.related-posts h3 {
	font-size: var(--type-h3);
	font-weight: var(--weight-h3);
	margin: 0 0 20px;
}

/* Related Posts grid — per direction, 3 columns x 2 rows per "page",
   scrolling horizontally to reveal the next block rather than an
   ever-taller stack. grid-auto-columns is sized as an explicit fraction
   of the container (not a bare 1fr, which doesn't resolve sanely once a
   grid is allowed to overflow its container), so exactly 3 columns fit
   per screen and each scroll-snaps into place. */
.related-posts .news-grid {
	max-width: none;
	grid-auto-flow: column;
	grid-template-columns: none;
	grid-template-rows: repeat(2, auto);
	grid-auto-columns: calc((100% - 2 * 32px) / 3);
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	padding-bottom: 8px;
}

/* Both horizontal-scroll rows rely on the browser's default scrollbar
   otherwise, which most OSes hide until an active drag — with no other
   visual cue, there was nothing to suggest either row could scroll at
   all. A always-visible thin scrollbar fixes that (paired with the
   wheel-to-horizontal-scroll behaviour in magsbc_horizontal_scroll_script()). */
.more-magazines__row,
.related-posts .news-grid {
	scrollbar-width: thin;
	scrollbar-color: var(--border-strong) transparent;
}

.more-magazines__row::-webkit-scrollbar,
.related-posts .news-grid::-webkit-scrollbar {
	height: 8px;
}

.more-magazines__row::-webkit-scrollbar-track,
.related-posts .news-grid::-webkit-scrollbar-track {
	background: transparent;
}

.more-magazines__row::-webkit-scrollbar-thumb,
.related-posts .news-grid::-webkit-scrollbar-thumb {
	background: var(--border-strong);
	border-radius: 4px;
}

.related-posts .news-grid .news-grid__item-link {
	scroll-snap-align: start;
}

@media (max-width: 800px) {
	.related-posts .news-grid {
		grid-template-rows: none;
		grid-auto-columns: calc(100% - 48px);
	}
}

/* Affiliate, Associate & Supporting Members — the 6 real Affiliate orgs,
   card-ified to match the magazine members page's card treatment. No
   logos on file for these (unlike the magazine covers), so a simple
   text card rather than an image card. */
.affiliate-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
	gap: 16px;
	margin: 24px 0 32px;
}

.affiliate-card {
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	min-height: 80px;
	padding: 16px;
	border: 1px solid var(--border);
	border-radius: 4px;
	color: var(--fg);
	text-decoration: none;
	font-weight: 700;
	transition: border-color 0.15s ease, color 0.15s ease;
}

.affiliate-card:hover,
.affiliate-card:focus {
	border-color: var(--cta);
	color: var(--cta);
}

/* Native <details>/<summary> accordions — Become a Member's "Membership
   benefits" and "Membership Types" sections. Found Sept 10, 2026: these
   already exist as real, working, accessible HTML in post_content, each
   with its own pair of plus/minus <svg> icons and stray <br> tags
   (Elementor export artifacts). page-become-a-member.php now rebuilds
   each row's summary via magsbc_render_accordion_group() — real title
   text pulled out, icons swapped for magsbc_icon('minus')/('plus') from
   our own library, wrapped in a bordered .accordion-group per section
   (a light stroke around the whole thing, not just row dividers).
   Pattern (right-aligned icon in a circle, filled solid on hover/open,
   light zebra banding) follows the accordion already built on the KSA
   site — structure only, not its navy/orange palette. */
.accordion-group {
	border: 1px solid var(--border);
	border-radius: 4px;
	overflow: hidden;
	margin: 24px 0;
}

.accordion-group details {
	border-bottom: 1px solid var(--border);
}

.accordion-group details:last-of-type {
	border-bottom: none;
}

.accordion-group details:nth-of-type(even) {
	background: rgba(20, 24, 10, 0.03);
}

/* Per direction: the open row should stay visibly orange-tinted, not
   just its icon circle — this wins over the zebra tint above since it's
   a more specific selector regardless of odd/even. */
.accordion-group details[open] {
	background: rgba(244, 124, 103, 0.12);
}

.accordion-group summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	padding: 10px 20px;
	cursor: pointer;
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	text-transform: none;
	list-style: none;
	transition: background-color 0.15s ease;
}

.accordion-group summary::-webkit-details-marker,
.accordion-group summary::marker {
	display: none;
	content: '';
}

.accordion-group summary:hover,
.accordion-group summary:focus {
	background: rgba(20, 24, 10, 0.05);
}

.accordion-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	flex: 0 0 auto;
	border-radius: 50%;
	border: 1.5px solid var(--border);
	color: var(--fg);
	transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

.accordion-icon svg {
	width: 14px;
	height: 14px;
	fill: currentColor;
}

.accordion-group summary:hover .accordion-icon,
.accordion-group summary:focus .accordion-icon,
.accordion-group details[open] summary .accordion-icon {
	background: var(--cta);
	border-color: var(--cta);
	color: var(--magsbc-white);
}

/* First icon in the pair is minus (open state), second is plus (closed
   state) — only ever show the one matching the current state. */
.accordion-group details:not([open]) .accordion-icon svg:first-of-type {
	display: none;
}

.accordion-group details[open] .accordion-icon svg:last-of-type {
	display: none;
}

.accordion-group details > summary ~ * {
	margin-left: 20px;
	margin-right: 20px;
}

.accordion-group details > summary ~ *:last-child {
	margin-bottom: 20px;
}

/* Become a Member's 4 real membership-application images (Full/
   Affiliate/Associate/Supporting), each already linking to its own real
   WooCommerce product — sat one per line with no layout at all. */
.membership-type-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 24px;
	margin: 24px 0;
}

.membership-type-grid a {
	display: block;
}

.membership-type-grid img {
	width: 100%;
	height: auto;
	display: block;
	border-radius: 4px;
}

.single-post__sidebar {
	flex: 0 0 320px;
}

.sidebar-card {
	background: var(--magsbc-white);
	border: 1px solid var(--border);
	border-radius: 8px;
	padding: 24px;
	margin-bottom: 24px;
}

.sidebar-card__eyebrow {
	text-transform: none;
	font-size: var(--type-small);
	font-weight: var(--weight-small);
	color: var(--fg);
	margin: 0 0 8px;
}

.sidebar-card__icon {
	display: block;
	width: 32px;
	height: 32px;
	color: var(--fg);
	margin-bottom: 12px;
}

.sidebar-card__icon svg {
	width: 100%;
	height: 100%;
}

.sidebar-card__cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--cta);
	color: var(--magsbc-white);
	padding: 10px 20px;
	border-radius: 4px;
	text-decoration: none;
	font-weight: 700;
	margin-top: 8px;
	transition: filter 0.15s ease;
}

.sidebar-card__cta:hover,
.sidebar-card__cta:focus {
	filter: brightness(0.92);
}

/* Matches the live site: each sidebar card's button carries its own
   accent colour rather than all three being coral. */
.sidebar-card__cta--yellow {
	background: var(--magsbc-yellow);
	color: var(--magsbc-olive);
}

.sidebar-card__cta--green {
	background: var(--magsbc-soft-green);
	color: var(--magsbc-white);
}

/* Post tags — added per direction, sat below the article content. */
.post-tags {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-top: 24px;
}

.post-tags__tag {
	display: inline-flex;
	align-items: center;
	color: var(--fg);
	text-decoration: none;
	font-size: var(--type-small);
	padding: 6px 16px;
	border: 1px solid var(--border);
	border-radius: var(--radius-pill, 999px);
	transition: color 0.15s ease, border-color 0.15s ease;
}

.post-tags__tag:hover,
.post-tags__tag:focus {
	color: var(--cta);
	border-color: var(--cta);
}

/* Grey divider removed per direction; icons (from the same icon library
   as everywhere else) plus a bold uppercase label make the row obvious
   on its own without needing a rule to frame it. */
.share-buttons {
	display: flex;
	gap: 12px;
	align-items: center;
	margin-top: 32px;
}

.share-buttons__label {
	font-weight: var(--weight-small);
	font-size: var(--type-small);
	text-transform: none;
	letter-spacing: 0.04em;
	margin-right: 4px;
}

.share-buttons__icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: 50%;
	background: var(--cta);
	color: var(--magsbc-white);
	flex: 0 0 auto;
	transition: filter 0.15s ease;
}

.share-buttons__icon svg {
	width: 18px;
	height: 18px;
}

.share-buttons__icon:hover,
.share-buttons__icon:focus {
	filter: brightness(0.92);
}

/* Simplified per direction: just a square thumbnail and the title, no
   excerpt or "Read more" link. */
.more-posts__item {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-bottom: 16px;
}

.more-posts__thumb {
	display: block;
	flex: 0 0 auto;
	width: 56px;
	aspect-ratio: 1 / 1;
	overflow: hidden;
	border-radius: 4px;
}

.more-posts__thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.more-posts__item h4 {
	margin: 0;
	min-width: 0;
}

/* Member magazine single — cover image + content, no sidebar */
.magazine-single {
	display: flex;
	gap: 40px;
	max-width: 1200px;
	margin: 0 auto;
	padding: 32px 24px;
	align-items: flex-start;
}

/* Was a fixed 280px column; changed to an even 50/50 split with the body
   per direction. flex-basis:0 (not a bare fixed width) so both sides
   actually divide the remaining space evenly regardless of content. */
.magazine-single__cover {
	flex: 1 1 0;
}

.magazine-single__cover img {
	width: 100%;
	height: auto;
	display: block;
}

.magazine-single__body {
	flex: 1 1 0;
	min-width: 0;
}

/* More Magazines — added to the bottom of a magazine's own page, a
   single horizontally-scrolling row (same 1200px container as the rest
   of the page, but overflowing sideways) rather than another stacked
   grid, since a whole row of covers already fits on one screen. */
.more-magazines {
	max-width: 1200px;
	margin: 0 auto;
	padding: 0 24px 48px;
}

.more-magazines h3 {
	font-size: var(--type-h3);
	font-weight: var(--weight-h3);
	margin: 0 0 20px;
}

.more-magazines__row {
	display: flex;
	gap: 24px;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	padding-bottom: 8px;
}

.more-magazines__item {
	flex: 0 0 180px;
	scroll-snap-align: start;
	display: block;
	color: var(--fg);
	text-decoration: none;
}

.more-magazines__cover {
	display: block;
	aspect-ratio: 3 / 4;
	overflow: hidden;
	border-radius: 4px;
	border: 1px solid var(--border);
	margin-bottom: 12px;
}

.more-magazines__cover img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.2s ease;
}

.more-magazines__item:hover .more-magazines__cover img,
.more-magazines__item:focus .more-magazines__cover img {
	transform: scale(1.05);
}

.more-magazines__item h4 {
	font-size: var(--type-h4);
	font-weight: var(--weight-h4);
	margin: 0;
}

.more-magazines__item:hover h4,
.more-magazines__item:focus h4 {
	color: var(--link);
}

.single-post__headshot img {
	border-radius: 50%;
	width: 96px;
	height: 96px;
	object-fit: cover;
}

/* Shared heading roles across archives, content pages and single templates. */
h2{font-size:var(--type-h2);font-weight:var(--weight-h2)}
h3{font-size:var(--type-h3);font-weight:var(--weight-h3)}
h4{font-size:var(--type-h4);font-weight:var(--weight-h4)}
