/* shared */
/* ==========================================================================
   Tenos — shared block components.
   Auto-prepended to every block CSS bundle by the Blocks plugin's endpoints and by
   enqueue_template_blocks(). Everything here is used by two or more blocks;
   a rule used by exactly one block belongs in that block's own CSS.

   Tokens come from resources/css/global.css. Buttons from buttons.css.
   ========================================================================== */


/* --- Card (article cards, discover/careers cards) ------------------------ */

.card{
  display:flex;flex-direction:column;gap:1rem;
  padding:clamp(20px, 2.4vw, 32px);min-height:200px;
  text-decoration:none;color:var(--navy);
  transition:transform var(--speed) var(--ease);
}
.card:hover{transform:translateY(-4px)}
.card__label{font-size:var(--step-micro)}
.card__title{
  font-family:var(--font-display);font-size:var(--step-body);font-weight:700;line-height:1.25;
}
.card__body{font-size:var(--step-body)}
.card .link-arrow{margin-top:auto;align-self:flex-start}

.card--cyan  {background:var(--cyan)}
.card--green {background:var(--green)}
.card--yellow{background:var(--yellow)}
.card--white {background:var(--white)}
.card--purple{background:var(--purple);color:var(--white)}
.card--pink  {background:var(--pink);color:var(--white)}
.card--navy  {background:var(--navy);color:var(--white)}
.card--orange{background:var(--orange);color:var(--navy)}
.card--tall  {min-height:290px}

@media (prefers-reduced-motion: reduce){
  .card:hover{transform:none}
}


/* --- Collage (three overlapping photos) ----------------------------------
   Images sit on a 12x12 grid so they can overlap; below 900px the stack
   flattens into a simple grid.
   ------------------------------------------------------------------------ */

.collage{
  display:grid;
  grid-template-columns:repeat(12, 1fr);
  grid-template-rows:repeat(12, 1fr);
  aspect-ratio:4 / 3;
}
.collage>*{min-width:0;min-height:0;overflow:hidden}
.collage img{
  width:100%;height:100%;object-fit:cover;
  background:var(--grey-100);font-size:0.8125rem;color:var(--ink);
}

/* Mobile: the collage grid is proportional, so the composition holds at any
   width — flattening it into equal 4:3 tiles was what read badly, because the
   small overlapping accent became a third full-size photo (and in the CTA band
   and home hero that accent is a crop of a photo already in the collage, so it
   showed twice). Keep the layout, drop the accent: the tile it sits on always
   spans the area beneath it, so nothing leaves a hole. */
@media (max-width: 700px){
  /* Doubled class so this beats the per-block ratios (equal specificity, and
     block CSS loads after shared): the desktop ratios are landscape-ish, which
     leaves the two remaining photos squat on a phone. */
  .collage.collage{aspect-ratio:1 / 1}
  .collage__accent{display:none}
}


/* --- Media pair (two overlapping photos) --------------------------------- */

.media-pair{
  display:grid;
  grid-template-columns:repeat(12, 1fr);
  grid-template-rows:repeat(12, 1fr);
  aspect-ratio:4 / 3;
}
.media-pair>*{min-width:0;min-height:0;overflow:hidden}
.media-pair img{
  width:100%;height:100%;object-fit:cover;
  background:var(--grey-100);font-size:0.8125rem;color:var(--ink);
}
.media-pair__a{grid-area:1 / 1 / 8 / 9}
.media-pair__b{grid-area:4 / 6 / 13 / 13}

@media (max-width: 700px){
  .media-pair{grid-template-columns:repeat(2, 1fr);grid-template-rows:none;gap:8px;aspect-ratio:auto}
  .media-pair>*{grid-area:auto !important;aspect-ratio:4 / 3}
}


/* --- Breadcrumb ----------------------------------------------------------
   Rendered by tenos_breadcrumb() inside hero blocks and CPT singles.
   Inherits its colour from the surface it sits on.
   ------------------------------------------------------------------------ */

.breadcrumb__list{
  display:flex;flex-wrap:wrap;align-items:center;gap:0.5rem;
  margin:0;padding:0;list-style:none;
  font-size:var(--step-micro);font-weight:500;
}
.breadcrumb__list>li{display:flex;align-items:center;gap:0.5rem}
.breadcrumb__list>li+li::before{
  content:"";width:5px;height:5px;
  border-top:1.5px solid currentColor;border-right:1.5px solid currentColor;
  transform:rotate(45deg);opacity:0.7;
}
.breadcrumb a{text-decoration:none;opacity:0.75}
.breadcrumb a:hover{opacity:1;text-decoration:underline}
.breadcrumb [aria-current="page"]{font-weight:700}
.breadcrumb__home{display:inline-flex}
.breadcrumb__home svg{width:clamp(15px,1.15vw,22px);height:auto}


/* --- Tabs (category filters) --------------------------------------------- */

.tabs{display:flex;flex-wrap:wrap;gap:clamp(1.25rem, 3vw, 2.5rem)}
.tabs a{
  padding-bottom:6px;border-bottom:2px solid transparent;
  font-size:var(--step-nav);text-decoration:none;
}
.tabs a:hover{border-bottom-color:currentColor}
.tabs [aria-current="page"]{font-weight:700;border-bottom-color:currentColor}


/* --- Accordion -----------------------------------------------------------
   Real <details>/<summary> with a shared name, so one opens at a time and
   the whole thing works with JavaScript off. The +/− is CSS off [open].
   ------------------------------------------------------------------------ */

/* The artwork rules these at full-strength ink (#1E3096); currentColor keeps
   that true on navy surfaces too. */
.accordion{border-top:1px solid currentColor}
.accordion__item{border-bottom:1px solid currentColor}

.accordion__summary{
  display:flex;align-items:center;justify-content:space-between;gap:2rem;
  padding:clamp(14px, 1.8vw, 34px) 0;
  font-family:var(--font-display);font-size:var(--step-h3);font-weight:300;line-height:1.2;
  cursor:pointer;list-style:none;
}
.accordion__summary::-webkit-details-marker{display:none}
.accordion__summary:hover{opacity:0.72}

.accordion__summary::after{
  content:"";flex:none;width:22px;height:22px;
  background:
    linear-gradient(currentColor, currentColor) center / 100% 1.5px no-repeat,
    linear-gradient(currentColor, currentColor) center / 1.5px 100% no-repeat;
  transition:transform var(--speed) var(--ease);
}
.accordion__item[open] .accordion__summary::after{
  background:linear-gradient(currentColor, currentColor) center / 100% 1.5px no-repeat;
  transform:rotate(180deg);
}

.accordion__body{padding:0 clamp(2rem, 6vw, 5rem) clamp(20px, 2.4vw, 32px) 0;max-width:68ch}
.accordion__body>*{margin:0}
.accordion__body>*+*{margin-top:1rem}


/* --- Panel (inset card padding; surface-* supplies the colour) ----------- */

.panel{padding:clamp(28px, 4vw, 56px)}
.panel--flush{padding:0}


/* --- Small eyebrow (cards and feature panels) ---------------------------- */

.eyebrow--sm{font-size:var(--step-micro);font-weight:400;margin:0 0 0.875rem}

/* edit-hub-header */
/* ==========================================================================
   Edit Hub Header — design module 33.
   ========================================================================== */

/* Measured from Tenos_Edit_Landing_Page.pdf at 1920: roundel 119px, wordmark
   52.7px, 80px under the lockup, heading 70px/1.21, intro 32px/1.45, 100px
   over the tabs, 71px from the tabs to the band edge. */
.m-edith{padding-bottom:clamp(40px, 3.7vw, 71px)}
.m-edith__lockup{
  display:flex;align-items:center;gap:clamp(18px, 2.2vw, 42px);
  margin:0 0 clamp(28px, 4.2vw, 80px);
}
.m-edith__roundel{
  flex:none;display:block;
  width:clamp(84px, 6.2vw, 119px);height:auto;aspect-ratio:1;
}
.m-edith__wordmark{
  font-family:var(--font-display);
  font-size:calc(clamp(1.75rem, 1.15rem + 1.8vw, 3.3rem) * var(--ui-scale, 1));
  font-weight:700;line-height:1.06;letter-spacing:-0.02em;
  color:var(--navy);
}

.m-edith__heading{
  font-family:var(--font-display);
  font-size:var(--step-h1);
  font-weight:700;
  line-height:1.21;
  letter-spacing:-0.02em;
  max-width:20ch;
  margin:0 0 clamp(18px, 2.55vw, 49px);
}
.m-edith__intro{
  font-size:var(--step-lead);line-height:1.45;
  max-width:58ch;margin:0 0 clamp(40px, 5.2vw, 100px);
}

@media (max-width: 620px){
  .m-edith__heading{max-width:none}
  .m-edith__lockup{gap:1rem}
}

/* The tabs are the scroll-anchor for their own filter reload (?type=…#edit-hub);
   offset so they clear the sticky header when the page lands on them. */
#edit-hub{scroll-margin-top:calc(var(--tn-header-h, 72px) + 24px)}

/* article-feature */
/* ==========================================================================
   Article Feature — design module 24.
   ========================================================================== */

.m-afeat__panel{
  display:grid;
  grid-template-columns:minmax(0, 1fr) minmax(0, 1fr);
  gap:clamp(24px, 4vw, 64px);
  align-items:center;
}

.m-afeat__copy{
  display:flex;flex-direction:column;align-items:flex-start;
  max-width:44ch;
}
.m-afeat__copy p{margin:0}
/* Artboard (module 24 card): 58 top / 83 side padding, 18 under the eyebrow,
   title at 1.28 leading with 45 to the standfirst, 67 to the button. */
.m-afeat__panel{padding:clamp(24px, 3vw, 58px) clamp(24px, 4.3vw, 83px)}
.m-afeat__copy .eyebrow--sm{margin:0 0 clamp(10px, 0.95vw, 18px)}

.m-afeat__title{
  font-family:var(--font-display);
  font-size:var(--step-h3);
  font-weight:700;
  line-height:1.28;
  margin:0 0 clamp(16px, 2.35vw, 45px);
}
.m-afeat--lead .m-afeat__title{font-size:var(--step-h3);font-weight:700}

.m-afeat__copy .btn{margin-top:clamp(28px, 3.5vw, 67px)}

.m-afeat--text .m-afeat__panel{grid-template-columns:1fr}
.m-afeat__panel .media-pair img{width:100%;height:100%;object-fit:cover}

/* Single image: one photo at the 'hero-single' crop ratio, matching the heroes.
   Its own wrapper rather than .media-pair, whose 12x12 grid and phone rules
   (grid-area:auto !important) are built for the overlapping pair. */
.m-afeat__media--single{width:100%;aspect-ratio:1024 / 840}
.m-afeat__media--single>*{display:block;width:100%;height:100%}
.m-afeat__media--single img{width:100%;height:100%;object-fit:cover}

@media (max-width: 860px){
  .m-afeat__panel{grid-template-columns:1fr}
  .m-afeat__copy{max-width:none}
}

/* article-cards */
/* ==========================================================================
   Article Cards — design module 25. The card itself is shared (.card).
   ========================================================================== */

.m-acards__heading{
  font-family:var(--font-display);
  font-size:var(--step-h2);
  font-weight:300;
  line-height:1.15;
  letter-spacing:-0.01em;
  margin:0 0 clamp(28px, 3.4vw, 52px);
}

.m-acards__grid{
  display:grid;
  grid-template-columns:repeat(3, minmax(0, 1fr));
  gap:clamp(16px, 1.6vw, 26px);
}
/* Card metrics from the artboards at 1920: 506×482, 24px padding, label→title
   18px, title→body 40px, body→Learn More 50px (the link follows the copy, it
   is not pinned to the bottom), title set 25.3px/1.58. */
.m-acards__grid .card{
  position:relative;
  min-height:clamp(240px, 25.1vw, 482px);
  padding:clamp(16px, 1.25vw, 24px);
  gap:clamp(12px, 0.94vw, 18px);
}
.m-acards__grid .card__title{line-height:1.58}
.m-acards__grid .card__body{margin-top:clamp(8px, 1.15vw, 22px)}
.m-acards__grid .card .link-arrow{align-self:flex-start;margin-top:clamp(12px, 1.7vw, 32px)}

/* On the Edit hub the grey panels sit 68px apart, not a full section gap. */
.module.surface-grey + .m-acards.surface-grey{
  padding-top:0;
  margin-top:calc(clamp(40px, 3.55vw, 68px) - var(--section-y));
}

/* Corner image: half the card's width, bottom right, after the Learn More link.
   It sits in the flow (not absolutely placed), so a long title pushes it down
   rather than running underneath it. No placeholder fill: the project images
   are cut-outs whose transparent areas should show the card's colour. */
.m-acards__thumb{
  display:block;
  align-self:flex-end;
  margin-top:auto;
  width:calc(50% + clamp(16px, 1.25vw, 24px)); /* half the whole card: 50% of the content box + one padding */
  aspect-ratio:4 / 3;
  object-fit:cover;
}
.m-acards__grid .card > picture:has(.m-acards__thumb){display:contents}

/* Full-width image: bleeds to the card's edges across the top (4:3 "card" preset). */
.m-acards__media{
  display:block;
  margin:calc(-1 * clamp(16px, 1.25vw, 24px)) calc(-1 * clamp(16px, 1.25vw, 24px)) clamp(4px, 0.6vw, 10px);
  aspect-ratio:16 / 10;
  overflow:hidden;
}
.m-acards__media picture{display:contents}
.m-acards__image{display:block;width:100%;height:100%;object-fit:cover}
.m-acards--full-image .card{min-height:0}

.m-acards__more{margin-top:clamp(28px, 3.4vw, 52px)}

@media (max-width: 900px){.m-acards__grid{grid-template-columns:repeat(2, minmax(0, 1fr))}}
@media (max-width: 620px){.m-acards__grid{grid-template-columns:1fr}}

/* careers-cards */
/* ==========================================================================
   Careers Cards — design module 08, geometry from the approved
   html-modules/index.html build.
   ========================================================================== */

.m-careers{overflow:hidden}
.m-careers__head{
  display:grid;
  grid-template-columns:minmax(0, 1fr) minmax(0, 1fr);
  gap:clamp(32px, 5vw, 80px);
  align-items:flex-start;
}
.m-careers__heading{margin-bottom:clamp(1.5rem, 3.15vw, 3.75rem);max-width:16ch}
.m-careers .btn-row{margin-top:clamp(28px, 4.5vw, 86px)}
.m-careers__body{max-width:44ch;margin:0}

.m-careers__collage{aspect-ratio:1 / 0.7}
.m-careers__collage>:nth-child(1){grid-area:1 / 3 / 10 / 10}
.m-careers__collage>:nth-child(2){grid-area:7 / 8 / 10 / 10;z-index:1}
.m-careers__collage>:nth-child(3){grid-area:7 / 8 / 13 / 13}
.m-careers__collage img{width:100%;height:100%;object-fit:cover}

/* Single image: one photo at the 'hero-single' crop ratio, matching the heroes. */
.m-careers__media--single{width:100%;aspect-ratio:1024 / 840}
.m-careers__media--single>*{display:block;width:100%;height:100%}
.m-careers__media--single img{width:100%;height:100%;object-fit:cover}

.m-careers__grid{
  display:grid;
  grid-template-columns:repeat(3, minmax(0, 1fr));
  gap:clamp(16px, 2vw, 24px);
  align-items:end;
  margin-top:clamp(20px, 5vw, 40px);
}

@media (max-width: 900px){
  .m-careers__head{grid-template-columns:1fr}
  .m-careers__heading{max-width:none}
  .m-careers__grid{grid-template-columns:1fr}
}

/* news-listing */
/* ==========================================================================
   News Listing — the full news archive. Cards share .card (shared.css) and
   sit on the same grid metrics as Article Cards (design module 25); the type
   pills are the shared .tabs. Pagination is WordPress's paginate_links list.
   ========================================================================== */

.m-nlist__heading{
  font-family:var(--font-display);
  font-size:var(--step-h2);
  font-weight:300;
  line-height:1.15;
  letter-spacing:-0.01em;
  margin:0 0 clamp(28px, 3.4vw, 52px);
}

.m-nlist__tabs{margin-bottom:clamp(24px, 2.6vw, 44px)}

.m-nlist__count{
  margin:0 0 clamp(16px, 1.6vw, 26px);
  font-size:var(--step-micro);
  font-weight:700;
  color:var(--ink-strong);
}

.m-nlist__grid{
  display:grid;
  grid-template-columns:repeat(3, minmax(0, 1fr));
  gap:clamp(16px, 1.6vw, 26px);
}
.m-nlist__grid .card{
  position:relative;
  min-height:clamp(240px, 22vw, 420px);
  padding:clamp(16px, 1.25vw, 24px);
  gap:clamp(12px, 0.94vw, 18px);
}
.m-nlist__grid .card__title{line-height:1.45}
.m-nlist__grid .card__body{margin-top:clamp(4px, 0.8vw, 14px)}
.m-nlist__grid .card .link-arrow{align-self:flex-start;margin-top:auto;padding-top:clamp(12px, 1.7vw, 32px)}
/* Photo: half the card's width, bottom right after the Learn More link, as in
   Article Cards. No placeholder fill — the project images are cut-outs whose
   transparent areas should show the card colour. */
.m-nlist__thumb{
  display:block;align-self:flex-end;margin-top:auto;
  width:calc(50% + clamp(16px, 1.25vw, 24px)); /* half the whole card: 50% of the content box + one padding */
  aspect-ratio:4 / 3;object-fit:cover;
}
.m-nlist__grid .card:has(.m-nlist__thumb) .link-arrow{margin-top:0}

/* --- Pagination ----------------------------------------------------------- */
/* Previous / Next are the design's pill buttons; the page numbers between
   them are round chips, current one filled. Phones drop the numbers and keep
   "Page 2 of 6" between the two buttons. */
.m-nlist__pager{
  display:grid;
  grid-template-columns:auto 1fr auto;
  grid-template-areas:"prev pages next" "prev where next";
  align-items:center;
  gap:0.5rem clamp(12px, 1.6vw, 28px);
  margin-top:clamp(36px, 3.8vw, 64px);
  padding-top:clamp(20px, 2vw, 32px);
  border-top:1px solid var(--hairline, #C3C7E6);
}
.m-nlist__step--prev{grid-area:prev}
.m-nlist__step--next{grid-area:next}
.m-nlist__pages{grid-area:pages;justify-self:center}
.m-nlist__where{grid-area:where;justify-self:center}

.m-nlist__step{
  display:inline-flex;align-items:center;gap:0.5rem;
  min-height:clamp(44px, 3.1vw, 56px);padding:0 clamp(1.1rem, 1.4vw, 1.6rem);
  border:2px solid var(--navy);border-radius:var(--radius-pill);
  font-size:var(--step-small, 0.9375rem);font-weight:700;line-height:1;
  color:var(--navy);text-decoration:none;background:transparent;
  transition:background var(--speed) var(--ease), color var(--speed) var(--ease), transform var(--speed) var(--ease);
}
.m-nlist__step--next{background:var(--navy);color:var(--white)}
a.m-nlist__step:hover{transform:translateY(-2px)}
a.m-nlist__step--prev:hover{background:var(--navy);color:var(--white)}
a.m-nlist__step--next:hover{background:var(--navy-deep)}
.m-nlist__step.is-disabled{opacity:0.35;cursor:default}
.m-nlist__chev{font-size:1.5em;line-height:0.6;position:relative;top:-0.05em}

.m-nlist__pages{
  list-style:none;margin:0;padding:0;
  display:flex;align-items:center;gap:clamp(4px, 0.5vw, 8px);
}
.m-nlist__page{
  display:inline-flex;align-items:center;justify-content:center;
  width:clamp(40px, 2.9vw, 48px);height:clamp(40px, 2.9vw, 48px);
  border-radius:50%;
  font-size:var(--step-small, 0.9375rem);font-weight:700;line-height:1;
  color:var(--navy);text-decoration:none;
  border:2px solid transparent;
  transition:border-color var(--speed) var(--ease), background var(--speed) var(--ease), color var(--speed) var(--ease);
}
a.m-nlist__page:hover{border-color:var(--navy)}
.m-nlist__page.is-current{background:var(--navy);color:var(--white)}
.m-nlist__gap{
  display:inline-flex;align-items:center;justify-content:center;
  width:clamp(24px, 1.8vw, 32px);
  color:var(--navy);opacity:0.5;letter-spacing:0.05em;
}

.m-nlist__where{
  margin:0;
  font-size:var(--step-micro);font-weight:700;color:var(--ink-strong);
  display:none;
}

@media (max-width: 620px){
  .m-nlist__pager{grid-template-columns:auto 1fr auto;grid-template-areas:"prev where next"}
  .m-nlist__pages{display:none}
  .m-nlist__where{display:block;text-align:center}
  .m-nlist__step{padding:0 0.9rem}
}

.m-nlist__empty{max-width:46ch}

@media (max-width: 900px){.m-nlist__grid{grid-template-columns:repeat(2, minmax(0, 1fr))}}
@media (max-width: 620px){.m-nlist__grid{grid-template-columns:1fr}}

/* pull-quote */
/* ==========================================================================
   Pull Quote — design module 26.
   ========================================================================== */

/* Tenso_Talent_Discovery_Page.pdf at 1920 (band): grey panel the width of the
   container, padded 60 top / 90 left / 80 bottom; portrait 282 square, 170px
   to the copy; 57px eyebrow-to-quote, quote 40px/1.25, 51px to the name. */
.m-quote__figure.panel{
  display:grid;
  grid-template-columns:clamp(140px, 14.7vw, 282px) minmax(0, 1fr);
  gap:clamp(24px, 8.85vw, 170px);
  align-items:start;
  margin:0;
  padding:clamp(24px, 3.1vw, 60px) clamp(24px, 4.7vw, 90px) clamp(24px, 4.2vw, 80px);
}
.m-quote .eyebrow--sm{margin-bottom:clamp(0.875rem, 1.65vw, 2rem)}

.m-quote__portrait-wrap{aspect-ratio:1 / 1}
.m-quote__portrait,
.m-quote__portrait-wrap img{
  width:100%;height:100%;object-fit:cover;
  background:var(--grey-100);
}

.m-quote__text{
  margin:0 0 clamp(20px, 2.65vw, 51px);
  font-family:var(--font-display);
  font-size:var(--step-h3);
  font-weight:700;
  line-height:1.25;
  max-width:34ch;
}
.m-quote__text p{margin:0}
.m-quote__text p+p{
  margin-top:1rem;
  font-family:var(--font-body);
  font-size:var(--step-body);
  font-weight:400;
  line-height:1.6;
  max-width:62ch;
}

.m-quote__name{font-weight:700}
.m-quote__role{font-weight:400}

@media (max-width: 700px){
  .m-quote__figure{grid-template-columns:1fr;gap:1.5rem}
  .m-quote__portrait-wrap{max-width:180px}
  .m-quote__text{max-width:none}
}

/* cta-banner */
/* ==========================================================================
   CTA Banner — design modules 28 + 10.
   ========================================================================== */

.m-cta__heading{
  font-family:var(--font-display);
  font-size:var(--step-h2);
  font-weight:300;
  line-height:1.15;
  letter-spacing:-0.01em;
  max-width:26ch;
  margin:0 0 clamp(18px, 2vw, 28px);
}
.m-cta__body{max-width:70ch}
.m-cta__body p{margin:0}
.m-cta__body p+p{margin-top:1.25em}

/* Band — the full-width navy call to action. Quieter than the other variants:
   a small eyebrow over a heading that settles at 27px on desktop. */
/* Tenos_Experienced_Jobs_Listing_Page.pdf at 1920: 100px from eyebrow to
   heading, 106px from the 40px heading to the body. */
.m-cta--band .eyebrow{
  font-size:var(--step-eyebrow);
  margin-bottom:clamp(10px, 2.7vw, 52px);
}
.m-cta--band .m-cta__heading{
  font-size:var(--step-h3);
  line-height:1.25;
  margin-bottom:clamp(18px, 2.9vw, 56px);
  max-width: 100%;
  @media(min-width:1200px) {
    max-width: 60%;
  }
}

/* Inset panel — bold heading, tighter rhythm. Tenso_Talent_Discovery_Page.pdf
   at 1920: panel 443 tall, padding 56 top / 80 sides / 72 bottom; 50px from
   the heading to the body, 59px from the body to the button. */
.m-cta__panel.panel{
  min-height:clamp(220px, 23vw, 443px);
  padding:clamp(24px, 2.9vw, 56px) clamp(24px, 4.2vw, 80px) clamp(24px, 3.75vw, 72px);
}
.m-cta--panel .m-cta__heading{
  font-size:var(--step-h3);
  font-weight:700;
  margin-bottom:clamp(12px, 2.6vw, 50px);
}
.m-cta--panel .btn-row{margin-top:clamp(24px, 3vw, 58px)}

/* Green collage band — collage left, copy right. Geometry from the approved
   html-modules/index.html build (module 10). */
.m-cta__grid{
  display:grid;
  grid-template-columns:minmax(0, 1fr) minmax(0, 1fr);
  gap:clamp(32px, 5vw, 80px);
  align-items:flex-start;
}
.m-cta--collage .m-cta__heading{
  font-size:var(--step-h1);
  font-weight:700;
  line-height:1.05;
  letter-spacing:-0.02em;
  margin-bottom:1.75rem;
}
.m-cta__collage{aspect-ratio:1 / 0.9}
.m-cta__collage>:nth-child(1){grid-area:1 / 1 / 5 / 7}
.m-cta__collage>:nth-child(2){grid-area:3 / 5 / 5 / 7;z-index:1}
.m-cta__collage>:nth-child(3){grid-area:3 / 5 / 12 / 11}
.m-cta__collage img{width:100%;height:100%;object-fit:cover}

/* Single image: one photo at the 'hero-single' crop ratio, matching the heroes. */
.m-cta__media--single{width:100%;aspect-ratio:1024 / 840}
.m-cta__media--single>*{display:block;width:100%;height:100%}
.m-cta__media--single img{width:100%;height:100%;object-fit:cover}

@media (max-width: 860px){
  .m-cta__grid{grid-template-columns:1fr}
  .m-cta__heading{max-width:none}
}

