/* ==========================================================================
   EVAA — TEAM PAGE
   Built 2026-07-30 from the client's own copy doc
   (122kGJprZUSiwXjWsinDyuxB1A36Fl68voVrpKi3P3YY), VERBATIM, in the doc's order.

   ⚠️ ADDITIVE ONLY. Nothing is appended to site.css, v4.css or about.css.
   Team loads site.css (tokens, buttons, .reveal, .phero) + v4.css (.v4-sec,
   .v4-lede) + pinned-bg.css (the shared pin module) + this file.

   ---- 🔴 THE DECISION THAT SHAPED THIS PAGE --------------------------------
   EVAA IS TWO PEOPLE ON THIS PAGE. The copy claims "a team of veterinarians,
   industry leaders, and business professionals" bringing "decades of
   experience" across six disciplines — and then names two.

   That gap is the exact finding that killed V2: the page was composed for a
   NETWORK while EVAA is three people, so every display-scale claim read as
   inflation the moment the reader worked out the size. A Team page is the
   WORST place for it, because the reader literally counts the faces.

   Brees, 7/30, asked to lean INTO the size rather than disguise it. So there
   is no card grid here. Two cards in a grid built for six reads as an
   unfinished page — it invites the count and then loses it. Instead each
   person gets a FULL-WIDTH editorial profile with a large portrait and their
   whole bio, which reads as deliberate and substantial. EVAA's own homepage
   line is "We are a small team by design."
   ⚠️ Do NOT "tidy" §4 into a two-up card grid. That is the one shape this
   page was specifically built to avoid.

   ---- ⚠️ THE COPY OVERLAPS About AND homepage §8 --------------------------
   The intro restates About's opening; "Our Leadership Philosophy" restates
   About's "Our Philosophy"; and BOTH bios are longer versions of homepage §8's.
   This is the THIRD page where the client's copy repeats itself (About §3 vs
   homepage §6 was the first two). Copy is verbatim, so the words stay and the
   design is the only lever.
   🔴 The underlying COPY duplication is a copy problem, not a design one, and
   is STILL UNRAISED with Sean/Alie. See session-notes.md.

   ---- COLOUR DISCIPLINE ----------------------------------------------------
   site.css's rule holds: red belongs to CREAM grounds, gold to NAVY, neither
   crosses.
   ⚠️ GROUND ORDER IS navy → navy → navy → cream → band AS OF 7/30, and the
   "no two adjacent sections share a ground" rule is DELIBERATELY suspended for
   the first three. Brees asked for §2 to go dark "so that way the hero leads
   into this section", which is the homepage's and PWU's own hero-dark →
   intro-dark → cream shape; §3 was already navy. The run works because none of
   the three is a flat slab — bright photo panels in the hero, a warm
   full-height image in §2, a full-bleed photograph in §3 — and the page opens
   to CREAM at §4, exactly where the two real people are.
   🔴 If that dark run ever needs breaking, change §2 — NEVER §3. §3's whole
   treatment is cream text over a dark scrimmed photograph; a light ground
   destroys it.
   ⚠️ GOLD APPEARS EXACTLY ONCE — the hero eyebrow's mark, matching About and
   the deleted PWU hero. v1 died as "a bank or lawyer site" on navy+gold spread
   everywhere. Do not add a second.
   No gradients. No coloured left borders on cards. (Standing house rules.)

   ---- 📌 THE STANDING CASCADE LESSON, NOW SIX FOR SIX ---------------------
   Five separate bugs on About and PWU came from the same cause: a bare class
   like `.ab-phil__turn` (0,1,0) losing to an inherited element-descendant rule
   like `.ab-phil__body p` (0,2,1), which rendered a display statement at body
   size and looked like a FONT CHOICE rather than a broken rule. Screenshots
   never caught one of them; measuring computed styles caught all five.

   🔴 THE SIXTH (7/30) WAS A DIFFERENT CAUSE AND IS THE MORE USEFUL ONE:
   `.v4-sec--dark .tm-intro` had the RIGHT specificity but a DESCENDANT
   combinator, while both classes sat on the SAME element. It matched nothing,
   and §2's lead rendered at 1.19:1 on navy — invisible. **Counting classes is
   not enough; the selector has to actually match.**

   ⚠️ SO THE RULE IS NOT "always use three classes" — that was the old note, and
   it is now wrong. §2's lead is deliberately ONE class, because §2 was
   restructured to mirror About and the competing rule no longer exists.
   THE RULE IS: remove the competition where you can, out-specify it where you
   can't, and ASSERT THE COMPUTED OUTCOME either way.
   `.shots/team-measure.js` checks computed size AND colour for exactly this.
   ========================================================================== */

/* --------------------------------------------------------------------------
   §1 — HERO (navy). .phero--dark + .triptych, both from site.css.

   🔴 REBUILT 7/30. This was a text-only hero with a full-bleed video behind a
   scrim, copied from About — and About had that shape ONLY because the 7/28
   photography audit found one usable photo on disk. The 7/29 media baseline
   killed that constraint, but the fix was "put a video behind the existing
   layout" and the layout was never revisited. Team inherited it on 7/30.
   ⚠️ THIS FILE PREVIOUSLY CARRIED A JUSTIFICATION FOR THE COPIED SHAPE —
   "Brees has twice overruled make-it-different-for-variety's-sake, so the
   interior pages share one language." That is a real principle of his, but it
   was used here to defend what was an accident of asset supply, not a
   decision. Same failure as the "DELIBERATELY UNPHOTOGRAPHED" incident.
   Brees, 7/30: "is there a reason why we didn't create something unique like
   that for the Team page and the About page?" There wasn't a live one.

   🔴 DELETED IN THE SAME EDIT, NOT ORPHANED: .tm-hero__text, .tm-hero__video
   and .tm-hero__scrim. The 7/28 lesson — deleting V2 stranded 54KB of orphans
   in site.css, and the old PWU rules are still sitting there.
   ⚠️ NO padding-top here. .phero--dark sets `padding-block: 0 …` precisely
   BECAUSE the triptych supplies the top padding via .triptych__text. The old
   text-only hero had to re-supply it; this one must not, or the hero gains a
   double gap.
   -------------------------------------------------------------------------- */
/* Centred, matching PWU — that is the hero Brees pointed at. */
.tm-hero .triptych__text { text-align: center; }
.tm-hero .phero__title,
.tm-hero .phero__lede { margin-inline: auto; }
/* site.css caps .phero__title at 16ch, tuned for "Building Exceptional
   Practices Together". This title is longer and broke badly at 16ch inside the
   560px centre column. */
.tm-hero .phero__title { max-width: 20ch; }
.tm-hero .phero__lede { margin-bottom: 0; max-width: 34ch; }

/* --------------------------------------------------------------------------
   SHARED — the Team section heading
   Same reasoning as About's .ab-h2: the copy doc gives each section ONE line
   and no display statement beneath it, so the homepage's eyebrow + .v4-h2 pair
   has nothing to fill its second slot. One mid-scale heading instead. Nothing
   is invented to fill a slot.
   ⚠️ Deliberately a SEPARATE class from .ab-h2, not a shared one: about.css is
   not loaded here, and reaching into another page's stylesheet would couple
   two pages that have no reason to move together.
   -------------------------------------------------------------------------- */
.tm-h2 {
  font-family: var(--font-head); font-weight: 500;
  font-size: clamp(1.5rem, 2.6vw, 2.1rem); line-height: 1.2;
  color: var(--navy); max-width: 24ch; margin: 0;
}
.tm-h2::before {
  content: ""; display: block;
  width: 28px; height: 2px; background: var(--red);
  margin-bottom: 16px;
}
/* On navy the red rule measures 3.05:1 and muddies — site.css's rule. Cream at
   .35 is decorative only and carries no meaning. */
.v4-sec--dark .tm-h2 { color: var(--cream); }
.v4-sec--dark .tm-h2::before { background: rgba(251,247,239,.35); }

/* --------------------------------------------------------------------------
   §2 — INTRO (navy as of 7/30)
   🟢 STRUCTURALLY IDENTICAL TO About §2 — and that IS the instruction, not an
   assumption. Brees, 7/30: "Team section two, can you style it just like the
   About section two with the line and everything?" The "line" is `.v4-spine`,
   v4.css's continuity thread (also used by homepage §2), which v4.css already
   handles on a dark ground at .22 cream.
   ⚠️ An earlier version of this comment justified the shared shape with "Brees
   has twice overruled make-it-different-for-variety's-sake, so the interior
   pages share one language." That principle is real, but it was doing the job
   of a decision nobody had made — the same move that produced the copied
   text-only hero (see §1 above). It is now an explicit instruction, so the
   comment records the instruction instead of a rationalisation.
   -------------------------------------------------------------------------- */
.tm-intro__grid {
  display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr);
  gap: clamp(28px, 5vw, 72px); align-items: center;
}
/* 🟢 ONE CLASS IS NOW CORRECT, AND THAT IS A STRUCTURAL FIX — NOT A RELAPSE.
   This rule used to be the 3-class `.tm-intro .tm-intro__body .tm-intro__lead`
   because the lead sat INSIDE `.tm-intro__body` and lost to
   `.tm-intro__body p` (0,2,1). On 7/30 §2 was restructured to mirror About §2
   (Brees: "style it just like the About section two with the line and
   everything"), which moves the lead OUT of the body div — so there is no
   longer an element-descendant rule competing with it at all.
   ⚠️ The competition was removed at the source rather than out-specified. Do
   NOT re-nest the lead inside `.tm-intro__body` without restoring the long
   selectors — `.shots/team-measure.js` asserts the computed size and colour and
   will catch it either way. */
.tm-intro__lead {
  font-family: var(--font-head); font-weight: 400;
  font-size: clamp(1.3rem, 2.4vw, 1.85rem); line-height: 1.35;
  color: var(--navy); max-width: 28ch; margin: 0 0 var(--s5);
}
/* Mirrors About's .ab-intro — the column that holds lead + body, so the
   figure sits beside the pair rather than beside the body alone. */
.tm-intro__col { min-width: 0; }
.tm-intro__body { display: grid; gap: var(--s3); }
.tm-intro__body p { color: var(--navy-soft); font-size: 17px; line-height: 1.72; max-width: 62ch; margin: 0; }

/* --- §2 ON NAVY (Brees, 7/30) ---------------------------------------------
   The two rules above were written for a CREAM ground: --navy measures 1.3:1
   on navy-deep and --navy-soft 1.9:1 — both effectively invisible. These are
   the dark-ground counterparts, and they mirror about.css exactly now that the
   two sections share a structure.

   🔴 KEEP THE COMPOUND SELECTOR — `.v4-sec--dark.tm-intro`, NO SPACE.
   The first cut wrote `.v4-sec--dark .tm-intro` with a DESCENDANT combinator,
   but both classes sit on the SAME element
   (`<div class="v4-sec v4-sec--dark tm-intro">`), so the selector matched
   NOTHING and the lead kept its cream-ground `--navy` — measured at 1.19:1 on
   navy-deep, i.e. invisible.
   ⚠️ That was the SIXTH cascade bug here and the first caused by a wrong
   COMBINATOR rather than too few classes. Counting specificity is not enough.
   ⚠️ Caught by `.shots/team-measure.js` reading computed colour, which now
   permanently asserts lead ≠ body and both ≥4.5:1 on the real ground.
   ⚠️ `.v4-spine`'s thread is handled on dark by v4.css
   (`.v4-sec--dark .v4-spine::before`), so it needs nothing here. ---------- */
.v4-sec--dark .tm-intro__body p { color: rgba(251, 247, 239, .82); }
.v4-sec--dark.tm-intro .tm-intro__lead { color: var(--cream); }

.tm-figure { margin: 0; }
.tm-figure img {
  width: 100%; height: auto; display: block;
  border-radius: var(--r-md); object-fit: cover;
}
.tm-figure--tall img { aspect-ratio: 4 / 5; }

/* --------------------------------------------------------------------------
   §3 — OUR LEADERSHIP PHILOSOPHY (navy, pinned background)
   Uses the shared pinned-bg module (pinned-bg.css) — the third page to do so,
   which is what makes it a module rather than a one-off.
   🔴 NEVER add overflow:hidden to a [data-pinned-bg] section. It does not
   error; it silently stops pinning. pinned-bg.css carries the full note.

   🔴 .55 → .72 ON 8/10, BECAUSE THE PHOTOGRAPH UNDERNEATH WAS SWAPPED AND THE
   SCRIM WAS NEVER RE-TUNED.
   The paragraph below is the ORIGINAL note and it is now FALSE — kept because
   it is the whole explanation of how this broke:
     · "THE SCRIM HERE IS DELIBERATELY LIGHT (.55), AND THAT IS THE POINT.
        Brees on About §4, 7/29: 'I can't really see the image behind there so
        we might have to lighten the background a little bit.' About's image
        carries a blown-out sun flare, so its scrim could not go below ~.74
        without failing 1.4.3. This image was chosen to break that trade: it is
        a NEAR-BLACK LOW-KEY FRAME, so a MUCH lighter scrim still composites
        dark enough for cream text."
   That reasoning was sound for the image it was written about. `cce9bdb`
   ("Review build for Sean") replaced `team-philosophy-bg.jpg` with a MID-TONE
   EXAM-ROOM FRAME — two clinicians, a bright wall, a blown highlight — and the
   .55 stayed. Measured 8/10: body copy 3.57:1 against a 4.5 floor.
   📌 **A tuned constant carries an assumption about the asset underneath it.
   Swap the asset and the constant is no longer a decision, it is a leftover.**
   🔴 AND THE CHECK EXISTED AND SAID SO. `.shots/team-contrast.js` reported
   "2 pair(s) below the floor" — it had simply not been run since the swap.
   **This was never an undetected failure; it was an unrun check.**
   ⚠️ .72 is close to the ~.74 Brees objected to on About, so the photograph is
   quieter than it was. The lighter alternative, if that matters more than the
   current hierarchy: take `.tm-phil__body p` from `rgba(cream,.82)` to full
   cream and the scrim clears 4.5:1 at .64 instead — more photograph, at the
   cost of the body/pull tonal split.
   ⚠️ Re-run `node .shots/team-contrast.js` if EITHER the alpha or the image
   changes. deep-a11y.js cannot see an image behind a scrim and passes this
   section regardless.
   -------------------------------------------------------------------------- */
.tm-phil__scrim { background: rgba(18, 29, 59, .72); }

.tm-phil { max-width: 760px; }
.tm-phil__body { display: grid; gap: var(--s3); margin-top: var(--s4); }
.tm-phil__body p {
  color: rgba(251,247,239,.82); font-size: 17px; line-height: 1.75;
  max-width: 58ch; margin: 0;
}
/* THE PULL STATEMENT — "leadership is measured not by titles, but by service".
   🔴 THREE CLASSES (0,3,0) so it beats `.tm-phil__body p` (0,2,1) on class
   count REGARDLESS of source order. This is precisely the rule that broke
   silently five times on About and PWU. Do not shorten it. */
.tm-phil .tm-phil__body .tm-phil__turn {
  font-family: var(--font-head); font-weight: 500;
  font-size: clamp(1.45rem, 2.9vw, 2rem); line-height: 1.3;
  color: var(--cream); max-width: 24ch;
  margin: var(--s2) 0;
}

/* --------------------------------------------------------------------------
   §4 — MEET OUR LEADERSHIP TEAM (cream)
   🔴 THE PAGE'S REASON TO EXIST. Full-width editorial profiles, NOT a grid.
   See the header note — this shape is the answer to "two people, network-scale
   claims", and reverting it to cards re-creates the problem.
   -------------------------------------------------------------------------- */
/* 🔴 REBUILT 7/31 — TWO CARDS SIDE BY SIDE, BIOS BEHIND A DISCLOSURE.
   Brees: "I don't know that I like having huge profiles like this for each team
   member. I think we should have profiles, their title and then a button to
   click" … and then "the team profiles should be side by side like the
   homepage."
   So this now mirrors `.v4-leaders` on the homepage: a two-column grid of
   portrait-over-name-over-role. The four bio paragraphs move into a native
   <details> instead of running full-width down the page.

   ⚠️ THIS REVERSES A DELIBERATE 7/30 DECISION, AND THE OLD REASONING IS WORTH
   KEEPING: the full-width editorial treatment was chosen BECAUSE there are only
   TWO people — a sparse card grid is what killed V2 on this page. Brees was
   shown that history and chose cards anyway, with the bios kept (not cut) behind
   a button, which is what stops two cards reading as an empty team.
   🔴 HE ALSO ASKED FOR SEPARATE PROFILE PAGES FIRST and moved off it when shown
   the cost: 208 and 181 words each, against a house rule of 3+ images AND a hero
   video per page. Do not "finish the job" by building those pages later without
   more copy from the client.

   ⚠️ THE STICKY PORTRAIT IS GONE with the tall two-column block that needed it,
   and so is `.tm-person--flip`. Both were deleted with their markup rather than
   left behind — this file has been bitten in both directions before.
   ⚠️ PORTRAITS STAY IN COLOUR. Homepage §8 greyscales them as a workaround for
   Sean's sunglasses; the notes are explicit that it is deliberately NOT applied
   here (settled 7/30). Do not add a grayscale filter to match the homepage. */
.tm-people {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(28px, 4vw, 64px); margin-top: var(--s6);
  align-items: start;
}
@media (max-width: 760px) { .tm-people { grid-template-columns: 1fr; } }

.tm-person { display: block; }
.tm-person__figure { margin: 0 0 var(--s3); }
.tm-person__figure img {
  width: 100%; height: auto; display: block;
  aspect-ratio: 4 / 5; object-fit: cover;
  border-radius: var(--r-md);
}

/* THE DISCLOSURE — native <details>, the pattern already proven by §7's charter
   on the Network page: keyboard-operable for free, works with JS off, and
   announced as collapsed rather than as hidden text.
   🔴 THE BIO PARAGRAPHS CARRY NO `.reveal`, DELIBERATELY. `.reveal` starts at
   opacity:0 and only an IntersectionObserver adds `.is-in` — and an element
   inside a CLOSED <details> is never observed, so the copy would open up
   invisible. §7's `.net-vow__desc` has no `.reveal` for exactly this reason. */
.tm-person__more { margin-top: var(--s3); }
.tm-person__toggle {
  display: inline-flex; align-items: center; gap: 10px;
  cursor: pointer; list-style: none;
  font-family: var(--font-body); font-size: 15px; font-weight: 700;
  letter-spacing: .02em; color: var(--navy);
  padding: 8px 0;
}
.tm-person__toggle::-webkit-details-marker { display: none; }
.tm-person__toggle-label { border-bottom: 1px solid var(--red); padding-bottom: 2px; }
.tm-person__toggle-mark {
  width: 9px; height: 9px; flex: 0 0 auto;
  border-right: 2px solid var(--red); border-bottom: 2px solid var(--red);
  transform: translateY(-2px) rotate(45deg);
  transition: transform .25s var(--ease);
}
.tm-person__more[open] .tm-person__toggle-mark { transform: translateY(1px) rotate(-135deg); }
.tm-person__more[open] .tm-person__toggle-label { border-bottom-color: transparent; }
@media (prefers-reduced-motion: reduce) { .tm-person__toggle-mark { transition: none; } }

/* The group label above each name — "Executive Leadership" / "Operations &
   Business Services". These are the client's own words from the copy doc.
   ⚠️ RED, not gold: this is a cream ground and gold is navy-only (site.css).
   Gold's single appearance on this page is the hero eyebrow. */
.tm-person__group {
  font-family: var(--font-body); font-weight: 700;
  font-size: 12px; letter-spacing: .14em; text-transform: uppercase;
  color: var(--red); margin: 0 0 var(--s3);
  display: flex; align-items: center; gap: 12px;
}
.tm-person__group::before {
  content: ""; width: 24px; height: 2px; background: var(--red); flex: none;
}

.tm-person__name {
  font-family: var(--font-head); font-weight: 500;
  font-size: clamp(1.7rem, 3.2vw, 2.4rem); line-height: 1.15;
  color: var(--navy); margin: 0;
}
.tm-person__role {
  font-family: var(--font-body); font-weight: 500;
  font-size: 15px; letter-spacing: .04em;
  color: var(--navy-soft); margin: var(--s1) 0 var(--s4);
}
.tm-person__bio { display: grid; gap: var(--s3); }
.tm-person__bio p {
  color: var(--navy-soft); font-size: 17px; line-height: 1.75;
  max-width: 64ch; margin: 0;
}

/* --------------------------------------------------------------------------
   §5 — CLOSE (band) + the page's only CTA
   ⚠️ The button row is the ONLY thing on this page not in the copy doc, and it
   adds no words of its own — both labels are lifted from the homepage's §10,
   and both point at the same mailto as every other CTA on the site.
   Brees, 7/30: "the CTA at the bottom of the team page needs to be much
   better." It was a cream band with two buttons and nothing else — About's §5
   works because "Our Commitment" and its body sit above the buttons, and the
   TEAM COPY DOC HAS NO CLOSING SECTION AT ALL, so these buttons had no context.

   ⚠️ ONE LINE IS BORROWED AND NOTHING IS INVENTED. "Let's Start the
   Conversation" is Sean's own words and is ALREADY the eyebrow on both the
   homepage §10 and PWU §6 — the site's standing CTA label, same category as the
   button labels About §5 lifted. No block copy was taken.
   🔴 Do NOT add a headline or body by lifting §10's block copy — considered and
   rejected, because this site's copy already repeats itself across three pages.
   ⚠️ IT IS AN <h2> HERE, NOT AN EYEBROW. On the homepage and PWU it sits ABOVE
   a real headline; this section has no headline, so promoting the label to the
   heading gives the section a genuine accessible name (aria-labelledby) instead
   of leaving an unnamed region, and stops it reading as a floating label over
   nothing. Same words, different role.

   Structure mirrors .pwu-close (image + flat scrim + centred content), which is
   the site's established close language on both other pages that have one.
   -------------------------------------------------------------------------- */
.tm-close {
  position: relative; overflow: hidden; text-align: center;
  /* 🔴 A REAL background-color is load-bearing, not decoration. If the image
     404s, the scrim would otherwise sit over the page's CREAM base and cream
     text would land on a light ground. This is the exact defect deep-a11y
     surfaced on PWU §6 (it reported 1.00:1 because it resolves the SECTION's
     background-color and cannot see the image). Never silence the checker
     instead of giving the section a real dark ground. */
  background: var(--navy-deep);
}
/* 🔴 object-position IS LOAD-BEARING HERE — QA'd by Brees 7/31: "let's start
   the conversation - show both dogs faces."
   THE CAUSE: this section renders the image in a ~3.06:1 letterbox band
   (1280x418 at desktop) from a 1.5:1 source. With `cover` only ~49% of the
   image height is visible, and the default `50% 50%` takes the MIDDLE strip —
   which is the dogs' bodies. Both heads sit in the top third and were being
   cropped straight out, so the section showed two headless dogs.
   18% pulls the window up to the heads. Derived, not eyeballed: visible band =
   [P x (1 - 0.49), P x (1 - 0.49) + 0.49], and the black dog's head starts at
   ~9% of the image height, so P must be <= ~0.18.
   ⚠️ RE-DERIVE THIS IF THE IMAGE OR THE BAND HEIGHT CHANGES. A different source
   ratio moves the visible fraction and this number stops being right — and the
   failure is silent, because a headless-dog crop still looks like a photograph.
   📌 Same family as the two centring bugs found the same day: a value that is
   correct for one box and wrong for another, invisible until someone looks. */
.tm-close__bg {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; object-position: 50% 18%; z-index: 0;
}
.tm-close__scrim { position: absolute; inset: 0; z-index: 1; background: rgba(18, 29, 59, .82); }
.tm-close .wrap { position: relative; z-index: 2; }
.tm-close__title {
  font-family: var(--font-head); font-weight: 500;
  font-size: clamp(1.9rem, 3.6vw, 2.9rem); line-height: 1.18;
  color: var(--cream); max-width: 18ch; margin: 0 auto;
}
.tm-close .btn-row { justify-content: center; margin-top: var(--s5); }

/* --------------------------------------------------------------------------
   RESPONSIVE
   🔴 THIS BLOCK MUST STAY BELOW THE BASE RULES. Media queries add NO
   specificity — source order decides between equal-weight rules. On PWU the
   collapse was written ABOVE the two-column rule and lost at every width,
   rendering a 35px lead inside a 160px column at 390px. Caught by reading
   computed grid-template-columns, not by looking. Do not move this up.
   -------------------------------------------------------------------------- */
@media (max-width: 860px) {
  .tm-intro__grid { grid-template-columns: 1fr; }
  .tm-figure--tall img { aspect-ratio: 16 / 10; }

  /* ⚠️ The old single-column / un-pin / un-flip overrides were DELETED here on
     7/31 with the two-column editorial block they undid. `.tm-people` collapses
     to one column in its own rule now, and there is no pin and no flip left to
     turn off. Cap the portrait so a card does not become a full-width poster. */
  .tm-person__figure img { max-width: 420px; }
}

@media (prefers-reduced-motion: reduce) {
  /* Sticky is a scroll-coupled position change. Unpin, exactly as pinned-bg.css
     does for the same reason. */
  .tm-person__figure { position: static; top: auto; }
}
