/*
 * RRISCC front-end styling.
 *
 * Every rule below traces to a published guideline, because the club's members
 * and its editor are largely over 60 and the default theme is tuned for a
 * general audience. The sources are named inline so a future maintainer can
 * check the reasoning rather than guess at intent.
 *
 *   NIA/NLM "Making Your Web Site Senior Friendly" (2002)
 *     sans-serif not condensed; 12-14pt body; medium/bold weight; upper and
 *     lowercase; underline reserved for links; double-spaced body text; LEFT
 *     justified, never centred or fully justified; dark type on a light ground;
 *     no patterned backgrounds; avoid yellow, blue and green in proximity;
 *     large buttons that do not need precise pointing; consistent layout.
 *   NN/G homepage guidelines: tagline, 1-4 priority tasks, real content
 *     examples, keyword-first links, meaningful graphics, no auto-forwarding.
 *   WCAG 2.2 AA: 4.5:1 body contrast, 3:1 large text and UI, 24x24 targets,
 *     visible focus.
 *   Bringhurst / Baymard: 50-75 characters per line, ~66 ideal.
 */

/*
 * Self-hosted. The club's site must not send a visitor's IP address and
 * user agent to a third party just to render text, which is what linking
 * fonts.googleapis.com does on every page load for every visitor.
 * Files fetched once from Google Fonts (both families are SIL Open Font
 * License 1.1) and served from this plugin.
 */

@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('fonts/archivo-600-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('fonts/archivo-600-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('fonts/archivo-700-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('fonts/archivo-700-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('fonts/source-sans-3-400-italic-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('fonts/source-sans-3-400-italic-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('fonts/source-sans-3-400-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('fonts/source-sans-3-400-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('fonts/source-sans-3-600-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('fonts/source-sans-3-600-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('fonts/source-sans-3-700-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('fonts/source-sans-3-700-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ---------------------------------------------------------------- tokens -- */
:root {
	/* Iron oxide and slate, taken from rock and shadow rather than from a
	   stock palette. Deliberately not the cream-and-terracotta default.
	   NIA warns that yellow, blue and green are hard to tell apart in close
	   proximity, so the accent is a red-orange that never sits beside them. */
	--rr-paper:      #fbfbf9;
	--rr-paper-2:    #f1efea;
	--rr-paper-3:    #e5e2db;
	--rr-ink:        #111820;   /* 16.9:1 on paper */
	--rr-ink-2:      #3d4954;   /*  8.2:1 on paper */
	--rr-ink-3:      #5c6772;   /*  5.4:1 on paper, the lightest text used */
	--rr-accent:     #a33b14;   /*  6.4:1 on paper */
	--rr-accent-ink: #ffffff;
	--rr-slate:      #243746;
	--rr-rule:       #d3cfc6;
	--rr-focus:      #0b6b8a;

	--rr-measure: 66ch;         /* Bringhurst's ideal line length */
	--rr-tap: 44px;             /* WCAG 2.2 asks 24px; 44px is the comfortable
	                               target for hands that are less steady */
	--rr-body: 1.125rem;        /* 18px: research puts 16px at the floor and
	                               18px as the recommendation for 50+ readers */
	--rr-leading: 1.75;         /* the NIA checklist says "double space all body
	                               text"; 1.75 is that, short of looking broken */
}

@media (prefers-color-scheme: dark) {
	:root:not([data-theme="light"]) {
		--rr-paper:   #12171c;
		--rr-paper-2: #1a2129;
		--rr-paper-3: #232c36;
		--rr-ink:     #e9eae7;
		--rr-ink-2:   #c2c8cd;
		--rr-ink-3:   #9aa3ad;
		--rr-accent:  #f08a5b;   /* lightened so it still clears 4.5:1 on dark */
		--rr-accent-ink: #12171c;
		--rr-slate:   #b9c6d1;
		--rr-rule:    #33404c;
		--rr-focus:   #6fc7e6;
	}
}
:root[data-theme="dark"] {
	--rr-paper:   #12171c;
	--rr-paper-2: #1a2129;
	--rr-paper-3: #232c36;
	--rr-ink:     #e9eae7;
	--rr-ink-2:   #c2c8cd;
	--rr-ink-3:   #9aa3ad;
	--rr-accent:  #f08a5b;
	--rr-accent-ink: #12171c;
	--rr-slate:   #b9c6d1;
	--rr-rule:    #33404c;
	--rr-focus:   #6fc7e6;
}

/* ------------------------------------------------------------ typography -- */
/* NIA: "Use a sans serif typeface, such as Helvetica, that is not condensed.
   Avoid the use of serif, novelty, and display typefaces." Both faces here are
   open, wide sans; Source Sans 3 has a large x-height, which is what carries
   legibility at distance and at low contrast sensitivity. */
body {
	font-family: "Source Sans 3", "Source Sans Pro", -apple-system,
	             "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
	font-size: var(--rr-body);
	line-height: var(--rr-leading);
	color: var(--rr-ink);
	background: var(--rr-paper);
	-webkit-text-size-adjust: 100%;
}
h1, h2, h3, h4,
.wp-block-post-title,
.wp-site-blocks .wp-block-site-title {
	font-family: Archivo, "Source Sans 3", -apple-system, "Segoe UI",
	             Roboto, Arial, sans-serif;
	font-weight: 700;
	line-height: 1.15;
	letter-spacing: -0.012em;
	color: var(--rr-ink);
	text-wrap: balance;
}
/* NIA: "Present body text in upper and lowercase letters. Use all capital
   letters and italics in headlines only." Nothing here is set in all caps
   except short eyebrow labels, which carry no sentence content. */
p, li { max-width: var(--rr-measure); }
.rr-wide p, .rr-wide li { max-width: none; }

/* NIA: "Left justified text is optimal for older adults." This overrides the
   centred headings some block themes apply by default. */
.rr-home :is(h1, h2, h3, p, li) { text-align: left; }

/* NIA: "Reserve underlining for links." */
a { color: var(--rr-accent); text-underline-offset: 0.18em; }
a:hover { text-decoration-thickness: 2px; }
u { text-decoration: none; }

/* WCAG 2.4.7. The theme's default ring is thin and low contrast. */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
	outline: 3px solid var(--rr-focus);
	outline-offset: 2px;
	border-radius: 2px;
}

/* Bypass block, WCAG 2.4.1. Visible the moment it takes focus. */
.rr-skip {
	position: absolute; left: -9999px; top: 0; z-index: 9999;
	background: var(--rr-ink); color: var(--rr-paper);
	padding: 0.75rem 1.25rem; font-weight: 700; text-decoration: none;
}
.rr-skip:focus { left: 0; }

/* ---------------------------------------------------------------- header -- */
.wp-site-blocks .wp-block-site-title a {
	color: var(--rr-ink);
	text-decoration: none;
	font-size: clamp(1.15rem, 2.4vw, 1.5rem);
	font-weight: 700;
}
/* NN/G guideline 2: a tagline that explicitly summarises what the site does.
   The theme hides the description by default at small sizes; it is the single
   most load-bearing sentence on the page for a first-time visitor. */
.rr-idbox { display: flex; flex-direction: column; gap: 0.1rem; }
.rr-tagline,
.wp-block-site-tagline {
	color: var(--rr-ink-2);
	font-size: 1rem;
	line-height: 1.4;
	margin-block-start: 0.15rem;
	max-width: 46ch;
	font-weight: 400;
}
@media (max-width: 46rem) { .rr-tagline { display: none; } }
/* NIA: large targets that "do not require precise mouse movements". */
.wp-block-navigation .wp-block-navigation-item__content {
	min-height: var(--rr-tap);
	display: flex; align-items: center;
	padding-inline: 0.55rem;
	color: var(--rr-ink);
	font-weight: 600;
	text-decoration: none;
}
.wp-block-navigation .wp-block-navigation-item__content:hover {
	color: var(--rr-accent);
	text-decoration: underline;
	text-decoration-thickness: 2px;
}
.wp-block-navigation .current-menu-item > .wp-block-navigation-item__content {
	color: var(--rr-accent);
	box-shadow: inset 0 -3px 0 var(--rr-accent);
}

/* ------------------------------------------------------------- home bands -- */
/* Full-bleed colour, contained content. Text still stops at 66ch inside this
   container: the wide box is for cards and figures, not for prose. */
.rr-band {
	padding-block: clamp(2.5rem, 5.5vw, 4.5rem);
	padding-inline: max(clamp(1.25rem, 5vw, 3rem), calc((100% - 66rem) / 2));
}
.rr-band > * {
	margin-inline: 0 !important;
	max-width: none;
}
.rr-band > * + * { margin-block-start: 1.15rem; }
.rr-band > .rr-eyebrow + h2 { margin-block-start: 0.15rem; }
/* prose keeps its measure, anchored left rather than centred in the column */
.rr-band > :is(p, ul, ol) { max-width: var(--rr-measure); }
/* these are layout grids, not prose, so the reading measure must not apply */
.rr-band > :is(.rr-people, .rr-tasks, .rr-figures, .rr-meet) { max-width: none; }
.rr-band > :is(h1, h2, h3) { max-width: 20ch; }
.rr-band > .rr-lede { max-width: 58ch; }
.rr-band > .rr-eyebrow { max-width: none; }
.rr-band > .rr-open { max-width: 64ch; }
.rr-band > .rr-stamp { max-width: 62ch; }
.rr-band--tint  { background: var(--rr-paper-2); }
.rr-band--deep  { background: var(--rr-slate); }
/* The deep band paints its own ground and ink, so it reads the same in both
   themes rather than inverting into low contrast. */
.rr-band--deep { background: #243746; }
.rr-band--deep :is(h2, h3, p, li, dt, dd) { color: #fbfbf9; }
.rr-band--deep .rr-eyebrow { color: #ffbc9a; }
.rr-band + .rr-band--tint { border-block-start: 1px solid var(--rr-rule); }

/* Eyebrow labels. Short, so all caps is within the NIA rule for headlines. */
.rr-eyebrow {
	font-family: Archivo, sans-serif;
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: var(--rr-accent);
	margin-block-end: 0.4rem;
}

/* ---- identity ------------------------------------------------------------ */
.rr-home.rr-band { padding-block: clamp(3rem, 7vw, 5.5rem); }

.rr-lede {
	font-size: clamp(1.2rem, 2.4vw, 1.45rem);
	line-height: 1.55;
	color: var(--rr-ink-2);
	max-width: 60ch;
}
.rr-h1 { font-size: clamp(2rem, 5.2vw, 3.15rem); max-width: 17ch; }
.rr-band > h2 { font-size: clamp(1.5rem, 3.2vw, 2.05rem); max-width: 24ch; }

/* The single most useful fact the club has: anyone may attend, and attending
   costs nothing. Given its own object so it cannot be skimmed past. */
.rr-open {
	display: flex; gap: 0.9rem; align-items: flex-start;
	border-left: 5px solid var(--rr-accent);
	background: var(--rr-paper-2);
	padding: 1rem 1.15rem;
	max-width: 62ch;
	font-size: 1.0625rem;
}
.rr-open strong { color: var(--rr-ink); }

/* ---- the meeting card: the thing most visitors came for ------------------ */
.rr-meet {
	background: var(--rr-paper);
	border: 2px solid var(--rr-ink);
	padding: clamp(1.15rem, 3vw, 1.75rem);
}
.rr-meet dl { display: grid; grid-template-columns: max-content 1fr;
              gap: 0.5rem 1.15rem; margin: 0; }
.rr-meet dt {
	font-family: Archivo, sans-serif; font-weight: 700;
	font-size: 0.8125rem; letter-spacing: 0.08em; text-transform: uppercase;
	color: var(--rr-ink-3); padding-block-start: 0.28rem;
}
.rr-meet dd { margin: 0; font-size: 1.0625rem; color: var(--rr-ink); }
.rr-meet dd strong { font-size: 1.15rem; }
@media (max-width: 34rem) {
	.rr-meet dl { grid-template-columns: 1fr; gap: 0.15rem; }
	.rr-meet dd { margin-block-end: 0.7rem; }
}

/* ---- buttons: NIA asks for large targets; WCAG 2.2 asks 24px minimum ----- */
.wp-block-button__link {
	min-height: var(--rr-tap);
	display: inline-flex; align-items: center; justify-content: center;
	padding: 0.6rem 1.35rem;
	font-weight: 700;
	font-size: 1.0625rem;
	border-radius: 3px;
	text-decoration: none;
	background: var(--rr-accent);
	color: var(--rr-accent-ink);
	border: 2px solid var(--rr-accent);
}
.wp-block-button__link:hover { background: var(--rr-ink); border-color: var(--rr-ink); color: var(--rr-paper); }
.is-style-outline > .wp-block-button__link,
.wp-block-button.is-style-outline > .wp-block-button__link {
	background: transparent; color: var(--rr-ink); border: 2px solid var(--rr-ink);
}
.is-style-outline > .wp-block-button__link:hover { background: var(--rr-ink); color: var(--rr-paper); }

/* ---- the three priority tasks (NN/G: "emphasize the top 1-4 tasks") ------ */
.rr-tasks { display: grid; gap: 1.15rem; grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); }
.rr-task {
	background: var(--rr-paper);
	border: 1px solid var(--rr-rule);
	border-block-start: 4px solid var(--rr-accent);
	padding: 1.25rem 1.25rem 1.4rem;
	display: flex; flex-direction: column; gap: 0.5rem;
}
.rr-task :is(h2, h3) { font-size: 1.2rem; margin: 0; max-width: none; }
.rr-task p  { margin: 0; color: var(--rr-ink-2); font-size: 1rem; max-width: none; }
.rr-task .rr-more { margin-block-start: auto; padding-block-start: 0.6rem; font-weight: 700; }

/* ---- real content: what people actually talked about --------------------- */
.rr-talks { list-style: none; margin: 0; padding: 0; display: grid; gap: 0; }
.rr-talks li {
	display: grid; grid-template-columns: 4.5rem 1fr; gap: 0 1.15rem;
	padding-block: 0.85rem;
	border-block-end: 1px solid var(--rr-rule);
	max-width: none;
}
.rr-talks li:last-child { border-block-end: 0; }
.rr-talks .rr-yr {
	font-variant-numeric: tabular-nums;
	font-family: Archivo, sans-serif; font-weight: 700;
	color: var(--rr-accent);
}
.rr-talks .rr-who { font-weight: 700; color: var(--rr-ink); }
.rr-talks .rr-what { color: var(--rr-ink-2); }
@media (max-width: 30rem) {
	.rr-talks li { grid-template-columns: 1fr; }
	.rr-talks .rr-yr { margin-block-end: 0.15rem; }
}

/* ---- the archive figures ------------------------------------------------- */
.rr-figures { display: grid; gap: 1.15rem; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); }
.rr-fig { border-block-start: 3px solid var(--rr-accent); padding-block-start: 0.7rem; }
.rr-fig b {
	display: block;
	font-family: Archivo, sans-serif;
	font-size: clamp(1.9rem, 4.5vw, 2.5rem);
	font-weight: 700; line-height: 1.05;
	font-variant-numeric: tabular-nums;
	color: var(--rr-ink);
}
.rr-fig span { color: var(--rr-ink-2); font-size: 1rem; }
.rr-band--deep .rr-fig b { color: var(--rr-paper); }
.rr-band--deep .rr-fig span { color: var(--rr-paper-3); }
.rr-band--deep .rr-fig { border-block-start-color: var(--rr-paper-3); }
.rr-band--deep a { color: #ffd0bb; }

/* ---- photo band: caption carries the credit, per NN/G "meaningful graphics" */
.rr-band.rr-photo { padding-block: 0; padding-inline: 0; }
.rr-band.rr-photo > * { max-width: none; margin-inline: 0 !important; }
.rr-photo figure { margin: 0; }
.rr-photo img {
	width: 100%; height: auto; display: block;
	max-height: 34rem; object-fit: cover; object-position: center 62%;
}
.rr-photo figcaption {
	max-width: 66rem;
	margin-inline: auto;
	padding-inline: clamp(1.25rem, 5vw, 3rem);
}
.rr-photo figcaption {
	font-size: 0.95rem; color: var(--rr-ink-3); padding-block-start: 0.6rem;
}

/* ---- contact ------------------------------------------------------------- */
.rr-people { list-style: none; margin: 0; padding: 0; display: grid;
             gap: 0.85rem; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); }
.rr-people li { max-width: none; }
.rr-people .rr-role {
	display: block; font-size: 0.8125rem; letter-spacing: 0.08em;
	text-transform: uppercase; font-weight: 700; color: var(--rr-ink-3);
}
.rr-people .rr-name { font-weight: 700; font-size: 1.0625rem; }

/* ---- freshness stamp: tells a visitor the club is still going ------------ */
.rr-stamp { font-size: 0.95rem; color: var(--rr-ink-3); }

/* --------------------------------------------------- interior page design -- */
/*
 * The 23 migrated pages are 1997 documents. Their presentational markup was
 * stripped on import, which left them as unstyled prose, so they are given a
 * proper reading layout here rather than being hand-edited one at a time.
 * The same NIA rules that govern the front page apply: left justified, wide
 * leading, generous type, dark on light.
 */

/* The theme centres the page title while the body is left justified, which
   reads as two documents stacked on each other.
   The theme also gives constrained children `margin-inline: auto`, so any
   element given a max-width here has its BOX centred even though its text is
   left aligned. That is why the title, the headings and the paragraphs each
   started at a different x. Every child is anchored to the column's left edge;
   the column itself is what stays centred in the window. */
.wp-block-post-title,
.wp-block-post-content > *,
.wp-block-post-content > .alignwide {
	margin-inline-start: 0 !important;
	margin-inline-end: auto !important;
}

.wp-block-post-title,
.wp-block-post-title.has-text-align-center {
	text-align: left;
	font-size: clamp(1.9rem, 4.4vw, 2.7rem);
	line-height: 1.12;
	max-width: 20ch;
	margin-block-end: 1.75rem;
	padding-block-end: 1rem;
	border-block-end: 3px solid var(--rr-accent);
}

.wp-block-post-content { font-size: var(--rr-body); line-height: var(--rr-leading); }
.wp-block-post-content :is(p, h2, h3, h4, li) { text-align: left; }
.wp-block-post-content :is(p, li) { max-width: var(--rr-measure); }
.wp-block-post-content > * + * { margin-block-start: 1.15rem; }

/* Headings inside the imported documents. These were <b> and <big> runs in the
   source, promoted to real headings on import. */
.wp-block-post-content :is(h2, h3, h4) {
	font-family: Archivo, "Source Sans 3", sans-serif;
	font-weight: 700;
	line-height: 1.2;
	max-width: 28ch;
	margin-block: 2.25rem 0.75rem;
	color: var(--rr-ink);
}
.wp-block-post-content h2 { font-size: clamp(1.35rem, 2.8vw, 1.7rem); }
.wp-block-post-content h3 { font-size: 1.2rem; }
.wp-block-post-content > :is(h2, h3):first-child { margin-block-start: 0; }

/* Images. In the source these sat in <center> tags with fixed pixel widths and
   often a hand-drawn border baked into the file. */
.wp-block-post-content img {
	height: auto;
	max-width: 100%;
	border-radius: 2px;
}
.wp-block-post-content p > img:only-child {
	display: block;
	margin-block: 1.75rem;
}
.wp-block-post-content a:has(> img) { display: inline-block; }
.wp-block-post-content a:has(> img):focus-visible { outline-offset: 4px; }

/* Several pages are photo galleries of loose thumbnails with no list markup. */
.wp-block-post-content p:has(img + img) {
	display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: flex-start;
	max-width: none;
}
.wp-block-post-content p:has(img + img) img { margin-block: 0; }

.wp-block-post-content :is(ul, ol) { padding-inline-start: 1.5rem; }
.wp-block-post-content li + li { margin-block-start: 0.4rem; }

.wp-block-post-content blockquote {
	border-inline-start: 4px solid var(--rr-rule);
	padding-inline-start: 1.15rem;
	margin-inline-start: 0;
	color: var(--rr-ink-2);
}

/* Wide content scrolls in its own box rather than pushing the page sideways. */
.wp-block-post-content table {
	border-collapse: collapse;
	display: block;
	overflow-x: auto;
	max-width: 100%;
	font-size: 1rem;
}
.wp-block-post-content :is(td, th) {
	border: 1px solid var(--rr-rule);
	padding: 0.5rem 0.7rem;
	text-align: left;
	vertical-align: top;
}
.wp-block-post-content th { background: var(--rr-paper-2); font-weight: 700; }

/* Long documents (the by-laws run to 600 words of numbered clauses) need the
   breathing room the NIA checklist asks for between sections. */
.wp-block-post-content hr {
	border: 0; height: 1px; background: var(--rr-rule); margin-block: 2.25rem;
}

/* An email address typed as plain text in 1997 is still the club's contact
   route, so make the real links obvious. */
.wp-block-post-content a { text-decoration: underline; }

/* The archives read better with the same top and bottom room as the front page */
.wp-block-post-content:last-child { padding-block-end: 2rem; }

/* NIA: "Avoid automatically scrolling text." Nothing here animates, but the
   theme and any future block might, so honour the user's setting outright. */
@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;
	}
}

/* ----------------------------------------------------------------- print -- */
@media print {
	.wp-block-navigation, .rr-skip, .wp-block-search { display: none; }
	body { font-size: 12pt; color: #000; background: #fff; }
}

/* ---------------------------------------------------------------- footer -- */
/* Replaces Twenty Twenty-Five's placeholder footer, which linked to Blog, FAQs,
   Shop, Patterns, Themes and Authors. None of those exist here, and a footer of
   dead links reads as an abandoned site. */
.rr-foot {
	background: var(--rr-paper-2);
	border-block-start: 1px solid var(--rr-rule);
	padding-block: clamp(2.25rem, 5vw, 3.25rem) 1.25rem;
	padding-inline: max(clamp(1.25rem, 5vw, 3rem), calc((100% - 66rem) / 2));
}
/* The template part group uses the theme's constrained layout, which gives each
   child the narrow content width and centres it. The footer sets its own column
   with padding, exactly as the bands above do. */
.rr-foot > * { max-width: none; margin-inline: 0 !important; width: 100%; }

.rr-foot-inner {
	display: grid; gap: 1.75rem 3rem;
	grid-template-columns: minmax(18rem, 26rem) 1fr;
	align-items: start;
}
@media (max-width: 46rem) { .rr-foot-inner { grid-template-columns: 1fr; } }
.rr-foot-name {
	font-family: Archivo, sans-serif; font-weight: 700;
	font-size: 1.15rem; margin: 0 0 0.4rem; color: var(--rr-ink);
}
.rr-foot-note { margin: 0; color: var(--rr-ink-2); font-size: 0.975rem; max-width: 48ch; }
.rr-foot-nav ul {
	list-style: none; margin: 0; padding: 0;
	display: grid; gap: 0.15rem 1.5rem;
	grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
}
.rr-foot-nav li { max-width: none; }
.rr-foot-nav a {
	display: block; min-height: var(--rr-tap);
	display: flex; align-items: center;
	color: var(--rr-ink); text-decoration: none; font-weight: 600;
}
.rr-foot-nav a:hover { color: var(--rr-accent); text-decoration: underline; text-decoration-thickness: 2px; }
.rr-foot-legal {
	display: flex; flex-wrap: wrap; gap: 0.35rem 1.5rem;
	justify-content: space-between;
	margin-block-start: 2rem; padding-block-start: 1rem;
	border-block-start: 1px solid var(--rr-rule);
	color: var(--rr-ink-3); font-size: 0.9rem;
}
.rr-foot-legal p { margin: 0; max-width: none; }

/* The 1997 pages ended with a FrontPage button graphic linking back to the
   index. Those became text links on import; this makes them read as a way out
   of the page rather than as body copy. */
.wp-block-post-content .rr-back {
	margin-block-start: 2.5rem;
	padding-block-start: 1.15rem;
	border-block-start: 1px solid var(--rr-rule);
	max-width: none;
}
.wp-block-post-content .rr-back a {
	display: inline-flex; align-items: center; gap: 0.45rem;
	min-height: var(--rr-tap);
	font-weight: 700;
	text-decoration: none;
	color: var(--rr-accent);
}
.wp-block-post-content .rr-back a::before { content: "\2190"; font-size: 1.15em; }
.wp-block-post-content .rr-back a:hover { text-decoration: underline; text-decoration-thickness: 2px; }

/* A photograph the club referenced that no longer exists anywhere: not in the
   mirror, and never captured by the Wayback Machine. Shown as a note rather
   than as a broken-image icon, which would read as a fault in this site rather
   than a loss that predates it. */
.rr-lost {
	display: inline-block;
	padding: 0.5rem 0.8rem;
	border: 1px dashed var(--rr-rule);
	border-radius: 2px;
	background: var(--rr-paper-2);
	color: var(--rr-ink-3);
	font-size: 0.95rem;
	font-style: italic;
}

/* Archive rows are not page titles. This applies whether or not the meta
   wrapper (.rr-bk / .rr-mt) is present: one meeting names no speaker, topic or
   venue, so its row has no wrapper, and without this it rendered at display
   size in the accent colour among 39 ordinary rows. */
:is(.rr-liblist, .rr-meetlist) .wp-block-post-title {
	font-size: 1.0625rem;
	line-height: 1.3;
	margin: 0;
	max-width: none;
	font-weight: 700;
	border: 0;
	padding-block-end: 0;
	color: var(--rr-ink);
}
:is(.rr-liblist, .rr-meetlist) .wp-block-post-title a {
	color: var(--rr-ink);
	text-decoration: none;
}
:is(.rr-liblist, .rr-meetlist) .wp-block-post-title a:hover {
	color: var(--rr-accent);
	text-decoration: underline;
}

/* Meeting details, standing in for the theme's empty "Written by in" byline. */
.rr-meta {
	display: grid;
	grid-template-columns: max-content 1fr;
	gap: 0.4rem 1.25rem;
	margin: 0 0 2rem;
	padding: 1rem 1.15rem;
	background: var(--rr-paper-2);
	border-inline-start: 4px solid var(--rr-accent);
	max-width: 62ch;
}
.rr-meta dt {
	font-family: Archivo, sans-serif; font-weight: 700;
	font-size: 0.8125rem; letter-spacing: 0.08em; text-transform: uppercase;
	color: var(--rr-ink-3); padding-block-start: 0.18rem;
}
.rr-meta dd { margin: 0; color: var(--rr-ink); }
.rr-meta .rr-note { color: var(--rr-ink-3); font-style: italic; }
@media (max-width: 34rem) {
	.rr-meta { grid-template-columns: 1fr; gap: 0.1rem; }
	.rr-meta dd { margin-block-end: 0.6rem; }
}

/* --------------------------------------------------------- photo galleries -- */
/*
 * The photo pages lay their images out in 1997 tables: two columns, one
 * photograph and its caption per cell, with the caption's line breaks typed by
 * hand as <br>. Those breaks are the author's, so they are kept; what changes
 * is that the cell now reads as a caption rather than as broken body text, and
 * the table reflows as a responsive grid instead of forcing two fixed columns
 * onto a phone.
 */
.wp-block-post-content table:has(img) {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(17rem, 1fr));
	gap: 1.5rem;
	border-collapse: separate;
	overflow: visible;      /* the generic table rule scrolls; a grid must not */
	width: 100%;
	max-width: none;
	margin-block: 1.75rem;
}
.wp-block-post-content table:has(img) :is(tbody, thead, tr) { display: contents; }
.wp-block-post-content table:has(img) td {
	display: flex;
	flex-direction: column;
	gap: 0.6rem;
	border: 1px solid var(--rr-rule);
	border-radius: 3px;
	padding: 0.85rem;
	background: var(--rr-paper);
	vertical-align: top;
}
/* the source is full of spacer cells holding a single &nbsp; */
.wp-block-post-content table:has(img) td:empty { display: none; }
.wp-block-post-content table:has(img) td img {
	width: 100%;
	height: auto;
	margin: 0;
	border-radius: 2px;
}
/* the caption: the text that follows the image inside the cell */
.wp-block-post-content table:has(img) td {
	font-size: 0.95rem;
	line-height: 1.45;
	color: var(--rr-ink-2);
}
.wp-block-post-content table:has(img) td a { text-decoration: none; }
.wp-block-post-content table:has(img) td a:has(img) { display: block; }

@media (max-width: 30rem) {
	.wp-block-post-content table:has(img) { grid-template-columns: 1fr; }
}

/* ---------------------------------------------------------------- library -- */
/*
 * 1,733 records. The default archive gave ten per page in reverse alphabetical
 * order with no search, which is 174 pages and no way to find anything. Search
 * comes first, subjects second, and the list itself is dense enough to scan.
 */
.rr-lib .rr-band > * { margin-inline: 0 !important; }

.rr-search { max-width: 46rem; margin-block-start: 1.75rem; }
.rr-search label {
	display: block;
	font-family: Archivo, sans-serif; font-weight: 700;
	font-size: 0.8125rem; letter-spacing: 0.09em; text-transform: uppercase;
	color: var(--rr-accent); margin-block-end: 0.45rem;
}
.rr-search-row { display: flex; gap: 0.6rem; flex-wrap: wrap; }
.rr-search input[type="search"] {
	flex: 1 1 22rem;
	min-height: var(--rr-tap);
	padding: 0.55rem 0.8rem;
	font: inherit;
	font-size: 1.0625rem;
	color: var(--rr-ink);
	background: var(--rr-paper);
	border: 2px solid var(--rr-ink);
	border-radius: 3px;
}
.rr-search input[type="search"]::placeholder { color: var(--rr-ink-3); }
.rr-search button {
	min-height: var(--rr-tap);
	padding: 0.55rem 1.4rem;
	font: inherit; font-weight: 700; font-size: 1.0625rem;
	color: var(--rr-accent-ink); background: var(--rr-accent);
	border: 2px solid var(--rr-accent); border-radius: 3px;
	cursor: pointer;
}
.rr-search button:hover { background: var(--rr-ink); border-color: var(--rr-ink); color: var(--rr-paper); }

.rr-subjects { margin-block-start: 2rem; }
.rr-subjects ul {
	list-style: none; margin: 0; padding: 0;
	display: flex; flex-wrap: wrap; gap: 0.5rem;
	max-width: none;
}
.rr-subjects li { max-width: none; }
.rr-subjects a {
	display: inline-flex; align-items: center; gap: 0.4rem;
	min-height: 2.25rem;
	padding: 0.3rem 0.7rem;
	border: 1px solid var(--rr-rule);
	border-radius: 999px;
	background: var(--rr-paper);
	color: var(--rr-ink);
	text-decoration: none;
	font-size: 0.95rem;
}
.rr-subjects a:hover { border-color: var(--rr-accent); color: var(--rr-accent); }
.rr-subjects .rr-n {
	font-variant-numeric: tabular-nums;
	color: var(--rr-ink-3); font-size: 0.85rem;
}

/* the catalogue itself: two lines per book, scannable, no import dates */
.rr-liblist .wp-block-post-template {
	list-style: none; margin: 0; padding: 0;
	display: grid; grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
	gap: 0;
}
.rr-liblist .wp-block-post-template > li {
	max-width: none;
	padding: 0.7rem 1rem 0.7rem 0;
	border-block-end: 1px solid var(--rr-rule);
}
/* The page-title rule higher up gives a title a rule beneath it. That is right
   for the one title on a page and wrong for 50 titles in a list, where it draws
   a line under every entry. */
.rr-bk :is(h2, .wp-block-post-title) {
	font-size: 1.0625rem;
	line-height: 1.3;
	margin: 0;
	max-width: none;
	font-weight: 600;
	border: 0;
	padding-block-end: 0;
}
.rr-bk :is(h2, .wp-block-post-title) a { color: var(--rr-ink); text-decoration: none; }
.rr-bk :is(h2, .wp-block-post-title) a:hover { color: var(--rr-accent); text-decoration: underline; }
.rr-bk-meta {
	margin: 0.15rem 0 0;
	font-size: 0.9rem;
	line-height: 1.4;
	color: var(--rr-ink-3);
	max-width: none;
}
.rr-bk-year { font-variant-numeric: tabular-nums; }
.rr-bk-meta .rr-sep { opacity: 0.5; padding-inline: 0.1rem; }

.rr-liblist .wp-block-query-pagination {
	margin-block-start: 2rem; padding-block-start: 1.25rem;
	border-block-start: 1px solid var(--rr-rule);
	gap: 0.75rem; flex-wrap: wrap;
}
.rr-liblist .wp-block-query-pagination a,
.rr-liblist .wp-block-query-pagination .current {
	display: inline-flex; align-items: center; justify-content: center;
	min-width: var(--rr-tap); min-height: var(--rr-tap);
	padding-inline: 0.6rem;
	text-decoration: none; font-weight: 700;
	border: 1px solid var(--rr-rule); border-radius: 3px;
	color: var(--rr-ink);
}
.rr-liblist .wp-block-query-pagination .current {
	background: var(--rr-ink); color: var(--rr-paper); border-color: var(--rr-ink);
}
.rr-liblist .wp-block-query-pagination a:hover { border-color: var(--rr-accent); color: var(--rr-accent); }

/* A book's catalogue record. Wider than the meeting card because subject
   headings and publisher names are long. */
.rr-meta.rr-book { max-width: 68ch; }
.rr-meta.rr-book dd a { color: var(--rr-accent); }
.rr-meta .rr-note { color: var(--rr-ink-3); font-style: italic; font-size: 0.95rem; }
.rr-meta .rr-sep { opacity: 0.5; padding-inline: 0.15rem; }

/* ------------------------------------------------------- meeting archive -- */
.rr-meetlist .wp-block-post-template {
	list-style: none; margin: 0; padding: 0;
	display: grid; grid-template-columns: repeat(auto-fill, minmax(24rem, 1fr));
	gap: 0;
}
.rr-meetlist .wp-block-post-template > li {
	max-width: none;
	padding: 0.8rem 1.25rem 0.8rem 0;
	border-block-end: 1px solid var(--rr-rule);
}
.rr-mt :is(h2, .wp-block-post-title) {
	font-size: 1.0625rem; line-height: 1.3; margin: 0; max-width: none;
	font-weight: 700; border: 0; padding-block-end: 0;
}
.rr-mt :is(h2, .wp-block-post-title) a { color: var(--rr-ink); text-decoration: none; }
.rr-mt :is(h2, .wp-block-post-title) a:hover { color: var(--rr-accent); text-decoration: underline; }
.rr-mt-meta {
	margin: 0.15rem 0 0; font-size: 0.9rem; line-height: 1.45;
	color: var(--rr-ink-3); max-width: none;
}
.rr-mt-who { color: var(--rr-ink-2); font-weight: 600; }
.rr-mt-off {
	color: var(--rr-accent); font-weight: 700;
	font-size: 0.8125rem; letter-spacing: 0.06em; text-transform: uppercase;
}
.rr-meetlist .wp-block-query-pagination { margin-block-start: 2rem; padding-block-start: 1.25rem;
	border-block-start: 1px solid var(--rr-rule); gap: 0.75rem; flex-wrap: wrap; }
.rr-meetlist .wp-block-query-pagination a,
.rr-meetlist .wp-block-query-pagination .current {
	display: inline-flex; align-items: center; justify-content: center;
	min-width: var(--rr-tap); min-height: var(--rr-tap); padding-inline: 0.6rem;
	text-decoration: none; font-weight: 700;
	border: 1px solid var(--rr-rule); border-radius: 3px; color: var(--rr-ink);
}
.rr-meetlist .wp-block-query-pagination .current {
	background: var(--rr-ink); color: var(--rr-paper); border-color: var(--rr-ink);
}
