/* Headings and names use Avenir Next where the system has it (Apple devices) and self-hosted Manrope elsewhere
   (SIL Open Font License, fonts/manrope-OFL.txt); text uses the system UI font. Georgia is kept for the wordmark. */
@font-face{font-family:Manrope;font-style:normal;font-weight:200 800;font-display:swap;src:url(fonts/manrope-latin-ext-wght-normal.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Manrope;font-style:normal;font-weight:200 800;font-display:swap;src:url(fonts/manrope-latin-wght-normal.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
:root{color-scheme:light dark;--red:#ba0c2f;--red-dark:#940b28;--accent:var(--red);--ink:#1d1d1f;--muted:#5d6168;--paper:#fff;--surface:#f4f5f7;--card:#fff;--line:#e2e5e9;--line-strong:#c9ced4;--placeholder:#e9ecef;--highlight:#f7f8fa;--accent-soft:#f4e5e7;--header-bg:#fffffff5;--serif:Georgia,'Times New Roman',serif;--sans:-apple-system,BlinkMacSystemFont,Manrope,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;--display:'Avenir Next',Manrope,'Segoe UI',Helvetica,Arial,sans-serif}html{font-synthesis:none}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:104px}body{margin:0;color:var(--ink);background:var(--paper);font:16px/1.65 var(--sans);-webkit-font-smoothing:antialiased}img{max-width:100%;display:block}a{color:inherit;text-decoration:none}button,input{font:inherit}button,a,input{ -webkit-tap-highlight-color:transparent}button{cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid var(--accent);outline-offset:5px}::selection{background:#f5c8d2;color:#1d1d1f}h1,h2,h3,p{margin-top:0}h1,h2,h3{font-family:var(--display)}h1,h2{font-weight:600;letter-spacing:-.035em;line-height:1.12}h1{font-size:clamp(46px,5.4vw,80px)}h2{font-size:clamp(32px,3.5vw,48px)}h3{line-height:1.35;font-size:21px;font-weight:600;letter-spacing:-.02em}em{font-style:normal;color:var(--accent)}p{margin-bottom:1.25em}a:hover{color:var(--accent)}[hidden]{display:none!important}.wrap{max-width:1280px;margin-inline:auto;width:calc(100% - 112px)}.section{padding-block:72px}.eyebrow{font-size:15px;font-weight:700;line-height:1.6;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin-bottom:24px}.lead{font-size:23px;line-height:1.5;letter-spacing:-.025em}.text-link{font-size:15px;font-weight:600;display:inline-flex;align-items:center;gap:10px;padding-block:7px;border-bottom:1px solid var(--line)}.text-link:hover{border-color:var(--accent)}.link-group{display:flex;flex-wrap:wrap;gap:10px 24px}.button{display:inline-flex;align-items:center;justify-content:space-between;gap:20px;background:var(--red);color:white;padding:15px 22px;font-size:15px;font-weight:600;border:1px solid var(--red);transition:background .2s}.button:hover{background:var(--red-dark);color:white}.button-light{background:transparent;border-color:#ffffff90;color:#fff}.button-light:hover{background:#fff;color:var(--ink)}.sr-only,.skip-link:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link:focus{position:fixed;top:0;left:0;padding:15px;background:white;z-index:100}.site-header{position:sticky;top:0;z-index:20;background:var(--header-bg);border-bottom:1px solid var(--line);backdrop-filter:blur(12px)}.header-inner{min-height:88px;max-width:1440px;margin:auto;padding-inline:42px;display:flex;justify-content:space-between;align-items:center;gap:28px}.brand{display:flex;align-items:center;gap:19px;flex-shrink:0}.site-header nav{display:flex;align-items:center;gap:26px;font-size:15px}.site-header nav a{white-space:nowrap;padding-block:12px}.site-header nav a[aria-current=page]{color:var(--accent)}.site-header .nav-contact{background:var(--red);color:white;padding:11px 16px}.site-header .nav-contact:hover{background:var(--red-dark)}.site-header .nav-contact[aria-current=page]{color:white}.menu-toggle{display:none}.hero{position:relative;min-height:650px;height:calc(100svh - 100px);max-height:870px;color:white;isolation:isolate;overflow:hidden}.hero-image,.hero-shade{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2;object-position:center 55%}.hero-shade{z-index:-1;background:linear-gradient(90deg,rgba(0,0,0,.72),rgba(0,0,0,.28)),linear-gradient(0deg,rgba(0,0,0,.55),transparent 45%)}.hero-content{padding-top:clamp(90px,12vh,160px)}.hero .eyebrow{color:#f2f2f2;font-weight:500;margin-bottom:45px}.hero h1{font-size:clamp(51px,5.8vw,86px);max-width:1000px;line-height:1.12;margin-bottom:28px;letter-spacing:-.035em}.hero h1 em{color:#fff;font-weight:400}.hero-content>p:not(.eyebrow){color:#fff;font-size:16px;line-height:1.75}.hero .button{margin-top:13px}.hero-bottom{position:absolute;left:0;right:0;bottom:35px;display:flex;justify-content:space-between;font-size:15px;letter-spacing:.035em;color:#f2f2f2}.hero-bottom a:hover{color:white;text-decoration:underline}.section-heading{display:flex;justify-content:space-between;align-items:end;gap:30px;margin-bottom:34px}.section-heading h2{margin-bottom:0}.section-heading>p{font-size:16px;color:var(--muted);margin-bottom:5px}.research-home{background:var(--surface)}.index{font-family:var(--display);font-size:15px;font-weight:600;color:var(--accent)}.news-preview{display:grid;grid-template-columns:165px 1fr;gap:30px;border-top:1px solid var(--line);padding:24px 0}.news-preview:last-child{border-bottom:1px solid var(--line)}.news-category{font-family:var(--display);font-size:24px;font-weight:600;letter-spacing:-.02em;color:var(--accent);line-height:1.2}.news-category small{font:14px/1.6 var(--sans);display:block;letter-spacing:.05em;text-transform:uppercase;margin-top:8px;color:var(--muted)}.news-preview h3{font-size:20px;margin-bottom:7px}.news-preview p{font-size:16px;color:var(--muted);margin-bottom:0;max-width:72ch}.news-preview .link-group{margin-top:8px}.contact-band{background:var(--red);color:white;padding:60px 0}.contact-band .wrap{position:relative}.contact-band .eyebrow{color:#fff}.contact-band h2{font-size:52px;margin-bottom:0}.contact-band em{color:#fff;font-weight:400}.contact-band .button{position:absolute;right:0;bottom:10px}.site-footer{background:#000;color:#e8e8e8}.footer-main{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:56px;padding-block:52px}.footer-wordmark{display:inline-block;color:white;font-family:var(--serif);font-size:36px;letter-spacing:-.05em;margin-bottom:15px}.footer-wordmark span{font-style:italic;color:var(--accent)}.footer-main p{font-size:15px;color:#b3b3b3;line-height:1.9;margin:0}.footer-main .eyebrow{display:block;color:#cfcfcf;margin-bottom:23px;font-size:14px}.footer-main>div:last-child>a{display:flex;align-items:center;gap:10px;font-size:15px;margin:8px 0}.site-footer a:hover{color:white;text-decoration:underline}.footer-bottom{display:flex;gap:28px;border-top:1px solid #ffffff1f;justify-content:space-between;padding:20px 0;font-size:15px;color:#b3b3b3}.footer-bottom span{margin-right:auto}.page-intro{padding-block:56px 40px}.page-intro h1{font-size:56px;margin-bottom:20px}.intro-copy{max-width:620px;font-size:16px;color:var(--muted);margin-bottom:0}.pi-section{display:grid;grid-template-columns:360px 1fr;gap:70px;align-items:center;padding-bottom:52px;border-bottom:1px solid var(--line)}.pi-photo{height:435px;background:var(--surface)}.pi-photo img{width:100%;height:100%;object-fit:cover;object-position:center 25%}.pi-info h2{font-size:45px;margin-bottom:16px}.pi-info h2 span{font-size:25px;color:var(--muted)}.pi-info .lead{font-size:20px;margin-bottom:12px}.pi-info p:not(.eyebrow):not(.lead){font-size:16px;color:var(--muted)}.pi-focus{padding-top:15px;border-top:1px solid var(--line)}.people-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:30px}.person-photo,.person-monogram{width:100%;aspect-ratio:4/5;object-fit:cover;object-position:50% 18%;height:auto;background:var(--placeholder);margin-bottom:23px}.person-monogram{display:flex;flex-direction:column;justify-content:center;align-items:center;color:#6b7580}.person-monogram>span{font:400 62px/1 var(--display)}.person-monogram>small{text-transform:uppercase;letter-spacing:.2em;font-size:13px;margin-top:20px;color:var(--muted)}.person h3{font-size:24px;line-height:1.15;margin-bottom:12px}.person .person-role{font-size:15px;color:var(--accent);min-height:36px;line-height:1.5}.person p{font-size:15px;color:var(--muted)}.person .text-link{font-size:15px}.alumni-section{background:var(--surface)}.alumni-list>div{display:grid;grid-template-columns:1fr 1.5fr .5fr;gap:25px;align-items:center;border-top:1px solid var(--line);padding:20px 0}.alumni-list h3,.alumni-list p{margin:0}.alumni-list h3{font-size:19px}.alumni-list p,.alumni-list span{font-size:15px;color:var(--muted)}.alumni-list span{text-align:right}.section-jumps{display:flex;gap:28px;flex-wrap:wrap;border-block:1px solid var(--line);padding-block:18px;font-size:15px}.section-jumps a{color:var(--muted)}.section-jumps a:hover{color:var(--accent)}.research-details{padding-block:16px 48px}.research-detail{scroll-margin-top:115px;display:grid;grid-template-columns:55px 1.05fr 1fr;gap:50px;border-bottom:1px solid var(--line);padding:48px 0}.research-number{font:400 35px var(--display);color:var(--accent)}.research-detail h2{font-size:37px;margin-bottom:0}.research-detail .eyebrow{margin-bottom:20px}.research-detail>div:last-child>p{font-size:16px;color:var(--muted)}.topic-tags{padding:0;margin:22px 0;list-style:none;display:flex;flex-wrap:wrap;gap:8px}.topic-tags li{font-size:15px;background:var(--surface);border:1px solid var(--line);padding:5px 10px}.projects-section{background:var(--surface)}.project-list>article{display:grid;grid-template-columns:55px 1fr;gap:30px;padding:24px 0;border-top:1px solid var(--line-strong)}.project-list h3{font:600 27px/1.35 var(--display);margin-bottom:15px;max-width:850px}.project-meta{display:flex;gap:25px;color:var(--muted);font-size:15px}.project-list .text-link{margin-top:10px}.resource-section>p:not(.eyebrow){font-size:16px;color:var(--muted);max-width:600px}.publications-section{padding-bottom:72px}.author-note{font-size:15px;color:var(--muted);margin-bottom:30px}.publication-controls{display:flex;gap:25px;align-items:center;justify-content:space-between;padding-block:23px;border-block:1px solid var(--line)}.filter-buttons{display:flex;gap:8px}.filter-buttons button{border:1px solid var(--line);background:var(--card);border-radius:0;padding:8px 14px;font-size:15px;color:var(--muted)}.filter-buttons button[aria-pressed=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}.search-box{display:flex;align-items:center;border-bottom:1px solid var(--line-strong);width:310px;max-width:100%}.search-box input{border:0;min-width:0;width:100%;padding:9px 5px;background:transparent;font-size:15px;color:var(--ink)}.search-box span:last-child{font-size:24px}.result-count{font-size:15px;color:var(--muted);margin-top:20px}.publication{display:grid;grid-template-columns:135px 1fr;gap:32px;border-bottom:1px solid var(--line);padding:28px 0;scroll-margin-top:120px}.publication:target{background:var(--highlight);box-shadow:-12px 0 var(--highlight),12px 0 var(--highlight)}.pub-year{font:600 24px var(--display);display:block;margin-bottom:13px}.pub-status{display:block;font-size:15px;line-height:1.5;color:var(--accent)}.pub-content h2{font:600 22px/1.38 var(--display);letter-spacing:-.02em;margin-bottom:13px}.pub-authors{font-size:15px;color:var(--muted);margin-bottom:10px}.pub-venue{font-size:15px;font-weight:600;margin-bottom:8px}.pub-note{font-size:15px;color:var(--accent);margin-top:12px}.pub-content .text-link{font-size:15px}.empty-state{padding:50px 0;font-size:16px;color:var(--muted)}.news-list{padding-bottom:72px}.news-date-note{font-size:15px;color:var(--muted);margin-bottom:35px}.news-entry{display:grid;grid-template-columns:165px 1fr;gap:45px;padding:32px 0;border-top:1px solid var(--line)}.news-entry h2{font-size:30px;line-height:1.3;margin-bottom:15px}.news-entry p{font-size:16px;color:var(--muted);max-width:72ch}.news-entry .link-group{margin-top:20px}.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:50px;padding-bottom:72px}.contact-grid>div{background:var(--surface);padding:40px}.contact-grid h2{font-size:37px}.contact-grid p:not(.eyebrow){font-size:16px;color:var(--muted)}.contact-email{display:block;color:var(--accent);font-size:20px;margin:35px 0 22px;overflow-wrap:anywhere}.credits{padding-top:15px;max-width:900px}.credits h2{font-size:32px;margin-top:36px}.credits p{color:var(--muted);font-size:16px}
@media(min-width:1700px){.hero-content{padding-top:150px}}
@media(max-width:1150px){.header-inner{padding-inline:32px}.site-header nav{gap:21px}.wrap{width:calc(100% - 80px)}.people-grid{gap:22px}.pi-section{grid-template-columns:310px 1fr;gap:45px}}
@media(max-width:850px){.header-inner{min-height:85px;padding-inline:28px;gap:20px}.site-header .nav-contact{padding:9px 12px}.wrap{width:calc(100% - 56px)}.hero{min-height:590px;height:calc(100svh - 85px)}.hero-content{padding-top:90px}.hero h1{font-size:61px}.hero .eyebrow{margin-bottom:35px}.section{padding-block:60px}.lead{font-size:20px}.contact-band h2{font-size:44px}.footer-main{gap:30px;grid-template-columns:1.2fr 1fr 1fr}.footer-wordmark{font-size:31px}.page-intro h1{font-size:50px}.people-grid{grid-template-columns:repeat(2,1fr);gap:45px 30px}.person-photo,.person-monogram{max-height:370px}.person .person-role{min-height:0}.pi-section{grid-template-columns:260px 1fr;gap:30px}.pi-photo{height:390px}.pi-info h2{font-size:34px}.research-detail{grid-template-columns:35px 1fr 1fr;gap:25px}.research-detail h2{font-size:30px}.publication{grid-template-columns:120px 1fr;gap:25px}.news-preview{grid-template-columns:130px 1fr;gap:20px}.news-entry{grid-template-columns:130px 1fr;gap:25px}.contact-grid{gap:25px}.contact-grid>div{padding:30px}.contact-grid h2{font-size:31px}.contact-email{font-size:17px}}
@media(max-width:650px){html{scroll-padding-top:96px}.wrap{width:calc(100% - 40px)}.header-inner{padding-inline:20px;min-height:79px;flex-wrap:wrap;gap:0}.brand{gap:13px}.menu-toggle{display:flex;gap:12px;align-items:center;border:0;background:transparent;padding:12px 0;font-size:15px;color:var(--ink)}.menu-toggle span{font-size:20px}.site-header nav{display:flex;width:100%;flex-wrap:wrap;gap:5px 18px;padding:8px 0 15px}.site-header:has(.menu-toggle[aria-expanded]) nav{display:none}.site-header nav.is-open{display:flex!important}.site-header .nav-contact{padding:8px 12px}.hero{min-height:630px;max-height:780px;height:calc(100svh - 79px)}.hero-content{padding-top:80px}.hero h1{font-size:clamp(44px,10vw,61px);line-height:1.15;letter-spacing:-.05em}.hero .eyebrow{font-size:14px;letter-spacing:.1em;margin-bottom:28px}.hero-content>p:not(.eyebrow){font-size:16px;max-width:330px}.desktop-break{display:none}.hero .button{margin-top:17px}.hero-bottom{bottom:28px;flex-direction:column;gap:17px;font-size:14px}.hero-image{object-position:55% center}.hero-shade{background:linear-gradient(90deg,rgba(0,0,0,.78),rgba(0,0,0,.38)),linear-gradient(0deg,rgba(0,0,0,.6),transparent 65%)}.section{padding-block:48px}.eyebrow{font-size:14px;margin-bottom:18px}h2{font-size:33px}.section-heading{display:block;margin-bottom:26px}.section-heading>.text-link,.section-heading>p{margin-top:20px}.news-preview{grid-template-columns:1fr;gap:12px;padding-block:24px}.news-category{font-size:22px}.news-category small{line-height:1.5}.news-preview h3{font-size:18px}.contact-band{padding-block:44px}.contact-band h2{font-size:40px}.contact-band .button{position:static;margin-top:28px}.footer-main{grid-template-columns:1fr 1fr;gap:28px 20px;padding-block:40px}.footer-main>div:first-child{grid-column:1/-1}.footer-wordmark{font-size:38px;margin-bottom:12px}.footer-main .eyebrow{margin-bottom:15px}.footer-bottom{flex-wrap:wrap;gap:12px 25px}.footer-bottom span{width:100%;margin:0}.page-intro{padding-block:40px 28px}.page-intro h1{font-size:40px;line-height:1.13}.pi-section{grid-template-columns:1fr;gap:28px;padding-bottom:40px}.pi-photo{height:380px;max-width:360px}.pi-info h2{font-size:38px}.pi-info .lead{font-size:20px}.people-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:35px 18px}.person-photo,.person-monogram{aspect-ratio:3/4;margin-bottom:17px}.person h3{font-size:23px;overflow-wrap:anywhere}.person .person-role{min-height:36px}.person-monogram>span{font-size:48px}.person .link-group{gap:7px 14px}.alumni-list>div{grid-template-columns:1fr auto;gap:8px 20px}.alumni-list h3{font-size:18px}.alumni-list p{grid-row:2}.alumni-list span{grid-column:2;grid-row:1;font-size:15px}.section-jumps{gap:12px 20px;font-size:15px}.research-detail{grid-template-columns:28px 1fr;gap:20px;padding-block:32px}.research-detail>div:last-child{grid-column:2}.research-number{font-size:26px}.research-detail h2{font-size:30px}.research-detail .eyebrow{margin-bottom:14px}.topic-tags{margin-block:18px}.project-list>article{grid-template-columns:25px 1fr;gap:20px;padding-block:20px}.project-list h3{font-size:24px}.project-meta{gap:20px}.resource-section h2{font-size:35px}.publication-controls{display:block;padding-block:20px}.filter-buttons{gap:7px}.filter-buttons button{padding:7px 13px}.search-box{margin-top:18px;width:100%}.search-box input{font-size:16px}.publication{grid-template-columns:1fr;gap:12px;padding-block:24px}.pub-meta{display:flex;gap:18px;align-items:center}.pub-year{font-size:20px;margin:0}.pub-content h2{font-size:24px;line-height:1.3}.publications-section{padding-bottom:48px}.news-entry{grid-template-columns:1fr;gap:16px;padding-block:26px}.news-entry .news-category,.news-preview .news-category{display:flex;gap:15px;align-items:center}.news-entry .news-category small,.news-preview .news-category small{margin:0}.news-entry h2{font-size:27px}.news-list{padding-bottom:48px}.contact-grid{grid-template-columns:1fr;padding-bottom:48px;gap:20px}.contact-grid>div{padding:28px}.contact-email{font-size:20px}.credits{padding-top:0}.credits h2{font-size:28px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important;animation:none!important}}
/* Use the uncropped original to give this portrait more breathing room. */
.person-photo[src*="haohua-iros-2026-wide"]{object-position:84% center}
/* Regional photography and a prominent, factual invitation to prospective students. */
.recruitment-banner{background:var(--red);color:white}
.recruitment-banner .wrap{display:flex;align-items:center;gap:24px;padding-block:15px}
.recruitment-banner p{display:flex;align-items:center;gap:6px;margin:0;font-size:16px;white-space:nowrap}
.recruitment-banner .icon{width:22px;height:22px;margin-right:4px}
.recruitment-topics{font-size:15px;opacity:.9;margin-left:auto}
.recruitment-banner a{font-size:15px;font-weight:700;white-space:nowrap;border-bottom:1px solid #ffffff75;padding-bottom:2px}
.recruitment-banner a:hover{color:white;border-color:white}
.recruitment-banner a:focus-visible{outline-color:white}
.hero-scenes{height:min(calc(100svh - 150px),700px);min-height:560px}
.hero-scenes .hero-image{opacity:0;transition:opacity .65s ease;object-position:center 63%}
.hero-scenes .hero-image.is-active{opacity:1}
.hero-scenes .hero-shade{background:linear-gradient(90deg,rgba(0,0,0,.75),rgba(0,0,0,.25) 72%),linear-gradient(0deg,rgba(0,0,0,.73),transparent 40%)}
.hero-scenes .hero-content{padding-top:clamp(60px,8vh,104px)}
.hero-scenes .hero-bottom{align-items:end;gap:25px;flex-wrap:wrap}
.scene-information{display:flex;flex-direction:column;gap:6px;min-width:250px}
.scene-caption{font-size:15px}
.scene-credit{font-size:15px;color:#e0e0e0;width:fit-content}
.scene-controls{display:flex;gap:24px}
.scene-controls button{border:0;border-top:1px solid #ffffff55;background:transparent;color:#e6e6e6;padding:12px 0 3px;font-size:15px;text-align:left;min-width:74px;transition:border-color .2s,color .2s}
.scene-controls button span{font-size:14px;opacity:.75;margin-right:6px}
.scene-controls button[aria-pressed=true]{color:white;border-top:2px solid #fff;padding-top:11px}
.scene-controls button:hover{border-top-color:white;color:white}
.scene-controls button:focus-visible{outline-color:#fff}
.join-section{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:56px;padding:40px 0 48px;border-block:1px solid var(--line);margin-bottom:44px;scroll-margin-top:120px}
.join-section h2{font-size:45px;margin-bottom:18px}
.join-intro>p:not(.eyebrow):not(.lead){font-size:16px;color:var(--muted)}
.join-intro .lead{margin-bottom:12px}
.join-intro .join-label{margin:24px 0 10px;font-size:15px;font-weight:700;color:var(--ink)}
.join-threads{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.join-threads a{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:var(--surface);padding:6px 11px;font-size:15px;font-weight:600;line-height:1.4;transition:border-color .2s,color .2s}
.join-threads a:hover{border-color:var(--accent);color:var(--accent)}
.join-threads .icon{width:16px;height:16px;color:var(--accent);stroke-width:1.8;flex:none}
.join-intro .join-note{margin:18px 0 0;font-size:15px}
.join-apply{align-self:start;background:var(--surface);padding:30px 32px 32px}
.join-apply h3{font:600 24px/1.25 var(--display);letter-spacing:-.02em;margin:0 0 20px}
.join-steps{list-style:none;counter-reset:step;margin:0;padding:0;display:grid;gap:18px}
.join-steps li{counter-increment:step;display:grid;grid-template-columns:38px minmax(0,1fr);font-size:15px;line-height:1.6;color:var(--muted)}
.join-steps li::before{content:counter(step,decimal-leading-zero);font:400 20px/1.25 var(--display);color:var(--accent)}
.join-steps strong{color:var(--ink)}
.join-links{display:flex;flex-wrap:wrap;gap:4px 18px;margin-top:6px}
.join-links a{font-weight:600;color:var(--ink);border-bottom:1px solid var(--line-strong);display:inline-flex;gap:8px}
.join-links a:hover{border-color:var(--accent)}
.join-apply .button{margin-top:26px}
@media(max-width:850px){.join-section{grid-template-columns:1fr;gap:28px}}
@media(max-width:1100px){.recruitment-topics{display:none}.recruitment-banner a{margin-left:auto}.hero-discover{display:none}}
@media(max-width:650px){
  .recruitment-banner .wrap{gap:12px;padding-block:13px}
  .recruitment-banner p{font-size:15px;gap:4px;white-space:normal;flex-wrap:wrap}
  .recruitment-banner a{font-size:15px}
  .recruitment-banner .icon{width:18px;height:18px;margin-right:2px}
  .hero-scenes{min-height:600px;height:min(calc(100svh - 130px),700px)}
  .hero-scenes .hero-content{padding-top:65px}
  .hero-scenes .hero-image{object-position:55% center}
  .hero-scenes .hero-bottom{align-items:stretch;gap:18px}
  .scene-information{min-width:0}
  .scene-controls{gap:16px}
  .scene-controls button{flex:1 1 auto;min-width:0;font-size:14px;white-space:nowrap}
  .scene-controls button span{margin-right:4px}
  .join-section{padding-block:32px;margin-bottom:35px;scroll-margin-top:100px}
  .join-section h2{font-size:38px}
  .join-apply{padding:24px 20px 26px}
}
@media(prefers-reduced-motion:reduce){.hero-scenes .hero-image{transition:none}}
/* Crimson foil wordmark: red lettering with restrained warm metallic highlights. */
.brand-foil{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding-block:7px}
.foil-wordmark{font-family:var(--serif);font-size:32px;font-weight:700;letter-spacing:-.045em;line-height:1.2;color:#a10c2a;background:linear-gradient(165deg,#8b0c26 4%,#b91437 31%,#d4544d 45%,#af2530 49%,#9f0b29 65%,#c33e36 80%,#7d0a20 98%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 .5px .2px #00000026)}
.foil-wordmark i{font-weight:400}
.foil-subtitle{font:14px/1.35 var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.brand-foil:hover .foil-wordmark{filter:drop-shadow(0 .5px .4px #00000040)}
@media(max-width:850px){.foil-wordmark{font-size:28px}.foil-subtitle{font-size:13px;letter-spacing:.04em}}
@media(max-width:650px){.brand-foil{gap:4px;padding-block:8px}.foil-wordmark{font-size:28px}.foil-subtitle{font-size:13px;letter-spacing:.04em}}
@media(max-width:360px){.foil-wordmark{font-size:24px}.foil-subtitle{font-size:12px;letter-spacing:.02em}}
@media(max-width:650px){.footer-main{grid-template-columns:1fr}}
@media(forced-colors:active){.foil-wordmark{background:none;-webkit-text-fill-color:currentColor;filter:none}}
/* The original vehicle cutout crosses the panel edge without altering its pixels. */
.vehicle-showcase{padding-top:100px;overflow:clip;scroll-margin-top:100px}
.vehicle-canvas{background:var(--surface)}
.vehicle-showcase-inner{position:relative;min-height:445px;padding-block:65px}
.vehicle-scene-copy{position:relative;width:39%;z-index:2}
.vehicle-scene-copy h2{font-size:52px}
.vehicle-scene-copy>p:not(.eyebrow){font-size:16px;color:var(--muted);max-width:350px}
.vehicle-cutout{position:absolute;width:102%;right:-20%;top:0;margin:0;transform:translateY(-37%);pointer-events:none}
.vehicle-cutout::before{content:"";position:absolute;left:24%;right:21%;height:9%;bottom:15%;background:#0000002b;border-radius:50%;filter:blur(19px);transform:rotate(-8deg)}
.vehicle-cutout img{position:relative;width:100%;height:auto;filter:drop-shadow(0 18px 13px #00000024)}
.vehicle-cutout figcaption{position:absolute;right:24%;bottom:7%;font-size:14px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
@media(min-width:1450px){.vehicle-showcase-inner{min-height:510px;padding-block:80px}}
@media(max-width:1000px) and (min-width:851px){.vehicle-scene-copy h2{font-size:43px}.vehicle-scene-copy>p:not(.eyebrow){max-width:290px}.vehicle-showcase-inner{min-height:390px;padding-block:55px}}
@media(max-width:850px){.vehicle-showcase{padding-top:85px}.vehicle-showcase-inner{min-height:0;padding-top:315px;padding-bottom:50px}.vehicle-scene-copy{width:100%;max-width:560px}.vehicle-scene-copy>p:not(.eyebrow){max-width:500px}.vehicle-cutout{width:105%;right:-10%}.vehicle-cutout figcaption{right:22%;bottom:7%}}
@media(max-width:650px){.vehicle-showcase{padding-top:65px}.vehicle-showcase-inner{padding-top:230px;padding-bottom:42px}.vehicle-cutout{width:135%;right:-25%;transform:translateY(-38%)}.vehicle-cutout figcaption{right:23%;bottom:6%}.vehicle-scene-copy h2{font-size:43px}}
/* Real lab activity lives below the vehicle showcase, leaving the hero untouched. */
.lab-life{background:var(--paper);scroll-margin-top:100px}
.lab-life-intro{max-width:460px}
.lab-life-intro p{font-size:16px;color:var(--muted);margin-bottom:12px}
.news-announcements-heading{margin-top:70px}

.home-visit-feature{background:var(--surface);padding-block:52px;scroll-margin-top:100px}
.home-visit-heading{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:64px;align-items:start;margin-bottom:30px}
/* The newest story leads the section as a card, above the NHTSA visit and its photos. */
.home-lead.news-preview{background:var(--card);border:1px solid var(--line);border-top:3px solid var(--red);padding:28px 32px;margin-bottom:40px}
.home-lead h3{font:600 30px/1.25 var(--display);letter-spacing:-.03em;margin-bottom:12px}
@media(max-width:650px){.home-lead.news-preview{padding:24px 22px;margin-bottom:32px}.home-lead h3{font-size:25px}}
.home-visit-heading h2{font-size:38px;line-height:1.18;margin:0}
.home-visit-copy>p{font-size:16px;color:var(--muted);margin-bottom:18px}
.home-visit-copy .home-visit-date{font-size:15px;color:var(--accent)}
.home-visit-copy .link-group{gap:12px 22px}

.home-visit-photos{margin:0}
.home-visit-photos>div{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px;align-items:start}
.home-visit-photos>div>a:nth-child(-n+2){grid-column:span 2}
.home-visit-photos a{display:block}
.home-visit-photos img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover}
.home-visit-photos figcaption{margin-top:13px;font-size:15px;color:var(--muted)}
.home-visit-photos figcaption a{display:inline}
.home-visit-photos figcaption a:hover{text-decoration:underline}
.visit-video{margin-top:28px;border-block:1px solid var(--line)}
.visit-video summary{cursor:pointer;padding:18px 0;font-size:16px;font-weight:600}
.visit-video summary::marker{color:var(--accent)}
.visit-video-hint{float:right;font-size:15px;font-weight:400;color:var(--muted)}
.visit-video-content{display:grid;grid-template-columns:minmax(0,360px) 1fr;gap:28px;padding:8px 0 24px;align-items:start}
.visit-video-content iframe{display:block;width:100%;height:auto;aspect-ratio:9/16;border:0;background:#111}
.visit-video-content p{font-size:16px;color:var(--muted);max-width:420px}
@media(max-width:650px){.visit-video-content{grid-template-columns:1fr;gap:18px}.visit-video-hint{float:none;display:block;margin:6px 0 0 15px}}
@media(max-width:850px){.home-visit-heading{grid-template-columns:1fr;gap:24px}.home-visit-heading h2{max-width:680px}.home-visit-copy{max-width:640px}.home-visit-photos>div{grid-template-columns:repeat(2,minmax(0,1fr))}.home-visit-photos>div>a:nth-child(-n+2){grid-column:span 1}}
@media(max-width:650px){.home-visit-feature{padding-block:40px}.home-visit-heading h2{font-size:31px}.home-visit-photos>div{gap:12px}.home-visit-photos>div>a:nth-child(-n+2){grid-column:1/-1}}
.news-entry{scroll-margin-top:120px}
.news-media{margin:26px 0 0}
.news-media-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}
.news-media-grid a{display:block}
.news-media-grid img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover}
.news-media figcaption{margin-top:12px;font-size:15px;color:var(--muted)}
.news-media figcaption a:hover,.news-preview h3 a:hover{text-decoration:underline}
@media(max-width:650px){.news-media-grid{grid-template-columns:1fr;gap:14px}}
.lab-photo-grid{display:grid;grid-template-columns:1.34fr 1.5fr;gap:32px}
.lab-photo,.lab-fleet{margin:0;min-width:0}
.lab-photo>a{display:block;background:var(--placeholder)}
.lab-photo img{width:100%;height:auto}
.lab-photo figcaption{padding-top:25px}
.lab-photo .eyebrow{margin-bottom:13px}
.lab-photo h3{font:600 30px/1.2 var(--display);letter-spacing:-.025em;margin-bottom:14px}
.lab-photo figcaption>p:not(.eyebrow){font-size:16px;max-width:520px;color:var(--muted);margin-bottom:15px}
.photo-credit{display:block;width:fit-content;font-size:15px;color:var(--muted);margin-top:12px}
.photo-credit:hover{text-decoration:underline}
.lab-fleet{margin-top:40px;padding-top:30px;border-top:1px solid var(--line-strong)}
.lab-fleet>a{display:block}
.lab-fleet img{width:100%;height:auto}
.lab-fleet figcaption{display:flex;justify-content:space-between;align-items:center;gap:30px;padding-top:25px}
.lab-fleet .eyebrow{display:block;margin-bottom:10px}
.lab-fleet p{font:500 22px/1.4 var(--display);letter-spacing:-.02em;margin:0}
.lab-fleet-links{text-align:right}
.lab-fleet-links .photo-credit{margin-left:auto}
@media(max-width:850px){.lab-photo-grid{gap:26px}.lab-life .section-heading{align-items:start}.lab-life-intro{max-width:310px}.lab-photo h3{font-size:26px}.lab-fleet p{font-size:21px}}
@media(max-width:650px){.lab-photo-grid{grid-template-columns:1fr;gap:30px}.lab-life-intro{margin-top:24px;max-width:none}.lab-photo figcaption{padding-top:20px}.lab-photo h3{font-size:29px}.lab-fleet{margin-top:35px;padding-top:28px}.lab-fleet figcaption{display:block;padding-top:20px}.lab-fleet-links{text-align:left;margin-top:17px}.lab-fleet-links .photo-credit{margin-left:0}}
/* Resource discovery and evidence-led project pages. */
.resources-home,.research-home,.lab-life{padding-block:60px}
/* Neighbouring home sections that share a background are divided by a rule, like the resources band. */
.research-home{border-top:1px solid var(--line)}
/* The home page has one news area: its label row links to all news. */
.home-news-top{display:flex;justify-content:space-between;align-items:baseline;gap:20px;margin-bottom:22px}
.home-news-top .eyebrow{margin:0}

.resources-home{background:var(--surface);border-block:1px solid var(--line)}
.resource-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:26px}
.resource-card{background:var(--card);border:1px solid var(--line);border-top:3px solid var(--red);padding:28px;display:flex;flex-direction:column;min-width:0;scroll-margin-top:120px}
.resource-card-top{display:flex;align-items:center;gap:18px;margin-bottom:28px}
.resource-number{font:400 35px/1 var(--display);color:var(--accent)}
.resource-card .eyebrow{font-size:14px;margin:0;letter-spacing:.1em}
.resource-card h3{font:600 29px/1.2 var(--display);letter-spacing:-.035em;margin-bottom:18px}
.resource-card>p{font-size:16px;color:var(--muted)}
.resource-card .resource-detail{font-size:15px;border-top:1px solid var(--line);padding-top:20px}
.resource-card .link-group{margin-top:auto;padding-top:14px;gap:8px 18px}
.resource-card .text-link{font-size:15px}
.resource-catalog{padding-bottom:56px}
.resource-note{font-size:15px;color:var(--muted);margin:25px 0 0}
.resource-context{background:var(--surface)}
.resource-context-inner{display:grid;grid-template-columns:1fr 1.1fr;gap:80px;align-items:center}
.resource-context p:not(.eyebrow){font-size:16px;color:var(--muted)}
.resource-context figure,.case-overview figure{margin:0}
.resource-context img,.case-overview img{width:100%;height:auto}
.resource-context figcaption,.case-overview figcaption{font-size:15px;color:var(--muted);padding-top:14px}
.resource-context figcaption a:hover,.case-overview figcaption a:hover{text-decoration:underline}
.project-summary{font-size:16px;color:var(--muted);max-width:850px;margin:20px 0 12px}
.project-role{font-size:15px;max-width:850px}
.project-outputs{padding-left:18px;color:var(--muted);font-size:15px;max-width:850px;margin:0 0 20px}
.project-outputs li{padding-left:4px;margin-bottom:7px}
.project-list>article{scroll-margin-top:120px}
.case-overview{display:grid;grid-template-columns:1fr 1fr;gap:65px;align-items:start;padding-bottom:56px}
.case-overview h2{font-size:42px;margin-bottom:25px}
.case-overview p:not(.case-status){font-size:16px;color:var(--muted)}
.case-status{border-left:3px solid var(--red);padding:9px 14px;background:var(--surface);font-size:15px;line-height:1.5;margin-bottom:30px}
.case-overview .link-group{margin-top:26px}
.case-overview .text-link{font-size:15px}
.case-overview figcaption{display:flex;flex-wrap:wrap;gap:8px 20px;justify-content:space-between}
.case-process{background:var(--surface);padding-block:56px}
.case-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:30px;list-style:none;padding:0;margin:0}
.case-steps li{border-top:1px solid var(--line-strong);padding-top:25px}
.case-steps h3{font:600 25px/1.25 var(--display);margin:25px 0 15px}
.case-steps p{font-size:16px;color:var(--muted);margin:0}
.route-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:30px}
.route-grid article{border-top:1px solid var(--line);padding-top:25px}
.route-marker{display:block;width:11px;height:11px;background:var(--red);border-radius:50%;outline:5px solid var(--accent-soft);margin:5px 0 28px 5px}
.route-grid h3{font:600 28px/1.25 var(--display);margin-bottom:16px}
.route-grid p{font-size:16px;color:var(--muted)}
.case-map{padding-bottom:60px}
.case-map-copy{font-size:16px;color:var(--muted);max-width:850px}
.case-map iframe,.map-launch{display:block;width:100%;height:540px;border:1px solid var(--line);background:var(--surface);margin:28px 0 20px}
.map-launch{position:relative;overflow:hidden;background:#0b0e12}
.map-launch img{width:100%;height:100%;object-fit:cover;opacity:.78}
.map-launch-cta{position:absolute;inset:auto 0 0;display:flex;flex-wrap:wrap;align-items:center;gap:10px 22px;padding:60px 28px 26px;background:linear-gradient(to top,rgba(5,7,10,.88),rgba(5,7,10,0));color:#fff}
.map-launch-cta .button{margin:0}
.map-launch-cta p{margin:0;font-size:15px;color:#d9dde2}
@media(max-width:1100px){.header-inner{gap:20px}.site-header nav{gap:16px;font-size:14px}.resource-card{padding:23px}.resource-grid{gap:18px}.resource-card h3{font-size:26px}.case-overview,.resource-context-inner{gap:40px}}
@media(max-width:1000px){
  .header-inner{flex-wrap:wrap;gap:0;min-height:85px}
  .menu-toggle{display:flex;gap:12px;align-items:center;border:0;background:transparent;padding:12px 0;font-size:15px;color:var(--ink)}
  .menu-toggle span{font-size:20px}
  .site-header nav{width:100%;flex-wrap:wrap;gap:5px 20px;padding:8px 0 15px;font-size:16px}
  html.js .site-header nav{display:none}
  .site-header nav.is-open{display:flex!important}
  html:not(.js) .site-header nav{display:flex!important}
  html:not(.js) .menu-toggle{display:none}
  .case-steps{grid-template-columns:repeat(2,minmax(0,1fr));gap:35px}
}
@media(max-width:850px){.resource-grid{grid-template-columns:1fr}.resource-card{padding:26px}.resource-card-top{margin-bottom:20px}.resource-card h3{font-size:30px}.resource-card .link-group{padding-top:5px}.case-overview,.resource-context-inner{grid-template-columns:1fr;gap:35px}.resource-context figure{max-width:680px}.route-grid{gap:20px}.route-grid h3{font-size:24px}}
@media(max-width:650px){
  .resources-home,.research-home,.lab-life{padding-block:44px}
  .header-inner{min-height:79px}
  .resource-card{padding:24px}.resource-card h3{font-size:29px}.resource-catalog{padding-bottom:40px}
  .case-overview{padding-bottom:40px}.case-overview h2{font-size:35px}
  .case-process{padding-block:44px}.case-steps{grid-template-columns:1fr;gap:28px}.case-steps h3{margin-top:18px}
  .route-grid{grid-template-columns:1fr;gap:20px}.route-grid h3{font-size:27px}.route-marker{margin-bottom:22px}
  .case-map{padding-bottom:44px}.case-map iframe,.map-launch{height:480px}
}
/* Script-driven controls are laid out from first paint (no shift), and hidden when JavaScript is unavailable. */
html:not(.js) .scene-controls,html:not(.js) .publication-controls,html:not(.js) .result-count{display:none}
/* Without JavaScript, keep every navigation destination directly available. */
@media(max-width:650px){
  html:not(.js) .site-header nav{display:flex!important}
  html:not(.js) .menu-toggle{display:none}
}
/* One research mosaic on the home page: a figure-led card per thread, from vehicle perception to rural roads. */
.research-intro{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:64px;align-items:end;margin-bottom:36px}
.research-intro h2{font-size:46px;margin:0}
.research-intro-copy .lead{font-size:22px;margin-bottom:10px}
.research-intro-copy>p:not(.lead){font-size:16px;color:var(--muted);margin-bottom:14px}
.research-intro-links{display:flex;flex-wrap:wrap;align-items:center;gap:6px 26px}
.research-pi{font-size:15px;color:var(--muted);padding-block:7px}
.research-pi strong{color:var(--ink);font-weight:600}
.research-pi:hover strong{color:var(--accent)}
.research-mosaic{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.thread{display:flex;flex-direction:column;min-width:0;background:var(--card);border:1px solid var(--line);transition:transform .25s ease,box-shadow .25s ease}
.thread-figure{position:relative;aspect-ratio:2/1;overflow:hidden;background:#fff;border-bottom:1px solid var(--line)}
.thread-figure>a:first-child{display:block;width:100%;height:100%}
.thread-figure img{width:100%;height:100%;object-fit:contain;padding:14px 16px 38px;transition:transform .45s ease}
.thread-figure.is-photo img{object-fit:cover;padding:0}
.thread-figure.is-dark{background:#0b0e12}
.thread-tag{position:absolute;left:0;bottom:0;background:#000;color:#fff;font-size:15px;font-weight:600;line-height:1.3;padding:5px 11px}
.map-attribution{position:absolute;top:0;right:0;background:#ffffffe0;color:var(--muted);font-size:14px;line-height:1.4;padding:3px 8px}
.map-attribution:hover{color:var(--accent)}
.thread-copy{display:flex;flex-direction:column;gap:12px;flex:1;padding:20px 22px 20px}
.thread h3{margin:0;font:600 24px/1.25 var(--display);letter-spacing:-.025em}
.thread h3 a{display:flex;align-items:center;gap:12px}
.thread h3 .icon{width:24px;height:24px;color:var(--accent);stroke-width:1.6}
.thread-methods{margin:0;font-size:15px;line-height:1.55;color:var(--muted)}
.thread-work{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px 18px}
.thread-work a{display:inline-flex;align-items:baseline;gap:6px;font-size:15px;font-weight:600;line-height:1.45;border-bottom:1px solid var(--line);padding-bottom:2px;transition:border-color .2s,color .2s}
.thread-work a span{font-weight:400;color:var(--muted)}
.thread-work a:hover{border-color:var(--accent)}
@media(hover:hover){.thread:hover{transform:translateY(-3px);box-shadow:0 22px 38px -30px rgba(0,0,0,.5)}.thread:hover .thread-figure img{transform:scale(1.04)}}
@media(max-width:1000px){.research-mosaic{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.research-intro{grid-template-columns:1fr;gap:20px;margin-bottom:30px}.research-intro h2{font-size:40px}.research-intro-copy{max-width:680px}}
@media(max-width:650px){
  .research-intro h2{font-size:36px}
  .research-intro-copy .lead{font-size:20px}
  /* Phones swipe through the threads instead of scrolling a long stack; the next card peeks in. */
  .research-mosaic{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:84%;align-items:start;gap:14px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scroll-padding-inline:20px;margin-inline:-20px;padding:2px 20px 16px}
  .thread{scroll-snap-align:start}
  .thread-copy{padding:18px 18px 18px}
  .thread h3{font-size:22px}
}
/* Ring-road traffic waves on the research page; hidden without JavaScript or if its script fails. */
html:not(.js) .traffic-wave,.no-traffic-wave .traffic-wave{display:none}

.wave-stage{display:grid;grid-template-columns:minmax(260px,360px) minmax(0,1fr);gap:32px;align-items:center}
.wave-ring{display:block;width:100%;aspect-ratio:1;cursor:pointer;touch-action:manipulation}
.wave-chart-wrap{min-width:0}
.wave-chart-label{font-size:15px;color:var(--muted);margin:0 0 10px}
.wave-chart{display:block;width:100%;height:300px}
.wave-controls{display:flex;flex-wrap:wrap;align-items:center;gap:12px 18px;margin-top:22px;padding-top:20px;border-top:1px solid var(--line)}
.traffic-wave .wave-start{gap:0;justify-content:center;min-width:120px;padding-block:12px}
.wave-brake{border:1px solid var(--line);background:var(--card);color:var(--ink);font-size:15px;font-weight:600;padding:12px 16px}
.wave-brake:hover{border-color:var(--accent)}
.wave-av{display:flex;align-items:center;border:1px solid var(--line)}
.wave-av span{font-size:15px;color:var(--muted);padding:0 12px}
.wave-av button{border:0;border-left:1px solid var(--line);background:var(--card);color:var(--ink);font-size:15px;font-weight:600;min-width:42px;padding:11px 0}
.wave-av button[aria-pressed=true]{background:var(--ink);color:var(--paper)}
.wave-stats{margin:0 0 0 auto;font-size:15px;color:var(--muted);font-variant-numeric:tabular-nums}
.wave-note{font-size:15px;color:var(--muted);max-width:900px;margin:18px 0 0}
.wave-note a{color:var(--ink);font-weight:600;margin-right:14px;white-space:nowrap}
.wave-note a:hover{color:var(--accent)}
@media(max-width:850px){.wave-stage{grid-template-columns:1fr;gap:20px}.wave-ring{max-width:340px;margin:auto}.wave-chart{height:200px}.wave-stats{margin-left:0;width:100%}}
/* Field sites on the research page: a Georgia outline beside the site cards. */
.field-map{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:56px;align-items:center}
.field-map-figure{margin:0}
.ga-map{display:block;width:100%;max-width:400px;height:auto;margin:auto;overflow:visible}
.ga-outline{fill:var(--surface);stroke:var(--line-strong);stroke-width:1.2;stroke-linejoin:round}
.ga-reference circle{fill:#9aa2ab}
.ga-reference text{font:15px var(--sans);fill:var(--muted)}
.ga-route{fill:none;stroke:var(--accent);stroke-width:4;stroke-linecap:round}
.ga-leader{stroke:var(--ink);stroke-width:1}
.ga-site circle{fill:var(--accent);stroke:var(--paper);stroke-width:2.5;transition:fill .2s}
.ga-number{font:700 13px var(--sans);fill:#fff;text-anchor:middle;pointer-events:none}
.ga-label{font:600 15px var(--display);fill:var(--ink)}
.ga-site:hover circle,.ga-site.is-active circle{fill:var(--ink)}
.ga-site:focus{outline:none}
.ga-site:focus-visible circle{stroke:var(--ink);stroke-width:3}
.field-map-figure figcaption{font-size:15px;color:var(--muted);text-align:center;margin-top:14px}
.field-site-list{display:grid;gap:14px}
.field-site{display:grid;grid-template-columns:120px minmax(0,1fr);gap:20px;align-items:start;padding:16px;border:1px solid var(--line);background:var(--card);transition:border-color .2s,box-shadow .2s;scroll-margin-top:120px}
.field-site.is-active,.field-site:target{border-color:var(--accent);box-shadow:0 14px 30px -26px rgba(0,0,0,.55)}
.field-site-image{aspect-ratio:3/2;background:var(--surface);overflow:hidden}
.field-site-image img{width:100%;height:100%;object-fit:cover}
.field-site-image img[src*="research-vehicle"]{object-fit:contain;padding:6px}
.field-site .eyebrow{margin-bottom:6px}
.field-site h3{font-size:21px;margin:0 0 6px}
.field-site p:not(.eyebrow){font-size:15px;color:var(--muted);margin:0 0 8px}
.field-site .link-group{align-items:center;gap:6px 18px}
.field-site-credit{font-size:15px;color:var(--muted)}
@media(max-width:850px){.field-map{grid-template-columns:1fr;gap:28px}.ga-map{max-width:330px}}
@media(max-width:650px){.field-site{grid-template-columns:92px minmax(0,1fr);gap:14px;padding:14px}}
/* Keep the two research-page interactives compact: shorter sections, smaller headings, tighter cards. */
.traffic-wave.section,.field-sites.section{padding-block:46px}
.field-sites{border-top:1px solid var(--line)}
.traffic-wave .section-heading,.field-sites .section-heading{margin-bottom:24px}
.traffic-wave h2,.field-sites h2{font-size:40px}
.wave-stage{grid-template-columns:minmax(220px,280px) minmax(0,1fr);gap:28px}
.wave-chart{height:236px}
.wave-chart-label{margin-bottom:8px}
.wave-controls{margin-top:16px;padding-top:16px}
.wave-note{margin-top:12px}
.field-map{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:48px;align-items:start}
.field-map-side h2{margin-bottom:22px}
.ga-map{max-width:330px;margin:0}
.field-map-figure figcaption{margin-top:10px;text-align:left;max-width:330px}
.field-site-list{gap:10px}
.field-site{grid-template-columns:96px minmax(0,1fr);gap:16px;padding:14px 16px}
.field-site .eyebrow{margin-bottom:4px}
.field-site h3{font-size:19px;margin-bottom:4px}
.field-site p:not(.eyebrow){margin-bottom:6px}
@media(max-width:850px){.wave-stage,.field-map{grid-template-columns:1fr;gap:24px}.traffic-wave h2,.field-sites h2{font-size:34px}.wave-ring{max-width:280px;margin:auto}.wave-chart{height:190px}.ga-map{max-width:300px;margin:auto}.field-map-figure figcaption{text-align:center;max-width:none}}
@media(max-width:650px){.traffic-wave.section,.field-sites.section{padding-block:40px}.traffic-wave h2,.field-sites h2{font-size:31px}.field-site{grid-template-columns:80px minmax(0,1fr);gap:12px;padding:12px}}
/* Easter egg: type "go dawgs" outside a form field. Decorative, never takes focus or clicks. */
.dawg-run{position:fixed;left:0;bottom:22px;z-index:60;display:flex;flex-direction:column;align-items:flex-end;pointer-events:none}
.dawg-cheer{background:var(--ink);color:var(--paper);font:700 15px/1.3 var(--display);padding:5px 11px;margin:0 6px 6px 0;white-space:nowrap}
.dawg-run svg{display:block;width:120px;height:50px;filter:drop-shadow(0 6px 6px rgba(0,0,0,.25))}
/* 3D view of the Hawkinsville scan, opened on request from the research mosaic. */
.thread-3d{position:absolute;top:10px;right:10px;display:inline-flex;align-items:center;gap:7px;border:0;background:#ffffffeb;color:var(--ink);font-size:15px;font-weight:600;line-height:1.3;padding:6px 11px;transition:background .2s,color .2s}
.thread-3d .icon{width:17px;height:17px;color:var(--accent);stroke-width:2}
.thread-3d:hover{background:#fff;color:var(--accent)}
.scan-dialog{width:min(1120px,calc(100% - 32px));max-height:calc(100% - 32px);padding:0;border:0;background:var(--card);color:var(--ink);box-shadow:0 30px 80px -20px rgba(0,0,0,.45)}
.scan-dialog::backdrop{background:rgba(10,12,16,.62);backdrop-filter:blur(4px)}
.scan-inner{padding:22px 24px 18px}
.scan-head{display:flex;align-items:end;gap:20px;margin-bottom:16px}
.scan-head .eyebrow{margin-bottom:6px}
.scan-head h2{font-size:30px;margin:0}
.scan-modes{display:flex;margin-left:auto;border:1px solid var(--line)}
.scan-modes button{border:0;background:var(--card);color:var(--muted);font-size:15px;font-weight:600;padding:8px 16px}
.scan-modes button[aria-pressed=true]{background:var(--ink);color:var(--paper)}
.scan-close{border:0;background:transparent;font-size:30px;line-height:1;padding:2px 6px;color:var(--muted)}
.scan-close:hover{color:var(--accent)}
.scan-stage{position:relative;height:min(62vh,600px);min-height:340px;background:#0b0e12;overflow:hidden}
.scan-canvas{display:block;width:100%;height:100%;cursor:grab;touch-action:none}
.scan-canvas:active{cursor:grabbing}
.scan-canvas:focus-visible{outline:3px solid var(--accent);outline-offset:-3px}
.scan-markers{position:absolute;inset:0;pointer-events:none}
.scan-marker{position:absolute;left:0;top:0;width:30px;height:30px;border-radius:50%;border:2px solid var(--red);background:#fff;color:var(--ink);font-size:15px;font-weight:700;line-height:1;pointer-events:auto;box-shadow:0 2px 8px rgba(0,0,0,.4)}
.scan-marker.is-selected{background:var(--red);color:#fff;border-color:#fff}
.scan-status{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;margin:0;color:#e8eaed;font-size:16px}
.scan-panel{position:absolute;left:16px;bottom:16px;width:min(380px,calc(100% - 32px));background:var(--card);padding:18px 20px;box-shadow:0 12px 30px -12px rgba(0,0,0,.5)}
.scan-panel:empty{display:none}
.scan-panel h3{font-size:21px;margin:0 0 8px}
.scan-panel p{font-size:15px;color:var(--muted);margin:0 0 12px}
.scan-panel .scan-hint{margin:0}
.scan-category{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink)!important}
.scan-category::before{content:"";width:10px;height:10px;border-radius:50%;background:var(--dot)}
.scan-progress{font-size:15px;font-weight:600;color:var(--accent)!important}
.scan-result{font-weight:700;color:var(--accent)!important}
.scan-result.is-right{color:#1f7a45!important}
.scan-options{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.scan-action{border:1px solid var(--line);background:var(--card);color:var(--ink);font-size:15px;font-weight:600;padding:9px 12px;margin:0 8px 0 0;text-align:left}
.scan-options .scan-action{margin:0}
.scan-action:hover{border-color:var(--accent)}
.scan-action.is-primary{background:var(--red);border-color:var(--red);color:#fff}
.scan-action.is-primary:hover{background:var(--red-dark)}
.scan-tools{position:absolute;right:16px;top:14px;display:flex;align-items:center;gap:14px;color:#cfd4da;font-size:15px}
.scan-tools button{border:1px solid #ffffff55;background:#0b0e12cc;color:#fff;font-size:15px;padding:6px 12px}
.scan-tools button:hover{border-color:#fff}
.scan-credit{font-size:15px;color:var(--muted);margin:12px 0 0}
.scan-credit a{color:var(--ink);font-weight:600;margin-left:10px;white-space:nowrap}
.scan-credit a:hover{color:var(--accent)}
@media(max-width:760px){
  .scan-dialog{width:100%;max-width:none;height:100%;max-height:none;margin:0}
  .scan-inner{display:flex;flex-direction:column;height:100%;padding:16px 16px 14px}
  .scan-head{flex-wrap:wrap;align-items:center;gap:12px}
  .scan-head h2{font-size:24px}
  .scan-head .eyebrow{display:none}
  .scan-head>div:first-child{flex:1 1 100%;order:2}
  .scan-modes{margin-left:0;order:3}
  .scan-close{order:1;margin-left:auto}
  /* Phones keep the panel below the scan, so it never covers the view. */
  .scan-stage{flex:1 1 auto;display:flex;flex-direction:column;height:auto;min-height:0;background:transparent;overflow:visible}
  .scan-canvas{flex:1 1 auto;min-height:240px;height:auto;background:#0b0e12}
  .scan-tools span{display:none}
  .scan-panel{position:static;width:auto;box-shadow:none;border:1px solid var(--line);margin-top:12px;padding:14px 16px}
  .scan-credit{margin-top:10px}
}
/* Driving game at the foot of the home page; hidden without JavaScript or if its script fails to load. */
html:not(.js) .drive-game,.no-drive-game .drive-game{display:none}
.drive-game{background:var(--surface);scroll-margin-top:100px}
.drive-game-inner{display:grid;grid-template-columns:minmax(0,.78fr) minmax(0,1.4fr);gap:56px;align-items:center}
.drive-game-copy h2{font-size:42px;margin-bottom:18px}
.drive-game-copy>p:not(.eyebrow){font-size:16px;color:var(--muted);margin-bottom:22px}
.drive-game-keys{list-style:none;margin:0;padding:18px 0 0;border-top:1px solid var(--line);display:grid;gap:10px;font-size:15px;color:var(--muted)}
.drive-game-keys kbd{display:inline-block;min-width:28px;padding:0 7px;margin-right:3px;border:1px solid var(--line-strong);border-bottom-width:2px;background:var(--card);font:600 15px/1.6 var(--sans);color:var(--ink);text-align:center}
.drive-game-hud{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.drive-game-hud span{background:#1d1d1f;color:#fff;font-size:15px;font-weight:600;line-height:1.4;padding:5px 11px;font-variant-numeric:tabular-nums}
.drive-game-hud .is-alert{background:var(--red)}
.drive-game-screen{position:relative}
.drive-game-canvas{display:block;width:100%;aspect-ratio:16/10;background:#25322a;touch-action:manipulation;cursor:pointer}
.drive-game-canvas:focus-visible{outline:3px solid var(--accent);outline-offset:4px}
.drive-game-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px;background:rgba(11,14,18,.62);color:#fff;text-align:center}
.drive-game-message{font:600 28px/1.25 var(--display);letter-spacing:-.02em;margin:0}
.drive-game-detail{font-size:16px;color:#e8eaed;max-width:400px;margin:0 0 8px}
.drive-game .drive-game-start{gap:0;justify-content:center;min-width:190px}
.drive-game-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}
.drive-game-share{border:1px solid #ffffff90;background:transparent;color:#fff;font-size:15px;font-weight:600;padding:15px 20px}
.drive-game-share:hover{background:#fff;color:var(--ink)}
.drive-game-controls{display:grid;grid-template-columns:1fr 1fr 1.3fr 1fr 1fr;gap:10px;margin-top:10px}
.drive-game-controls [data-speed]{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.drive-game-controls button{border:1px solid var(--line);background:var(--card);color:var(--ink);padding:12px 10px;font-size:16px;font-weight:600;touch-action:manipulation;transition:border-color .2s,background .2s}
.drive-game-controls button:hover{border-color:var(--accent)}
.drive-game-controls .drive-game-autopilot[aria-pressed=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
/* Touchscreens see the tap hint; devices with a mouse or trackpad see the keyboard keys. */
@media(hover:none) and (pointer:coarse){.drive-game-keys .keys-only{display:none}}
@media(hover:hover),(pointer:fine){.drive-game-keys .touch-only{display:none}}
@media(max-width:850px){.drive-game-inner{grid-template-columns:1fr;gap:28px}.drive-game-copy{max-width:640px}}
@media(max-width:650px){.drive-game-copy h2{font-size:34px}.drive-game-canvas{aspect-ratio:4/5}.drive-game-message{font-size:24px}
  /* Phones: steering and autopilot on one row, the held speed controls below. */
  .drive-game-controls{grid-template-columns:repeat(6,minmax(0,1fr))}
  .drive-game-state{display:none}
  .drive-game-controls [data-steer="-1"]{grid-area:1/1/2/3}.drive-game-controls .drive-game-autopilot{grid-area:1/3/2/5}.drive-game-controls [data-steer="1"]{grid-area:1/5/2/7}
  .drive-game-controls [data-speed="-1"]{grid-area:2/1/3/4}.drive-game-controls [data-speed="1"]{grid-area:2/4/3/7}}
/* Decorative line icons (Lucide), drawn in the current text colour. */
.icon{width:1em;height:1em;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}


.research-number .icon{display:block;width:34px;height:34px;margin-top:18px;stroke-width:1.5}
.resource-card-top .icon{width:30px;height:30px;margin-left:auto;color:var(--accent);stroke-width:1.5}
.footer-main>div:last-child>a .icon{width:18px;height:18px;color:#9a9a9a}
@media(max-width:650px){.research-number .icon{width:24px;height:24px;margin-top:12px}.resource-card-top .icon{width:26px;height:26px}}
@media print{.site-header,.site-footer,.publication-controls,.result-count,.menu-toggle,.contact-band{display:none!important}.wrap{width:100%}.section,.page-intro{padding:20px 0}.hero{height:auto;min-height:0;padding:20px;color:black}.hero-image,.hero-shade,.hero-bottom{display:none}.hero-content{padding:0}.hero h1 em,.hero .eyebrow,.hero-content>p:not(.eyebrow){color:black}.hero .button{display:none}a{color:inherit}.publication{break-inside:avoid}body{font-size:14px}}
/* Research threads: the home page's six threads in detail, each with its figure beside the headline. */
.research-people{margin:16px 0 0;font:600 15px/1.5 var(--display);letter-spacing:-.01em;color:var(--muted)}
.research-detail .thread-figure{margin-top:24px;border:1px solid var(--line)}
.research-detail .thread-figure:hover img{transform:scale(1.03)}
.research-detail .thread-work{margin-bottom:8px}
.research-number[id]{scroll-margin-top:115px}
/* Publications: research-thread filter and tags, BibTeX copy, and the .bib download. */
.pub-notes{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:6px 24px;margin-bottom:26px}
.pub-notes .author-note{margin:0}
.publication-controls{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px 25px}
.topic-filter{grid-column:1/-1;flex-wrap:wrap}
.topic-filter button{display:inline-flex;align-items:center;gap:7px}
.topic-filter .icon{width:16px;height:16px;stroke-width:1.8;flex:none}
.topic-filter button[aria-pressed=false] .icon{color:var(--accent)}
.filter-count{position:relative;margin-left:7px;font-size:13px;font-variant-numeric:tabular-nums;color:var(--muted)}
.filter-buttons button[aria-pressed=true] .filter-count{color:inherit;opacity:.72}
.pub-topic{display:inline-block;margin-top:12px;font-size:14px;font-weight:600;line-height:1.35;color:var(--ink);border-bottom:1px solid var(--line);padding-bottom:1px}
.pub-topic+.pub-topic{margin-left:10px}
.pub-topic:hover{border-color:var(--accent);color:var(--accent)}
button.text-link{background:none;border:0;border-bottom:1px solid var(--line);padding:7px 0;color:inherit;font:inherit;font-size:15px;font-weight:600;line-height:inherit;cursor:pointer}
button.text-link:hover{border-color:var(--accent)}
.pub-cite .icon{width:15px;height:15px;stroke-width:2;flex:none}
.pub-cite.is-copied{color:var(--accent);border-color:var(--accent)}
html:not(.js) .pub-cite{display:none}
.pub-bibtex{margin:14px 0 0;padding:14px 16px;background:var(--surface);border:1px solid var(--line);font:13px/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
@media(max-width:650px){
  .map-launch-cta{padding:48px 18px 18px}
  .publication-controls{display:block}
  :is(.topic-filter,.news-filter){flex-wrap:nowrap;overflow-x:auto;margin:0 -20px 14px;padding:0 20px 2px;scrollbar-width:none}
  :is(.topic-filter,.news-filter)::-webkit-scrollbar{display:none}
  :is(.topic-filter,.news-filter) button{flex:none;white-space:nowrap}
  .filter-buttons:not(.topic-filter):not(.news-filter){flex-wrap:wrap}
  .filter-buttons button{padding-inline:11px;white-space:nowrap}
  :is(.topic-filter,.news-filter).fade-end{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 56px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 56px),transparent)}
  :is(.topic-filter,.news-filter).fade-start{-webkit-mask-image:linear-gradient(90deg,transparent,#000 56px);mask-image:linear-gradient(90deg,transparent,#000 56px)}
  :is(.topic-filter,.news-filter).fade-start.fade-end{-webkit-mask-image:linear-gradient(90deg,transparent,#000 56px,#000 calc(100% - 56px),transparent);mask-image:linear-gradient(90deg,transparent,#000 56px,#000 calc(100% - 56px),transparent)}
  .pub-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px}
  .pub-meta .pub-year{margin:0}
  .pub-topic{margin-top:0}
}
/* 404: a wrong turn into a cul-de-sac. */
.lost{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:56px;align-items:center;padding-block:64px 88px}
.lost h1{font-size:56px;margin-bottom:20px}
.lost .intro-copy{margin-bottom:26px}
.lost-links{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:28px;font-size:15px;font-weight:600}
.lost-links a{border-bottom:1px solid var(--line);padding-block:4px}
.lost-links a:hover{border-color:var(--accent);color:var(--accent)}
.lost-scene{margin:0}
.lost-scene svg{display:block;width:100%;height:auto;overflow:visible}
.lost-paint{font:700 34px var(--display);letter-spacing:.04em;fill:#e6e9ed;opacity:.9}
.lost-car-still{display:none}
@media(prefers-reduced-motion:reduce){.lost-car-moving{display:none}.lost-car-still{display:inline}}
@media(max-width:850px){.lost{grid-template-columns:1fr;gap:24px;padding-block:36px 64px}.lost-scene{order:-1}}
@media(max-width:650px){.lost h1{font-size:40px;line-height:1.13}}
/* ---- Consistency pass: type scale, labels, grid, and phone spacing ---- */
/* One size per heading role, set per breakpoint. Feature bands (hero, vehicle, contact) keep their display sizes. */
:root{--h2:clamp(34px,3.3vw,44px);--h2-item:30px;--h3:24px;--h4:20px}
@media(max-width:850px){:root{--h2:34px;--h2-item:27px;--h3:23px}}
@media(max-width:650px){:root{--h2:32px;--h2-item:25px;--h3:22px;--h4:19px}}
h2,.research-intro h2,.pi-info h2,.join-section h2,.case-overview h2,.drive-game-copy h2,.traffic-wave h2,.field-sites h2,.resource-section h2{font-size:var(--h2)}
.news-preview.home-lead h3,.home-visit-heading h2,.research-detail h2,.news-entry h2,.contact-grid h2,.credits h2{font-size:var(--h2-item)}
.thread h3,.person h3,.resource-card h3,.case-steps h3,.route-grid h3,.join-apply h3,.project-list h3,.lab-photo h3{font-size:var(--h3)}
h3,.field-site h3,.alumni-list h3,.news-preview h3,.scan-panel h3{font-size:var(--h4)}
.pub-content h2{font-size:22px}
@media(max-width:650px){.pub-content h2{font-size:21px}}
/* Labels: smaller and lighter than body text, so headings lead. */
.eyebrow{font-family:var(--sans);font-size:13px;font-weight:600;letter-spacing:.12em}
/* The recruiting bar is neutral, leaving red to the header button and the contact band. */
.recruitment-banner{background:var(--surface);color:var(--ink);border-bottom:1px solid var(--line)}
.recruitment-banner .icon{color:var(--accent)}
.recruitment-banner a{color:var(--accent);border-bottom-color:rgba(186,12,47,.35)}
.recruitment-banner a:hover{color:var(--red-dark);border-color:var(--accent)}
.recruitment-banner a:focus-visible{outline-color:var(--accent)}
.recruitment-topics{color:var(--muted);opacity:1}
/* The header lines up with the page content. */
.header-inner{max-width:1280px;width:calc(100% - 112px);padding-inline:0}
@media(max-width:1150px){.header-inner{width:calc(100% - 80px);padding-inline:0}}
@media(max-width:850px){.header-inner{width:calc(100% - 56px);padding-inline:0}}
@media(max-width:650px){.header-inner{width:calc(100% - 40px);padding-inline:0}}
/* Two-column section headings start their right column at the same place on every page. */
@media(min-width:651px){
  .section-heading{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);column-gap:64px;align-items:end}
  .section-heading>.text-link{justify-self:end}
}
/* Comfortable line lengths for running text. */
.pub-content>p,.project-summary,.project-role,.project-outputs,.credits p,.pi-info p:not(.lead),.news-entry p{max-width:72ch}
/* Phones: a single column for research threads, smaller tags, and larger tap targets. */
@media(max-width:650px){
  .research-detail{grid-template-columns:minmax(0,1fr)}
  .research-detail>div:last-child{grid-column:auto}
  .research-number{display:flex;align-items:center;gap:12px}
  .research-number .icon{margin-top:0}
  .topic-tags li{font-size:14px;padding:4px 9px}
  .section-jumps a,.photo-credit,.lost-links a{min-height:40px;display:inline-flex;align-items:center}
  .footer-main>div:last-child>a{min-height:40px;width:fit-content;margin:0}
  .pub-topic{padding-block:8px}
}
/* ---- Dark mode: follows the device setting. Photos, figures, the game, and the 3D view keep their own colours. ---- */
.traffic-wave{--wave-road:#e3e6ea;--wave-edge:#c5cbd2;--wave-text:#5d6168;--wave-chart:#f4f5f7;--wave-av:#1d1d1f;--wave-av-dot:#fff}
/* A shorter home page: one row of visit photos, wide lab photos, and the fleet strip beside its caption.
   On phones, the resource cards and lab photos swipe sideways like the research threads. */
.home-visit-photos>div>a:nth-child(-n+2){grid-column:auto}
.lab-photo img{aspect-ratio:16/9;object-fit:cover}
.lab-photo img[src*="capstone"]{object-position:50% 38%}
@media(min-width:651px){.contact-band{padding-block:48px}}
@media(min-width:851px){
  .lab-photo-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .lab-fleet{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:36px;align-items:center}
  .lab-fleet figcaption{display:flex;flex-direction:column;align-items:flex-start;gap:16px;padding-top:0}
  .lab-fleet-links{text-align:left}
  .lab-fleet-links .photo-credit{margin-left:0}
}
@media(max-width:650px){
  .resources-home .resource-grid,.lab-photo-grid{display:grid;grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:84%;align-items:start;gap:14px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scroll-padding-inline:20px;margin-inline:-20px;padding:2px 20px 16px}
  .resources-home .resource-card,.lab-photo{scroll-snap-align:start}
}
/* Publications filtered to one person (from the team page), with a way back to everyone. */
.author-filter{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:20px 0 0;font-size:15px;color:var(--muted)}
.author-filter[hidden]{display:none}
.author-filter strong{color:var(--ink)}
.author-clear{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);background:var(--card);color:var(--ink);padding:5px 11px;font-size:14px;font-weight:600;cursor:pointer}
.author-clear:hover{border-color:var(--accent)}
/* Education and appointments: degree or role, institution, and years on one compact line each. */
.pi-history{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 40px;margin-top:22px;padding-top:20px;border-top:1px solid var(--line)}
.pi-history h3,.person-history h4{font:600 13px/1.4 var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--accent);margin:0 0 12px}
.history{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.history li{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:14px;font-size:15px;line-height:1.45}
.history-what{font-weight:600;color:var(--ink)}
.history-where{grid-column:1;color:var(--muted)}
.history-when{grid-column:2;grid-row:1;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.person-history{margin:4px 0 16px;padding-top:14px;border-top:1px solid var(--line)}
.person-history .history li{font-size:14px}
.person-history+.person-history{border-top:0;padding-top:0}
.pi-info p.pi-focus{max-width:none}
.pi-history+.link-group{margin-top:24px}
@media(max-width:650px){.pi-history{grid-template-columns:minmax(0,1fr);gap:20px}}
/* Open-source repositories on the Data & demos page, grouped by kind. */
.open-code{border-top:1px solid var(--line)}
.code-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.code-card{display:flex;flex-direction:column;border:1px solid var(--line);background:var(--card);padding:20px 22px 18px;min-width:0}
.code-kind{margin:0 0 10px;font-size:12px;font-weight:700;line-height:1.4;letter-spacing:.12em;text-transform:uppercase;color:var(--accent)}
.code-card h3{display:flex;align-items:center;gap:10px;margin:0 0 4px;font:600 20px/1.3 var(--display);letter-spacing:-.02em}
.code-card h3 .icon{width:20px;height:20px;color:var(--accent);stroke-width:1.8;flex:none}
.code-repo{margin:0 0 12px;font:13px/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--muted);overflow-wrap:anywhere}
.code-text{font-size:15px;line-height:1.55;color:var(--muted);margin:0 0 14px}
.code-tags{list-style:none;margin:0 0 6px;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.code-tags li{font-size:13px;line-height:1.4;background:var(--surface);border:1px solid var(--line);padding:3px 8px}
.code-card .link-group{margin-top:auto;padding-top:8px;gap:4px 18px}
@media(max-width:1000px){.code-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:650px){.code-grid{grid-template-columns:minmax(0,1fr)}}
.feed-follow{margin-top:18px;max-width:620px}
.feed-follow summary{display:inline-flex;align-items:center;gap:10px;padding-block:7px;border-bottom:1px solid var(--line);font-size:15px;font-weight:600;line-height:1.65;cursor:pointer;list-style:none}
.feed-follow summary::-webkit-details-marker{display:none}
.feed-follow summary::after{content:'+';font-size:17px;font-weight:400;line-height:1;color:var(--muted)}
.feed-follow[open] summary::after{content:'−'}
.feed-follow summary:hover,.feed-follow[open] summary{border-color:var(--accent)}
.feed-follow summary:focus-visible{outline:3px solid var(--accent);outline-offset:5px}
.feed-follow summary .icon{width:17px;height:17px;color:var(--accent);stroke-width:2.2;flex:none}
.feed-panel{margin-top:14px;padding:20px 22px 16px;background:var(--surface);border:1px solid var(--line)}
.feed-panel>p{font-size:15px;line-height:1.55;color:var(--muted);margin:0 0 14px}
.feed-address{display:flex;align-items:center;gap:18px;margin-bottom:6px}
.feed-address input{flex:1;min-width:0;font:14px/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--ink);background:var(--card);border:1px solid var(--line-strong);border-radius:0;padding:9px 10px}
.feed-copy{flex:none}
.feed-copy .icon{width:15px;height:15px;stroke-width:2;flex:none}
.feed-copy.is-copied{color:var(--accent);border-color:var(--accent)}
html:not(.js) .feed-copy{display:none}
/* Hover feedback for cards, matching the home research cards: the border warms, the card lifts, a portrait zooms. */
.resource-card,.code-card{transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease}
.person-frame{overflow:hidden;margin-bottom:23px;background:var(--placeholder)}
.person-frame>.person-photo,.person-frame>.person-monogram{margin-bottom:0;transition:transform .45s ease}
@media(hover:hover){
  .resource-card:hover,.code-card:hover{border-color:var(--line-strong)}
  .resource-card:hover{border-top-color:var(--red)}
}
@media(hover:hover) and (prefers-reduced-motion:no-preference){
  .resource-card:hover,.code-card:hover{transform:translateY(-3px);box-shadow:0 22px 38px -30px rgba(0,0,0,.5)}
  .person:hover .person-photo{transform:scale(1.035)}
}
@media(max-width:650px){
  .site-header.is-compact .header-inner{min-height:56px}
  .site-header.is-compact .foil-subtitle{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
}
.section-jumps a[aria-current]{color:var(--accent);text-decoration:underline 2px;text-underline-offset:7px}
@media(min-width:1100px){
  .section-jumps{position:sticky;top:var(--header-h,95px);z-index:10;background:var(--paper)}
  .section-jumps.is-stuck{border-top-color:transparent}
  .research-detail{scroll-margin-top:80px}
}
/* The hero's bottom row (caption, credit, scene buttons) sits in the flow, so on short screens the hero grows
   instead of the row covering the button. The minimum heights are the hero's previous fixed heights. */
.hero-scenes{display:flex;flex-direction:column;height:auto;max-height:none;min-height:max(560px,min(calc(100svh - 150px),700px))}
.hero-scenes .hero-bottom{position:relative;bottom:auto;margin-top:auto;padding-bottom:35px}
@media(max-width:650px){
  .hero-scenes{min-height:max(600px,min(calc(100svh - 130px),700px))}
  .hero-scenes .hero-bottom{padding-block:28px}
  .scene-information{flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:2px 14px}
  .scene-caption,.scene-credit{font-size:13px}
  .scene-detail{display:none}
}
@media print{.hero-scenes{display:block;min-height:0}}

/* Photograph viewer (site.js). */
.lightbox{width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;background:#0b0d10;color:#fff;overflow:hidden;overscroll-behavior:contain;touch-action:pan-y pinch-zoom}
.lightbox::backdrop{background:transparent}
.lightbox[open]{display:grid;place-items:center}
html:has(.lightbox[open]){overflow:hidden}
.lightbox-figure{margin:0;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:56px 76px 28px}
.lightbox-image{display:block;max-width:min(calc(100vw - 152px),1400px);max-height:calc(100svh - 160px);width:auto;height:auto;object-fit:contain;opacity:0;transition:opacity .25s ease}
.lightbox-image.is-loaded{opacity:1}
.lightbox-caption{max-width:72ch;font-size:15px;line-height:1.5;color:#d4d8dd;text-align:center}
.lightbox-count{position:absolute;top:18px;left:22px;margin:0;font-size:14px;letter-spacing:.06em;color:#b9bec5;font-variant-numeric:tabular-nums}
.lightbox button{position:absolute;display:grid;place-items:center;border:0;background:transparent;color:#fff;padding:0;line-height:1;cursor:pointer}
.lightbox-close{top:8px;right:10px;width:48px;height:48px;font-size:32px}
.lightbox-prev,.lightbox-next{top:50%;translate:0 -50%;width:52px;height:72px;font-size:40px;background:rgba(255,255,255,.07)!important;transition:background .2s}
.lightbox-prev:hover,.lightbox-next:hover{background:rgba(255,255,255,.16)!important}
.lightbox-prev{left:14px}
.lightbox-next{right:14px}
.lightbox.is-single .lightbox-prev,.lightbox.is-single .lightbox-next,.lightbox.is-single .lightbox-count{display:none}
@media(max-width:650px){
  .lightbox-figure{padding:56px 12px 84px}
  .lightbox-image{max-width:calc(100vw - 24px);max-height:calc(100svh - 230px)}
  .lightbox-prev,.lightbox-next{top:auto;bottom:16px;translate:none;width:56px;height:48px;font-size:34px}
  .lightbox-prev{left:calc(50% - 64px)}
  .lightbox-next{right:calc(50% - 64px)}
  .lightbox-caption{font-size:14px}
}
/* Footer theme switch (site.js). */
.theme-switch{display:inline-flex;border:1px solid #ffffff2e}
.theme-switch button{border:0;background:transparent;color:#b3b3b3;font-size:14px;line-height:1.4;padding:4px 11px}
.theme-switch button+button{border-left:1px solid #ffffff2e}
.theme-switch button:hover{color:#fff}
.theme-switch button[aria-pressed=true]{background:#ffffff1f;color:#fff}
html:not(.js) .theme-switch{display:none}
/* News page: type filter, and the research threads each story belongs to. */
.news-filter{flex-wrap:wrap}
.news-count{margin:14px 0 6px}
.news-threads{display:flex;flex-wrap:wrap;gap:4px 12px;margin:12px 0 0}
.news-threads .pub-topic{margin:0}
/* Research page: the latest stories on each thread. */
.thread-news{margin:24px 0 6px}
.thread-news h3{margin:0 0 8px;font:700 13px/1.4 var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.thread-news ul{list-style:none;margin:0;padding:0}
.thread-news li{display:flex;justify-content:space-between;align-items:baseline;gap:18px;padding:7px 0;border-top:1px solid var(--line);font-size:15px;line-height:1.45}
.thread-news li:last-child{border-bottom:1px solid var(--line)}
.thread-news a{font-weight:600}
.thread-news li span{flex:none;font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums}
@media(max-width:650px){.news-threads{margin-top:8px}.thread-news li{flex-direction:column;gap:0}}

/* Publication list thumbnails (papers with a figure). */
.publication.has-figure{grid-template-columns:135px minmax(0,1fr) 220px}
.pub-thumb{display:block;align-self:start;margin-top:6px;background:#fff;border:1px solid var(--line);padding:8px;transition:border-color .2s}
.pub-thumb img{width:100%;height:auto;aspect-ratio:16/9;object-fit:contain}
.pub-thumb:hover{border-color:var(--line-strong)}
.pub-content h2 a:hover{color:var(--accent)}
@media(max-width:1000px){.publication.has-figure{grid-template-columns:120px minmax(0,1fr) 170px}}
@media(max-width:650px){.publication.has-figure{grid-template-columns:1fr}.pub-thumb{max-width:320px;margin-top:4px}}
/* Paper pages (papers/<id>.html). */
.paper-intro{padding-block:44px 30px}
.paper-crumbs{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:15px;color:var(--muted);margin-bottom:28px}
.paper-crumbs a{border-bottom:1px solid var(--line)}
.paper-crumbs a:hover{border-color:var(--accent)}
.paper-intro h1{font-size:clamp(32px,3.6vw,48px);line-height:1.16;max-width:1040px;margin-bottom:20px}
.paper-authors{font-size:17px;line-height:1.6;margin-bottom:6px;max-width:900px}
.paper-venue{font-size:16px;color:var(--muted);margin-bottom:18px}
.paper-intro .link-group{margin-top:4px}
.paper-figure{margin-block:6px 44px}
.paper-figure>a,.paper-figure>img{display:block;background:#fff;border:1px solid var(--line);padding:clamp(10px,2vw,22px)}
.paper-figure img{width:100%;height:auto}
.paper-figure>a:hover{border-color:var(--line-strong)}
.paper-figure figcaption{margin-top:10px;font-size:15px;line-height:1.5;color:var(--muted);max-width:90ch}
.paper-details{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:56px;border-top:1px solid var(--line);padding-block:40px 72px}
.paper-details h2{margin:0 0 12px;font:700 13px/1.4 var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.paper-cite .pub-bibtex{margin:0 0 12px}
.paper-context>.news-threads{margin:0 0 26px}
.paper-context .thread-news{margin:0 0 26px}
.paper-context>.text-link{margin-top:2px}
@media(max-width:850px){.paper-details{grid-template-columns:1fr;gap:34px}}
@media(max-width:650px){.paper-intro{padding-block:32px 22px}.paper-figure{margin-bottom:32px}}
/* Year in review (review/<year>.html), and the links to it. */
.intro-actions{display:flex;flex-wrap:wrap;align-items:flex-start;gap:6px 30px;margin-top:18px}
.intro-actions .feed-follow{margin-top:0}
.home-news-top{gap:10px 28px;flex-wrap:wrap}
.home-news-top h2.eyebrow{margin-right:auto}
.review-years{display:flex;flex-wrap:wrap;align-items:center;gap:4px 20px;margin:18px 0 0;font-size:15px;color:var(--muted)}
.review-stats dl{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin:0;border-top:1px solid var(--line-strong)}
.review-stat{display:flex;flex-direction:column;padding:26px 28px 24px;border-bottom:1px solid var(--line)}
.review-stat:nth-child(3n+1){padding-left:0}
.review-stat:not(:nth-child(3n+1)){border-left:1px solid var(--line)}
.review-stat dt{order:2;margin-top:10px;font-size:15px;font-weight:600;line-height:1.4}
.review-stat-value{order:1;margin:0;font:600 clamp(44px,5vw,64px)/1 var(--display);letter-spacing:-.035em}
.review-stat-note{order:3;margin:4px 0 0;font-size:14px;line-height:1.45;color:var(--muted)}
.review-months{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.review-months>li{display:grid;grid-template-columns:200px minmax(0,1fr);gap:30px;padding:22px 0;border-bottom:1px solid var(--line)}
.review-months h3{margin:0;font:600 24px/1.3 var(--display);letter-spacing:-.02em;color:var(--accent)}
.review-months ul,.review-also ul{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.review-story{display:grid;grid-template-columns:70px minmax(0,1fr) auto;gap:4px 18px;align-items:baseline;font-size:16px;line-height:1.45}
.review-story.is-undated{grid-template-columns:minmax(0,1fr)}
.review-story a{font-weight:600}
.review-date{font-size:14px;color:var(--muted)}
.review-kind{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.review-also{display:grid;grid-template-columns:200px minmax(0,1fr);gap:30px;padding:26px 0;border-bottom:1px solid var(--line)}
.review-also h3{margin:0;font:600 24px/1.3 var(--display);letter-spacing:-.02em;color:var(--accent)}
.review-photos{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.review-photos a{display:block;background:var(--placeholder)}
.review-photos img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover}
.review-photo-section .photo-credit{margin-top:12px}
.review-venues{list-style:none;margin:0 0 30px;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.review-venues li{padding:5px 11px;border:1px solid var(--line);background:var(--surface);font-size:14px;font-weight:600;line-height:1.4}
.review-paper-lists{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 56px}
.review-paper-lists .thread-news{margin:0}
.review-paper-lists a{font-weight:400}
.review-paper-lists a strong{font-weight:600}
.review-thread-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 40px}
.review-thread-list li{display:flex;justify-content:space-between;align-items:baseline;gap:16px;padding:14px 0;border-top:1px solid var(--line)}
.review-thread-list a{display:inline-flex;align-items:center;gap:9px;font-weight:600}
.review-thread-list .icon{width:18px;height:18px;color:var(--accent);stroke-width:1.8;flex:none;align-self:center}
.review-thread-list span{font-size:14px;color:var(--muted);white-space:nowrap}
@media(max-width:1000px){.review-thread-list{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:850px){
  .review-stats dl{grid-template-columns:repeat(2,minmax(0,1fr))}
  .review-stat:nth-child(3n+1){padding-left:28px}
  .review-stat:not(:nth-child(3n+1)){border-left:0}
  .review-stat:nth-child(odd){padding-left:0}
  .review-stat:nth-child(even){border-left:1px solid var(--line)}
  .review-months>li,.review-also{grid-template-columns:1fr;gap:12px}
  .review-paper-lists{grid-template-columns:1fr}
}
@media(max-width:650px){
  .review-stat{padding:20px 0 18px 18px}
  .review-stat-value{font-size:40px}
  .review-story{grid-template-columns:56px minmax(0,1fr)}
  .review-kind{grid-column:2}
  .review-photos{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .review-thread-list{grid-template-columns:1fr}
}
@media(max-width:650px){.home-news-top h2.eyebrow{flex-basis:100%}.home-news-top{row-gap:2px}}
/* Rural AV page (rav.html): the two explore cards, then a directory of link groups. */
.rav-explore .resource-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.rav-explore .resource-card h2{font-size:var(--h3);margin-bottom:12px}
.rav-directory{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:44px 56px;align-items:start}
.rav-group.is-wide{grid-column:1/-1}
.rav-group h2{margin:0 0 10px;font:700 13px/1.4 var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.rav-group ul{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.rav-group li{display:flex;justify-content:space-between;align-items:baseline;gap:6px 20px;flex-wrap:wrap;padding:11px 0;border-bottom:1px solid var(--line);font-size:16px;line-height:1.45}
.rav-group li>a{font-weight:600}
.rav-group li>span{font-size:14px;color:var(--muted)}
.rav-group.is-wide li>span{white-space:nowrap}
.rav-project{display:grid!important;grid-template-columns:minmax(0,1fr) auto;gap:4px 24px!important}
.rav-project-links{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:2px 22px}
.rav-project-links .text-link{font-size:14px;padding-block:4px;border-bottom-color:transparent}
.rav-project-links .text-link:hover{border-bottom-color:var(--accent)}
@media(max-width:850px){.rav-explore .resource-grid,.rav-directory{grid-template-columns:1fr}.rav-directory{gap:36px}}
@media(max-width:650px){.rav-project{grid-template-columns:1fr}.rav-group.is-wide li>span{white-space:normal}}
.rav-stack{display:grid;gap:44px}
