/*
Theme Name: AURIGA
Theme URI: https://www.polimi.it
Author: AURIGA Project - Politecnico di Milano
Author URI: https://www.polimi.it
Description: Custom theme for the AURIGA research project - anatomy of the flow regimes in gas-liquid bubble columns. Includes templates for Home (front page), News, Results and Team.
Version: 2.4
Requires at least: 6.0
Tested up to: 6.7
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: auriga
*/

:root{
  --ink:#1B3A4B;          /* deep petrol ink */
  --deep:#1D5E80;         /* deep water blue */
  --aqua:#4FAECB;         /* aeration blue accent */
  --aqua-soft:#CFE7F0;
  --surface:#F6FAFC;      /* pale glass */
  --paper:#FFFFFF;
  --muted:#5F7682;
  --line:#DEE9EE;
  --maxw:1120px;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  font-family:'Manrope',system-ui,-apple-system,sans-serif;
  color:var(--ink); background:var(--paper);
  font-size:17px; line-height:1.65;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,.display{font-family:'Manrope',sans-serif;font-weight:700;line-height:1.15;letter-spacing:-.015em}
.mono{font-family:'Manrope',sans-serif;font-weight:600}
a{color:var(--deep)}
img{max-width:100%;display:block}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 28px}

/* ---------- Navigation ---------- */
.nav{
  position:sticky;top:0;z-index:50;background:rgba(255,255,255,.92);
  backdrop-filter:blur(8px);border-bottom:1px solid var(--line);
}
.nav-inner{max-width:var(--maxw);margin:0 auto;padding:14px 28px;
  display:flex;align-items:center;justify-content:space-between;gap:24px}
.nav-brand{display:flex;align-items:center;gap:18px;text-decoration:none;min-width:0}
.nav-brand img{height:28px;width:auto}
.nav-brand .brand-auriga{height:30px}
.gov-sep{width:1px;height:24px;background:var(--line);flex:none}
.nav-links{display:flex;gap:6px;list-style:none}
.nav-links a{
  text-decoration:none;color:var(--ink);font-size:14.5px;letter-spacing:.10em;
  text-transform:uppercase;padding:8px 14px;border-radius:3px;
  transition:background .18s,color .18s;
}
.nav-links a:hover{background:var(--surface)}
.nav-links a.active{color:var(--paper);background:var(--deep)}
.nav-toggle{display:none;flex-direction:column;justify-content:center;gap:5px;
  width:44px;height:40px;padding:0 10px;background:none;border:1px solid var(--line);
  border-radius:4px;cursor:pointer}
.nav-toggle span{display:block;height:2px;width:100%;background:var(--ink);
  border-radius:1px;transition:transform .2s,opacity .2s}
.nav-open .nav-toggle span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.nav-open .nav-toggle span:nth-child(2){opacity:0}
.nav-open .nav-toggle span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* ---------- Shared blocks ---------- */
.eyebrow{
  font-family:'Manrope',sans-serif;font-weight:600;font-size:12.5px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--aqua);margin-bottom:14px;
}
.section{padding:84px 0}
.section.alt{background:var(--surface)}
.section h2{font-size:clamp(28px,3.6vw,40px);margin-bottom:18px}
.lede{font-size:19px;color:var(--muted);max-width:64ch}
.rule{border:none;border-top:1px solid var(--line);margin:0}

/* ---------- Hero (home) ---------- */
.hero{background:linear-gradient(180deg,#1A4B69 0%,#2878A6 100%);color:#EAF3F7;overflow:hidden}
.hero{position:relative}
.hero-grid{max-width:var(--maxw);margin:0 auto;padding:104px 28px 112px;position:relative;z-index:1}
.hero-content{max-width:760px}
.hero .eyebrow,.hero .is-style-eyebrow{color:var(--aqua-soft);margin-bottom:0}
.hero h1{font-size:clamp(34px,5vw,58px);color:#fff;max-width:18ch;margin:0}
.hero p{margin-top:26px;max-width:58ch;font-size:18.5px;color:#D9EAF3}
.hero-cta{display:inline-block;margin-top:38px;text-decoration:none;color:#fff;
  border:1px solid rgba(255,255,255,.45);padding:13px 26px;border-radius:3px;
  font-size:14px;letter-spacing:.14em;text-transform:uppercase;transition:background .2s,border-color .2s}
.hero-cta:hover{background:rgba(255,255,255,.12);border-color:#fff}
.is-style-hero-cta a,.is-style-hero-cta .wp-block-button__link{
  display:inline-block;margin-top:38px;text-decoration:none;color:#fff;
  border:1px solid rgba(255,255,255,.45);padding:13px 26px;border-radius:3px;
  font-size:14px;letter-spacing:.14em;text-transform:uppercase;transition:background .2s,border-color .2s;
  background:transparent;
}
.is-style-hero-cta a:hover,.is-style-hero-cta .wp-block-button__link:hover{
  background:rgba(255,255,255,.12);border-color:#fff;
}
.hero .wp-block-buttons{margin-top:0}
.hero-logo{height:56px;width:auto;filter:invert(1) brightness(1.6);margin-bottom:40px}

/* Signature: scroll-parallax bubbles in the hero background */
.hero-canvas{position:absolute;inset:0;z-index:0;pointer-events:none}
@media (prefers-reduced-motion:reduce){
  .bubble{animation:none;opacity:.5;bottom:auto}
  html{scroll-behavior:auto}
}

/* ---------- Cards / grids ---------- */
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:28px;margin-top:44px}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin-top:44px}
.card{
  background:var(--paper);border:1px solid var(--line);border-radius:6px;
  padding:34px 30px;position:relative;
}
.card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
  background:var(--aqua);border-radius:6px 0 0 6px}
.card h3{font-size:21px;margin:10px 0 12px}
.card p{color:var(--muted);font-size:16px}
.tag{font-family:'Manrope',sans-serif;font-weight:600;font-size:11.5px;letter-spacing:.14em;
  color:var(--deep);background:var(--aqua-soft);padding:3px 10px;border-radius:3px;display:inline-block}

/* Quote */
.quote{
  margin-top:56px;border-left:3px solid var(--aqua);padding:8px 0 8px 34px;
  font-family:'Manrope',sans-serif;font-weight:500;font-size:clamp(19px,2.4vw,25px);line-height:1.55;color:var(--deep);
  max-width:54ch;
}
.quote small{display:block;margin-top:14px;font-family:'Manrope',sans-serif;font-weight:600;
  font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}

/* ---------- News timeline ---------- */
.timeline{margin-top:52px;border-left:2px solid var(--line);padding-left:0;list-style:none}
.news-item{position:relative;padding:0 0 54px 42px}
.news-item::before{content:"";position:absolute;left:-8px;top:6px;width:14px;height:14px;
  border-radius:50%;background:var(--paper);border:3px solid var(--aqua)}
.news-date{font-family:'Manrope',sans-serif;font-weight:600;font-size:12.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--aqua)}
.news-item h3{font-size:23px;margin:8px 0 10px}
.news-item p{color:var(--muted);max-width:68ch}

/* ---------- Results ---------- */
.figure-grid{display:grid;grid-template-columns:1fr 1fr;gap:28px;margin-top:44px}
.figure{background:var(--paper);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.figure img{width:100%;height:280px;object-fit:cover}
.figure figcaption{padding:20px 24px;font-size:15px;color:var(--muted)}
.figure figcaption strong{color:var(--ink);font-family:'Manrope',sans-serif;font-weight:400;
  display:block;font-size:18px;margin-bottom:6px}
.pubs{margin-top:40px;list-style:none}
.pubs li{padding:18px 0;border-bottom:1px solid var(--line);color:var(--muted);font-size:16px}
.pubs li strong{color:var(--ink)}

/* ---------- Team ---------- */
.pi-card{display:grid;grid-template-columns:280px 1fr;gap:44px;margin-top:48px;
  background:var(--paper);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.pi-card img{width:100%;height:100%;object-fit:cover;object-position:top}
.pi-body{padding:38px 40px 38px 0}
.pi-body h3{font-size:28px;margin-bottom:4px}
.role{font-family:'Manrope',sans-serif;font-weight:600;font-size:12.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--aqua);margin-bottom:16px}
.pi-body p{color:var(--muted)}
.team-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin-top:48px}
.member{background:var(--paper);border:1px solid var(--line);border-radius:6px;overflow:hidden;
  transition:transform .2s,box-shadow .2s}
.member:hover{transform:translateY(-4px);box-shadow:0 14px 30px rgba(16,34,46,.10)}
.member img{width:100%;height:250px;object-fit:cover;object-position:center 25%}
.member-body{padding:22px 24px 26px}
.member-body h3{font-size:20px;margin-bottom:2px}
.member-body p{color:var(--muted);font-size:15px;margin-top:10px}


/* Featured member (post-doc) — second in hierarchy */
.featured-card{display:grid;grid-template-columns:300px 1fr;gap:40px;margin-top:28px;
  background:var(--paper);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.featured-card img{width:100%;height:100%;min-height:300px;object-fit:cover;object-position:center 20%}
.featured-body{padding:30px 34px 30px 0}
.featured-body h3{font-size:23px;margin-bottom:2px}
.featured-body p{color:var(--muted);font-size:16px}
.avatar{height:250px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(160deg,var(--aqua-soft),#E4EFF4);
  color:var(--deep);font-size:58px;font-weight:700;letter-spacing:.02em}

/* WordPress nav menu compatibility */
.nav-links li { list-style: none }
.nav-links .current-menu-item > a,
.nav-links .current_page_item > a,
.nav-links .current-menu-ancestor > a,
/* WordPress marks the parent of a child page current-page-ancestor, not
   current-menu-ancestor: the conference pages and the team member pages */
.nav-links .current-page-ancestor > a,
.nav-links .current_page_ancestor > a { color: var(--paper); background: var(--deep) }
.nav-links .menu-item a { text-decoration: none; color: var(--ink);
  font-size: 14.5px; letter-spacing: .10em; text-transform: uppercase;
  padding: 8px 14px; border-radius: 3px; display: block;
  transition: background .18s, color .18s }
.nav-links .menu-item a:hover { background: var(--surface) }
/* hide sub-menus (we don't use them) */
.nav-links .sub-menu { display: none }

@media (max-width:1230px){
  .nav-brand img{height:22px}
  .nav-brand .brand-auriga{height:24px}
  .nav-brand{gap:12px}
}
@media (max-width:1080px){
  .nav-toggle{display:flex}
  .nav-links{display:none;position:absolute;top:100%;left:0;right:0;
    background:var(--paper);border-bottom:1px solid var(--line);
    flex-direction:column;gap:2px;padding:10px 20px 16px;
    box-shadow:0 14px 28px rgba(27,58,75,.10)}
  .nav.nav-open .nav-links{display:flex}
  .nav-links a{display:block;padding:12px 12px}
}
@media (max-width:640px){
  .nav-inner{padding:10px 16px;gap:12px}
  .nav-brand{gap:9px}
  .nav-brand img{height:16px}
  .nav-brand .brand-auriga{height:18px}
  .gov-sep{height:14px}
}
@media (max-width:900px){
  .featured-card{grid-template-columns:1fr}
  .featured-body{padding:26px 26px}
}


/* Lab facilities */
.facility{background:var(--paper);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.facility-body{padding:20px 24px 24px}
.facility-body h3{font-size:19px;margin-bottom:8px}
.facility-body p{color:var(--muted);font-size:15px}
.facility .placeholder-img{border:none;border-bottom:2px dashed var(--aqua);border-radius:0;height:190px}

/* Lab photo placeholders */
.placeholder-img{
  height:220px;border:2px dashed var(--aqua);border-radius:6px;
  background:repeating-linear-gradient(45deg,rgba(61,150,180,.05) 0 14px,rgba(61,150,180,.10) 14px 28px);
  display:flex;align-items:center;justify-content:center;text-align:center;padding:20px;
  color:var(--deep);font-weight:600;font-size:14px;letter-spacing:.12em;text-transform:uppercase;
}
.spec-list{list-style:none;margin-top:18px}
.spec-list li{padding:10px 0;border-bottom:1px solid var(--line);color:var(--muted);font-size:15.5px}
.spec-list li strong{color:var(--ink)}

/* ---------- Footer ---------- */
footer{background:var(--ink);color:#AEC4CF;margin-top:0}
.footer-inner{max-width:var(--maxw);margin:0 auto;padding:64px 28px 40px}
.footer-logos{display:flex;align-items:center;justify-content:center;gap:44px;flex-wrap:wrap;
  background:var(--paper);border-radius:6px;padding:26px 34px;margin-bottom:44px}
.footer-logos img{height:48px;width:auto}
.footer-logos .footer-auriga{height:40px}
.footer-cols{display:grid;grid-template-columns:2fr 1fr 1fr;gap:40px}
footer h4{font-family:'Manrope',sans-serif;font-weight:400;color:#fff;font-size:18px;margin-bottom:14px}
footer p,footer a{font-size:14.5px;color:#AEC4CF}
footer ul{list-style:none}
footer li{margin-bottom:8px}
.footer-note{border-top:1px solid rgba(255,255,255,.16);margin-top:48px;padding-top:24px;
  font-size:13px;color:#8CA4B0}

/* Page header (inner pages) */
.page-head{background:var(--surface);border-bottom:1px solid var(--line);padding:72px 0 60px}
.page-head h1{font-size:clamp(32px,4.4vw,50px)}
.page-head p{margin-top:16px;color:var(--muted);max-width:64ch;font-size:18px}

/* ---------- Responsive ---------- */
@media (max-width:1230px){
  .nav-brand img{height:22px}
  .nav-brand .brand-auriga{height:24px}
  .nav-brand{gap:12px}
}
@media (max-width:1080px){
  .nav-toggle{display:flex}
  .nav-links{display:none;position:absolute;top:100%;left:0;right:0;
    background:var(--paper);border-bottom:1px solid var(--line);
    flex-direction:column;gap:2px;padding:10px 20px 16px;
    box-shadow:0 14px 28px rgba(27,58,75,.10)}
  .nav.nav-open .nav-links{display:flex}
  .nav-links a{display:block;padding:12px 12px}
}
@media (max-width:640px){
  .nav-inner{padding:10px 16px;gap:12px}
  .nav-brand{gap:9px}
  .nav-brand img{height:16px}
  .nav-brand .brand-auriga{height:18px}
  .gov-sep{height:14px}
}
@media (max-width:900px){
  .hero-grid{padding:72px 28px}
  .grid-2,.grid-3,.figure-grid,.team-grid{grid-template-columns:1fr}
  .pi-card{grid-template-columns:1fr}
  .pi-card img{max-height:420px}
  .pi-body{padding:30px 28px}
  .footer-cols{grid-template-columns:1fr}
  .nav-links a{padding:8px 9px;font-size:13px}
}


/* Featured member (post-doc) — second-largest card */
.featured-card{display:grid;grid-template-columns:220px 1fr;gap:36px;margin-top:28px;
  background:var(--paper);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.featured-card img{width:100%;height:100%;object-fit:cover;object-position:center 20%}
.featured-body{padding:30px 34px 30px 0}
.featured-body h3{font-size:23px;margin-bottom:2px}
.featured-body p{color:var(--muted);font-size:15.5px}
.noimg{width:100%;height:300px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(160deg,var(--deep),var(--aqua));color:#fff;
  font-weight:700;font-size:52px;letter-spacing:.04em}
@media (max-width:1230px){
  .nav-brand img{height:22px}
  .nav-brand .brand-auriga{height:24px}
  .nav-brand{gap:12px}
}
@media (max-width:1080px){
  .nav-toggle{display:flex}
  .nav-links{display:none;position:absolute;top:100%;left:0;right:0;
    background:var(--paper);border-bottom:1px solid var(--line);
    flex-direction:column;gap:2px;padding:10px 20px 16px;
    box-shadow:0 14px 28px rgba(27,58,75,.10)}
  .nav.nav-open .nav-links{display:flex}
  .nav-links a{display:block;padding:12px 12px}
}
@media (max-width:640px){
  .nav-inner{padding:10px 16px;gap:12px}
  .nav-brand{gap:9px}
  .nav-brand img{height:16px}
  .nav-brand .brand-auriga{height:18px}
  .gov-sep{height:14px}
}
@media (max-width:900px){
  .featured-card{grid-template-columns:1fr}
  .featured-card img{max-height:380px}
  .featured-body{padding:26px 26px}
}

/* ---------------------------------------------------------------
   Gutenberg block-style bridge
   Team/Home/Results/Lab/Publications content uses native Gutenberg
   blocks with is-style-* classNames (e.g. is-style-pi-card,
   is-style-eyebrow) instead of the shortcode markup this stylesheet
   was originally written for (.pi-card, .eyebrow, ...). Without this
   bridge those classNames have no matching CSS and render unstyled.
--------------------------------------------------------------- */

/* front-page.php, page-team.php, page-news.php, page-results.php,
   page-lab.php and page-publications.php print the_content() with no
   .wrap container (unlike the generic page.php fallback), so the
   top-level Gutenberg group renders edge-to-edge. Constrain it the
   same way .wrap does. Excludes the hero's own full-bleed .hero
   section, which is hand-coded markup outside the_content(). */
body > .wp-block-group.alignfull{
  max-width:var(--maxw);margin-left:auto;margin-right:auto;
  padding-left:28px;padding-right:28px;
}
body > .wp-block-group.alignfull.has-background{
  max-width:none;padding-left:0;padding-right:0;
}
body > .wp-block-group.alignfull.has-background > .wp-block-group__inner-container{
  max-width:var(--maxw);margin-left:auto;margin-right:auto;
  padding-left:28px;padding-right:28px;
}

.is-style-eyebrow{
  font-family:'Manrope',sans-serif;font-weight:600;font-size:12.5px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--aqua);margin-bottom:14px;
}
.is-style-lede{font-size:19px;color:var(--muted);max-width:64ch}
.is-style-tag{font-family:'Manrope',sans-serif;font-weight:600;font-size:11.5px;letter-spacing:.14em;
  color:var(--deep);background:var(--aqua-soft);padding:3px 10px;border-radius:3px;display:inline-block}

.is-style-card-accent{
  background:var(--paper);border:1px solid var(--line);border-radius:6px;
  padding:34px 30px;position:relative;
}
.is-style-card-accent::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
  background:var(--aqua);border-radius:6px 0 0 6px}
.is-style-card-accent h3{font-size:21px;margin:10px 0 12px}
.is-style-card-accent p{color:var(--muted);font-size:16px}

.is-style-quote-block{
  border-left:3px solid var(--aqua);padding:8px 0 8px 34px;
  font-family:'Manrope',sans-serif;font-weight:500;font-size:clamp(19px,2.4vw,25px);line-height:1.55;color:var(--deep);
  max-width:54ch;
}
.is-style-quote-block p:last-child{margin-top:14px;font-family:'Manrope',sans-serif;font-weight:600;
  font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}

.is-style-timeline{margin-top:52px;border-left:2px solid var(--line);padding-left:0;list-style:none}
.is-style-timeline > *{position:relative;padding:0 0 54px 42px}

/* News timeline rows: image left, text right, dot on the rail */
.is-style-news-row{position:relative;padding:0 0 54px 42px;margin:0}
.is-style-news-row::before{content:"";position:absolute;left:-9px;top:6px;width:14px;height:14px;
  border-radius:50%;background:var(--paper);border:3px solid var(--aqua)}
.is-style-news-row > .wp-block-columns{margin-top:0;align-items:flex-start}
.is-style-news-row .is-style-news-thumb{flex-basis:200px;flex-grow:0;width:200px}
.is-style-news-row .is-style-news-thumb .wp-block-image{margin:0}
.is-style-news-row .is-style-news-thumb img{width:200px;height:150px;object-fit:cover;border-radius:6px;display:block}
.is-style-news-row .news-date{font-family:'Manrope',sans-serif;font-weight:600;font-size:12.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--aqua)}
.is-style-news-row h3{font-size:22px;margin:8px 0 10px;letter-spacing:-.01em}
.is-style-news-row p{color:var(--muted);max-width:68ch}
@media (max-width:640px){
  .is-style-news-row > .wp-block-columns{flex-direction:column}
  .is-style-news-row .is-style-news-thumb{flex-basis:auto;width:100%}
  .is-style-news-row .is-style-news-thumb img{width:100%;height:auto;max-height:220px}
}

.is-style-facility-card{background:var(--paper);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.is-style-spec-list{list-style:none;margin-top:18px}
.is-style-spec-list li{padding:10px 0;border-bottom:1px solid var(--line);color:var(--muted);font-size:15.5px}
.is-style-spec-list li strong{color:var(--ink)}
.is-style-publications{margin-top:40px;list-style:none}
.is-style-publications li{padding:18px 0;border-bottom:1px solid var(--line);color:var(--muted);font-size:16px}
.is-style-publications li strong{color:var(--ink)}

/* ---------- Team cards ---------- */
.is-style-pi-card{margin-top:48px;
  background:var(--paper);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.is-style-pi-card > .wp-block-group__inner-container{display:grid;grid-template-columns:280px 1fr;gap:44px}
.is-style-pi-card > .wp-block-group__inner-container > .wp-block-image{width:280px;height:100%;margin:0}
.is-style-pi-card img{width:100%;height:100%;min-height:340px;object-fit:cover;object-position:top}
.is-style-pi-card h3{font-size:28px;margin-bottom:4px}
.is-style-pi-card .is-style-eyebrow{margin-bottom:16px}
.is-style-pi-card p{color:var(--muted)}

.is-style-featured-card{
  background:var(--paper);border:1px solid var(--line);border-radius:6px;overflow:hidden;
  transition:transform .2s,box-shadow .2s}
.is-style-featured-card > .wp-block-group__inner-container{display:grid;grid-template-columns:240px 1fr;gap:36px}
.is-style-featured-card > .wp-block-group__inner-container > .wp-block-image{width:240px;height:100%;margin:0}
.is-style-featured-card:hover{transform:translateY(-3px);box-shadow:0 14px 30px rgba(16,34,46,.10)}
.is-style-featured-card img{width:100%;height:100%;min-height:280px;object-fit:cover;object-position:center 20%}
.is-style-featured-card h3{font-size:23px;margin-bottom:2px}
.is-style-featured-card p{color:var(--muted);font-size:16px}

.is-style-member-card{background:var(--paper);border:1px solid var(--line);border-radius:6px;overflow:hidden;
  height:100%;transition:transform .2s,box-shadow .2s;display:flex;flex-direction:column}
.is-style-member-card:hover{transform:translateY(-4px);box-shadow:0 14px 30px rgba(16,34,46,.10)}
.is-style-member-card .wp-block-image{margin:0}
.is-style-member-card img{width:100%;height:250px;object-fit:cover;object-position:center 25%}
.is-style-member-card h3{font-size:20px;margin-bottom:2px}
.is-style-member-card p{color:var(--muted);font-size:15px;margin-top:10px}

/* Card headings act as the primary link — keep them looking like headings, not raw links */
.is-style-pi-card h3 a,
.is-style-featured-card h3 a,
.is-style-member-card h3 a{
  color:inherit;text-decoration:none;transition:color .18s;
}
.is-style-pi-card h3 a:hover,
.is-style-featured-card h3 a:hover,
.is-style-member-card h3 a:hover{
  color:var(--deep);text-decoration:underline;
}

/* Bio-page portrait */
.is-style-rounded img,.is-style-rounded{border-radius:10px;overflow:hidden}

@media (max-width:900px){
  .is-style-pi-card{grid-template-columns:1fr}
  .is-style-pi-card img{max-height:420px}
  .is-style-featured-card{grid-template-columns:1fr}
  .is-style-featured-card img{max-height:320px}
}

/* ---------------------------------------------------------------
   Site-wide visual refresh
--------------------------------------------------------------- */

/* Light-blue "liquid" backdrop instead of plain white; cards and
   sections keep their own backgrounds and float above it. */
body{background:#EFF5F9}

/* Inner page headers become mini-heroes: same gradient as the home
   hero. The bubble animation lives only in the home banner. */
.page-head{
  position:relative;overflow:hidden;
  background:linear-gradient(180deg,#1A4B69 0%,#2878A6 100%);
  border-bottom:none;padding:92px 0 78px;color:#EAF3F7;
}
.page-head .wrap{position:relative;z-index:1}
.page-head h1{color:#fff}
.page-head p{color:#D9EAF3}
.page-head .eyebrow{color:var(--aqua-soft)}

/* Larger institutional logos in the sticky nav. The AURIGA logo is
   relocated by page-bubbles.js into the blue page headers (reusing the
   theme's own .hero-logo style), freeing room for bigger logos here. */
.nav-brand img{height:72px}
.nav-brand .brand-auriga{display:none}
.nav-brand .gov-sep:last-of-type{display:none}
.gov-sep{height:50px}
@media (max-width:1230px){
  .nav-brand img{height:55px}
  .gov-sep{height:38px}
}
@media (max-width:640px){
  .nav-brand img{height:38px}
  .gov-sep{height:25px}
}

/* AURIGA logo, much larger, inside the blue banners */
.hero .hero-logo{height:145px;margin-bottom:34px}
.page-head .hero-logo{height:105px;margin-bottom:26px}
@media (max-width:640px){
  .hero .hero-logo{height:95px}
  .page-head .hero-logo{height:75px}
}

/* Footer: logo strip removed (logos now live prominently in the nav) */
.footer-logos{display:none}

/* ---------------- Cleaner layout polish ---------------- */

/* Sticky nav: slightly more solid under the taller logos */
.nav{background:rgba(255,255,255,.96)}
.nav-inner{padding:12px 28px}

/* Cards: softer corners and a faint lift; lighter borders */
.card,.is-style-card-accent,
.is-style-pi-card,.is-style-featured-card,.is-style-member-card,
.pi-card,.featured-card,.member,
.figure,.facility,.is-style-facility-card{
  border-radius:10px;border-color:#E3EDF2;
  box-shadow:0 1px 2px rgba(27,58,75,.04),0 10px 28px rgba(27,58,75,.06);
}
.card::before,.is-style-card-accent::before{border-radius:10px 0 0 10px}

/* Alternating bands read as clean white strips on the tinted body */
.section.alt{background:var(--paper)}
body > .wp-block-group.alignfull.has-surface-background-color{background:var(--paper) !important}

/* Footer: thin aqua rule marks the transition into the dark footer */
footer{border-top:4px solid var(--aqua)}

/* ---------------------------------------------------------------
   Uniform team portraits
   Every card in a tier gets the same portrait box, so the photos
   line up regardless of how long the bio underneath happens to be.
   The figure is stretched to the card height and the image fills it
   absolutely, so a longer bio never leaves a white strip beside it.
--------------------------------------------------------------- */
.is-style-pi-card > .wp-block-group__inner-container{
  grid-template-columns:280px 1fr;min-height:340px;align-items:stretch;
}
.is-style-pi-card > .wp-block-group__inner-container > .wp-block-image{
  position:relative;width:280px;min-height:340px;margin:0;overflow:hidden;align-self:stretch;
}
.is-style-pi-card > .wp-block-group__inner-container > .wp-block-image img{
  position:absolute;inset:0;width:100%;height:100%;min-height:0;
  object-fit:cover;object-position:center 20%;
}

.is-style-featured-card > .wp-block-group__inner-container{
  grid-template-columns:240px 1fr;min-height:300px;align-items:stretch;
}
.is-style-featured-card > .wp-block-group__inner-container > .wp-block-image{
  position:relative;width:240px;min-height:300px;margin:0;overflow:hidden;align-self:stretch;
}
.is-style-featured-card > .wp-block-group__inner-container > .wp-block-image img{
  position:absolute;inset:0;width:100%;height:100%;min-height:0;
  object-fit:cover;object-position:center 20%;
}

.is-style-member-card > .wp-block-group__inner-container > .wp-block-image{
  width:100%;height:250px;margin:0;overflow:hidden;
}
.is-style-member-card > .wp-block-group__inner-container > .wp-block-image img{
  width:100%;height:250px;object-fit:cover;object-position:center 25%;
}

@media (max-width:900px){
  .is-style-pi-card > .wp-block-group__inner-container,
  .is-style-featured-card > .wp-block-group__inner-container{
    grid-template-columns:1fr;min-height:0;
  }
  .is-style-pi-card > .wp-block-group__inner-container > .wp-block-image,
  .is-style-featured-card > .wp-block-group__inner-container > .wp-block-image{
    position:static;width:100%;height:320px;min-height:0;
  }
  .is-style-pi-card > .wp-block-group__inner-container > .wp-block-image img,
  .is-style-featured-card > .wp-block-group__inner-container > .wp-block-image img{
    position:static;height:320px;
  }
}

/* ---------------------------------------------------------------
   News index — titles only, one row per item
--------------------------------------------------------------- */
.news-list{list-style:none;margin:40px 0 0;border-top:1px solid var(--line)}
.news-list-item{border-bottom:1px solid var(--line)}
.news-list-item > a{
  display:grid;grid-template-columns:200px 1fr 32px;align-items:baseline;gap:24px;
  padding:26px 16px;text-decoration:none;color:inherit;
  transition:background .18s,color .18s;
}
.news-list-item > a:hover{background:var(--paper)}
.news-list-item .news-date{display:block}
.news-list-item h3{
  font-size:23px;margin:0;letter-spacing:-.01em;transition:color .18s;
}
.news-list-item > a:hover h3{color:var(--deep)}
.news-arrow{
  justify-self:end;color:var(--aqua);font-size:20px;line-height:1;
  opacity:0;transform:translateX(-6px);transition:opacity .18s,transform .18s;
}
.news-list-item > a:hover .news-arrow{opacity:1;transform:translateX(0)}
@media (max-width:640px){
  .news-list-item > a{grid-template-columns:1fr;gap:6px;padding:22px 8px}
  .news-arrow{display:none}
}

/* ---------------------------------------------------------------
   Single news article
--------------------------------------------------------------- */
.news-article{max-width:76ch}
.news-article p{margin-bottom:22px}
.news-article h2{font-size:26px;margin:44px 0 14px}
.news-article .wp-block-image{margin:36px 0}
.news-article .wp-block-image img{
  width:100%;border-radius:10px;
  box-shadow:0 1px 2px rgba(27,58,75,.04),0 10px 28px rgba(27,58,75,.08);
}
.news-article figcaption,.news-article .wp-element-caption{
  margin-top:12px;font-size:14px;color:var(--muted);line-height:1.5;
}
.news-article .wp-block-columns{margin:36px 0;gap:24px}
.news-article .wp-block-columns .wp-block-image{margin:0}
.news-back{margin-top:56px;padding-top:24px;border-top:1px solid var(--line)}
.news-back a{
  text-decoration:none;font-size:13.5px;letter-spacing:.12em;text-transform:uppercase;
  font-weight:600;color:var(--deep);
}
.news-back a:hover{text-decoration:underline}

/* Tall portrait photos in an article: keep them from dominating the column */
.news-article .is-portrait img{max-width:460px;margin-left:auto;margin-right:auto}
.news-article .is-portrait figcaption{max-width:460px;margin-left:auto;margin-right:auto}
/* A head-and-shoulders portrait of a visitor is not a documentary photograph:
   there is no detail in it that rewards enlargement, and the files people send
   for this purpose are small. `.news-article .wp-block-image img` sets
   width:100%, which would blow one up to the full article measure and make a
   face soft. This holds a headshot at its own size, centred. Hand-typed class,
   like .is-portrait above — neither is a registered block style. */
.news-article .is-headshot img{width:auto;max-width:340px;margin-left:auto;margin-right:auto}
.news-article .is-headshot figcaption{max-width:340px;margin-left:auto;margin-right:auto}

/* ---------------------------------------------------------------
   Whole-card links (Team)
   The name inside each card is the real anchor; a stretched
   pseudo-element makes the entire card surface clickable, so a
   visitor no longer has to hit the name exactly to reach the
   extended biography. Text inside the card stays selectable
   because the overlay sits behind it (z-index 1 vs 2).
--------------------------------------------------------------- */
.is-style-pi-card,
.is-style-featured-card,
.is-style-member-card{position:relative;cursor:pointer}

.is-style-pi-card h3 a::after,
.is-style-featured-card h3 a::after,
.is-style-member-card h3 a::after{
  content:"";position:absolute;inset:0;z-index:1;border-radius:inherit;
}

/* The title reacts to a hover anywhere on the card, not just on itself */
.is-style-pi-card:hover h3 a,
.is-style-featured-card:hover h3 a,
.is-style-member-card:hover h3 a{color:var(--deep);text-decoration:underline;text-underline-offset:3px}

/* Keyboard users still get a visible focus ring on the whole card */
.is-style-pi-card:has(h3 a:focus-visible),
.is-style-featured-card:has(h3 a:focus-visible),
.is-style-member-card:has(h3 a:focus-visible){
  outline:3px solid var(--aqua);outline-offset:3px;
}
.is-style-pi-card h3 a:focus-visible,
.is-style-featured-card h3 a:focus-visible,
.is-style-member-card h3 a:focus-visible{outline:none}

/* Fallback for browsers without :has() - PI card keeps its own ring */
.is-style-member-card:hover{transform:translateY(-4px)}

/* ---------------------------------------------------------------
   Work-package rows (Home)
   Full-width accent cards, one per work package, so the project can
   be read as prose rather than skimmed as a grid of tiles.
--------------------------------------------------------------- */
.is-style-wp-card h3{font-size:23px;margin:6px 0 14px}
.is-style-wp-card p{color:var(--muted)}
.is-style-wp-card strong{color:var(--ink);font-weight:600}

/* ---------------------------------------------------------------
   Team CV download
   Rendered by auriga_append_cv_link() as soon as a PDF named after
   the page slug exists in wp-content/uploads/cv/.
--------------------------------------------------------------- */
.cv-download{margin:36px 0 0;padding-top:24px;border-top:1px solid var(--line)}
.cv-download a{
  display:inline-flex;align-items:center;gap:10px;
  padding:12px 22px;border:1px solid var(--deep);border-radius:4px;
  text-decoration:none;font-size:14px;font-weight:600;
  letter-spacing:.06em;text-transform:uppercase;color:var(--deep);
  transition:background .18s,color .18s;
}
.cv-download a:hover{background:var(--deep);color:#fff}
.cv-download .cv-meta{margin-left:12px;font-size:13.5px;color:var(--muted);text-transform:none;letter-spacing:0}

/* ---------------------------------------------------------------
   Publications
   One block per contribution: title, authors, venue, summary and
   the download links (paper / slides / poster).
--------------------------------------------------------------- */
.is-style-pub-entry{
  background:var(--paper);border:1px solid var(--line);border-radius:6px;
  margin-top:20px;transition:box-shadow .2s;
}
.is-style-pub-entry:hover{box-shadow:0 10px 26px rgba(16,34,46,.07)}
.is-style-pub-entry h3{font-size:20px;line-height:1.35;margin:6px 0 10px}
.is-style-pub-entry .pub-authors{font-size:15px;color:var(--ink);margin-bottom:4px}
.is-style-pub-entry .pub-venue{font-size:14.5px;color:var(--muted);margin-bottom:16px}
.is-style-pub-entry .pub-abstract{font-size:15.5px;color:var(--muted);margin-bottom:18px}
.pub-links{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}
.pub-links a{
  display:inline-block;padding:8px 16px;border:1px solid var(--line);border-radius:4px;
  font-size:12.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
  text-decoration:none;color:var(--deep);background:var(--surface);
  transition:background .18s,border-color .18s;
}
.pub-links a:hover{background:var(--deep);border-color:var(--deep);color:#fff}
.pub-links .is-missing{opacity:.45;pointer-events:none}

/* ---------------------------------------------------------------
   Editorial placeholder
   Marks a passage that still needs a fact, a photo or a file from
   the person it concerns. Deliberately loud: it is meant to be
   impossible to leave on the published site by accident.
--------------------------------------------------------------- */
.is-style-todo{
  background:#FFF4D6;border-left:4px solid #E0A526;border-radius:4px;
  padding:14px 18px;margin:18px 0;font-size:14.5px;color:#6B4E0C;
}
.is-style-todo strong{color:#5A400A}
.is-style-todo::before{content:"To be completed — ";font-weight:700}

/* Facility cards: keep every photograph in the same box so the three
   cards stay level whatever the aspect ratio of the picture. */
.is-style-facility-card .wp-block-group.has-background{min-height:300px}
.is-style-facility-card .wp-block-image{margin:0}
.is-style-facility-card .wp-block-image img{max-height:240px;width:auto;object-fit:contain}

/* The overlay must resolve against the card, so no intermediate element
   inside the card may be positioned. The picture keeps position:relative
   from the uniform-portrait rules above but has z-index:auto, so the
   z-index:1 overlay still paints over it. */
.is-style-pi-card > .wp-block-group__inner-container > .wp-block-group,
.is-style-featured-card > .wp-block-group__inner-container > .wp-block-group,
.is-style-member-card > .wp-block-group__inner-container > .wp-block-group{
  position:static;
}

/* ---------------------------------------------------------------
   News page: the article list is a Query Loop block living in the
   page itself, so the whole page can be edited in WordPress. These
   rules give the block the same rows the hand-coded .news-list had.
--------------------------------------------------------------- */
.news-query{margin-top:40px;border-top:1px solid var(--line)}
.news-query .wp-block-post-template{list-style:none;margin:0;padding:0}
.news-query .wp-block-post{
  position:relative;display:grid;grid-template-columns:200px 1fr 32px;align-items:start;gap:24px;
  padding:26px 16px;border-bottom:1px solid var(--line);transition:background .18s;
}
.news-query .wp-block-post:hover{background:var(--paper)}
.news-query .wp-block-post > *{margin:0}
/* the picture keeps its column even when an item has none, so every title lines up */
.news-query .wp-block-post-featured-image{grid-column:1;margin:0}
.news-query .wp-block-post-featured-image img{
  width:200px;height:150px;object-fit:cover;border-radius:6px;display:block;
}
.news-query .news-text{grid-column:2}
.news-query .news-text > *{margin:0}
.news-query .wp-block-post-date{
  font-family:'Manrope',sans-serif;font-weight:600;font-size:12.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--aqua);
}
.news-query .wp-block-post-title{font-size:23px;margin:6px 0 0;letter-spacing:-.01em}
.news-query .wp-block-post-title a{text-decoration:none;color:inherit;transition:color .18s}
.news-query .wp-block-post:hover .wp-block-post-title a{color:var(--deep)}
.news-query .wp-block-post-excerpt{margin-top:8px}
.news-query .wp-block-post-excerpt__excerpt{font-size:15.5px;color:var(--muted);max-width:70ch;margin:0}
.news-query .wp-block-post-excerpt__more-text{display:none}
/* the whole row is the link, and the arrow appears on hover */
.news-query .wp-block-post-title a::after{content:"";position:absolute;inset:0}
.news-query .wp-block-post::after{
  content:"\2192";grid-column:3;justify-self:end;align-self:center;color:var(--aqua);
  font-size:20px;line-height:1;opacity:0;transform:translateX(-6px);
  transition:opacity .18s,transform .18s;
}
.news-query .wp-block-post:hover::after{opacity:1;transform:translateX(0)}
@media (max-width:760px){
  .news-query .wp-block-post{grid-template-columns:1fr;gap:12px;padding:22px 8px}
  .news-query .news-text{grid-column:1}
  .news-query .wp-block-post-featured-image img{width:100%;height:180px}
  .news-query .wp-block-post::after{display:none}
}

/* ---------- Lab: bubble-scale gallery ----------
   Own grid rather than the core gallery flex layout. The :not(#individual-image)
   in the core rules carries ID specificity, so it is mirrored here to win. */
.is-style-lab-gallery.wp-block-gallery.has-nested-images{
  display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:44px}
.is-style-lab-gallery.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){
  width:auto;max-width:none;flex:none;margin:0;
  background:var(--aqua-soft);border:1px solid var(--line);border-radius:6px;overflow:hidden}
.is-style-lab-gallery.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image) img{
  width:100%;height:300px;object-fit:cover;display:block}
/* the CAD drawing is shown whole, on white, rather than cropped */
.is-style-lab-gallery.wp-block-gallery.has-nested-images figure.wp-block-image.is-drawing:not(#individual-image){background:var(--paper)}
.is-style-lab-gallery.wp-block-gallery.has-nested-images figure.wp-block-image.is-drawing:not(#individual-image) img{object-fit:contain;padding:18px}
.is-style-lab-gallery > figcaption{
  grid-column:1/-1;margin:4px 0 0;font-size:14.5px;color:var(--muted);text-align:left}
@media (max-width:900px){
  .is-style-lab-gallery.wp-block-gallery.has-nested-images{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:560px){
  .is-style-lab-gallery.wp-block-gallery.has-nested-images{grid-template-columns:1fr}
  .is-style-lab-gallery.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image) img{height:240px}
}

/* Body paragraph inside a page section — the theme resets all margins, so
   running text needs its own block style. */
.is-style-prose{margin-top:20px;color:var(--muted);max-width:74ch}

/* ---------- Lab: instruments and computing ---------- */
.instrument-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:44px}
.instrument-grid .instrument{
  background:var(--paper);border:1px solid var(--line);border-radius:6px;padding:26px 24px;
  transition:border-color .18s,transform .18s,box-shadow .18s}
.instrument-grid .instrument:hover{
  border-color:var(--aqua);transform:translateY(-2px);box-shadow:0 6px 18px rgba(27,58,75,.07)}
.instrument-grid svg{width:44px;height:44px;color:var(--aqua);display:block;margin-bottom:18px}
.instrument-grid .instrument-kind{
  font-family:'Manrope',sans-serif;font-weight:600;font-size:11.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted);margin:0 0 6px}
.instrument-grid h4{
  font-family:'Manrope',sans-serif;font-weight:700;font-size:17.5px;line-height:1.25;
  letter-spacing:-.01em;color:var(--ink);margin:0 0 10px}
.instrument-grid .instrument > p:last-child{font-size:14.5px;line-height:1.6;color:var(--muted);margin:0}
@media (max-width:900px){.instrument-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.instrument-grid{grid-template-columns:1fr}}

/* ---------- Publications: one card per conference ----------
   A grid rather than a list, so several events fit in the height one used to
   take. auto-fill keeps it right as conferences are added. */
.conference-query .wp-block-post-template{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px;
  list-style:none;margin:36px 0 0;padding:0}
.conference-query .wp-block-post{
  background:var(--paper);border:1px solid var(--line);border-radius:6px;
  padding:26px 24px 46px;margin:0;position:relative;
  transition:border-color .18s,transform .18s,box-shadow .18s}
.conference-query .wp-block-post:hover{
  border-color:var(--aqua);transform:translateY(-2px);box-shadow:0 6px 18px rgba(27,58,75,.07)}
.conference-query .wp-block-post-title{
  font-size:20px;line-height:1.2;margin:0 0 10px;letter-spacing:-.01em}
.conference-query .wp-block-post-title a{text-decoration:none;color:inherit;transition:color .18s}
.conference-query .wp-block-post:hover .wp-block-post-title a{color:var(--deep)}
.conference-query .wp-block-post-excerpt{margin:0}
.conference-query .wp-block-post-excerpt__excerpt{
  font-size:14.5px;line-height:1.6;color:var(--muted);margin:0}
.conference-query .wp-block-post-excerpt__more-text{display:none}
/* the whole card is the link, and the arrow appears on hover */
.conference-query .wp-block-post-title a::after{content:"";position:absolute;inset:0}
.conference-query .wp-block-post::after{
  content:"\2192";position:absolute;right:24px;bottom:20px;color:var(--aqua);
  font-size:20px;line-height:1;opacity:0;transform:translateX(-6px);
  transition:opacity .18s,transform .18s;
}
.conference-query .wp-block-post:hover::after{opacity:1;transform:translateX(0)}
@media (max-width:560px){
  .conference-query .wp-block-post-template{grid-template-columns:1fr}
}

/* the way back from a conference page */
.is-style-back{margin-top:48px;font-size:15px}
.is-style-back a{text-decoration:none;color:var(--deep)}
.is-style-back a:hover{text-decoration:underline}

/* ---------- Team member pages: one portrait box for everybody ----------
   The source photographs run from 0.54 to 1.5 in aspect ratio, so an
   unconstrained <img> gave every personal page a different picture height.
   Same framing rule as the Team page cards. */
.team-portrait img{
  width:100%;aspect-ratio:4/5;object-fit:cover;object-position:center 25%;display:block}

/* ---------- Running text is justified ----------
   Body copy only. This WordPress puts class="wp-block-paragraph" on every
   paragraph block, so the label styles are excluded by name; the card excerpts
   and the raw-HTML blurbs are not paragraph blocks and stay ragged. */
p.wp-block-paragraph:not(.is-style-eyebrow):not(.is-style-tag):not(.is-style-back):not(.pub-authors):not(.pub-venue),
.is-style-prose,
.pub-abstract,
.news-article p,
.is-style-spec-list li,
.is-style-publications li,
footer p{
  text-align:justify;
  text-justify:inter-word;
  -webkit-hyphens:auto;
  hyphens:auto;
}
/* The theme resets every margin, so running text needs its own gap. The exact
   attribute match takes only paragraphs an author left unclassified, which is
   what body copy is; classified ones keep the spacing their own style gives. */
p.wp-block-paragraph[class="wp-block-paragraph"]{margin-top:20px}
.is-style-member-card p.wp-block-paragraph[class="wp-block-paragraph"]{margin-top:10px}
/* the hero line is display text, not running text */
.is-style-hero-content > p,
.hero p{text-align:left !important;-webkit-hyphens:manual;hyphens:manual}

/* Lab: three experimental setups per row.
   Drawing above its description rather than beside it: at a third of the
   width there is no room for a panel and a readable column of text side by
   side. Fixed band height so the six cards line up. */
.rig-grid > .wp-block-group__inner-container,
.rig-grid:not(:has(> .wp-block-group__inner-container)){
  display:grid;grid-template-columns:repeat(3,1fr);column-gap:32px;row-gap:0;margin-top:8px}
.rig-row{border-top:1px solid var(--line);padding:28px 0;margin:0}
.rig-row > .wp-block-group__inner-container,
.rig-row:not(:has(> .wp-block-group__inner-container)){display:block}
.rig-row .rig-drawing{
  margin:0;background:var(--paper);border:1px solid var(--line);border-radius:6px;
  padding:14px 10px;display:flex;align-items:flex-end;justify-content:center;height:330px}
.rig-row .rig-drawing img{
  max-height:100%;max-width:100%;width:auto;object-fit:contain;display:block}
.rig-row .rig-text{margin-top:20px}
.rig-row .rig-text h3{font-size:19px;line-height:1.2;margin:0;letter-spacing:-.01em}
.rig-row .rig-text .is-style-prose{max-width:none;font-size:14.5px;margin-top:10px}
@media (max-width:1000px){
  .rig-grid > .wp-block-group__inner-container,
  .rig-grid:not(:has(> .wp-block-group__inner-container)){grid-template-columns:1fr 1fr}
}
@media (max-width:640px){
  .rig-grid > .wp-block-group__inner-container,
  .rig-grid:not(:has(> .wp-block-group__inner-container)){grid-template-columns:1fr}
  .rig-row .rig-drawing{height:280px}
}

/* a pull-quote is display text, not running text */
.is-style-quote-block p{text-align:left !important;-webkit-hyphens:manual;hyphens:manual}

/* The four header logos are separate links now: MUR, FIS and Politecnico go to
   their own sites, the AURIGA mark goes home. .nav-brand is a div, so each
   anchor has to carry the flex alignment itself. */
.nav-brand .gov-link{display:flex;align-items:center;text-decoration:none;
  border-radius:3px;transition:opacity .18s}
.nav-brand .gov-link:hover{opacity:.7}
.nav-brand .gov-link:focus-visible{outline:2px solid var(--aqua);outline-offset:3px}

/* ---------- Collaborations: one card per partner institution ----------
   Two across on the desktop, not three: each card carries a paragraph, and a
   third column would cut the measure below a readable line. Same card shell as
   the instrument grid and the conference cards. */
.collab-grid > .wp-block-group__inner-container,
.collab-grid:not(:has(> .wp-block-group__inner-container)){
  display:grid;grid-template-columns:repeat(2,1fr);gap:22px;margin-top:40px}
.collab{
  background:var(--paper);border:1px solid var(--line);border-radius:6px;
  padding:30px 30px 26px;margin:0;
  transition:border-color .18s,transform .18s,box-shadow .18s}
.collab:hover{
  border-color:var(--aqua);transform:translateY(-2px);box-shadow:0 6px 18px rgba(27,58,75,.07)}
.collab .is-style-eyebrow{margin-bottom:10px}
.collab h3{font-size:20px;line-height:1.25;letter-spacing:-.01em;margin:0}
.collab .is-style-prose{font-size:15.5px;line-height:1.65;max-width:none;margin-top:14px}
.collab .pub-links{margin-top:20px}
.collab .pub-links a{padding:7px 13px;font-size:11.5px;letter-spacing:.06em}
@media (max-width:900px){
  .collab-grid > .wp-block-group__inner-container,
  .collab-grid:not(:has(> .wp-block-group__inner-container)){grid-template-columns:1fr}
}

/* ---------- Header: six menu items ----------
   With Collaborations in the menu the brand and the links together need about
   54px more than the 1120px column gives, and .nav-brand could shrink, so the
   three logos were being squeezed to ~82% of their true width. The brand no
   longer shrinks under any circumstance — a distorted ministry logo is not an
   acceptable way to save space — and the room is found instead by dropping the
   dead flex gap left by the hidden AURIGA mark and by tightening the gaps on
   the desktop bar. Logo heights are untouched. */
.nav-brand{flex:0 0 auto}
.nav-brand .gov-link,.nav-brand .gov-sep{flex:none}
.nav-brand img{flex:none;width:auto;max-width:none}
/* the AURIGA mark is display:none in the header; its anchor was still an empty
   flex item costing a full gap, and a zero-width link in the tab order */
.nav-brand .gov-link:has(.brand-auriga){display:none}
@media (min-width:1231px){
  .nav-brand{gap:14px}
}
@media (min-width:1081px){
  /* wrap rather than overflow if a seventh item is ever added */
  .nav-links{flex-wrap:wrap;justify-content:flex-end;gap:4px}
  /* .nav-links .menu-item a elsewhere in this file is more specific, so the
     desktop padding has to be set at that specificity to take effect */
  .nav-links .menu-item a{padding:8px 10px}
}

/* ---------- Collaborations: partner logos ----------
   A fixed band at the top of every card, present even where no logo has been
   supplied yet, so the headings stay on one line across a row. The image is
   contained rather than stretched — partner marks have very different aspect
   ratios and none of them may be distorted. */
.collab .collab-logo{display:flex;align-items:center;height:96px;margin-bottom:22px}
.collab .collab-logo img{max-height:96px;max-width:260px;width:auto;height:auto;
  object-fit:contain;object-position:left center}

/* ---------- Lab: the large-diameter column ----------
   The elevation is roughly 1:8, so it sits beside its specification rather than
   above it: at full width it would be either a hairline or three screens tall.
   Same reasoning as the six rig drawings further up the page. */
.large-col > .wp-block-group__inner-container,
.large-col:not(:has(> .wp-block-group__inner-container)){
  display:grid;grid-template-columns:minmax(0,120px) 1fr;gap:56px;
  align-items:center;margin-top:40px}
.large-col .large-col-drawing{display:flex;justify-content:center}
.large-col .large-col-drawing img{width:auto;height:auto;max-height:460px;max-width:100%}
.large-col .large-col-text > *:first-child{margin-top:0}
@media (max-width:900px){
  .large-col > .wp-block-group__inner-container,
  .large-col:not(:has(> .wp-block-group__inner-container)){
    grid-template-columns:1fr;gap:28px}
  .large-col .large-col-drawing img{max-height:330px}
}

/* ---------- Type scale, minimised ----------
   A section used to run eyebrow 12.5 / heading / lede 19 / prose 17. Two body
   sizes two pixels apart read as a wobble rather than a hierarchy, and the
   components had drifted to six sizes for the same running text (14.5, 15,
   15.5, 16, 17, 19) and eight for card headings. The scale is now four steps —
   label, body, card heading, section heading — and the lede does its work
   through colour and measure instead of size. */
:root{--fs-label:12.5px;--fs-body:16px;--fs-sub:20px}

/* one size for every piece of running text */
.is-style-lede,.lede,
.is-style-prose,
.page-head p,
p.wp-block-paragraph:not(.is-style-eyebrow):not(.is-style-tag),
.news-article p,
.spec-list li,.is-style-spec-list li,
.pubs li,.is-style-publications li,
.is-style-pub-entry .pub-abstract,
.card p,.is-style-card-accent p,
.pi-body p,.is-style-pi-card p,
.featured-body p,.is-style-featured-card p,
.member-body p,.is-style-member-card p,
.facility-body p,
.instrument-grid .instrument > p:last-child,
.rig-row .rig-text .is-style-prose,
.collab .is-style-prose,
.news-query .wp-block-post-excerpt__excerpt,
.conference-query .wp-block-post-excerpt__excerpt,
.is-style-lab-gallery > figcaption{font-size:var(--fs-body)}
/* the lede is set apart by colour and measure, not by size */
.is-style-lede,.lede{color:var(--muted);max-width:64ch}

/* one size for every card, list and article sub-heading */
.card h3,.is-style-card-accent h3,
.pi-body h3,.is-style-pi-card h3,
.featured-body h3,.is-style-featured-card h3,
.member-body h3,.is-style-member-card h3,
.facility-body h3,
.instrument-grid h4,
.rig-row .rig-text h3,
.collab h3,
.is-style-pub-entry h3,
.is-style-wp-card h3,
.news-item h3,.is-style-news-row h3,.news-list-item h3,
.news-query .wp-block-post-title,
.conference-query .wp-block-post-title,
.news-article h2{font-size:var(--fs-sub)}

/* one size for every label */
.eyebrow,.is-style-eyebrow,
.tag,.is-style-tag,
.role,
.news-date,.is-style-news-row .news-date,.news-query .wp-block-post-date,
.instrument-grid .instrument-kind{font-size:var(--fs-label)}
/* The lede now differs by weight of colour and by measure, never by size.
   Both need a tag in the selector: WordPress's constrained-layout rule
   (.wp-container-... > *) ties on specificity with a bare class and wins on
   source order, which is why the 64ch measure had never actually applied —
   the ledes were running to 107 characters a line. */
/* WordPress's constrained layout centres any child narrower than the
   container with margin-left:auto !important, so a capped measure has to say
   so explicitly or the text column floats off the heading's left edge. */
p.is-style-lede,p.lede,p.is-style-prose{
  max-width:70ch;margin-left:0 !important;margin-right:auto !important}
p.is-style-lede,p.lede{color:var(--ink)}
/* cards set their own measure; the cap is for full-width sections only */
.collab p.is-style-prose,
.rig-row .rig-text p.is-style-prose,
.large-col-text p.is-style-lede,
.large-col-text p.is-style-prose{max-width:none}
/* ---------- The PI portrait matches the post-docs' ----------
   Giorgio's photograph was 280×340 against the post-doc cards' 240×300. Same
   box now. The container's min-height has to move with the image box: the
   figure is align-self:stretch, so leaving it at 340 would have stretched a
   240-wide photograph back to the old height. */
/* the gutter goes with it, or the text column starts 8px further right than
   the post-doc cards' and the step shows where the cards stack */
/* Bounded by min-width on 11 September 2026. Unconditional, this restatement
   sat after the max-width:900px rule that collapses the card, tied it on
   specificity and won on source order, so the PI card kept its two columns on
   a phone and the biography was clipped by the card's own overflow:hidden. */
@media (min-width:901px){
.is-style-pi-card > .wp-block-group__inner-container{
  grid-template-columns:240px 1fr;min-height:300px;gap:36px}
.is-style-pi-card > .wp-block-group__inner-container > .wp-block-image{
  width:240px;min-height:300px}
}

/* ---------- Footer, put on the site's own type scale ----------
   It carried three sizes of its own (18 / 14.5 / 13, none on the scale), the
   column headings were the same weight as the text under them, and the
   paragraphs had been swept into the site-wide justify rule — justified copy in
   a 500px column hyphenates into ladders. Headings now use the eyebrow register
   the rest of the site uses for labels; the text is the body size; ragged right. */
footer p,footer a,footer li{font-size:var(--fs-body);color:#B9CDD7}
footer h4{font-family:'Manrope',sans-serif;font-weight:600;font-size:var(--fs-label);
  letter-spacing:.16em;text-transform:uppercase;color:var(--aqua);margin-bottom:18px}
footer p{text-align:left !important;-webkit-hyphens:manual;hyphens:manual;max-width:46ch}
.footer-note{font-size:var(--fs-label);color:#93AAB6;max-width:none}
.footer-cols{grid-template-columns:1.6fr 1fr 1fr;gap:56px}
footer li{margin-bottom:10px}
footer a{text-decoration:none;transition:color .18s}
footer a:hover{color:#fff;text-decoration:underline;text-underline-offset:3px}
@media (max-width:900px){
  .footer-cols{grid-template-columns:1fr;gap:36px}
  footer p{max-width:none}
}

/* The large-column drawing has a white ground, and its section sits on the
   tinted body since the two scales were balanced — so the image read as a bare
   white rectangle. It now sits on a card of its own, the same shell as the
   instrument cards, and the white of the drawing blends into it. */
.large-col .large-col-drawing{
  background:var(--paper);border:1px solid var(--line);border-radius:10px;
  padding:22px 18px;
  box-shadow:0 1px 2px rgba(27,58,75,.04),0 10px 28px rgba(27,58,75,.06)}
/* Bounded by min-width on 11 September 2026, same fault as the PI card above:
   unconditional here, it beat the max-width:900px rule and left the
   specification list in a 144px column on a phone. */
@media (min-width:901px){
.large-col > .wp-block-group__inner-container,
.large-col:not(:has(> .wp-block-group__inner-container)){grid-template-columns:150px 1fr}
}
@media (max-width:900px){
  .large-col .large-col-drawing{padding:18px}
}

/* ---------------------------------------------------------------
   Phone layout — 11 September 2026

   Two sections never collapsed on a phone, and both failed the same way: a
   rule added later in this file restated the desktop grid with no media
   query, so it tied the earlier max-width:900px override on specificity and
   won on source order, leaving the desktop columns in force at every width.
   Both are now bounded by min-width, in place, where they are written — see
   the two notes above. Appending a bounded copy would not have helped: the
   unconditional original would still have followed the 900px rule.

   What follows is the rest of the phone pass.
--------------------------------------------------------------- */

/* Stacked cards close up. With one column the grid gap becomes a row gap
   between the photograph and the text, and it was inherited from the desktop
   gutter — 44px on the PI card, 36px on the others — on top of the text
   block's own 30px of padding. The photo edge and the heading now sit the
   padding apart, as they do on every other stacked card. */
@media (max-width:900px){
  .is-style-pi-card > .wp-block-group__inner-container,
  .is-style-featured-card > .wp-block-group__inner-container{gap:0}
}

/* Running text is not justified on a phone. Justification plus automatic
   hyphenation needs a measure wide enough to absorb the slack; in the ~322px
   column a phone leaves it opens rivers and hyphenates most lines. This is the
   rule the footer was already given for the same reason at 500px, applied to
   the whole site below the phone breakpoint. The justify rule stays in force
   from 641px up, so nothing changes on a tablet or a desktop. */
@media (max-width:640px){
  p.wp-block-paragraph:not(.is-style-eyebrow):not(.is-style-tag):not(.is-style-back):not(.pub-authors):not(.pub-venue),
  .is-style-prose,
  .pub-abstract,
  .news-article p,
  .is-style-spec-list li,
  .is-style-publications li{
    text-align:left;
    -webkit-hyphens:manual;
    hyphens:manual;
  }
}

/* Lab — the six rig drawings. The band height exists so the drawings line up
   across a three-across grid; in a single column there is nothing to line up
   with, and at 280px these very tall, very thin elevations (aspect 0.13 to
   0.24) were rendering 47–60px wide inside a 322px panel — 15% of it, the rest
   white. A phone has the vertical room the grid does not, so the band is
   taller there and the panel is drawn in to the width the drawing actually
   uses, instead of standing as a mostly empty box. */
@media (max-width:640px){
  .rig-row .rig-drawing{height:380px;max-width:264px;margin-inline:auto}
}
