:root{
  --red:#EE3E3B; --red-deep:#c9302d; --black:#231F20; --white:#fff;
  --yellow:#FAE900; --blue:#00AEFF; --grey:#E6E7E8; --grey-mid:#9a9b9e;
  --display:"Figtree","Andes",-apple-system,"Segoe UI",Helvetica,Arial,sans-serif;
  --body:"Source Sans 3","Source Sans Pro",-apple-system,"Segoe UI",Helvetica,Arial,sans-serif;
  --pad:20px; --maxw:1240px; --hdr:72px;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;font-family:var(--body);font-weight:400;font-size:17px;line-height:1.6;color:var(--black);background:var(--white);text-wrap:pretty;overflow-x:hidden}
img{max-width:100%;display:block}
h1,h2,h3,h4{font-family:var(--display);font-weight:800;line-height:1.05;letter-spacing:-0.02em;margin:0}
p{margin:0}
a{color:var(--red);text-decoration:none}
a:hover{color:var(--red-deep);text-decoration:underline}
.wrap{width:100%;max-width:var(--maxw);margin:0 auto;padding:0 var(--pad)}
.eyebrow{font-family:var(--display);font-weight:800;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--red)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-9999px;top:0;background:var(--yellow);color:var(--black);padding:12px 18px;z-index:100}
.skip:focus{left:8px;top:8px}
:focus-visible{outline:3px solid var(--blue);outline-offset:3px}

/* buttons — all tap targets >= 44px */
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:12px 26px;
  font-family:var(--display);font-weight:800;font-size:16px;letter-spacing:.01em;border-radius:999px;
  border:2px solid transparent;cursor:pointer;transition:transform .18s ease,background .18s ease,color .18s ease,box-shadow .18s ease;text-decoration:none}
.btn:hover{text-decoration:none;transform:translateY(-2px)}
.btn-red{background:var(--red);color:#fff;box-shadow:0 6px 18px rgba(238,62,59,.28)}
.btn-red:hover{background:var(--red-deep);color:#fff;box-shadow:0 10px 26px rgba(238,62,59,.34)}
.btn-ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.85)}
.btn-ghost:hover{background:#fff;color:var(--black)}
.btn-dark{background:var(--black);color:#fff}
.btn-dark:hover{background:#000;color:#fff}
.btn-yellow{background:var(--yellow);color:var(--black)}
.btn-yellow:hover{background:#ffef3d;color:var(--black)}

/* photo placeholder: real <img> drops on top; stripes show until assets land */
.ph{position:relative;overflow:hidden;background:repeating-linear-gradient(135deg,#eceded,#eceded 11px,#e0e1e3 11px,#e0e1e3 22px)}
.ph::after{content:attr(data-ph);position:absolute;left:12px;right:12px;bottom:12px;
  font:500 11px/1.45 ui-monospace,SFMono-Regular,Menlo,monospace;color:#6c6d70;letter-spacing:.02em}
.ph img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 32%}

/* header */
.hdr{position:sticky;top:0;z-index:60;background:rgba(255,255,255,.96);backdrop-filter:saturate(1.4) blur(8px);border-bottom:1px solid var(--grey)}
.hdr-in{display:flex;align-items:center;gap:16px;min-height:var(--hdr);max-width:var(--maxw);margin:0 auto;padding:0 var(--pad)}
.hdr-in>.btn{white-space:nowrap}
.logo{display:flex;align-items:center;flex:0 0 auto}
.logo img{height:54px;width:auto}
.wordmark{font-family:var(--display);font-weight:900;font-size:22px;letter-spacing:-.03em;color:var(--red)}
.wordmark em{font-style:normal;color:var(--black)}
.ftr .wordmark{font-size:26px;display:inline-block;margin-bottom:14px}
.nav{display:none}
.nav a{font-family:var(--display);font-weight:700;font-size:15px;color:var(--black);padding:10px 0;position:relative;white-space:nowrap}
.nav a:hover{color:var(--red);text-decoration:none}
.nav a::after{content:"";position:absolute;left:0;right:100%;bottom:4px;height:2px;background:var(--red);transition:right .22s ease}
.nav a:hover::after{right:0}
.hdr .btn{margin-left:auto}
.burger{margin-left:auto;width:48px;height:48px;display:grid;place-items:center;background:none;border:0;cursor:pointer}
.burger span{display:block;width:24px;height:2px;background:var(--black);position:relative}
.burger span::before,.burger span::after{content:"";position:absolute;left:0;width:24px;height:2px;background:var(--black)}
.burger span::before{top:-7px}.burger span::after{top:7px}
.mobnav{display:none;border-top:1px solid var(--grey);background:#fff;padding:8px var(--pad) 20px}
.mobnav.open{display:block}
.mobnav a{display:block;font-family:var(--display);font-weight:700;font-size:18px;color:var(--black);padding:14px 0;border-bottom:1px solid var(--grey)}
.mobnav .btn{width:100%;margin-top:16px}

/* hero */
.hero{position:relative;min-height:clamp(540px,86svh,780px);display:flex;align-items:flex-end;isolation:isolate}
.hero .ph{position:absolute;inset:0;background-color:#c8c9cb}
.hero .ph::after{z-index:3;color:#fff;text-shadow:0 1px 6px rgba(0,0,0,.85);bottom:auto;top:14px}
.hero .ph img{object-position:70% 30%}
.hero::before{content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg,rgba(35,31,32,.42) 0%,rgba(35,31,32,.10) 34%,rgba(35,31,32,.62) 100%)}
.hero-in{position:relative;z-index:2;width:100%;max-width:var(--maxw);margin:0 auto;padding:0 var(--pad) 44px;color:#fff}
.hero-copy{max-width:660px;text-shadow:0 2px 18px rgba(0,0,0,.45)}
.hero .eyebrow{color:var(--yellow);text-shadow:0 1px 10px rgba(0,0,0,.5)}
.hero h1{font-size:clamp(40px,10.5vw,76px);color:#fff;margin:10px 0 14px}
.hero p{font-size:clamp(17px,4.4vw,21px);font-weight:400;max-width:52ch}
.hero-cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:26px}

/* hero on a light/studio photo: light scrim, dark copy. The base .hero above still
   holds for a dark full-bleed photo — add .hero-light only when the frame is bright. */
.hero-light .ph img{object-position:50% 0%}
.hero-light::before{background:none}
.hero-light .hero-in{color:var(--black)}
.hero-light .hero-copy{text-shadow:0 1px 14px rgba(255,255,255,.9)}
.hero-light .eyebrow{color:var(--red);text-shadow:0 1px 10px rgba(255,255,255,.9)}
.hero-light h1{color:var(--black)}
.hero-light .btn-ghost{color:var(--black);border-color:rgba(35,31,32,.45)}
.hero-light .btn-ghost:hover{background:var(--black);color:#fff;border-color:var(--black)}

/* stats */
.stats{background:var(--red);color:#fff}
.stats-in{max-width:var(--maxw);margin:0 auto;padding:34px var(--pad);
  display:grid;grid-template-columns:repeat(2,1fr);gap:26px 18px}
.stat b{display:block;font-family:var(--display);font-weight:900;font-size:clamp(30px,8.6vw,46px);line-height:1;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums}
/* Counters tumble in on first view. Only JS adds .is-armed, so a no-JS page
   renders the finished numbers with no hidden state to recover from. */
.stat.is-armed b{opacity:0;transform:translateY(.32em)}
.stat.is-running b,.stat.is-done b{opacity:1;transform:none;
  transition:opacity .4s ease,transform .55s cubic-bezier(.2,.85,.3,1)}
@media (prefers-reduced-motion:reduce){
  .stat.is-armed b{opacity:1;transform:none}
}
.stat span{display:block;margin-top:8px;font-size:14px;font-weight:600;line-height:1.35;color:rgba(255,255,255,.95)}

/* sections */
section{scroll-margin-top:calc(var(--hdr) + 8px)}
.sec{padding:64px 0}
.sec-grey{background:#f6f6f7}
.sec h2{font-size:clamp(30px,7.6vw,46px);margin:10px 0 0}
.lede{font-size:clamp(17px,4.2vw,19px);margin-top:16px;max-width:62ch;color:#3a3638}

/* who we are */
.who-grid{display:grid;gap:12px;grid-template-columns:repeat(2,1fr);margin-top:30px}
.who-grid .ph{border-radius:14px}
.who-grid .ph:nth-child(1){grid-column:1/-1;aspect-ratio:16/9}
.who-grid .ph:nth-child(2),.who-grid .ph:nth-child(3){aspect-ratio:1/1}

/* what we do */
.prog-flag{margin-top:32px;border-radius:18px;overflow:hidden;background:#fff;box-shadow:0 2px 0 var(--grey),0 18px 40px rgba(35,31,32,.08);display:grid}
.prog-flag .ph{aspect-ratio:16/10}
/* .prog-flag.photo43 -- the home page flagship (john-ukulele.jpg, 1440x1078) -- takes
   a 4:3 box while stacked, so the photo is shown whole. That rule lives in the
   max-width:1023px block with .square and .portrait; it must not sit here, because
   from 1024 the image column is a grid track whose height comes from the copy, and
   aspect-ratio would resolve the WIDTH from that height and spill over the text. */
/* Story 02 only: a 16/10 crop cuts the ballerina stand off at the knees, so this
   card gets a portrait frame that fits the pose. */
.prog-flag .ph.ph-tall{aspect-ratio:4/5}
.prog-flag .body{padding:30px 24px 34px}
.flagtag{display:inline-flex;align-items:center;gap:8px;background:var(--yellow);color:var(--black);
  font-family:var(--display);font-weight:800;font-size:12px;letter-spacing:.12em;text-transform:uppercase;padding:7px 12px;border-radius:999px}
.prog-flag h3{font-size:clamp(26px,6.6vw,38px);margin:14px 0 12px}
/* Pill beside the heading rather than stacked above it. Reclaims ~47px of column
   height, which is height the full-bleed photo beside it gets to keep. */
.flaghead{display:flex;align-items:center;flex-wrap:wrap;gap:12px 14px;margin-bottom:10px}
.flaghead h3{margin:0}
.prog-flag p+p{margin-top:10px}
.subhead{margin:44px 0 0;font-family:var(--display);font-weight:800;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:#6c6d70}
.prog-two{display:grid;gap:18px;margin-top:16px}
.card{background:#fff;border-radius:16px;overflow:hidden;border:1px solid var(--grey);transition:transform .22s ease,box-shadow .22s ease}
.card:hover{transform:translateY(-4px);box-shadow:0 16px 34px rgba(35,31,32,.12)}
.card .ph{aspect-ratio:16/10}
.card .ph img{transition:transform .5s ease}
.card:hover .ph img{transform:scale(1.05)}
.card .body{padding:20px 20px 24px}
.card h4{font-size:21px;margin-bottom:8px}
.card p{font-size:16px;color:#464244}

/* stories */
.stories{display:grid;gap:14px;margin-top:28px}
.story{position:relative;display:block;color:var(--black);border-radius:14px;overflow:hidden;border:1px solid var(--grey);background:#fff;transition:transform .22s ease,box-shadow .22s ease}
.story:hover{text-decoration:none;transform:translateY(-4px);box-shadow:0 16px 34px rgba(35,31,32,.12)}
.story .ph{aspect-ratio:4/3}
.story .ph img{transition:transform .5s ease}
.story:hover .ph img{transform:scale(1.06)}
.story .body{padding:16px 16px 18px}
.story .kicker{font-family:var(--display);font-weight:800;font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--red)}
.story h4{font-size:19px;margin:6px 0 8px}
.story p{font-size:15px;color:#464244}
.story .more{display:inline-block;margin-top:12px;font-family:var(--display);font-weight:800;font-size:14px;color:var(--black);opacity:0;transform:translateY(6px);transition:opacity .22s ease,transform .22s ease}
.story:hover .more,.story:focus-visible .more{opacity:1;transform:none}
.grid-cta{display:flex;justify-content:center;margin-top:28px}

/* real moments — testimonial cards, 3 up. `.story` above stays the link-card
   component for the Impact Stories index and the individual story pages. */
.moments{display:grid;gap:14px;margin-top:28px}
.moment{margin:0;display:flex;flex-direction:column;border-radius:14px;overflow:hidden;
  border:1px solid var(--grey);background:#fff}
.moment .ph{aspect-ratio:4/3}
.moment .body{display:flex;flex-direction:column;flex:1;padding:18px 18px 20px}
.moment blockquote{margin:0;font-family:var(--display);font-weight:800;font-size:19px;
  line-height:1.32;letter-spacing:-.01em;color:var(--black)}
/* attribution. Two lines — who they are in display bold, what they are in micro
   caps beneath — over a hairline rule tipped with a red tick, the same red-marker
   vocabulary as .check::before and .evid h3::before. `margin-top:auto` keeps the
   rule on a shared baseline across the three cards however unevenly quotes wrap. */
.moment cite{display:block;margin-top:auto;padding-top:16px;font-style:normal;
  position:relative;border-top:1px solid var(--grey)}
.moment cite::before{content:"";position:absolute;top:-1px;left:0;width:32px;height:3px;background:var(--red)}
.moment cite b{display:block;font-family:var(--display);font-weight:800;font-size:15px;
  line-height:1.25;letter-spacing:-.01em;color:var(--black)}
.moment cite span{display:block;margin-top:4px;font-family:var(--display);font-weight:700;
  font-size:11px;line-height:1.35;letter-spacing:.12em;text-transform:uppercase;color:#6c6d70}

/* video */
.video{max-width:960px;margin:26px auto 0;border-radius:16px;overflow:hidden;background:var(--black);aspect-ratio:16/9}
.video iframe{width:100%;height:100%;border:0;display:block}

/* announcement boxes — two up, always equal height */
.promo-grid{display:grid;gap:16px;grid-template-columns:1fr}
.promo{position:relative;overflow:hidden;border-radius:18px;color:#fff;
  padding:30px 26px 32px;display:flex;flex-direction:column;align-items:flex-start;
  box-shadow:0 18px 40px rgba(35,31,32,.10);
  scroll-margin-top:calc(var(--hdr) + 8px)}
.promo>*{position:relative;z-index:1}
.promo .eyebrow{color:rgba(255,255,255,.92)}
.promo h3{font-size:clamp(24px,5.4vw,30px);color:#fff;margin:10px 0 10px}
.promo p{color:rgba(255,255,255,.95);font-size:16px;max-width:46ch;margin-bottom:22px}
.promo .btn{margin-top:auto}
.promo::after{content:"";position:absolute;width:170px;height:170px;border-radius:50%}
.p-gala{background:var(--red)}
.p-gala::after{right:-52px;top:-52px;background:rgba(250,233,0,.15)}
.p-rotn{background:var(--blue)}
.p-rotn::after{left:-58px;bottom:-62px;background:rgba(255,255,255,.14)}

/* signup */
.signup{background:var(--black);color:#fff}
.signup h2{color:#fff}
.signup p{color:rgba(255,255,255,.8);margin-top:14px}
form{margin-top:26px;display:grid;gap:14px;max-width:560px}
.field{display:grid;gap:7px}
label{font-family:var(--display);font-weight:700;font-size:14px;color:rgba(255,255,255,.9)}
input[type=text],input[type=email],input[type=tel],select,textarea{min-height:52px;padding:12px 16px;
  font-family:var(--body);font-size:16px;color:#fff;
  background:rgba(255,255,255,.07);border:1.5px solid rgba(255,255,255,.28);border-radius:10px}
textarea{min-height:132px;resize:vertical;line-height:1.5}
input::placeholder{color:rgba(255,255,255,.45)}
input:focus,select:focus,textarea:focus{border-color:var(--yellow);background:rgba(255,255,255,.12);outline:none}
/* .consent is unused in the markup: newsletter signup is a link out to
   Mailchimp's hosted form, so the site collects no email addresses itself and
   has nothing to take consent for. Kept for the day a form is embedded here. */
.consent{display:flex;gap:10px;align-items:flex-start;font-size:14px;color:rgba(255,255,255,.75)}
.consent input{width:20px;height:20px;margin-top:3px;flex:0 0 auto;accent-color:var(--red)}
.form-note{font-size:13px;color:rgba(255,255,255,.5)}

/* The inline reply an async form writes after submitting. Hidden until script
   gives it a state class, so the button never sits above an empty gap. */
.form-status{display:none;padding:12px 16px;border-radius:10px;font-size:16px;line-height:1.5;
  color:#fff;background:rgba(255,255,255,.07);border-left:4px solid var(--blue)}
.form-status.ok,.form-status.bad{display:block}
.form-status.bad{border-left-color:var(--red)}
.form-status a{color:var(--yellow);text-decoration:underline}

/* footer */
.ftr{background:#fff;border-top:1px solid var(--grey);padding:48px 0 32px;font-size:15px}
.ftr-grid{display:grid;gap:32px}
/* 404 link columns: footer nav treatment, outside .ftr */
.linkcols{display:grid;gap:32px}
.ftr img.mark{height:96px;width:auto;margin-bottom:16px}
.ftr p{color:#464244;max-width:44ch}
.ftr h5,.linkcols h5{font-family:var(--display);font-weight:800;font-size:12px;letter-spacing:.13em;text-transform:uppercase;color:#6c6d70;margin:0 0 12px}
.ftr ul,.linkcols ul{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.ftr ul a,.linkcols ul a{display:inline-block;padding:11px 0;color:var(--black)}
.ftr ul a:hover,.linkcols ul a:hover{color:var(--red)}
/* header social icons — desktop only; the mobile set lives in .mobnav */
/* margin-left:auto here and on .hdr .btn splits the free space either side of the
   icons, so they sit centred between the nav and the Give Joy button. */
.hdr-socials{display:none;gap:4px;margin-left:auto}
.hdr-socials a{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:var(--black)}
.hdr-socials a:hover{background:var(--red);color:#fff;text-decoration:none}
.hdr-socials svg{width:17px;height:17px;fill:currentColor;display:block}
.mob-socials{display:flex;gap:10px;padding:18px 0 2px}
.mob-socials a{width:46px;height:46px;border-radius:50%;display:grid;place-items:center;
  background:var(--grey);color:var(--black);padding:0;border-bottom:0}
.mob-socials a:hover{background:var(--red);color:#fff;text-decoration:none}
.mob-socials svg{width:20px;height:20px;fill:currentColor;display:block}

.socials{display:flex;gap:10px;margin-top:18px}
.socials a{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--grey);color:var(--black);
  font-family:var(--display);font-weight:800;font-size:14px}
.socials a:hover{background:var(--red);color:#fff;text-decoration:none}
.socials svg{width:19px;height:19px;fill:currentColor;display:block}
.legal{margin-top:34px;padding-top:20px;border-top:1px solid var(--grey);font-size:13px;color:#6c6d70;display:flex;flex-wrap:wrap;gap:10px 22px}

@media (min-width:768px){
  :root{--pad:32px;--hdr:96px}
  .sec{padding:88px 0}
  .logo img{height:76px}
  .stats-in{grid-template-columns:repeat(4,1fr);padding:40px var(--pad)}
  .who-grid{grid-template-columns:repeat(3,1fr)}
  .who-grid .ph:nth-child(1){grid-column:1/3;aspect-ratio:16/11}
  .who-grid .ph:nth-child(2),.who-grid .ph:nth-child(3){aspect-ratio:auto}
  .prog-two{grid-template-columns:1fr 1fr}
  .stories{grid-template-columns:repeat(3,1fr)}
  .moments{grid-template-columns:repeat(3,1fr)}
  .promo-grid{grid-template-columns:1fr 1fr;gap:20px}
  .promo{padding:36px 34px 38px}
  .promo::after{width:250px;height:250px}
  .p-gala::after{right:-70px;top:-70px}
  .p-rotn::after{left:-80px;bottom:-95px}
  .ftr-grid{grid-template-columns:2fr 1fr 1fr 1.2fr}
  .linkcols{grid-template-columns:repeat(3,1fr)}
}
@media (min-width:1180px){
  .nav{display:flex;gap:20px;margin-left:20px}
  .burger{display:none}
  .mobnav{display:none!important}
  .hdr-socials{display:flex}
}
@media (min-width:1024px){
  .hero{min-height:clamp(560px,78vh,760px)}
  .hero-in{padding-bottom:62px}
  .prog-flag{grid-template-columns:1.05fr 1fr;align-items:stretch}
  .prog-flag .ph{aspect-ratio:auto;height:100%;min-height:420px}
  /* .photo43 keeps its 4:3 box only while stacked; on desktop it goes full bleed
     like every other flagship card and the copy column is trimmed instead. */
  .prog-flag .ph.ph-tall{min-height:560px}
  .prog-flag .body{padding:30px 44px}
  .story .ph{aspect-ratio:3/4}
  .story h4{font-size:17px}
}
@media (max-width:767px){
  /* hero stacks on mobile: the whole photo sits above the copy, uncropped and
     unobscured. The overlaid treatment — copy on the photo — resumes at 768px.
     .ph aspect-ratio matches hero-portrait.jpg exactly, so cover crops nothing. */
  .hero{display:block;min-height:0}
  .hero::before{content:none}
  .hero .ph{position:relative;inset:auto;aspect-ratio:900/830;background:none}
  .hero .ph img{object-position:50% 50%}
  .hero-in{padding:28px var(--pad) 34px;color:var(--black)}
  .hero-copy{max-width:none;text-shadow:none}
  .hero h1{color:var(--black);margin:0 0 12px}
  .hero .eyebrow{text-shadow:none}
}
/* ═══════════════════════════════════════════════════════════════════════════
   INTERIOR PAGES
   Components used by WhoWeAre / WhatWeDo / WhereWeWork / Leadership /
   Transparency / Contact. Interior pages never take a photo hero — they open
   with .pagehead (eyebrow + h1 + lede) on white, per the handoff README.
   ═══════════════════════════════════════════════════════════════════════ */

/* standalone full-width photograph inside a section */
.figwide{border-radius:16px;aspect-ratio:16/9;margin-top:30px}

/* interior-page variants of the homepage program components */
.prog-flag h2{font-size:clamp(26px,6.6vw,38px);margin:14px 0 12px}  /* same as .prog-flag h3 */
.prog-flag .h3sub{font-size:20px;margin:24px 0 10px}
.sec h2.subhead{font-size:13px;margin:44px 0 0}   /* .subhead used as a real heading */
/* Square source, shown whole while the card is stacked. MUST stay inside a max-width
   query: from 1024 the image column is a grid track whose row height is set by the copy,
   and aspect-ratio:1/1 then resolves the WIDTH from that height — a 662px-tall row makes
   a 662px-wide image in a 602px column, which spills over and paints on the text. */
@media (max-width:1023px){
  .prog-flag.square .ph{aspect-ratio:1/1}
  /* Tall portrait source (Dot in the windowsill, 484x718): a square frame would
     cut a third of it, so the stacked card matches the photo's own shape. */
  .prog-flag.portrait .ph{aspect-ratio:2/3}
  .prog-flag.photo43 .ph{aspect-ratio:4/3}
}
.card h3{font-size:21px;margin-bottom:8px}
.card p+p{margin-top:10px}

/* interior page header */
.pagehead{padding-top:40px}
/* a section that follows the page header on the same background */
.sec.tight{padding-top:24px}
.pagehead h1{font-size:clamp(34px,8.4vw,56px);margin:10px 0 0}
.pagehead .lede{margin-top:18px}

/* current page in the nav */
.nav a[aria-current=page]{color:var(--red)}
.nav a[aria-current=page]::after{right:0}
.mobnav a[aria-current=page]{color:var(--red)}

/* section-level heading for interior pages. Deliberately a class, not `.sec h3`
   — a descendant rule would out-rank .prog-flag h3 and .promo h3 and resize them. */
.h3lead{font-size:clamp(22px,5.2vw,28px);margin-top:8px}
.h3lead+p{margin-top:14px;color:#3a3638}

/* copy + photo, side by side from 1024 */
.media{display:grid;gap:22px;margin-top:30px;align-items:center}
.media .ph{border-radius:16px;aspect-ratio:3/2}
.media-copy p+p{margin-top:14px}
.media-copy .btn{margin-top:22px}

/* bordered content box — works on white and on .sec-grey */
.panel{background:#fff;border:1px solid var(--grey);border-radius:16px;padding:26px 22px 28px}
.panel h3{font-size:clamp(21px,4.8vw,25px);margin-bottom:12px}
.panel p{color:#3a3638}
.split{display:grid;gap:16px;margin-top:30px}

/* numbered list — Our Values, How It Works */
.numlist{display:grid;gap:12px;margin-top:28px;counter-reset:n}
.numitem{counter-increment:n;display:grid;grid-template-columns:auto 1fr;gap:16px;align-items:start;
  background:#fff;border:1px solid var(--grey);border-radius:14px;padding:20px}
.numitem::before{content:counter(n,decimal-leading-zero);font-family:var(--display);font-weight:900;
  font-size:18px;letter-spacing:-.02em;color:var(--red);line-height:1.5}
.numitem h3{font-size:19px;margin-bottom:6px}
.numitem p{font-size:16px;color:#464244}

/* The flagship card carries its own h2, so when it opens a section there is no heading
   above it and the stock 32px top margin just stacks on the section padding. */
.prog-flag:first-child{margin-top:0}
.prog-flag h2{margin:16px 0 14px}
.prog-flag .h3sub{margin:28px 0 10px}
/* bind the label to the list it introduces: a clear gap above, a small one below */
.prog-flag+.subhead{margin-top:46px}
.subhead+.checks{margin-top:16px}

/* ── forms on a light background ────────────────────────────────────────────
   The base form styling above is the black .signup section's: white type on a
   translucent dark field. .form-light inverts it for a white or grey section. */
.form-light{max-width:640px}
.form-light label{color:var(--black)}
.form-light input[type=text],.form-light input[type=email],.form-light input[type=tel],
.form-light select,.form-light textarea{color:var(--black);background:#fff;border:1.5px solid #dcdde0}
.form-light input:focus,.form-light select:focus,.form-light textarea:focus{
  border-color:var(--red);background:#fff}
.form-light ::placeholder{color:#9a9b9e}
.form-light .consent{color:#464244}
.form-light .consent input{accent-color:var(--red)}
.form-light .form-note{color:#6c6d70}
.form-light .form-status{color:var(--black);background:#fff;
  border:1.5px solid #dcdde0;border-left:4px solid var(--blue)}
.form-light .form-status.bad{border-left-color:var(--red)}
.form-light .form-status a{color:var(--red)}
.form-light select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236c6d70' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 16px center;padding-right:44px}
.req{color:var(--red)}
.form-row{display:grid;gap:14px}

/* ── modal ──────────────────────────────────────────────────────────────────
   Native <dialog>. The trigger is a normal link to Contact.html that script
   upgrades, so with JavaScript off the button still goes somewhere useful. */
.modal{border:0;padding:0;border-radius:18px;background:#fff;color:var(--black);
  width:min(600px,calc(100vw - 28px));max-height:calc(100vh - 40px);
  box-shadow:0 26px 64px rgba(35,31,32,.30)}
.modal::backdrop{background:rgba(35,31,32,.55)}
.modal-in{position:relative;padding:30px 24px 32px;overflow-y:auto;max-height:calc(100vh - 40px)}
.modal h2{font-size:clamp(24px,5.6vw,30px);padding-right:44px}
.modal .lede{margin-top:12px}
.modal-x{position:absolute;z-index:3;top:10px;right:10px;width:44px;height:44px;display:grid;place-items:center;
  background:none;border:0;border-radius:50%;cursor:pointer;
  font-family:var(--display);font-weight:800;font-size:22px;line-height:1;color:#6c6d70}
.modal-x:hover{background:var(--grey);color:var(--black)}

/* body prose inside an interior section */
.prose{margin-top:18px;max-width:62ch;color:#3a3638}
.prose+.prose{margin-top:14px}

/* research findings — a red-dotted claim with the sentence that supports it */
.evidence{display:grid;gap:14px;margin-top:26px}
.evidence+.prose,.evidence+.lede{margin-top:26px}
.evid{background:#fff;border:1px solid var(--grey);border-radius:14px;padding:22px 20px 24px}
.evid h3{position:relative;padding-left:22px;font-size:18px;margin-bottom:8px}
.evid h3::before{content:"";position:absolute;left:0;top:.34em;width:12px;height:12px;border-radius:50%;background:var(--red)}
.evid p{font-size:16px;color:#464244}

/* statement list — the Red Nose Docs commitments */
.checks{display:grid;gap:12px;margin-top:26px}
.check{display:grid;grid-template-columns:auto 1fr;gap:13px;align-items:start;
  font-family:var(--display);font-weight:800;font-size:17px;line-height:1.35;letter-spacing:-.01em}
.check::before{content:"";width:12px;height:12px;border-radius:50%;background:var(--red);margin-top:7px}

/* pills under a program */
.tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}
.tag{font-family:var(--display);font-weight:800;font-size:12px;letter-spacing:.1em;text-transform:uppercase;
  background:var(--grey);color:#3a3638;padding:7px 12px;border-radius:999px}

/* people — founders, executives, board. Portraits are never cropped at the
   top: .person .ph img overrides the sitewide 50% 32% crop to 50% 0. */
.people{display:grid;gap:16px;grid-template-columns:repeat(2,1fr);margin-top:28px}
/* .pair — the two board members shown above the rest, deliberately larger.
   .board — everyone else, smaller: several of these portraits are 100–200px squares,
   so the less they are scaled up the better they look. */
.people.pair{max-width:520px}
.people.board{gap:14px;margin-top:16px}
.person{background:#fff;border:1px solid var(--grey);border-radius:14px;overflow:hidden;
  transition:transform .22s ease,box-shadow .22s ease}
.person:hover{transform:translateY(-4px);box-shadow:0 16px 34px rgba(35,31,32,.12)}
.person .ph{aspect-ratio:1/1;background:#eff0f1}
.person .ph img{object-position:50% 0;transition:transform .5s ease}
.person:hover .ph img{transform:scale(1.05)}
.person .body{padding:16px 15px 18px}
.person h3{font-size:17px;line-height:1.15}
.person .role{margin-top:7px;font-size:14px;line-height:1.4;color:#6c6d70}

/* partner hospital logo grid */
.logos{display:grid;gap:12px;grid-template-columns:repeat(2,1fr);margin-top:30px}
/* Logo only — the name and city live in the map legend below, so the card carries
   nothing but the mark. The name stays in the img alt for screen readers. */
.hosp{background:#fff;border:1px solid var(--grey);border-radius:14px;padding:22px 18px;
  display:grid;place-items:center;min-height:128px}
.hosp .mark{width:100%;min-height:80px;display:grid;place-items:center}
/* explicit px height + contain, not max-height:100% — a percentage max-height on a
   centred grid item is not honoured in Chrome and the logo overflows the box. */
.hosp .mark img{width:100%;height:80px;object-fit:contain}
.hosp .mark .initials{font-family:var(--display);font-weight:900;font-size:30px;letter-spacing:-.03em;color:var(--red)}


/* centred lead-in for a section that continues with full-width content below it */
.cta-lead{text-align:center}
.cta-lead h2{max-width:22ch;margin-left:auto;margin-right:auto}
.cta-lead .btn{margin-top:24px}

/* partner map. It always fits the column — a horizontal scroller was tried and rejected:
   every marker but the two Californian ones sits in the eastern third, so at rest a 375px
   viewport showed an empty Nevada. The marker numerals go sub-legible on a phone, which is
   why the legend below is real text rather than part of the graphic. */
.map{margin:44px 0 0}
.map-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.map-scroll img{width:100%;height:auto}
.maplegend{margin:0}
.maplegend ol{list-style:none;margin:28px 0 0;padding:0;counter-reset:hosp;display:grid;gap:12px 28px}
.maplegend li{counter-increment:hosp;display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}
.maplegend li::before{content:counter(hosp);display:grid;place-items:center;flex:0 0 auto;
  width:26px;height:26px;border-radius:50%;background:var(--red);color:#fff;
  font-family:var(--display);font-weight:800;font-size:13px;line-height:1}
.maplegend b{display:block;font-family:var(--display);font-weight:800;font-size:15px;
  line-height:1.25;letter-spacing:-.01em}
.maplegend span{display:block;margin-top:3px;font-size:14px;color:#6c6d70}

/* transparency filings */
.filings{display:grid;gap:12px;margin-top:30px}
.filing{background:#fff;border:1px solid var(--grey);border-radius:14px;padding:18px 20px;
  display:flex;flex-wrap:wrap;align-items:center;gap:12px 18px}
.filing .yr{font-family:var(--display);font-weight:900;font-size:clamp(24px,6.4vw,30px);
  letter-spacing:-.02em;line-height:1;flex:0 0 auto}
.filing .lbl{font-size:15px;color:#6c6d70;flex:1 1 auto}
.filing .docs{display:flex;flex-wrap:wrap;gap:8px;width:100%}
.doclink{display:inline-flex;align-items:center;min-height:44px;padding:9px 16px;
  border:1.5px solid var(--grey);border-radius:999px;background:#fff;
  font-family:var(--display);font-weight:800;font-size:14px;color:var(--black);
  transition:border-color .18s ease,color .18s ease}
.doclink:hover{border-color:var(--red);color:var(--red);text-decoration:none}

/* highlighted aside */
.callout{margin-top:26px;background:#fff;border:1px solid var(--grey);border-left:5px solid var(--yellow);
  border-radius:14px;padding:20px 22px;color:#3a3638}

/* contact page: details beside the form.
   The aside comes first in the DOM so a phone still shows email/phone/address before
   a long form; from 1024 up `order` moves it to the right of the form. */
.contact-split{display:grid;gap:36px}
.contact-aside .contacts{margin-top:0}
.contact-main h2{margin-top:0}

/* contact detail cards */
.contacts{display:grid;gap:14px;margin-top:30px}
.ccard{background:#fff;border:1px solid var(--grey);border-radius:14px;padding:20px 22px 22px}
.ccard .clabel{font-family:var(--display);font-weight:800;font-size:12px;letter-spacing:.13em;
  text-transform:uppercase;color:#6c6d70;margin-bottom:6px}
.ccard a{display:inline-flex;align-items:center;min-height:44px;font-size:17px;font-weight:600}
.ccard address{font-style:normal;font-size:17px;color:#3a3638;padding:10px 0}

/* centred closing CTA */
.cta-band{text-align:center}
.cta-band h2{max-width:22ch;margin-left:auto;margin-right:auto}
.cta-band p{margin:16px auto 0;max-width:58ch;color:#3a3638}
.cta-band .btn{margin-top:26px}

/* full-bleed pull quote — one per page maximum, same rule as the black band */
.quoteband{background:var(--red);color:#fff;text-align:center}
.quoteband blockquote{margin:0 auto;max-width:22ch;font-family:var(--display);font-weight:800;
  font-size:clamp(24px,6.4vw,38px);line-height:1.2;letter-spacing:-.02em}
.quoteband cite{display:block;margin-top:18px;font-style:normal;font-family:var(--display);
  font-weight:800;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.92)}

@media (min-width:768px){
  .pagehead{padding-top:56px}
  .sec.tight{padding-top:40px}
  .split{grid-template-columns:1fr 1fr;gap:20px}
  .panel{padding:32px 30px 34px}
  .numlist.two{grid-template-columns:1fr 1fr}
  .checks{grid-template-columns:1fr 1fr;gap:14px 28px}
  .form-row{grid-template-columns:1fr 1fr}
  .modal-in{padding:36px 34px 38px}
  .evidence{grid-template-columns:repeat(3,1fr)}
  .people{grid-template-columns:repeat(3,1fr)}
  .people.pair{grid-template-columns:repeat(2,1fr)}
  .people.board{grid-template-columns:repeat(4,1fr)}
  .people.board h3{font-size:15px}
  .people.board .role{font-size:13px}
  .people.board .body{padding:13px 12px 15px}
  .maplegend ol{grid-template-columns:1fr 1fr}
  .logos{grid-template-columns:repeat(3,1fr)}
  .contacts{grid-template-columns:repeat(3,1fr)}
}
@media (min-width:1024px){
  .filing{flex-wrap:nowrap}
  .filing .docs{width:auto;margin-left:auto;flex-wrap:nowrap}
  .people.board{grid-template-columns:repeat(6,1fr);gap:12px}
  .people.board h3{font-size:14px}
  .people.board .role{font-size:12px;line-height:1.35}
  .people.board .body{padding:12px 11px 14px}
  .maplegend ol{grid-template-columns:repeat(3,1fr)}
  .contact-split{grid-template-columns:1.3fr .8fr;gap:56px;align-items:start}
  .contact-aside{order:2}
  .contact-main{order:1}
  .contact-aside .contacts{grid-template-columns:1fr;gap:12px}
  .media{grid-template-columns:1fr 1fr;gap:44px}
  .media .ph{aspect-ratio:4/3}
  .media.rev .ph{order:2}
  .logos{grid-template-columns:repeat(4,1fr)}
}

@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}


/* ═══════════════════════════════════════════════════════════════════════════
   IMPACT STORIES  (Impact.html)
   Five anecdote cards built on .prog-flag — the Red Nose Docs flagship-program
   card — one per hospital. .storycard swaps the yellow "Flagship program" pill
   for a red hospital pill, adds a byline, and closes on a Read More button that
   opens the full anecdote in a .modal.modal-wide. Alternate cards take .rev so
   the column of photographs zig-zags on desktop instead of stacking down one
   edge. The teaser on the card is the opening of the anecdote, verbatim.
   ═══════════════════════════════════════════════════════════════════════════ */
.storycard{margin-top:22px}
.storycard .ph{aspect-ratio:4/3}
.storycard h2{font-size:clamp(24px,5.8vw,34px);margin:14px 0 0}
.flagtag-red{background:var(--red);color:#fff}
/* byline — performer name + role, in the micro caps used for .moment cite spans */
.storyby{margin-top:10px;font-family:var(--display);font-weight:700;font-size:12px;
  line-height:1.4;letter-spacing:.12em;text-transform:uppercase;color:#6c6d70}
.storycard .storyintro{margin-top:16px;color:#3a3638}
.storycard .btn{margin-top:24px}

/* ── the story modal ───────────────────────────────────────────────────────
   Wider than the .modal form dialog and photo-led: the same photograph as the
   card, full bleed across the top, then the anecdote. The close button moves
   onto the photo, so it gets a white chip to stay legible over any frame. */
.modal-wide{width:min(760px,calc(100vw - 24px))}
.modal-wide .modal-in{padding:0}
.modal-ph{aspect-ratio:16/9}
.modal-body{padding:26px 22px 32px}
.modal-body h2{font-size:clamp(24px,5.6vw,32px);padding-right:0;margin-top:12px}
.modal-body .storytext{margin-top:20px;color:#3a3638}
.modal-body .storytext p+p{margin-top:15px}
.modal-wide .modal-x{background:rgba(255,255,255,.94);color:var(--black);box-shadow:0 2px 12px rgba(35,31,32,.28)}
.modal-wide .modal-x:hover{background:#fff}
/* the page behind an open dialog must not scroll under the backdrop */
html:has(dialog[open]){overflow:hidden}
/* progressive enhancement: with JavaScript off — or no <dialog> support — the
   Read More link is a plain in-page anchor, and :target drops the story open
   in the flow instead of nothing happening. */
.modal:target{display:block;position:static;max-height:none;margin:24px auto 0}
.modal:target .modal-in{max-height:none;overflow:visible}

@media (min-width:1024px){
  .storycard{grid-template-columns:1fr 1.02fr}
  .storycard .ph{aspect-ratio:auto;min-height:400px}
  .storycard.rev .ph{order:2}
  .storycard .body{padding:40px 40px 44px}
  .modal-body{padding:34px 40px 40px}
}

/* ═══════════════════════════════════════════════════════════════════════════
   CHANGE SET 09-01
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── event band, directly under the header ─────────────────────────────────
   The two announcements used to sit in a grey band below the red stats bar.
   The client wanted them visible without scrolling, so they now open the page,
   above the hero. Shallower to earn that position: the descriptive paragraph
   is gone and the box is a single row — eyebrow, title, call to action.
   The whole box is the link, not just the button, so `.promo-slim` is an <a>
   and its call to action is a <span class="btn"> (no anchor inside an anchor). */
.promos-top{padding:16px 0 18px}
.promo-grid.slim{gap:10px}
.promo-slim{flex-direction:row;align-items:center;gap:16px;padding:15px 18px;color:#fff;
  box-shadow:0 8px 22px rgba(35,31,32,.10);
  transition:transform .18s ease,box-shadow .18s ease}
.promo-slim:hover{color:#fff;text-decoration:none;transform:translateY(-2px);
  box-shadow:0 14px 30px rgba(35,31,32,.16)}
.promo-slim::after{content:none}          /* no decorative disc at this height */
.promo-slim .slim-copy{flex:1 1 auto;min-width:0}
.promo-slim .eyebrow{display:block;font-size:11px;letter-spacing:.12em;color:rgba(255,255,255,.92)}
.promo-slim .slim-h{display:block;margin-top:3px;font-family:var(--display);font-weight:800;
  font-size:clamp(18px,4.6vw,22px);line-height:1.15;letter-spacing:-.02em;color:#fff}
.promo-slim .btn{flex:0 0 auto;margin:0;min-height:42px;padding:9px 18px;font-size:14px}
.promo-slim:hover .btn{transform:none}    /* the card lifts, not the pill inside it */

/* ── Who We Are: two photographs, matched ──────────────────────────────────
   Was a three-up mosaic with one wide frame on top. The client asked for two
   pictures at the same size, so `.two` drops the nth-child sizing entirely and
   both frames share one aspect ratio. Stacked on mobile — side by side at
   375px would put each photograph at ~170px wide. */
.who-grid.two{grid-template-columns:1fr}
.who-grid.two .ph{grid-column:auto;aspect-ratio:4/3}

@media (min-width:768px){
  .who-grid.two{grid-template-columns:1fr 1fr}
  .promos-top{padding:20px 0 24px}
  .promo-slim{padding:17px 24px}
}

/* ── people cards that open a bio ──────────────────────────────────────────
   The founder cards on Who We Are and the three executive cards on Leadership
   are now <a> rather than <article>: each opens that person's bio in a
   .modal.modal-bio. They keep every .person style — this only strips the link
   colour and adds the affordance. */
a.person{color:var(--black);text-decoration:none;display:block}
a.person:hover{text-decoration:none}
.biolink{margin-top:9px;font-family:var(--display);font-weight:800;font-size:13px;color:var(--red)}
.biolink::after{content:" →"}
.people.board .biolink{font-size:12px}

/* ── bio modal ─────────────────────────────────────────────────────────────
   Narrower than the story modal and portrait-led rather than photo-led: a
   round thumbnail beside the name, then one paragraph. A 16:9 .modal-ph would
   crop a head-and-shoulders portrait to a chin. */
.modal-bio{width:min(680px,calc(100vw - 24px))}
.biohead{display:flex;align-items:center;gap:16px;padding-right:40px}
.biopic{flex:0 0 auto;width:84px;height:84px;border-radius:50%;background:#eff0f1}
.biopic img{object-position:50% 0}
.biohead h2{font-size:clamp(21px,5vw,27px)}
.biohead .role{margin-top:6px;font-family:var(--display);font-weight:700;font-size:12px;
  line-height:1.35;letter-spacing:.1em;text-transform:uppercase;color:#6c6d70}
.modal-bio .storytext{margin-top:20px;color:#3a3638}
.modal-bio .storytext p+p{margin-top:14px}

/* ── Candid seal, beside the Transparency headline ─────────────────────────
   Candid's own Gold Transparency 2026 artwork, supplied by the client and
   linked to Healthy Humor's Candid profile. The seal carries its own gold rule
   and white field, so the link adds no border, padding or background of its
   own — only the hover lift used everywhere else. Never redraw or recolour it:
   it is a certification mark, and this is the issued asset. */
.headrow{display:flex;flex-wrap:wrap;align-items:center;gap:18px 26px}
.headrow h1{flex:0 1 auto}   /* not 1 1: the seal sits beside the headline, not out at the margin */
.seal{flex:0 0 auto;display:block;transition:transform .18s ease,box-shadow .18s ease}
.seal:hover{text-decoration:none;transform:translateY(-2px);box-shadow:0 10px 24px rgba(35,31,32,.16)}
.seal img{width:clamp(150px,19vw,200px);height:auto}

/* ── hero copy sits higher in the frame ────────────────────────────────────
   The overlaid hero copy is bottom-aligned, so lifting it is extra bottom
   padding. Only from 768px: below that the hero stacks — photo above, copy
   in normal flow beneath — and there is nothing to lift it off. */
@media (min-width:768px){
  .hero-in{padding-bottom:92px}
}
@media (min-width:1024px){
  .hero-in{padding-bottom:110px}
}

/* ── a moment card whose photo links out ───────────────────────────────────
   Only the James Burke card: its still comes from a video, so the frame links
   to it. `.ph` is normally a <div>; as an <a> it needs display and a play
   affordance, or a linked photograph is indistinguishable from a flat one. */
a.ph{display:block}
.momentlink .playmark{position:absolute;left:50%;top:50%;width:56px;height:56px;margin:-28px 0 0 -28px;
  border-radius:50%;background:rgba(35,31,32,.62);backdrop-filter:blur(2px);z-index:2;
  transition:background .18s ease,transform .18s ease}
.momentlink .playmark::after{content:"";position:absolute;left:21px;top:17px;
  border-style:solid;border-width:11px 0 11px 17px;border-color:transparent transparent transparent #fff}
.momentlink:hover .playmark,.momentlink:focus-visible .playmark{background:var(--red);transform:scale(1.06)}
.momentlink img{transition:transform .5s ease}
.momentlink:hover img{transform:scale(1.04)}

/* ── copy with a supporting photograph alongside ───────────────────────────
   `.media` splits 1fr/1fr; `.media-aside` gives the copy the larger share so
   the photograph reads as support rather than a second column of equal weight.
   Used in the art-and-science section, where it replaced a full-width figure. */
@media (min-width:1024px){
  .media-aside{grid-template-columns:1.6fr 1fr;gap:40px;align-items:start}
  .media-aside .ph{aspect-ratio:4/3;margin-top:4px}
}

/* ── programme cards that link through to their interior counterpart ───────
   The two homepage `.prog-two` cards point at the matching card on
   WhatWeDo.html — `#camp` and `#special-events` — rather than the top of the
   page. `.card` already carries the hover lift and image scale, so as an <a>
   it only needs the link colour stripped and an explicit affordance.
   `scroll-margin-top` on the targets keeps the sticky header off them: the
   sitewide rule only covers <section>, and these are cards inside one. */
a.card{display:block;color:var(--black);text-decoration:none}
a.card:hover{text-decoration:none}
.cardlink{margin-top:12px;font-family:var(--display);font-weight:800;font-size:14px;color:var(--red)}
.cardlink::after{content:" →"}
.card[id]{scroll-margin-top:calc(var(--hdr) + 20px)}
