/*
 * TEDA blocks — presentation for the P08 blocks (D2: markup ships in teda-core,
 * styling lives here). Everything consumes --teda-* / --theme-* tokens; no colour,
 * size or font is hardcoded (house rule 3). Explicit dimensions everywhere so the
 * blocks add no layout shift.
 */

/* --- Shared: constrained inner, eyebrow, buttons, empty state ------------- */
.teda-hero__shell,
.teda-hero-page__inner,
.teda-stat-band__row,
.teda-stat-band__note,
.teda-stat-band__qualitative,
.teda-focus-grid__head,
.teda-focus-grid .ct-posts-shortcode,
.teda-cta-band__inner,
.teda-triptych {
	max-width: var(--theme-content-width, 1200px);
	margin-inline: auto;
	padding-inline: var(--teda-gutter, 24px);
}

.teda-eyebrow {
	font-family: var(--teda-font-heading);
	font-weight: 800;
	font-size: 0.78rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	display: inline-flex;
	align-items: center;
	gap: 10px;
}
.teda-eyebrow::before {
	content: "";
	width: 28px;
	height: 3px;
	background: currentColor;
	display: block;
}

.teda-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: var(--teda-tap);
	padding: 0 1.3em;
	border-radius: var(--teda-radius);
	font-family: var(--teda-font-heading);
	font-weight: 800;
	line-height: 1.1;
	text-decoration: none;
	border: 2px solid transparent;
}
.teda-btn--lg { min-height: calc(var(--teda-tap) + 8px); padding: 0 1.6em; font-size: 1.02rem; }
.teda-btn--white { background: var(--teda-white); color: var(--teda-green); }
.teda-btn--white:hover, .teda-btn--white:focus { background: var(--teda-sand); color: var(--teda-green); }
.teda-btn--brown { background: var(--teda-brown); color: var(--teda-white); }
.teda-btn--brown:hover, .teda-btn--brown:focus { background: var(--teda-brown-dark); color: var(--teda-white); }
.teda-btn--ghost { background: transparent; color: var(--teda-white); border-color: currentColor; }
.teda-btn--ghost-b { background: transparent; color: var(--teda-brown); border-color: currentColor; }
.teda-actions { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 28px; }

.teda-card {
	border: 2px solid var(--teda-sand-deep);
	border-radius: var(--teda-radius);
	background: var(--teda-white);
	padding: 24px 22px;
}
.teda-card h3 { color: var(--teda-green); margin: 6px 0 10px; }
.teda-card p { color: var(--teda-muted); margin-bottom: 10px; }
.teda-eyebrow--small { font-size: 0.72rem; margin-bottom: 2px; }

.teda-about__intro,
.teda-donate-page__intro,
.teda-donate-page__faq,
.teda-about__team { margin-top: 24px; margin-bottom: 24px; }
.teda-about__cards,
.teda-about__principles,
.teda-about__principles--secondary,
.teda-about__team-grid,
.teda-donate-page__cards { gap: 18px; }
.teda-about__quote {
	border-left: 6px solid var(--teda-green);
	background: var(--teda-green-pale);
	padding: 24px 26px;
	border-radius: var(--teda-radius);
	margin-top: 28px;
}
.teda-about__quote p { color: var(--teda-ink); font-size: 1.04rem; margin: 0; }

.teda-faq { display: grid; gap: 14px; margin-top: 20px; }
.teda-faq__item {
	border: 2px solid var(--teda-sand-deep);
	border-radius: var(--teda-radius);
	background: var(--teda-white);
	padding: 16px 18px;
}
.teda-faq__item summary { cursor: pointer; font-family: var(--teda-font-heading); font-weight: 800; color: var(--teda-green); }
.teda-faq__item p { margin-top: 12px; margin-bottom: 0; color: var(--teda-muted); }

.teda-empty {
	border: 2px dashed var(--teda-sand-deep);
	border-radius: var(--teda-radius);
	padding: 52px 30px;
	text-align: center;
	background: var(--teda-white);
}
.teda-empty h3 { color: var(--teda-green); margin-bottom: 10px; }
.teda-empty p { color: var(--teda-muted); max-width: 44ch; margin-inline: auto; }

/* --- Hero (teda/hero) ----------------------------------------------------- */
.teda-hero__slider {
	position: relative;
	min-height: min(660px, 86vh);
	min-height: min(660px, 86dvh);
	background: var(--teda-green-deep);
	overflow: hidden;
	display: block;
}
.teda-hero__slide {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: flex-end;
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.5s ease;
}
.teda-hero__slide.is-on { opacity: 1; visibility: visible; }
@media (prefers-reduced-motion: reduce) { .teda-hero__slide { transition: none; } }
.teda-hero__bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 32%; }
/* Dark scrim: legibility for display type without hiding the photo (SPEC §3.3). */
.teda-hero__slide::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(90deg, rgba(30, 10, 0, 0.72) 0%, rgba(30, 10, 0, 0.34) 55%, rgba(30, 10, 0, 0.12) 100%);
}
.teda-hero__shell { position: relative; z-index: 1; width: 100%; padding-top: 96px; padding-bottom: 120px; }
.teda-hero__eyebrow { color: var(--teda-white); margin-bottom: 22px; text-shadow: 0 2px 10px rgba(30, 10, 0, 0.85); }
.teda-hero .teda-hero__title {
	color: var(--teda-white);
	font-size: clamp(2.2rem, 5.8vw, 4.1rem);
	max-width: 30ch;
	margin-bottom: 20px;
	text-shadow: 0 3px 18px rgba(30, 10, 0, 0.9), 0 1px 3px rgba(30, 10, 0, 0.9);
}
.teda-hero__body {
	color: var(--teda-white);
	font-size: clamp(0.95rem, 1.8vw, 1.12rem);
	max-width: 100ch;
	margin-bottom: 32px;
	text-shadow: 0 2px 12px rgba(30, 10, 0, 0.95);
}
.teda-hero__acts { display: flex; gap: 14px; flex-wrap: wrap; }
.teda-hero__ctl { position: absolute; inset: auto 0 26px 0; z-index: 2; }
.teda-hero__ctl-inner {
	max-width: var(--theme-content-width, 1200px);
	margin-inline: auto;
	padding-inline: var(--teda-gutter, 24px);
	display: flex;
	align-items: center;
	gap: 6px;
}
.teda-hero__nav {
	width: var(--teda-tap); height: var(--teda-tap);
	display: grid; place-items: center;
	background: rgba(255, 255, 255, 0.14); color: var(--teda-white);
	border: 0; border-radius: var(--teda-radius); cursor: pointer;
}
.teda-hero__nav:hover, .teda-hero__nav:focus { background: rgba(255, 255, 255, 0.28); }
.teda-hero__dots { display: flex; gap: 4px; margin-left: 6px; }
.teda-hero__dot {
	width: var(--teda-tap); height: var(--teda-tap);
	border: 0; background: transparent; cursor: pointer;
	display: grid; place-items: center; padding: 0;
}
.teda-hero__dot i { display: block; width: 34px; height: 4px; background: rgba(255, 255, 255, 0.45); }
.teda-hero__dot[aria-selected="true"] i { background: var(--teda-white); }
/* Mobile: the desktop title clamp pins to its 2.2rem floor on a phone (5.8vw of
   390px is only 22.6px), so the type is re-declared here to actually scale — and
   the shell is pulled down to sit just above the control bar (26px offset + 44px
   tap target = 70px), so the whole banner reads within the first screen. */
@media (max-width: 720px) {
	.teda-hero__bg { object-position: center 20%; }
	.teda-hero__shell { padding-top: 40px; padding-bottom: 78px; }
	.teda-hero__eyebrow { font-size: 0.75rem; margin-bottom: 10px; }
	.teda-hero .teda-hero__title {
		font-size: clamp(1.4rem, 6.8vw, 1.9rem);
		max-width: 18ch;
		margin-bottom: 10px;
	}
	/* Held at 0.9rem rather than a proportional cut: -25% here would be ~11px,
	   below comfortable reading size on a photographic background. */
	.teda-hero__body { font-size: 0.9rem; margin-bottom: 16px; }
}

/* --- Page hero (teda/hero-page) ------------------------------------------- */
/* Background is green, the primary brand colour. Blue and brown are retained,
   selectable secondary variants. */
.teda-hero-page { background: var(--teda-green); color: var(--teda-white); }
.teda-hero-page--blue { background: var(--teda-blue); }
.teda-hero-page--brown { background: var(--teda-brown); }
.teda-hero-page__inner { padding-top: 26px; padding-bottom: 24px; }
.teda-hero-page__crumb { font-size: 0.85rem; margin-bottom: 14px; }
/* Force white on the green hero, overriding Blocksy's dark breadcrumb colour on
   the current-page span + links (WCAG 1.4.3 — dark ink on brown was 1.42:1). */
.teda-hero-page .teda-hero-page__crumb,
.teda-hero-page__crumb a,
.teda-hero-page__crumb span,
.teda-hero-page__crumb [itemprop="name"] { color: var(--teda-white); }
.teda-hero-page__crumb a { opacity: 0.85; }
.teda-hero-page .teda-hero-page__title { color: var(--teda-white); font-size: var(--teda-fs-h1); margin-bottom: 10px; }
.teda-hero-page__lead { color: var(--teda-white); max-width: 60ch; font-size: 1.1rem; opacity: 0.92; }

/* --- Stat band (teda/stat-band) ------------------------------------------- */
/* The .teda-stat__value <b> carries data-teda-stat-count for the upward
   counter animation (blocks-b.js). If JS is absent or the user prefers
   reduced motion, the static server-rendered value shows. */
.teda-stat-band { background: var(--teda-green); color: var(--teda-white); padding-block: 40px 22px; }
.teda-stat-band__row { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 4px; }
.teda-stat { text-align: center; padding: 8px 12px; border-left: 2px solid rgba(255, 255, 255, 0.16); }
.teda-stat:first-child { border-left: 0; }
.teda-stat__value {
	font-family: var(--teda-font-display);
	font-size: var(--teda-fs-h3);
	font-variant-numeric: tabular-nums;
	display: block; line-height: 1; color: var(--teda-white);
}
.teda-stat__label {
	font-size: 0.8rem; letter-spacing: 0.13em; text-transform: uppercase;
	font-weight: 700; display: block; margin-top: 8px;
	color: color-mix(in srgb, var(--teda-white) 82%, var(--teda-green));
}
.teda-stat-band__note, .teda-stat-band__qualitative { text-align: center; }
.teda-stat-band__note { font-size: 0.78rem; margin-top: 18px; color: color-mix(in srgb, var(--teda-white) 68%, var(--teda-green)); }
.teda-stat-band__qualitative { font-family: var(--teda-font-heading); font-weight: 800; font-size: 1.35rem; padding-block: 14px; }
@media (max-width: 700px) {
	.teda-stat-band__row { grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: 18px 4px; }
	.teda-stat { border-left: 0; }
}

/* --- Focus grid (teda/focus-grid) ----------------------------------------- */
.teda-focus-grid__head { text-align: left; margin-bottom: 26px; }
.teda-focus-grid__head .teda-display { color: var(--teda-green); margin: 10px 0; }
.teda-focus-grid__intro { color: var(--teda-muted); max-width: 60ch; }

/* Focus-area cards (teda_focus_area posts) are rendered by Blocksy's own
   [blocksy_posts] shortcode — columns, image ratio, card style and
   read-more wording all come from Customizer > Focus Areas > Posts Listing.
   We only tint the native card with the per-area accent (SPEC §3.1) and add
   an icon badge fallback when there's no featured image; both are applied via
   teda-child/inc/loop-cards.php (a post_class filter + blocksy:loop:card:start)
   rather than by overriding the card markup. */
.type-teda_focus_area.entry-card {
	--accent: var(--teda-green);
	position: relative;
	overflow: hidden;
}
.type-teda_focus_area.teda-focus-card--blue { --accent: var(--teda-blue); }
.type-teda_focus_area.teda-focus-card--green { --accent: var(--teda-green); }
.type-teda_focus_area.teda-focus-card--brown { --accent: var(--teda-brown); }
.type-teda_focus_area.entry-card::before {
	content: '';
	position: absolute; top: 0; left: 0; width: 100%; height: 6px;
	background: var(--accent); z-index: 1;
}
.type-teda_focus_area.entry-card .entry-title { color: var(--accent); }
.type-teda_focus_area .teda-focus-card__icon {
	width: 52px; height: 52px; border-radius: var(--teda-radius);
	display: grid; place-items: center; margin-bottom: 18px;
	color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, var(--teda-white));
}

/* --- Focus area publications sidebar (feedback) -------------------------- */
/* Injected into Blocksy's native sidebar column via blocksy:sidebar:start —
   beside the content on desktop, so no stacking margin there. Below Blocksy's
   1000px breakpoint the column collapses and this stacks below the article
   again, where the top margin is wanted back. */
.teda-focus-sidebar {
	padding: 28px;
	background: var(--teda-sand);
	border: 1px solid var(--teda-sand-deep);
	border-radius: var(--teda-radius);
}
@media (max-width: 999px) {
	.teda-focus-sidebar { margin-top: 44px; }
}
.teda-focus-sidebar__item { margin-bottom: 18px; }
.teda-focus-sidebar__item:last-child { margin-bottom: 0; }
.teda-focus-sidebar__link {
	display: block; font-weight: 600; color: var(--teda-green);
	text-decoration: none; margin: 6px 0;
}
.teda-focus-sidebar__link:hover { text-decoration: underline; }
.teda-focus-sidebar__meta {
	font-size: 0.9rem; color: var(--teda-muted); margin: 0;
}

/* --- CTA band (teda/cta-band) --------------------------------------------- */
.teda-cta-band { background: var(--teda-green); color: var(--teda-white); }
.teda-cta-band--blue { background: var(--teda-blue); }
.teda-cta-band--brown { background: var(--teda-brown); }
.teda-cta-band--green { background: var(--teda-green); }
.teda-cta-band--sand { background: var(--teda-sand); color: var(--teda-ink); }
.teda-cta-band__inner { text-align: center; padding-block: 76px; }
.teda-cta-band .teda-cta-band__title { color: inherit; font-size: var(--teda-fs-h3); margin-bottom: 16px; max-width: 20ch; margin-inline: auto; }
.teda-cta-band--sand .teda-cta-band__title { color: var(--teda-green); }
.teda-cta-band__body { max-width: 58ch; margin: 0 auto 30px; font-size: 1.08rem; opacity: 0.92; }
.teda-cta-band__acts { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }

/* --- Vision/Mission/Promise triptych (pattern) ---------------------------- */
.teda-triptych {
	display: grid; grid-template-columns: repeat(3, 1fr); gap: 0;
	border: 2px solid var(--teda-green); border-radius: var(--teda-radius); overflow: hidden;
}
.teda-triptych > .wp-block-column,
.teda-triptych > * { padding: 30px 28px; border-left: 2px solid var(--teda-green); }
.teda-triptych > :first-child { border-left: 0; }
.teda-triptych h3 { color: var(--teda-green); margin-bottom: 10px; }
.teda-triptych p { color: var(--teda-muted); margin: 0; }
@media (max-width: 780px) {
	.teda-triptych { grid-template-columns: 1fr; }
	.teda-triptych > * { border-left: 0; border-top: 2px solid var(--teda-green); }
	.teda-triptych > :first-child { border-top: 0; }
}

/* ======================================================================== */
/* P09 — Blocks B (events, countdown, news, testimonials, tiers, filters)   */
/* ======================================================================== */

/* Shared constrained inner + tag + section heads (P09) */
.teda-events__head, .teda-events__list, .teda-events__fallback,
.teda-news__head, .teda-news__grid,
.teda-testimonials__head, .teda-testimonials__carousel,
.teda-impact-tiers__head, .teda-impact-tiers__list,
.teda-spaces__head, .teda-spaces__list,
.teda-impact__head, .teda-impact__grid,
.teda-filter-chips, .teda-filter-chips__empty {
	max-width: var(--theme-content-width, 1200px);
	margin-inline: auto;
	padding-inline: var(--teda-gutter, 24px);
}
.teda-events__head, .teda-news__head, .teda-testimonials__head, .teda-impact-tiers__head, .teda-spaces__head, .teda-team__head { margin-bottom: 22px; }
.teda-events__head .teda-display, .teda-news__head .teda-display,
.teda-testimonials__head .teda-display, .teda-impact-tiers__head .teda-display,
.teda-spaces__head .teda-display, .teda-team__head .teda-display { color: var(--teda-green); margin: 8px 0 0; }

.teda-tag {
	display: inline-block; font-family: var(--teda-font-heading); font-weight: 800;
	font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase;
	color: var(--teda-green); background: var(--teda-green-pale);
	padding: 4px 10px; border-radius: 99px; margin-bottom: 10px;
}

/* --- Events -------------------------------------------------------------- */
.teda-events__fallback { color: var(--teda-muted); margin-bottom: 16px; }
.teda-event {
	display: grid; grid-template-columns: 72px 1fr auto; gap: 18px; align-items: center;
	padding: 20px 0; border-bottom: 2px solid var(--teda-sand-deep);
}
.teda-event:last-child { border-bottom: 0; }
.teda-event__date { text-align: center; }
.teda-event__date b { font-family: var(--teda-font-display); font-size: 2rem; line-height: 1; color: var(--teda-green); display: block; }
.teda-event__date span { font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase; font-weight: 700; color: var(--teda-muted); }
.teda-event__title { font-size: 1.28rem; margin: 4px 0; }
.teda-event__title a { color: var(--teda-ink); }
.teda-event__title a:hover { color: var(--teda-green); }
.teda-event__meta { color: var(--teda-muted); font-size: 0.95rem; }
.teda-event--past .teda-event__date b { color: var(--teda-muted); }
.teda-event--past .teda-tag { color: var(--teda-muted); background: var(--teda-sand-deep); }
@media (max-width: 560px) {
	.teda-event { grid-template-columns: 60px 1fr; }
	.teda-event__go { grid-column: 2; }
}

.teda-events--green,
.teda-events--green-light { padding-block: 56px; }

.teda-events--green { background: var(--teda-green); color: var(--teda-white); }
.teda-events--green-light { background: var(--teda-green-light); color: var(--teda-ink); }

.teda-events--green .teda-events__head .teda-display,
.teda-events--green-light .teda-events__head .teda-display { color: inherit; }
.teda-events--green .teda-eyebrow,
.teda-events--green-light .teda-eyebrow { color: inherit; }

.teda-events--green .teda-event__date b,
.teda-events--green-light .teda-event__date b { color: inherit; }
.teda-events--green .teda-event__date span,
.teda-events--green .teda-event__meta,
.teda-events--green .teda-events__fallback { color: rgba(255, 255, 255, 0.75); }
.teda-events--green-light .teda-event__date span,
.teda-events--green-light .teda-event__meta,
.teda-events--green-light .teda-events__fallback { color: color-mix(in srgb, var(--teda-ink) 68%, transparent); }

.teda-events--green .teda-event { border-bottom-color: rgba(255, 255, 255, 0.25); }
.teda-events--green-light .teda-event { border-bottom-color: rgba(36, 26, 21, 0.2); }

.teda-events--green .teda-event__title a,
.teda-events--green-light .teda-event__title a { color: inherit; }
.teda-events--green .teda-event__title a:hover,
.teda-events--green-light .teda-event__title a:hover { opacity: 0.8; }

.teda-events--green .teda-empty h3,
.teda-events--green-light .teda-empty h3,
.teda-events--green .teda-empty p,
.teda-events--green-light .teda-empty p,
.teda-events--green .teda-event__pastlink,
.teda-events--green-light .teda-event__pastlink { color: inherit; }

/* --- Countdown ----------------------------------------------------------- */
.teda-countdown__timer { display: flex; gap: 12px; flex-wrap: wrap; }
.teda-countdown__unit { background: rgba(255, 255, 255, 0.14); border-radius: var(--teda-radius); padding: 12px 16px; text-align: center; min-width: 76px; }
.teda-countdown__unit b { font-family: var(--teda-font-display); font-size: 2rem; display: block; line-height: 1; color: var(--teda-white); font-variant-numeric: tabular-nums; }
.teda-countdown__unit span { font-size: 0.7rem; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 700; color: color-mix(in srgb, var(--teda-white) 85%, var(--teda-green)); }
.teda-postev { background: rgba(255, 255, 255, 0.14); border-left: 5px solid var(--teda-blue-light); border-radius: var(--teda-radius); padding: 16px 20px; max-width: 52ch; }
.teda-postev b { color: var(--teda-white); font-family: var(--teda-font-heading); display: block; margin-bottom: 4px; }
.teda-postev p { color: color-mix(in srgb, var(--teda-white) 88%, var(--teda-green)); font-size: 0.95rem; margin: 0; }
.teda-postev__link { display: inline-block; margin-top: 10px; color: var(--teda-white); font-weight: 700; text-decoration: underline; }
/* On a light context (e.g. sand section) the timer needs dark chrome. */
.teda-section--sand .teda-countdown__unit, :root .teda-cta-band--sand .teda-countdown__unit { background: var(--teda-green-pale); }
.teda-section--sand .teda-countdown__unit b { color: var(--teda-green); }

/* --- News ---------------------------------------------------------------- */
.teda-news__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
.teda-news-card {
	display: flex; flex-direction: column; overflow: hidden; text-decoration: none;
	background: var(--teda-white); color: var(--teda-ink);
	border: 2px solid var(--teda-sand-deep); border-radius: var(--teda-radius);
	transition: border-color 0.18s ease;
}
.teda-news-card:hover { border-color: var(--teda-green); }
.teda-news-card__ph { aspect-ratio: 16 / 10; overflow: hidden; background: var(--teda-sand-deep); display: block; }
.teda-news-card__ph img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.4s ease; }
.teda-news-card:hover .teda-news-card__ph img { transform: scale(1.04); }
.teda-news-card__bd { padding: 22px; flex: 1; display: flex; flex-direction: column; }
.teda-news-card__title { font-size: 1.15rem; margin-bottom: 10px; flex: 1; color: var(--teda-green); }
.teda-news-card__meta { font-size: 0.82rem; color: var(--teda-muted); }
@media (max-width: 900px) { .teda-news__grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .teda-news__grid { grid-template-columns: 1fr; } }

/* --- Testimonials carousel ----------------------------------------------- */
.teda-carousel { position: relative; overflow: hidden; }
.teda-carousel__track { display: flex; transition: transform 0.35s ease; }
@media (prefers-reduced-motion: reduce) { .teda-carousel__track { transition: none; } }
.teda-carousel__slide { flex: 0 0 100%; padding: 2px; }
.teda-carousel__slide[hidden] { display: block; }
.teda-quote { background: var(--teda-white); border-left: 6px solid var(--teda-blue); padding: 26px 26px 22px; border-radius: var(--teda-radius); margin: 0; }
.teda-quote p { font-size: 1.08rem; font-style: italic; margin-bottom: 14px; }
.teda-quote__cite { font-family: var(--teda-font-heading); font-size: 0.85rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--teda-green); font-style: normal; }
.teda-carousel__ctl { display: flex; align-items: center; gap: 10px; margin-top: 18px; }
.teda-carousel__nav { width: var(--teda-tap); height: var(--teda-tap); border: 2px solid var(--teda-green); background: var(--teda-white); color: var(--teda-green); border-radius: var(--teda-radius); cursor: pointer; display: grid; place-items: center; }
.teda-carousel__nav:hover, .teda-carousel__nav:focus { background: var(--teda-green); color: var(--teda-white); }
.teda-carousel__dots { display: flex; gap: 8px; margin-left: 6px; }
.teda-carousel__dot { width: var(--teda-tap); height: var(--teda-tap); border: 0; background: transparent; cursor: pointer; display: grid; place-items: center; padding: 0; }
.teda-carousel__dot i { display: block; width: 11px; height: 11px; border-radius: 50%; background: var(--teda-sand-deep); border: 2px solid var(--teda-muted); }
.teda-carousel__dot[aria-selected="true"] i { background: var(--teda-green); border-color: var(--teda-green); }

/* --- Impact tiers -------------------------------------------------------- */
.teda-tier { display: flex; gap: 18px; align-items: flex-start; padding: 22px 0; border-bottom: 2px solid var(--teda-sand-deep); }
.teda-tier:last-child { border-bottom: 0; }
.teda-tier__amount { font-family: var(--teda-font-display); font-size: 1.55rem; color: var(--teda-green); flex: 0 0 160px; line-height: 1.1; }
.teda-tier__amount small { display: block; font-family: var(--teda-font-body); font-weight: 600; font-size: 0.78rem; color: var(--teda-muted); }
.teda-tier__body { flex: 1; }
.teda-tier__desc { color: var(--teda-ink); font-size: 1rem; margin-bottom: 12px; }
.teda-progress__label { font-size: 0.82rem; font-weight: 700; color: var(--teda-green); margin-bottom: 6px; }
.teda-progress__track { height: 10px; background: var(--teda-sand-deep); border-radius: 99px; overflow: hidden; }
.teda-progress__fill { height: 100%; background: var(--teda-green); border-radius: 99px; }
@media (max-width: 560px) { .teda-tier { flex-direction: column; gap: 6px; } .teda-tier__amount { flex: none; } }

/* --- Filter chips -------------------------------------------------------- */
.teda-filter-chips { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 22px; }
.teda-chip {
	border: 2px solid var(--teda-sand-deep); background: var(--teda-white); color: var(--teda-ink);
	border-radius: 99px; padding: 9px 18px; font-family: var(--teda-font-body); font-weight: 700;
	font-size: 0.85rem; cursor: pointer; min-height: var(--teda-tap);
}
.teda-chip.is-on { background: var(--teda-green); border-color: var(--teda-green); color: var(--teda-white); }
.teda-filter-chips__empty { margin-top: 18px; }

/* ======================================================================== */
/* P10 — Archives, singles and empty states                                 */
/* ======================================================================== */

/* Empty-state system (Support\Empty_State) */
.teda-empty__title { color: var(--teda-green); font-size: 1.5rem; margin-bottom: 10px; }
.teda-empty__text { color: var(--teda-muted); max-width: 46ch; margin: 0 auto 20px; }
.teda-empty__actions { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }

/* Archive section headings + grouping */
.teda-archive__heading { color: var(--teda-green); font-size: var(--teda-fs-h4); margin: 8px 0 18px; }
.teda-archive__heading + .teda-events__list, .teda-archive__heading + .teda-oppo__list { margin-bottom: 34px; }
.teda-archive__group { display: block; }

/* Opportunity cards */
.teda-oppo { display: grid; grid-template-columns: 1fr auto; gap: 18px; align-items: center; padding: 22px 0; border-bottom: 2px solid var(--teda-sand-deep); }
.teda-oppo:last-child { border-bottom: 0; }
.teda-oppo--closed { opacity: 0.78; }
.teda-oppo__title { font-size: 1.28rem; margin: 6px 0 4px; }
.teda-oppo__title a { color: var(--teda-ink); }
.teda-oppo__title a:hover { color: var(--teda-green); }
.teda-oppo__meta { color: var(--teda-muted); font-size: 0.95rem; }
.teda-oppo--closed .teda-tag { background: var(--teda-sand-deep); color: var(--teda-muted); }
@media (max-width: 560px) { .teda-oppo { grid-template-columns: 1fr; } }

/* WP Job Manager wrappers. Opportunities moved to WPJM in 0.5.0; its own
   stylesheet is dequeued (see Teda_Core\Integrations\Job_Manager) so these are
   the only rules dressing a listing. The .teda-oppo card itself is styled above
   — the child theme's template override reuses that class deliberately. */
.job_listings { list-style: none; margin: 0; padding: 0; }
.job_listings .teda-oppo { list-style: none; }
.teda-oppo__none { color: var(--teda-muted); padding: 22px 0; list-style: none; }
.job_filters.teda-oppo__filters { background: var(--teda-sand); border: 2px solid var(--teda-sand-deep); border-radius: var(--teda-radius); padding: 18px 20px; margin-bottom: 8px; }
.teda-oppo__filters .search_jobs { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 14px; align-items: end; }
.teda-oppo__filters label { display: block; font-family: var(--teda-font-heading); font-weight: 800; font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--teda-green); margin-bottom: 6px; }
.teda-oppo__filters input[type="text"], .teda-oppo__filters select { width: 100%; min-height: var(--teda-tap); padding: 8px 12px; border: 2px solid var(--teda-sand-deep); border-radius: var(--teda-radius); background: var(--teda-white); color: var(--teda-ink); }
.teda-oppo__filters .search_submit input { min-height: var(--teda-tap); width: 100%; cursor: pointer; }
.job_listings .load_more_jobs, .load_more_jobs { display: block; text-align: center; margin-top: 24px; }
.job-manager-pagination ul, .job-manager-pagination { list-style: none; display: flex; gap: 6px; justify-content: center; padding: 0; margin: 24px 0 0; }
.job-manager-info, .job-manager-error, .job-manager-message { background: var(--teda-sand); border-left: 4px solid var(--teda-green); padding: 14px 18px; border-radius: var(--teda-radius); margin-bottom: 20px; }
.single_job_listing .job_description { margin-bottom: 28px; }
.single_job_listing .job_application { margin-top: 8px; }
.single_job_listing .application_button { min-height: var(--teda-tap); cursor: pointer; }

/* --- Application form (teda-core Applications) ---------------------------- */
/* Rendered by the child theme's job_manager/job-application.php override. WPJM's
   own stylesheets are dequeued, so every rule a listing needs is here. The
   .application_details wrapper is collapsed by WPJM's script, not by CSS, so it
   stays visible with JavaScript off. */
.teda-apply { margin-top: 20px; }
.teda-apply .application_details { margin-top: 16px; }
.teda-apply__form {
	background: var(--teda-sand);
	border: 2px solid var(--teda-sand-deep);
	border-radius: var(--teda-radius);
	padding: 22px 24px;
	max-width: 640px;
}
.teda-apply__field { margin: 0 0 18px; }
.teda-apply__field label { display: block; font-family: var(--teda-font-heading); font-weight: 800; font-size: 0.78rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--teda-green); margin-bottom: 6px; }
.teda-apply__optional { font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--teda-muted); }
.teda-apply__form input[type="text"],
.teda-apply__form input[type="tel"],
.teda-apply__form input[type="email"],
.teda-apply__form input[type="file"],
.teda-apply__form select,
.teda-apply__form textarea {
	width: 100%;
	min-height: var(--teda-tap);
	padding: 10px 12px;
	border: 2px solid var(--teda-sand-deep);
	border-radius: var(--teda-radius);
	background: var(--teda-white);
	color: var(--teda-ink);
	font: inherit;
}
.teda-apply__form textarea { min-height: 120px; resize: vertical; }
.teda-apply__form :focus-visible { outline: 3px solid var(--teda-green); outline-offset: 1px; }
.teda-apply__help { display: block; margin-top: 6px; font-size: 0.88rem; color: var(--teda-muted); }
/* The consent label wraps its checkbox, so it must read as a sentence rather
   than inherit the uppercase field-label treatment above. */
.teda-apply__field--consent label {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 10px;
	align-items: start;
	font-family: inherit; font-weight: 400; font-size: 0.95rem;
	text-transform: none; letter-spacing: 0; color: var(--teda-ink);
}
.teda-apply__field--consent input { min-height: 0; width: 20px; height: 20px; margin-top: 2px; }
.teda-apply__actions { margin: 0; }
.teda-apply__actions button { cursor: pointer; }
.teda-apply__error {
	background: var(--teda-white);
	border-left: 4px solid #a1332b;
	color: #7a2620;
	padding: 12px 16px;
	border-radius: var(--teda-radius);
	margin-bottom: 16px;
	max-width: 640px;
}
.teda-apply__done {
	background: var(--teda-green-pale);
	border-left: 4px solid var(--teda-green);
	padding: 18px 22px;
	border-radius: var(--teda-radius);
	max-width: 640px;
}
.teda-apply__done-title { color: var(--teda-green); margin-bottom: 6px; font-size: var(--teda-fs-h6); }
.teda-apply__done:focus, .teda-apply__error:focus { outline: 3px solid var(--teda-green); outline-offset: 2px; }
@media (max-width: 560px) { .teda-apply__form { padding: 18px 16px; } }

/* Single Event / Opportunity panels */
.teda-single-panel { background: var(--teda-green); color: var(--teda-white); border-radius: var(--teda-radius); padding: 26px 28px; margin-bottom: 28px; }
.teda-single-panel--oppo { background: var(--teda-sand); color: var(--teda-ink); border: 2px solid var(--teda-sand-deep); }
.teda-single-panel .teda-countdown__clock { margin-bottom: 20px; }
.teda-details { margin: 0 0 18px; display: grid; gap: 10px; }
.teda-details__row { display: grid; grid-template-columns: 130px 1fr; gap: 12px; }
.teda-details__row dt { font-family: var(--teda-font-heading); font-weight: 800; font-size: 0.78rem; letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.85; }
.teda-details__row dd { margin: 0; }
.teda-single-panel--event .teda-details__row dd { color: var(--teda-white); }
.teda-oppo-closed { margin-top: 10px; }
@media (max-width: 560px) { .teda-details__row { grid-template-columns: 1fr; gap: 2px; } }

/* Related events + loop-card meta injected on Group 1 archives */
.teda-related { margin-top: 40px; }
.teda-related__heading { color: var(--teda-green); font-size: var(--teda-fs-h5); margin-bottom: 16px; }
.teda-loop-meta { margin-top: 10px; }
.teda-loop-meta--focus { --accent: var(--teda-green); display: flex; align-items: center; gap: 10px; }
.teda-loop-meta--focus.teda-focus-card--blue { --accent: var(--teda-blue); }
.teda-loop-meta--focus.teda-focus-card--green { --accent: var(--teda-green); }
.teda-loop-meta--focus.teda-focus-card--brown { --accent: var(--teda-brown); }
.teda-loop-meta__icon { color: var(--accent); flex: 0 0 auto; display: inline-grid; place-items: center; }
.teda-loop-meta__icon img { width: 36px; height: 36px; object-fit: cover; border-radius: var(--teda-radius); }
.teda-loop-meta__summary { color: var(--teda-muted); font-size: 0.95rem; margin: 0; }
.teda-loop-meta--team { color: var(--teda-green); font-family: var(--teda-font-heading); font-weight: 800; font-size: 0.85rem; letter-spacing: 0.06em; text-transform: uppercase; }
.teda-loop-meta--news { display: flex; align-items: center; gap: 10px; }
.teda-loop-meta__date { color: var(--teda-muted); font-size: 0.85rem; }

/* ======================================================================== */
/* P12 — Donate page (offline mode + live toggle)                           */
/* ======================================================================== */
.teda-btn--green { background: var(--teda-green); color: var(--teda-white); }
.teda-btn--green:hover, .teda-btn--green:focus { background: color-mix(in srgb, var(--teda-green) 85%, black); color: var(--teda-white); }

.teda-donate { max-width: var(--theme-content-width, 1200px); }
.teda-donate__grid { display: grid; grid-template-columns: 1fr; gap: 34px; }
@media (min-width: 900px) { .teda-donate__grid { grid-template-columns: minmax(0, 1fr) 360px; align-items: start; } }
/* A sparse campaign can leave the main column (lead/tiers/goals/antifraud) fully
   empty — Donate.php omits it entirely and adds this modifier so the panel fills
   the row instead of sitting in a narrow sidebar next to nothing. Sticky
   positioning is cancelled in this state; sticking a full-width block while
   scrolling past empty space would look wrong. */
.teda-donate__grid--panel-only { grid-template-columns: 1fr; }
@media (min-width: 900px) { .teda-donate__grid--panel-only .teda-donate__panel { position: static; } }
.teda-donate__lead { font-size: 1.15rem; color: var(--teda-ink); margin-bottom: 26px; }
.teda-donate__section { margin-bottom: 40px; }
.teda-donate__section .teda-display { color: var(--teda-green); margin: 8px 0 18px; }

.teda-donate__tiers .teda-tier { padding: 18px 0; }
.teda-donate__projects { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 18px; }
.teda-project { border: 2px solid var(--teda-sand-deep); border-radius: var(--teda-radius); padding: 22px; background: var(--teda-white); }
.teda-project.is-selected { border-color: var(--teda-green); background: var(--teda-green-pale); }
.teda-project h3 { color: var(--teda-green); margin-bottom: 8px; }
.teda-project p { color: var(--teda-muted); font-size: 0.95rem; margin-bottom: 14px; }
.teda-project__image { display: block; width: 100%; height: 140px; object-fit: cover; border-radius: var(--teda-radius); margin-bottom: 14px; }

/* Anti-fraud notice — prominent at every width, never softened (§7). */
.teda-donate__warn { border: 2px solid var(--teda-green); border-left-width: 8px; border-radius: var(--teda-radius); background: var(--teda-green-pale); padding: 22px 24px; margin: 8px 0 40px; }
.teda-donate__warn h3 { color: var(--teda-green); margin-bottom: 8px; }
.teda-donate__warn p { color: var(--teda-ink); margin: 0; }

/* Sticky donation panel */
.teda-donate__panel { border: 2px solid var(--teda-sand-deep); border-radius: var(--teda-radius); padding: 24px; background: var(--teda-white); }
@media (min-width: 900px) { .teda-donate__panel { position: sticky; top: 24px; } }
.teda-donate__paneltitle { font-size: 1.35rem; color: var(--teda-green); margin-bottom: 4px; }
.teda-donate__panelsub { color: var(--teda-muted); font-size: 0.93rem; margin-bottom: 18px; }
.teda-donate__adminnotice { border: 2px dashed var(--teda-blue); background: var(--teda-blue-pale); color: var(--teda-ink); padding: 12px 14px; border-radius: var(--teda-radius); margin-bottom: 16px; font-size: 0.9rem; }

.teda-donate__freq, .teda-donate__cur { display: flex; gap: 8px; margin-bottom: 12px; }
.teda-donate__freq .teda-chip, .teda-donate__cur .teda-chip { flex: 1; justify-content: center; }
.teda-donate__amounts:not([hidden]) { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; margin-bottom: 14px; }
.teda-donate__amt { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; min-height: var(--teda-tap); padding: 8px 12px; cursor: pointer; border: 2px solid var(--teda-sand-deep); background: var(--teda-white); color: var(--teda-ink); border-radius: var(--teda-radius); font-family: var(--teda-font-body); font-weight: 700; }
.teda-donate__amt.is-on { border-color: var(--teda-green); background: var(--teda-green-pale); }
.teda-donate__amt-usd { font-weight: 600; color: var(--teda-muted); font-size: 0.74rem; }
.teda-donate__goalpicker { border: 0; padding: 0; margin: 0 0 14px; }
.teda-donate__goalpicker legend { font-size: 0.8rem; font-weight: 700; margin-bottom: 6px; padding: 0; }
.teda-donate__goaloption { display: flex; align-items: center; gap: 8px; min-height: var(--teda-tap); padding: 8px 12px; cursor: pointer; border: 2px solid var(--teda-sand-deep); border-radius: var(--teda-radius); font-size: 0.92rem; margin-bottom: 6px; }
.teda-donate__goaloption.is-on, .teda-donate__goaloption:has(input:checked) { border-color: var(--teda-green); background: var(--teda-green-pale); }
.teda-donate__customwrap:not([hidden]) { display: block; margin-bottom: 14px; }
.teda-donate__customlabel { display: block; font-size: 0.8rem; font-weight: 700; margin-bottom: 4px; }
.teda-donate__custom { width: 100%; min-height: var(--teda-tap); padding: 8px 12px; border: 2px solid var(--teda-sand-deep); border-radius: var(--teda-radius); }

.teda-donate__offline { margin-top: 24px; }
.teda-donate__cta { width: 100%; margin-bottom: 10px; }
.teda-donate__note { font-size: 0.8rem; color: var(--teda-muted); text-align: center; margin-top: 10px; }
.teda-way { border: 2px solid var(--teda-sand-deep); border-radius: var(--teda-radius); padding: 16px 18px; margin-bottom: 12px; }
.teda-way--accent { border-color: var(--teda-blue-light); background: var(--teda-blue-pale); }
.teda-way h3 { color: var(--teda-green); font-size: 1.05rem; margin-bottom: 6px; }
.teda-way p { color: var(--teda-ink); font-size: 0.92rem; margin-bottom: 8px; }
.teda-way code { display: block; font-size: 0.9rem; color: var(--teda-green); background: var(--teda-sand); padding: 6px 10px; border-radius: var(--teda-radius); margin-top: 4px; word-break: break-word; }

/* Trust strip + other ways */
.teda-donate__trust { margin: 20px 0 40px; }
.teda-trust { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 24px; padding: 28px; background: var(--teda-sand); border-radius: var(--teda-radius); }
.teda-trust h3 { color: var(--teda-green); font-size: 1.02rem; margin-bottom: 6px; }
.teda-trust p { color: var(--teda-ink); font-size: 0.92rem; margin: 0; }
.teda-donate__ways { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 18px; }
.teda-donate__ways .teda-way { margin-bottom: 0; }

/* P13 Forms — honeypot (functional hide), event registration + capacity. Field
   styling itself is left to Blocksy's Fluent Forms integration + --theme-form-field-*.
   These rules only hide the trap and lay out our own wrappers (not FF fields). */
.teda-hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; overflow: hidden; }
.teda-eventreg { margin-top: 20px; }
.teda-eventreg__places { font-family: var(--teda-font-heading, inherit); font-weight: 600; margin: 0 0 12px; color: var(--teda-green); }
.teda-eventreg__places--low { color: var(--teda-blue, var(--teda-green)); }
.teda-eventreg__places--info { color: var(--teda-ink); opacity: 0.8; }
.teda-eventreg__waitlist { margin-top: 8px; }
.teda-eventreg__waitlist b { display: block; margin-bottom: 4px; }
.teda-eventreg__waitlist p { margin: 0 0 12px; }
.teda-consent .ff-el-input--label,
.teda-consent label { font-weight: 400; }

/* --- Spaces (P19) -------------------------------------------------------- */
/* The homepage teaser block (teda/spaces) uses this card grid; the archive now
   renders through Blocksy's own card system (inc/spaces-archive.php), styled via
   the Customizer instead. The single uses its own layout below. */
.teda-spaces__list {
	display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px;
}
@media (max-width: 900px) { .teda-spaces__list { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .teda-spaces__list { grid-template-columns: 1fr; } }

.teda-space-card {
	display: flex; flex-direction: column; align-items: flex-start;
	background: var(--teda-white); border: 2px solid var(--teda-sand-deep);
	border-radius: var(--teda-radius, 12px); padding: 22px;
}
.teda-space-card__title { font-size: var(--teda-fs-h4, 1.28rem); margin: 2px 0 6px; }
.teda-space-card__title a { color: var(--teda-ink); }
.teda-space-card__title a:hover { color: var(--teda-green); }
.teda-space-card__date { color: var(--teda-muted); font-size: 0.9rem; margin: 0 0 10px; }
.teda-space-card__summary { color: var(--teda-ink); margin: 0 0 16px; }
.teda-space-card__go {
	margin-top: auto; font-family: var(--teda-font-heading); font-weight: 800;
	color: var(--teda-green); min-height: var(--teda-tap, 44px); display: inline-flex; align-items: center;
}
.teda-space-card__go:hover { text-decoration: underline; }

/* Archive card (Blocksy-native): featured-image fallback icon, mirroring
   .teda-focus-card__icon for Focus Areas. Card border/shadow/radius/colour are
   Customizer-owned (inc/customizer-defaults.php's teda_space_archive_* block). */
.teda-space-card__icon { color: var(--teda-blue); display: inline-flex; margin: 0 0 10px; }

/* Single Space: structured content is the substance; the embed/fallback is an aside. */
.teda-single--space { max-width: 760px; margin-inline: auto; }
.teda-space__meta { color: var(--teda-muted); font-weight: 700; letter-spacing: 0.02em; margin: 0 0 18px; }
.teda-space__section { margin: 0 0 28px; }
.teda-space__h { font-family: var(--teda-font-heading); font-size: var(--teda-fs-h5, 1.05rem); text-transform: uppercase; letter-spacing: 0.06em; color: var(--teda-green); margin: 0 0 8px; }
.teda-space__points, .teda-space__speakers { margin: 0; padding-left: 1.2em; }
.teda-space__points li, .teda-space__speakers li { margin: 0 0 6px; }
.teda-space__action { border-left: 4px solid var(--teda-green); padding-left: 18px; background: var(--teda-green-pale); border-radius: var(--teda-radius, 12px); padding: 18px; }
.teda-space__action .teda-space__h { margin-top: 0; }

/* The listen slot — real embed or first-class fallback. */
.teda-space__listen { margin: 0 0 28px; }
.teda-space-embed { max-width: 100%; }
.teda-space-embed :where(iframe, blockquote) { max-width: 100%; }
.teda-space-embed__out { font-size: 0.9rem; margin: 8px 0 0; }
.teda-space-fallback {
	background: var(--teda-sand); border: 2px solid var(--teda-sand-deep);
	border-radius: var(--teda-radius, 12px); padding: 22px;
}
.teda-space-fallback__lead { margin: 0 0 14px; color: var(--teda-ink); }
.teda-space-fallback__audio { margin: 0 0 16px; }
.teda-space-fallback__audio figcaption { font-weight: 700; margin-bottom: 6px; }
.teda-space-fallback__audio audio { width: 100%; }

/* --- Team ------------------------------------------------------------------ */

.teda-team__section { margin: 0 0 40px; }

h3.teda-team__section-heading { color: var(--teda-green); margin: 8px 0 18px; }

.teda-team__list {
	display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px;
}
@media (max-width: 1000px) { .teda-team__list { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .teda-team__list { grid-template-columns: 1fr; } }

.teda-team-card {
	display: flex; flex-direction: column; align-items: flex-start;
	background: var(--teda-white); border: 2px solid var(--teda-sand-deep);
	border-radius: var(--teda-radius, 12px); padding: 22px;
}
.teda-team-card__avatar {
	width: 84px; height: 84px; border-radius: 50%; overflow: hidden;
	margin-bottom: 14px; display: block; flex: 0 0 auto;
}
.teda-team-card__avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.teda-team-card__avatar--initials {
	display: grid; place-items: center;
	background: var(--teda-green-pale); color: var(--teda-green);
	font-family: var(--teda-font-heading); font-weight: 800; font-size: 1.4rem;
}
.teda-team-card__name { font-size: var(--teda-fs-h6, 1.1rem); margin: 0 0 2px; }
.teda-team-card__name a { color: var(--teda-ink); }
.teda-team-card__name a:hover { color: var(--teda-green); }
.teda-team-card__role {
	color: var(--teda-green); font-family: var(--teda-font-heading); font-weight: 800;
	font-size: 0.82rem; letter-spacing: 0.04em; text-transform: uppercase; margin: 0 0 10px;
}
.teda-team-card__bio { color: var(--teda-muted); margin: 0 0 14px; }

.teda-team-card__socials {
	display: flex; flex-wrap: wrap; gap: 8px; margin: auto 0 0; padding: 0; list-style: none;
}
.teda-social-icon a {
	display: inline-flex; align-items: center; justify-content: center;
	width: var(--teda-tap, 44px); height: var(--teda-tap, 44px);
	border-radius: 50%; background: var(--teda-sand); color: var(--teda-green);
}
.teda-social-icon a:hover { background: var(--teda-green); color: var(--teda-white); }
.teda-social-icon svg { width: 18px; height: 18px; fill: currentColor; }
.teda-social-icon--other a { width: auto; height: auto; min-height: var(--teda-tap, 44px); border-radius: var(--teda-radius); padding: 0 14px; }

/* Single Team member: same avatar/social markup as the card, full untruncated bio. */
.teda-single--team { margin-inline: auto; }
.teda-single--team .teda-team-card__avatar { width: 128px; height: 128px; font-size: 2rem; }
.teda-single--team__name { font-size: var(--teda-fs-h2, 1.7rem); margin: 4px 0 2px; }
.teda-single--team__role {
	color: var(--teda-green); font-family: var(--teda-font-heading); font-weight: 800;
	font-size: 0.9rem; letter-spacing: 0.04em; text-transform: uppercase; margin: 0 0 20px;
}
.teda-single--team__bio { color: var(--teda-ink); margin: 0 0 20px; }
.teda-single--team .teda-team-card__socials { margin: 0 0 24px; }

/* --- Terms of service (leadership_cohort) --------------------------------- */
/* Cohort archives at /about/leadership/<term>/ and the terms list on a member's
   own page. Cards are Blocks\Team::card(), so they inherit .teda-team-card above
   and only the surrounding chrome is styled here. */
.teda-cohort__header { margin-bottom: 34px; }
.teda-cohort__title { color: var(--teda-green); margin-bottom: 8px; }
.teda-cohort__range { color: var(--teda-muted); font-size: 1.05rem; margin-bottom: 10px; }
.teda-cohort__intro { max-width: var(--teda-measure); color: var(--teda-muted); }
.teda-cohort__nav { margin-top: 44px; padding-top: 26px; border-top: 2px solid var(--teda-sand-deep); }
.teda-cohort__nav-heading { color: var(--teda-green); font-size: var(--teda-fs-h6); margin-bottom: 14px; }
.teda-cohort__nav-list { list-style: none; margin: 0; padding: 0; display: flex; gap: 10px; flex-wrap: wrap; }
.teda-team__past { margin-top: 8px; }
.teda-team__past a { color: var(--teda-green); font-weight: 700; }
.teda-single--team__terms { margin: 26px 0; }
.teda-single--team__terms-heading { color: var(--teda-green); font-size: var(--teda-fs-h6); margin-bottom: 12px; }
.teda-single--team__terms .teda-details__row { grid-template-columns: 140px 1fr; }
.teda-single--team__terms dt a { color: var(--teda-green); }
@media (max-width: 560px) { .teda-single--team__terms .teda-details__row { grid-template-columns: 1fr; gap: 2px; } }


/* --- Publications (P21) -------------------------------------------------- */
.teda-pub-featured { margin: 8px 0 40px; }
.teda-pub-featured > .teda-eyebrow { display: block; margin-bottom: 12px; }
.teda-pub {
	display: grid; grid-template-columns: 132px 1fr auto; gap: 22px; align-items: start;
	padding: 22px 0; border-bottom: 2px solid var(--teda-sand-deep);
}
.teda-pub:last-child { border-bottom: 0; }
.teda-pub__cover img { width: 100%; height: auto; border-radius: var(--teda-radius, 12px); border: 2px solid var(--teda-sand-deep); display: block; }
.teda-pub__title { font-size: var(--teda-fs-h4, 1.28rem); margin: 6px 0; }
.teda-pub__title a { color: var(--teda-ink); }
.teda-pub__title a:hover { color: var(--teda-green); }
.teda-pub__summary { color: var(--teda-ink); margin: 0 0 8px; }
.teda-pub__meta { color: var(--teda-muted); font-size: 0.9rem; margin: 0; }
.teda-pub__go { align-self: center; }

/* Featured report: larger cover, stacked on narrow screens. */
.teda-pub--featured { grid-template-columns: 300px 1fr; gap: 30px; border-bottom: 0; padding: 0; align-items: center; }
.teda-pub--featured .teda-pub__title { font-size: var(--teda-fs-h2, 2.2rem); font-family: var(--teda-font-display); color: var(--teda-green); }
.teda-pub--featured .teda-pub__go { grid-column: 2; align-self: start; margin-top: 6px; }
@media (max-width: 720px) {
	.teda-pub, .teda-pub--featured { grid-template-columns: 1fr; }
	.teda-pub__go, .teda-pub--featured .teda-pub__go { grid-column: 1; }
	.teda-pub--featured .teda-pub__cover img { max-width: 260px; }
}

.teda-pub-archive__year {
	font-family: var(--teda-font-display); color: var(--teda-green);
	font-size: var(--teda-fs-h3, 1.6rem); margin: 30px 0 6px; padding-top: 8px;
}
.teda-pub-help { margin-top: 30px; color: var(--teda-ink); }
.teda-pub__nofile { color: var(--teda-muted); font-style: italic; margin: 0; }

/* Single publication */
.teda-single--pub { max-width: 760px; margin-inline: auto; }
.teda-pub__download { margin: 0 0 28px; }
.teda-pub__summary-full { margin: 0 0 28px; }

/* --- Impact dashboard (P21, D13) ---------------------------------------- */
.teda-impact__head { margin-bottom: 24px; }
.teda-impact__head .teda-display { color: var(--teda-green); margin: 8px 0 10px; }
.teda-impact__intro { color: var(--teda-ink); max-width: 62ch; }
.teda-impact__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
@media (max-width: 820px) { .teda-impact__grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 520px) { .teda-impact__grid { grid-template-columns: 1fr; } }
.teda-impact__cell {
	display: flex; flex-direction: column; align-items: flex-start;
	background: var(--teda-sand); border: 2px solid var(--teda-sand-deep);
	border-radius: var(--teda-radius, 12px); padding: 24px;
}
.teda-impact__value { font-family: var(--teda-font-display); font-size: clamp(2.2rem, 5vw, 3rem); line-height: 1; color: var(--teda-green); }
.teda-impact__label { margin: 8px 0 12px; color: var(--teda-ink); }
.teda-impact__source {
	margin-top: auto; font-family: var(--teda-font-heading); font-weight: 800; font-size: 0.85rem;
	color: var(--teda-green); text-decoration: underline; min-height: var(--teda-tap, 44px);
	display: inline-flex; align-items: center;
}
.teda-impact__fallback {
	background: var(--teda-sand); border: 2px dashed var(--teda-sand-deep);
	border-radius: var(--teda-radius, 12px); padding: 22px; color: var(--teda-ink); max-width: 62ch;
}

/* On-page social links list (contact block). */
ul.teda-socials { margin-block: 0; }

/* --- Scroll-reveal (feedback: general animations, assets/js/scroll-reveal.js) */
/* .teda-reveal is added by JS only when IntersectionObserver + motion are
   available, so a JS-disabled visit never hides content permanently. */
.teda-reveal {
	opacity: 0;
	transform: translateY(16px);
	transition: opacity 0.5s ease, transform 0.5s ease;
}
.teda-reveal.is-visible {
	opacity: 1;
	transform: none;
}

/* --- Tabs (teda/tabs, teda/tabs-item; feedback) --------------------------- */
/* .teda-tabs__tablist is inserted by JS (assets/js/blocks-b.js); before JS
   runs, every .teda-tabs__panel is visible in order with its heading, so
   content is never lost without JS. */
.teda-tabs__tablist {
	display: flex; gap: 4px; overflow-x: auto; margin-bottom: 24px;
	border-bottom: 2px solid var(--teda-sand-deep);
}
.teda-tabs__tab {
	flex: none; min-height: var(--teda-tap, 44px); padding: 0 20px;
	border: 0; border-bottom: 3px solid transparent; background: transparent;
	font-family: var(--teda-font-heading); font-weight: 700; font-size: 0.95rem;
	color: var(--teda-muted); cursor: pointer;
}
.teda-tabs__tab:hover { color: var(--teda-ink); }
.teda-tabs__tab[aria-selected="true"] { color: var(--teda-green); border-bottom-color: var(--teda-green); }
.teda-tabs__tab:focus-visible { outline: 2px solid var(--teda-green); outline-offset: -2px; }
.teda-tabs__panel-label {
	font-size: var(--teda-fs-h5, 1.2rem); color: var(--teda-ink); margin: 0 0 12px;
}
/* Once JS has built the tablist, the panel's own heading would repeat its
   tab button's label, so hide it — it stays for the no-JS fallback above. */
.teda-tabs__tablist ~ .teda-tabs__panel .teda-tabs__panel-label { display: none; }

/* Below 600px the tablist gives way to an accordion: each panel's own label
   (hidden above) becomes the visible, clickable header instead. Same
   show(n)/aria-selected/hidden state as the tablist — only the trigger
   changes — so state persists across the breakpoint with no JS resize
   listener needed. */
@media (max-width: 600px) {
	.teda-tabs__tablist { display: none; }
	.teda-tabs__tablist ~ .teda-tabs__panel .teda-tabs__panel-label {
		display: flex; align-items: center; justify-content: space-between;
		gap: 8px; cursor: pointer; min-height: var(--teda-tap, 44px);
		margin: 0; padding: 12px 4px; font-size: var(--teda-fs-h6, 1.05rem);
		border-bottom: 2px solid var(--teda-sand-deep);
	}
	.teda-tabs__panel:first-of-type > .teda-tabs__panel-label {
		border-top: 2px solid var(--teda-sand-deep);
	}
	.teda-tabs__panel-label::after {
		content: '▾'; flex: none; color: var(--teda-muted);
		transition: transform 0.2s ease;
	}
	.teda-tabs__panel-label[aria-expanded="true"] { color: var(--teda-green); }
	.teda-tabs__panel-label[aria-expanded="true"]::after {
		color: var(--teda-green); transform: rotate(180deg);
	}
	.teda-tabs__panel-label:focus-visible {
		outline: 2px solid var(--teda-green); outline-offset: -2px;
	}
}

/* Editor-only: all tabs render stacked (no simulated tab switcher while
   editing — see blocks/editor.js), so each gets a labeled, bordered box. */
.teda-tabs-editor__item {
	border: 1px dashed var(--teda-sand-deep); border-radius: var(--teda-radius);
	padding: 16px; margin-bottom: 16px;
}
.teda-tabs-editor__item-label {
	font-size: var(--teda-fs-h6, 1.05rem); color: var(--teda-green); margin: 0 0 12px;
}
