/* ============================================================
   CENTRAL UNIVERSITY DESIGN SYSTEM — "Calm Authority" v1.0
   One display face (Fraunces) + one text face (Public Sans).
   ============================================================ */
:root{
  /* --- color tokens (CCSD palette) --- */
  --cu-navy:        #3a0f0d;   /* primary brand — deep maroon */
  --cu-navy-2:      #4a1714;   /* hover / secondary surface */
  --cu-red:         #992621;   /* action & accent — CTAs only */
  --cu-red-dark:    #7f1f1b;
  --cu-gold:        #ffc857;   /* ceremonial accent */
  --cu-ink:         #1a1a1a;   /* body text */
  --cu-grey:        #777777;   /* muted text */
  --cu-line:        #E5E7EB;   /* hairlines */
  --cu-paper:       #FCFBFA;   /* page background — near-white */
  --cu-surface:     #FFFFFF;
  --cu-wash:        #F7F6F5;   /* tinted section background — neutral, no yellow cast */

  /* --- type scale (fluid) --- */
  --font-display: "Fraunces", Georgia, serif;
  --font-text: "Public Sans", -apple-system, Segoe UI, sans-serif;
  --fs-hero:    clamp(2.4rem, 5.5vw, 4.2rem);
  --fs-h2:      clamp(1.7rem, 3vw, 2.4rem);
  --fs-h3:      clamp(1.15rem, 1.8vw, 1.4rem);
  --fs-body:    1rem;
  --fs-small:   .875rem;
  --fs-kicker:  .8rem;

  /* --- rhythm --- */
  --space-1: .5rem; --space-2: 1rem; --space-3: 1.5rem;
  --space-4: 2.5rem; --space-5: 4.5rem; --space-6: clamp(5.5rem, 9vw, 8.5rem);
  --radius: 10px;
  --maxw: 1180px;
  --shadow-1: 0 1px 2px rgba(58,15,13,.06), 0 8px 24px rgba(58,15,13,.08);
  --ease: cubic-bezier(.22,.61,.36,1);
}

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition:none!important}
}
body{
  margin:0; background:var(--cu-paper); color:var(--cu-ink);
  font-family:var(--font-text); font-size:var(--fs-body); line-height:1.65;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
}
img{max-width:100%; display:block}
a{color:var(--cu-navy-2)}
h1,h2,h3{font-family:var(--font-display); color:var(--cu-navy); line-height:1.15; margin:0 0 var(--space-2); font-weight:600}
h2{font-size:var(--fs-h2)}
h3{font-size:var(--fs-h3)}
.wrap{max-width:var(--maxw); margin:0 auto; padding:0 clamp(1rem,4vw,2rem)}
.kicker{font:600 var(--fs-kicker)/1 var(--font-text); letter-spacing:.14em; text-transform:uppercase; color:var(--cu-red); margin:0 0 .75rem}
.section{padding:var(--space-6) 0}
.section--wash{background:var(--cu-wash)}

/* buttons */
.btn{display:inline-flex; align-items:center; gap:.5rem; font:600 .95rem/1 var(--font-text);
  padding:.9rem 1.6rem; border-radius:999px; text-decoration:none; border:1.5px solid transparent;
  transition:transform .18s var(--ease), background .18s var(--ease), color .18s var(--ease)}
.btn:hover{transform:translateY(-1px)}
.btn--primary{background:var(--cu-red); color:#fff}
.btn--primary:hover{background:var(--cu-red-dark)}
.btn--ghost{border-color:currentColor; color:var(--cu-navy)}
.btn--ghost.on-dark{color:#fff}

/* skip link — accessibility */
.skip{position:absolute; left:-999px; top:0; background:var(--cu-navy); color:#fff; padding:.6rem 1rem; z-index:99}
.skip:focus{left:0}

/* ============================================================
   HEADER — utility bar + primary nav (task-based IA)
   ============================================================ */
.topbar{background:var(--cu-navy); color:#E0CBC2; font-size:var(--fs-small)}
.topbar .wrap{display:flex; justify-content:space-between; align-items:center; min-height:38px; gap:1rem}
.topbar a{color:#fff; text-decoration:none; opacity:.92}
.topbar a:hover{opacity:1; text-decoration:underline}
.topbar__aud{display:flex; gap:1.25rem; flex-wrap:wrap}
.topbar__portals{display:flex; gap:1.25rem}
@media (max-width:700px){ .topbar__portals{display:none} }

.header{position:sticky; top:0; z-index:50; background:rgba(250,247,247,.94);
  backdrop-filter:blur(10px); border-bottom:1px solid var(--cu-line);
  box-shadow:0 1px 0 rgba(153,38,33,.06)}
.header .wrap{display:flex; align-items:center; gap:2rem; min-height:88px}
.brand{display:flex; align-items:center; text-decoration:none; margin-right:auto}
.brand__logo{height:52px; width:auto; display:block}
@media (max-width:520px){ .brand__logo{height:42px} }

.nav{display:flex; align-items:center; gap:.25rem}
.nav > a{font:600 .93rem/1 var(--font-text); color:var(--cu-navy); text-decoration:none;
  padding:.7rem .85rem; border-radius:8px; transition:background .15s var(--ease)}
.nav > a:hover{background:var(--cu-wash)}
.nav > a[aria-current="page"]{color:var(--cu-red)}
.header .btn--primary{padding:.75rem 1.35rem}
.nav .btn--primary{display:none} /* desktop: single Apply button outside drawer */

/* mobile nav */
.nav-toggle{display:none; background:none; border:1.5px solid var(--cu-line); border-radius:8px;
  padding:.55rem .7rem; font:600 .9rem var(--font-text); color:var(--cu-navy); cursor:pointer}
@media (max-width:960px){
  .nav{position:fixed; inset:0 0 0 auto; width:min(340px,88vw); flex-direction:column;
    align-items:stretch; gap:.35rem; background:var(--cu-navy); padding:5.5rem 1.5rem 2rem;
    transform:translateX(100%); transition:transform .28s var(--ease)}
  .nav.open{transform:none}
  .nav > a{color:#fff; font-size:1.05rem; padding:.9rem 1rem}
  .nav > a:hover{background:var(--cu-navy-2)}
  .nav-toggle{display:block; z-index:60}
  .header .btn--primary{display:none}
  .nav .btn--primary{display:inline-flex; margin-top:1rem; justify-content:center}
}
/* ============================================================
   SECTION 5 — FOOTER
   ============================================================ */
.footer{background:var(--cu-navy); color:#E0CBC2; margin-top:0}
.footer a{color:#fff; text-decoration:none; opacity:.9}
.footer a:hover{opacity:1; text-decoration:underline}
.footer__grid{display:grid; grid-template-columns:1.4fr 1fr 1fr 1.2fr; gap:2.5rem;
  padding:var(--space-5) 0; border-top:3px solid var(--cu-red)}
.footer h4{font:600 .85rem/1 var(--font-text); letter-spacing:.12em; text-transform:uppercase;
  color:var(--cu-gold); margin:0 0 1rem}
.footer ul{list-style:none; margin:0; padding:0; display:grid; gap:.55rem; font-size:var(--fs-small)}
.footer__brand p{font-size:var(--fs-small); line-height:1.7; margin:.9rem 0 0; max-width:26rem}
.footer__bottom{border-top:1px solid rgba(255,255,255,.15); padding:1.1rem 0; display:flex;
  justify-content:space-between; gap:1rem; flex-wrap:wrap; font-size:.8rem; color:#C9A79C}
.footer__social{display:flex; gap:1.1rem}
@media (max-width:820px){ .footer__grid{grid-template-columns:1fr 1fr} }
@media (max-width:520px){ .footer__grid{grid-template-columns:1fr} }

/* ============================================================
   SECTION 4 — THIS WEEK AT CENTRAL + STATS BAND
   ============================================================ */
/* LSE-style news list: square thumb left, headline, plain date below.
   No card borders — whitespace and hairlines do the work. */
.news-list{display:grid; grid-template-columns:1fr 1fr; gap:2.4rem 3.5rem; margin-top:var(--space-3)}
.news-item{display:grid; grid-template-columns:110px 1fr; gap:1.4rem; align-items:start; text-decoration:none}
.news-item__media{width:110px; aspect-ratio:1/1; border-radius:6px; overflow:hidden;
  background:linear-gradient(150deg, var(--cu-navy-2), var(--cu-red-dark))}
.news-item h3{font-size:1.15rem; line-height:1.4; margin:0 0 .55rem; transition:color .2s var(--ease)}
.news-item:hover h3{color:var(--cu-red); text-decoration:underline; text-underline-offset:3px; text-decoration-thickness:1px}
.news-item time{display:block; font-size:var(--fs-small); color:var(--cu-grey)}
@media (max-width:820px){ .news-list{grid-template-columns:1fr; gap:2rem} }

.news__head{display:flex; align-items:end; justify-content:space-between; gap:2rem; margin-bottom:var(--space-4)}
.news__grid{display:grid; grid-template-columns:1.4fr 1fr; gap:1.2rem}
.news-card{display:flex; flex-direction:column; text-decoration:none; background:var(--cu-surface);
  border:1px solid var(--cu-line); border-radius:var(--radius); overflow:hidden;
  transition:transform .2s var(--ease), box-shadow .2s var(--ease)}
.news-card:hover{transform:translateY(-3px); box-shadow:var(--shadow-1)}
.news-card__media{height:200px; background:linear-gradient(140deg,var(--cu-navy-2),var(--cu-red-dark))}
  /* IMAGE PLACEHOLDER — featured news photo at Final Polish */
.news-card__body{padding:1.2rem 1.3rem 1.4rem}
.news-card time{font:600 .75rem var(--font-text); letter-spacing:.1em; text-transform:uppercase; color:var(--cu-red)}
.news-card h3{font-size:1.15rem; margin:.45rem 0 .4rem}
.news-card p{margin:0; font-size:var(--fs-small); color:var(--cu-grey)}
.news__side{display:flex; flex-direction:column; gap:1.2rem}
.news__side .news-card__media{height:0; display:none}
.news__side .news-card{flex:1; justify-content:center}
@media (max-width:820px){ .news__grid{grid-template-columns:1fr} }

/* stats band */
.stats{background:var(--cu-surface); border-top:1px solid var(--cu-line); border-bottom:1px solid var(--cu-line)}
.stats .wrap{display:grid; grid-template-columns:repeat(4,1fr); gap:2rem;
  padding-top:var(--space-5); padding-bottom:var(--space-5); text-align:center}
.stat b{display:block; font:600 clamp(2.2rem,4.5vw,3.4rem)/1 var(--font-display); color:var(--cu-red)}
.stat span{display:inline-block; margin-top:.5rem; font-size:var(--fs-small); color:var(--cu-grey)}
@media (max-width:700px){ .stats .wrap{grid-template-columns:repeat(2,1fr)} }

/* ============================================================
   SECTION 3 — SCHOOLS GRID + PROGRAMME FINDER
   ============================================================ */
.schools__head{display:flex; align-items:end; justify-content:space-between; gap:2rem; margin-bottom:var(--space-4)}
.schools__head p{max-width:38rem; margin:0; color:var(--cu-grey)}
.schools__grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:1.1rem}
.school{position:relative; display:block; text-decoration:none; background:var(--cu-surface);
  border:1px solid var(--cu-line); border-radius:var(--radius); overflow:hidden;
  transition:transform .2s var(--ease), box-shadow .2s var(--ease)}
.school:hover{transform:translateY(-3px); box-shadow:var(--shadow-1)}
.school__media{height:110px;
  /* IMAGE PLACEHOLDER — per-school duotone photo at Final Polish */
  background:linear-gradient(150deg, var(--cu-navy-2), var(--cu-red-dark))}
.school:nth-child(even) .school__media{background:linear-gradient(150deg, var(--cu-red-dark), var(--cu-navy-2))}
.school__body{padding:1rem 1.1rem 1.2rem}
.school h3{font-size:1.02rem; margin:0 0 .3rem}
.school small{color:var(--cu-grey); font-size:.82rem}
.school__arrow{position:absolute; top:.8rem; right:.9rem; color:#fff; font-weight:700; transition:transform .25s var(--ease)}
.school:hover .school__arrow{transform:translateX(4px)}

/* programme finder */
.finder{margin-top:var(--space-5); background:var(--cu-surface); border:1px solid var(--cu-line);
  border-top:3px solid var(--cu-red); border-radius:var(--radius);
  padding:clamp(1.8rem,3.5vw,3rem); box-shadow:var(--shadow-1)}
.finder h3{color:var(--cu-navy); margin:0 0 .35rem}
.finder p{margin:0 0 var(--space-3); color:var(--cu-grey); font-size:var(--fs-small)}
.finder__row{display:grid; grid-template-columns:2fr 1fr 1fr auto; gap:.8rem}
.finder input,.finder select{padding:.9rem 1rem; font:500 .95rem var(--font-text);
  border:1.5px solid var(--cu-line); border-radius:8px; background:#fff; color:var(--cu-ink)}
.finder input::placeholder{color:var(--cu-grey)}
.finder input:focus,.finder select:focus{outline:2px solid var(--cu-red); outline-offset:1px; border-color:var(--cu-red)}
@media (max-width:820px){ .finder__row{grid-template-columns:1fr 1fr} .finder input{grid-column:1/-1} }

/* ============================================================
   SECTION 2 — HERO + INTAKE STRIP + ELIGIBILITY BAND
   ============================================================ */
.hero{background:var(--cu-paper); color:var(--cu-ink); overflow:hidden}
.hero .wrap{display:grid; grid-template-columns:1.05fr .95fr; gap:clamp(2.5rem,6vw,5.5rem);
  align-items:center; padding-top:var(--space-6); padding-bottom:var(--space-6)}
.hero h1{color:var(--cu-ink); font-size:var(--fs-hero); font-weight:600; margin:0 0 var(--space-3)}
.hero h1 em{font-style:italic; color:var(--cu-red)}
.hero__kicker{color:var(--cu-red)}
.hero p.lede{font-size:1.1rem; line-height:1.75; color:var(--cu-grey); max-width:34rem; margin:0 0 var(--space-4)}
.hero__cta{display:flex; gap:1rem; flex-wrap:wrap; align-items:center}
.trust-bar{display:flex; gap:1.6rem; flex-wrap:wrap; align-items:center; margin:var(--space-4) 0 0;
  padding:var(--space-2) 0 0; border-top:1px solid var(--cu-line); list-style:none}
.trust-bar li{display:flex; align-items:center; gap:.5rem; font:600 .82rem/1 var(--font-text);
  letter-spacing:.02em; color:var(--cu-navy)}
.trust-bar svg{width:19px; height:19px; flex-shrink:0; color:var(--cu-red)}
.hero__media{position:relative; align-self:stretch; min-height:380px; border-radius:var(--radius);
  /* IMAGE PLACEHOLDER — replace with duotone campus photograph at Final Polish */
  background:
    radial-gradient(120% 90% at 80% 10%, rgba(255,200,87,.28), transparent 55%),
    linear-gradient(160deg, var(--cu-navy-2) 0%, var(--cu-red-dark) 70%, var(--cu-red) 100%);
  box-shadow:var(--shadow-1)}
@media (max-width:880px){
  .hero .wrap{grid-template-columns:1fr}
  .hero__media{min-height:220px}
}

/* intake strip */
.intake{background:var(--cu-red)}
.intake .wrap{display:flex; align-items:center; justify-content:space-between; gap:1rem;
  min-height:56px; flex-wrap:wrap; padding-top:.7rem; padding-bottom:.7rem}
.intake strong{font:700 .95rem var(--font-text); color:#fff}
.intake span{font-size:var(--fs-small); color:#F0D5D2}
.intake a{font:700 .9rem var(--font-text); color:#fff; text-underline-offset:3px}

/* eligibility band */
.elig .wrap{display:grid; grid-template-columns:1fr 1fr; gap:clamp(2rem,4vw,4rem); align-items:center}
.elig__card{background:var(--cu-surface); border:1px solid var(--cu-line); border-radius:var(--radius);
  padding:var(--space-4); box-shadow:var(--shadow-1)}
.elig__card label{display:block; font:600 .85rem var(--font-text); color:var(--cu-navy); margin:0 0 .4rem}
.elig__card select{width:100%; padding:.85rem 1rem; font:500 .95rem var(--font-text); color:var(--cu-ink);
  border:1.5px solid var(--cu-line); border-radius:8px; background:#fff; margin-bottom:var(--space-3)}
.elig__card .btn{width:100%; justify-content:center}
.elig__note{margin-top:var(--space-2); font-size:var(--fs-small); color:var(--cu-grey); text-align:center}
@media (max-width:880px){ .elig .wrap{grid-template-columns:1fr} }

/* ============================================================
   SHARED PAGE COMPONENTS — breadcrumb, facts strip, people cards
   ============================================================ */
.crumbs{font-size:var(--fs-small); padding:1rem 0; color:var(--cu-grey)}
.crumbs a{color:var(--cu-grey); text-decoration:none}
.crumbs a:hover{color:var(--cu-red)}

.facts{background:var(--cu-surface); border-top:1px solid var(--cu-line); border-bottom:1px solid var(--cu-line)}
.facts .wrap{display:grid; grid-template-columns:repeat(6,1fr); gap:1.5rem; padding-top:1.5rem; padding-bottom:1.5rem}
.fact b{display:block; font:600 1.15rem var(--font-display); color:var(--cu-red)}
.fact span{font-size:.75rem; letter-spacing:.08em; text-transform:uppercase; color:var(--cu-grey)}
.fact span em{display:inline; font-size:.68rem; letter-spacing:normal; text-transform:none; opacity:.75}
@media (max-width:900px){ .facts .wrap{grid-template-columns:repeat(3,1fr)!important} }
@media (max-width:560px){ .facts .wrap{grid-template-columns:repeat(2,1fr)!important} }

.lect{display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:1.1rem}
.lect figure{margin:0; background:var(--cu-surface); border:1px solid var(--cu-line); border-radius:var(--radius); overflow:hidden}
.lect .ph{aspect-ratio:4/5; height:auto; background:linear-gradient(150deg,var(--cu-navy-2),var(--cu-red-dark))}
/* Faculty photos are staff-uploaded selfies/headshots with inconsistent
   framing — bias the crop toward the top so foreheads/hair survive
   object-fit:cover instead of being cut by a centered crop. */
.lect .ph.duotone img{object-position:50% 18%}
.lect figcaption{padding:.9rem 1rem}
.lect b{display:block; font:600 .95rem var(--font-text); color:var(--cu-navy)}
.lect small{color:var(--cu-grey); font-size:.8rem}

/* data table — entry requirements, fee schedules, deadline calendars */
.req{width:100%; border-collapse:collapse; font-size:var(--fs-small); background:var(--cu-surface);
  border:1px solid var(--cu-line); border-radius:var(--radius); overflow:hidden}
.req th{background:var(--cu-navy); color:#fff; text-align:left; font:600 .85rem var(--font-text); padding:.7rem .9rem}
.req td{padding:.7rem .9rem; border-top:1px solid var(--cu-line); vertical-align:top}
.req tr:nth-child(even) td{background:var(--cu-wash)}

/* ============================================================
   FINAL POLISH — duotone photography treatment
   Unifies the existing inconsistent photo library (see redesign
   proposal §3.1) without waiting on a full photography commission.
   img below is grayscaled; ::after applies brand color via
   mix-blend-mode so any source photo reads as one system.
   ============================================================ */
.duotone{position:relative; overflow:hidden}
.duotone > img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
  filter:grayscale(1) contrast(1.12) brightness(.92); display:block;
  transition:filter .45s var(--ease), transform .45s var(--ease)}
.duotone::after{content:""; position:absolute; inset:0;
  background:linear-gradient(150deg, var(--cu-red-dark) 0%, var(--cu-red) 100%);
  mix-blend-mode:color; opacity:.9; transition:opacity .45s var(--ease); pointer-events:none}
/* LSE-style reveal: hovering the image (or its parent card/link/figure)
   lifts the red duotone to show the full-colour photograph */
.duotone:hover::after, a:hover .duotone::after, figure:hover .duotone::after{opacity:0}
.duotone:hover > img, a:hover .duotone > img, figure:hover .duotone > img{filter:none; transform:scale(1.02)}
.duotone__credit{position:absolute; inset:auto .8rem .6rem auto; z-index:1;
  font:500 .68rem/1 var(--font-text); letter-spacing:.08em; text-transform:uppercase;
  color:rgba(255,255,255,.7)}

/* ============================================================
   ELIGIBILITY FORM — submit micro-animation (perceived responsiveness
   only; no fabricated results, form still submits to the real
   external eligibility platform)
   ============================================================ */
@keyframes cu-spin{to{transform:rotate(360deg)}}
.btn--primary.is-loading{pointer-events:none; opacity:.9}
.btn--primary.is-loading .spinner{width:15px; height:15px; border-radius:50%;
  border:2px solid rgba(255,255,255,.4); border-top-color:#fff;
  animation:cu-spin .7s linear infinite; display:inline-block}

/* ============================================================
   PUBLICATION CARDS — mirrors the Staff Portal's pubCard format
   (cu-staff-portal-v11.html), translated to the public red/gold palette.
   ============================================================ */
.pub-list{display:grid; gap:.85rem}
.pub-card{background:var(--cu-surface); border:1px solid var(--cu-line); border-left:3px solid var(--cu-red);
  border-radius:var(--radius); padding:1rem 1.25rem; box-shadow:var(--shadow-1); transition:border-color .15s var(--ease)}
.pub-card:hover{border-left-color:var(--cu-gold)}
.pub-title{font:700 .95rem/1.45 var(--font-text); color:var(--cu-ink); margin-bottom:.3rem}
.pub-authors{font-size:.82rem; color:var(--cu-grey); font-style:italic; margin-bottom:.3rem; line-height:1.4}
.pub-venue{font-size:.82rem; color:var(--cu-grey); margin-bottom:.6rem}
.pub-venue .pv-journal{font-style:italic}
.pub-venue .pv-sep{margin:0 .3rem; color:var(--cu-line)}
.pub-card-foot{display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:.5rem; margin-top:.1rem}
.pub-foot-badges{display:flex; gap:.35rem; flex-wrap:wrap}
.pub-foot-actions{display:flex; align-items:center; gap:.75rem}
.pub-badge{font:700 .62rem/1 var(--font-text); text-transform:uppercase; letter-spacing:.02em; padding:.2rem .5rem; border-radius:4px; white-space:nowrap}
.pub-badge-school{background:rgba(153,38,33,.08); color:var(--cu-red)}
.pub-badge-type{background:rgba(58,15,13,.06); color:var(--cu-navy)}
.pub-badge-tier{font:800 .62rem/1 var(--font-text); padding:.2rem .55rem; border-radius:4px; letter-spacing:.02em; text-transform:uppercase; white-space:nowrap; border:1px solid transparent}
.pub-tier-1{background:rgba(201,162,39,.16); color:#7a5c00; border-color:rgba(201,162,39,.35)}
.pub-tier-2{background:rgba(153,38,33,.09); color:var(--cu-red); border-color:rgba(153,38,33,.25)}
.pub-tier-3{background:rgba(25,115,55,.09); color:#1a7038; border-color:rgba(25,115,55,.22)}
.pub-tier-4{background:var(--cu-wash); color:var(--cu-grey); border-color:var(--cu-line)}
.pub-cite{font:700 .78rem/1 var(--font-text); color:var(--cu-gold)}
.pub-link{font:600 .78rem/1 var(--font-text); color:var(--cu-red); text-decoration:none}
.pub-link:hover{text-decoration:underline}
.pub-empty{color:var(--cu-grey); font-size:var(--fs-small)}

/* clickable faculty cards (school hub + programme "Your lecturers" grids) */
.lect > a{display:block; text-decoration:none; color:inherit}
.lect figure{transition:box-shadow .2s var(--ease)}
.lect > a:hover figure{box-shadow:var(--shadow-1)}

/* faculty profile page */
.fac-hero{background:var(--cu-paper); padding:var(--space-5) 0}
.fac-head{display:grid; grid-template-columns:200px 1fr; gap:clamp(1.5rem,3vw,2.5rem); align-items:center}
.fac-head__photo{width:200px; height:250px; border-radius:var(--radius); box-shadow:var(--shadow-1)}
.fac-head h1{margin-bottom:.3rem}
.fac-head .fac-title{color:var(--cu-red); font-weight:600; margin:0 0 .3rem}
.fac-head .fac-unit{color:var(--cu-grey); font-size:var(--fs-small); margin:0 0 .8rem}
.fac-head .fac-orcid{display:inline-flex; align-items:center; gap:.4rem; font:600 .82rem var(--font-text); color:#a6ce39; text-decoration:none}
.fac-bio{max-width:44rem; color:var(--cu-grey); line-height:1.75; margin-top:var(--space-3)}
@media (max-width:640px){ .fac-head{grid-template-columns:1fr} .fac-head__photo{width:100%; height:220px} }

/* ============================================================
   PROGRAMME CARDS — compact text cards for a school's programme list
   (rendered live from public.programmes; no media block, since a list
   of 18–25 programmes reads better compact than as tall image cards).
   ============================================================ */
.prog-card{min-height:0}
.prog-card .school__body{padding:1.05rem 1.2rem}
.prog-card .school__body small{display:block; margin-top:.25rem; color:var(--cu-grey);
  font:600 .72rem/1 var(--font-text); letter-spacing:.06em; text-transform:uppercase}
.prog-card .school__arrow{top:50%; transform:translateY(-50%)}
.prog-card:hover .school__arrow{transform:translateY(-50%) translateX(4px)}
