:root{--ink:#102f38;--accent:#087e8b;--muted:#51666b;--line:#d9e3e5;--paper:#f4f8f9}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;background:white;color:var(--ink);font:16px/1.65 Arial,Helvetica,sans-serif}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline}button,input{font:inherit}a:focus-visible,button:focus-visible,summary:focus-visible,input:focus-visible{outline:3px solid #ca771d;outline-offset:5px}.nav{max-width:1320px;margin:auto;min-height:94px;padding:20px 5%;display:flex;justify-content:space-between;align-items:center;gap:30px}.brand{display:flex;align-items:center;gap:14px;font-weight:600;line-height:1.4}.brand b{font-size:40px;letter-spacing:-3px}.brand b span{color:#1498a2}.brand-copy{display:block;min-width:0}.brand-copy strong{display:block;font-size:14px;line-height:1.3;letter-spacing:.01em}.brand small{display:block;font-size:12px;font-weight:400;letter-spacing:.04em;margin-top:4px;color:var(--muted)}.navlinks{display:flex;gap:28px;align-items:center;font-size:14px}.contact-link{border:1px solid var(--ink);padding:9px 16px}.hero{background:var(--paper);border-block:1px solid var(--line)}.hero-content{max-width:1320px;min-height:calc(100svh - 94px);margin:auto;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);gap:clamp(44px,7vw,100px);padding:clamp(56px,8vh,100px) 5%;align-items:center}.hero-copy{max-width:760px}.eyebrow,.section-kicker{font-size:12px;font-weight:700;letter-spacing:2px;color:var(--accent)}h1{font-family:Georgia,serif;font-size:clamp(2.6rem,4.2vw,3.75rem);font-weight:400;line-height:1.08;letter-spacing:-.045em;margin:0 0 12px;text-wrap:balance}h1 em{color:var(--accent);font-weight:400}h2{font-family:Georgia,serif;font-size:clamp(30px,3.6vw,44px);line-height:1.18;font-weight:400;letter-spacing:-1px;margin:16px 0 28px}h3{font-size:21px;line-height:1.35}p{margin:0 0 18px}.subtitle{font-size:19px;line-height:1.45;color:var(--muted);margin-bottom:26px}.hero-intro{font-family:Georgia,serif;font-size:clamp(28px,2.5vw,36px);line-height:1.2;margin:28px 0 14px;max-width:620px}.hero-description{max-width:620px;color:var(--muted);font-size:19px;line-height:1.65}.hero-actions{display:flex;gap:25px;align-items:center;margin:28px 0}.button{display:inline-block;background:var(--ink);color:white;padding:13px 21px;font-size:14px;font-weight:600}.tag-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:25px}.tag{font-size:12px;border:1px solid #cddcde;padding:4px 10px}.profile-photo{position:relative;align-self:center}.profile-photo img{width:100%;height:min(64svh,620px);min-height:420px;object-fit:cover;object-position:center top;display:block;background:#d5e1e4;border-radius:180px 180px 4px 4px}.portrait-caption{font-size:13px;color:var(--muted);border-top:1px solid #b4cbcf;margin-top:18px;padding-top:14px;max-width:330px}.photo-settings{font-size:12px;margin-top:12px}.photo-settings summary{font-size:12px;padding:4px 0}.photo-upload-panel{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.photo-upload-panel input{max-width:180px}.container{max-width:1190px;margin:auto;padding:0 35px}.metrics{display:grid;grid-template-columns:repeat(5,1fr);padding:36px 0 20px;gap:25px;border-bottom:1px solid var(--line)}.metric-card{border-right:1px solid var(--line);padding-right:14px}.metric-card:last-child{border:0}.metric-value{font-family:Georgia,serif;font-size:39px}.metric-label{font-size:13px;color:var(--muted);line-height:1.5}.metrics-note{font-size:12px;color:var(--muted);margin:12px 0 0}.section-card{padding:65px 0;border-bottom:1px solid var(--line)}#research>p{max-width:800px;font-size:19px;color:var(--muted)}.contribution-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:30px;margin-top:35px}.contribution-card{border-top:3px solid var(--accent);background:var(--paper);padding:25px}.contribution-card p{color:var(--muted);font-size:15px}.contribution-icon{font-size:26px}.research-map{display:grid;grid-template-columns:repeat(4,1fr);gap:25px;margin-top:35px;font-size:14px;color:var(--muted)}.research-item strong{display:block;color:var(--ink);margin-bottom:5px}.publication{padding:24px 0 24px 46px;border-top:1px solid var(--line);position:relative;color:var(--muted);font-size:14px;counter-increment:pub}.publication:before{content:counter(pub,decimal-leading-zero);position:absolute;left:0;top:25px;color:var(--accent);font-size:13px}#publicationList{counter-reset:pub}.publication strong{display:inline-block;font-family:Georgia,serif;font-size:23px;line-height:1.4;font-weight:400;color:var(--ink);margin-bottom:7px}.text-link{display:inline-block;margin-top:25px;border-bottom:1px solid var(--accent);font-size:14px}.project-list{display:grid;grid-template-columns:1fr 1fr;gap:24px}.project{padding:28px;background:var(--paper);border:1px solid var(--line)}.project h4{font-size:13px;letter-spacing:1.5px;color:var(--accent);margin:0 0 16px}.project p:first-of-type{font-family:Georgia,serif;font-size:23px;line-height:1.35}.project p:last-child{font-size:14px;color:var(--muted);margin-bottom:0}table{border-collapse:collapse;width:100%;text-align:left}td,th{border-bottom:1px solid var(--line);padding:17px 20px;vertical-align:top}th{background:var(--paper);font-size:14px}td{font-size:16px}td:first-child{min-width:115px;color:var(--accent)}.course-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 35px}.course{padding:18px 0;border-top:1px solid var(--line);display:flex;gap:20px}.course b{font-size:13px;color:var(--accent);min-width:60px;padding-top:3px}.course span{font-size:16px}.achievement-grid{display:grid;grid-template-columns:1fr 1fr;gap:25px}li{margin:8px 0}.impact-stack{display:grid;grid-template-columns:repeat(2,1fr);gap:18px;margin-top:25px}.impact-tile{background:var(--paper);padding:20px;font-size:14px}.impact-tile strong{color:var(--accent)}.support h2{font-size:28px}details{border-top:1px solid var(--line)}summary{cursor:pointer;padding:18px 0;font-weight:600;font-size:16px}details>.section-card{padding:20px 0;border:0}canvas{max-width:100%;max-height:370px}.timeseries-controls{display:flex;gap:12px;align-items:center;margin:15px 0}.timeseries-controls input[type=text]{min-width:0;flex:1;padding:12px;border:1px solid var(--line)}button,.file-label{background:var(--ink);color:white;border:0;padding:12px 16px;cursor:pointer;font-size:14px}.file-label input{display:block;max-width:100%;margin-top:8px}.hint-box,.csv-format{background:var(--paper);font-size:14px;padding:18px;margin-top:15px}.pub-pill-row{display:flex;flex-wrap:wrap;gap:10px}.pub-pill{border:1px solid var(--line);padding:5px 10px}.slide-title{font-family:Georgia,serif;font-size:28px}.timeline-item{padding:12px;border-bottom:1px solid var(--line)}.cta{background:var(--ink);color:white;margin:65px -35px 0;padding:60px;display:grid;grid-template-columns:1.2fr .8fr;gap:0 70px}.cta .section-kicker{color:#8edce1;grid-column:1/-1}.cta h2{font-size:47px;margin-bottom:22px}.cta h2 em{color:#8edce1;font-weight:400}.cta>p{grid-column:1;color:#c4dadd}.cta>.button{grid-column:1;justify-self:start;overflow-wrap:anywhere;max-width:100%}.light{background:white;color:var(--ink)}.profile-card{grid-column:2;grid-row:2/5;align-self:center;font-size:14px;border-left:1px solid #527178;padding-left:35px}.profile-card h3{font-size:14px;text-transform:uppercase;letter-spacing:2px;color:#8edce1}.profile-card p{margin-bottom:15px}.footer{max-width:1190px;padding:30px 35px;margin:auto;font-size:12px;color:var(--muted)}.skip{position:absolute;left:15px;top:-100px;background:white;padding:10px;z-index:10}.skip:focus{top:10px}@media(max-width:900px){.nav{flex-wrap:wrap;gap:16px}.navlinks{gap:18px;flex-wrap:wrap}.hero-content{gap:clamp(28px,5vw,56px)}.profile-photo img{height:min(58vh,520px);min-height:380px}.contribution-grid{gap:15px}.research-map{grid-template-columns:1fr 1fr}.cta{gap:0 30px;padding:40px}.metrics{gap:12px}.metric-value{font-size:30px}}@media(max-width:640px){.nav{padding:16px 22px;align-items:flex-start}.navlinks{gap:16px;font-size:13px}.contact-link{padding:4px 8px}.hero-content{grid-template-columns:1fr;padding:48px 24px 38px;gap:32px;min-height:auto}.hero-content h1{font-size:clamp(2.6rem,10vw,3.5rem);letter-spacing:-.045em}.profile-photo{max-width:300px;width:100%;margin:auto}.profile-photo img{height:clamp(320px,95vw,400px);min-height:0}.hero-actions{gap:16px;font-size:14px}.container{padding:0 24px}.metrics{grid-template-columns:repeat(3,1fr);row-gap:22px}.metric-value{font-size:29px}.metric-label{font-size:12px}.metrics .metric-card:nth-child(3){border:0}.section-card{padding:42px 0}.contribution-grid,.project-list,.course-grid,.achievement-grid{grid-template-columns:1fr}.research-map{gap:20px}.publication strong{font-size:21px}.publication{padding-left:35px}td,th{padding:12px 8px}td{font-size:14px}td:first-child{min-width:75px}.impact-stack{grid-template-columns:1fr}.cta{margin:40px -24px 0;grid-template-columns:1fr;padding:35px 24px}.cta h2{font-size:38px}.profile-card{grid-column:1;grid-row:auto;border-left:0;border-top:1px solid #527178;padding:25px 0 0;margin-top:30px}.timeseries-controls{flex-direction:column;align-items:stretch}.footer{padding:25px 24px}.photo-upload-panel{font-size:12px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}@media print{.nav,.photo-settings,.support,.hero-actions{display:none}.hero-content{padding:20px}.section-card{break-inside:avoid;padding:20px 0}.cta{background:white;color:black}.profile-card{color:black}.container{max-width:none}}

.course-portal{display:grid;grid-template-columns:1.15fr 1fr;gap:35px;border:1px solid #bad5d9;border-top:3px solid var(--accent);background:var(--paper);padding:30px;margin:0 0 35px}.course-portal h3{font-family:Georgia,serif;font-size:30px;font-weight:400;margin:12px 0 15px}.course-portal p{color:var(--muted);font-size:16px}.portal-actions{display:flex;flex-wrap:wrap;align-items:center;gap:18px;margin-top:24px}.portal-faculty{font-size:14px;text-decoration:underline;text-underline-offset:4px}.course-portal .portal-tab-note{font-size:13px;margin:12px 0 0}.portal-access{border-left:1px solid #c8dbde;padding-left:30px}.portal-access h4{font-size:16px;margin:0 0 12px}.portal-access ol{padding-left:20px;margin:0 0 18px}.portal-access li{font-size:14px;margin:10px 0}.portal-access p{font-size:14px;margin:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:700px){.course-portal{grid-template-columns:1fr;padding:23px;gap:25px}.portal-access{border-left:0;border-top:1px solid #c8dbde;padding:23px 0 0}.portal-actions{align-items:flex-start;flex-direction:column}}


/* Mobile readability, touch targets, and higher contrast */
:root{--ink:#102b33;--accent:#086b75;--muted:#455a60;--line:#cfdddf;--paper:#edf4f5}
.brand{min-width:0}
.navlinks a{display:inline-flex;min-height:44px;align-items:center;padding:0 6px}
.navlinks .contact-link{padding:0 14px;border-radius:4px}
.button{display:inline-flex;min-height:48px;align-items:center;justify-content:center;border-radius:4px}
.button:hover{background:#0b4650;text-decoration:none}
.hero-actions>a:not(.button){display:inline-flex;min-height:48px;align-items:center;padding:0 12px;border:1px solid transparent;border-radius:4px}
.hero-actions>a:not(.button):hover{background:#fff;border-color:var(--line);text-decoration:none}
button:hover,.file-label:hover{background:#0b4650}
@media(max-width:640px){
html{scroll-padding-top:140px}
.nav{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;padding:12px 18px;min-height:0}
.brand{gap:9px;align-items:center}
.brand b{font-size:31px;letter-spacing:-2px}
.brand-copy strong{font-size:13px;line-height:1.25;overflow-wrap:anywhere}
.brand small{font-size:11px;letter-spacing:0}
.navlinks{width:100%;display:flex;flex-wrap:wrap;justify-content:flex-start;gap:3px 5px;font-size:14px}
.navlinks a{min-height:42px;padding:0 9px}
.navlinks .contact-link{padding:0 11px}
.hero-content{padding:38px 22px 30px;gap:24px}
.hero-content h1{font-size:clamp(2.45rem,9vw,3.3rem);line-height:1.04;text-wrap:balance}
.hero-intro{font-size:clamp(25px,7vw,32px);margin:22px 0 12px}
.hero-description{font-size:17px;line-height:1.65}
.hero-actions{gap:8px;flex-wrap:wrap;margin:22px 0 0}
.profile-photo{max-width:300px}
.profile-photo img{height:clamp(300px,84vw,340px);min-height:0;border-radius:140px 140px 4px 4px}
.metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 12px;padding:26px 0 16px}
.metric-card{padding:0 12px 0 0}
.metric-card:nth-child(2n){border-right:0;padding-right:0}
.metric-card:nth-child(3){border-right:1px solid var(--line)}
.metric-value{font-size:32px}
.metric-label{font-size:13px;line-height:1.45}
}
@media(max-width:380px){
.navlinks{gap:2px 3px;font-size:13px}
.navlinks a{padding-inline:7px}
.navlinks .contact-link{padding-inline:9px}
.hero-content h1{font-size:clamp(2.35rem,9vw,3rem)}
}
