/* palette: #123456 #4682B4 #016396 #003366 #4B0082 */
:root{--bg:#fdfdfe;--fg:#16212e;--muted:#506070;--navy:#123456;--accent:#016396;--steel:#4682B4;--deep:#003366;--indigo:#4B0082;--rule:#d9e2ec;--card:#f1f5f9}
@media (prefers-color-scheme:dark){:root{--bg:#0a1018;--fg:#e6edf5;--muted:#9bb0c4;--navy:#a9cbea;--accent:#5fb4e6;--steel:#6fa3d0;--deep:#8fb6e0;--indigo:#c3a1f5;--rule:#1f2c3b;--card:#111b27}}
*{box-sizing:border-box}html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--fg);font:20px/1.65 "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif}
a{color:var(--accent)}
.site-header{display:flex;flex-wrap:wrap;gap:8px 24px;justify-content:space-between;align-items:center;max-width:800px;margin:0 auto;padding:20px 16px;border-bottom:1px solid var(--rule);font:17px "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif}
.brand{font-weight:700;text-decoration:none;color:var(--fg)}
nav a{margin-left:16px;text-decoration:none;color:var(--muted);padding-bottom:2px}
nav a:hover,nav a[aria-current]{color:var(--accent);border-bottom:2px solid var(--accent)}
main{max-width:800px;margin:0 auto;padding:0 16px 24px}
h1{font-size:2.4rem;margin:48px 0 4px}
.tagline{color:var(--muted);font-style:italic;margin:0 0 24px}
h2{font:600 1rem "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:36px 0 12px;padding-top:20px;border-top:1px solid var(--rule)}
h3{font-size:1.05rem;margin:0 0 4px}
.meta{color:var(--muted);font-size:.9rem;font-family:"Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif;margin:0 0 6px}
.card{background:var(--card);border-radius:8px;padding:16px 18px;margin:0 0 14px}
.card p{margin:6px 0}
.tags{display:flex;flex-wrap:wrap;gap:8px;padding:0;list-style:none}
.tags li{background:var(--card);border:1px solid var(--rule);border-radius:999px;padding:2px 12px;font:16px "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif}
.filters{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px}
.filters button{font:16px "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif;border:1px solid var(--rule);background:var(--card);color:var(--fg);border-radius:999px;padding:4px 14px;cursor:pointer}
.filters button[aria-pressed=true]{background:var(--accent);color:var(--bg);border-color:var(--accent)}
[hidden]{display:none!important}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
details summary{cursor:pointer;color:var(--accent);font:16px "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif}
footer{max-width:800px;margin:32px auto 0;padding:20px 16px;color:var(--muted);font:16px/1.7 "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif;border-top:1px solid var(--rule)}
footer a{color:var(--muted);margin-right:12px}
@media(max-width:520px){body{font-size:18px}h1{font-size:2rem}nav a{margin:0 12px 0 0}}

h1,h2,h3{font-family:"Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif}
h2{font-family:"Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif}
main.wide{max-width:1040px}
.layout{display:grid;grid-template-columns:270px 1fr;gap:56px;padding-top:40px}
.profile{position:sticky;top:90px;align-self:start;text-align:center}
.profile .portrait{width:100%;aspect-ratio:4/5;object-fit:cover;object-position:top;border-radius:12px;box-shadow:0 10px 30px rgba(0,0,0,.18)}
.profile h1{font-size:1.9rem;margin:18px 0 2px;color:var(--accent);line-height:1.15}
.role{font:1.05rem "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif;margin:0 0 8px}
.affil{color:var(--muted);font:16px/1.5 "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif;margin:0 0 14px}
.links{list-style:none;padding:0;margin:0 0 12px;font:16px "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif}
.links li{margin:6px 0}
.content h2.first,.content .first h2{border-top:0;margin-top:0;padding-top:0}
.themes{display:grid;grid-template-columns:1fr 1fr;gap:14px}.themes .card{margin:0}
.pubs{list-style:none;padding:0;margin:0}
.pubs li{display:grid;grid-template-columns:56px 1fr;gap:12px;margin:0 0 16px}
.yr{font:600 16px "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif;color:var(--accent);padding-top:3px}
.pubs a{text-decoration:none;font-weight:600;color:var(--fg)}.pubs a:hover{color:var(--accent)}
.btn{display:inline-block;background:var(--accent);color:#fff;text-decoration:none;font:17px "Baskervville",Baskerville,"Baskerville Old Face",Georgia,serif;padding:9px 18px;border-radius:6px}
figure{margin:24px 0}figure img{width:100%;max-height:340px;object-fit:cover;border-radius:10px;display:block}
figure.side{float:right;width:230px;margin:6px 0 16px 24px}
figure.side img{max-height:none}
figcaption{margin-top:8px}
.site-header{position:sticky;top:0;background:var(--bg);z-index:5}
.card{border-left:4px solid var(--accent)}
@media(max-width:760px){.layout{grid-template-columns:1fr;gap:24px}.profile{position:static}.profile .portrait{max-width:240px}.themes{grid-template-columns:1fr}figure.side{float:none;width:100%;margin:16px 0}}
body:has(main.wide) .site-header{max-width:1040px}
h1,h2,h3,.brand{color:var(--navy)}
h2{color:var(--accent);font-size:.85rem}
h1{font-size:2.2rem}
.profile h1{font-size:1.6rem}
.site-header{border-bottom:2px solid var(--deep)}
nav a:hover,nav a[aria-current]{color:var(--accent);border-bottom-color:var(--steel)}
.btn{background:var(--deep)}
.card{border-left:4px solid var(--steel)}
.filters button[aria-pressed=true]{background:var(--deep);border-color:var(--deep);color:#fff}
.yr{color:var(--indigo)}
.tags li{border-color:var(--steel)}
a{color:var(--accent)}
.about-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:48px;align-items:start}
.about-side{display:grid;gap:4px}
.about-side figure{margin:0 0 8px}
.about-side figure img{max-height:none;aspect-ratio:3/4;object-fit:cover}
.about-side h2{margin-top:20px}
.about-side ul{padding-left:18px;margin:0;font-size:.88rem}
.about-side .tags{padding:0}
.about-side .tags li{font-size:14px}
@media(max-width:860px){.about-grid{grid-template-columns:1fr}}
body:has(.about-grid) main,body:has(.about-grid) .site-header{max-width:1040px}
body:has(main.collab) main,body:has(main.collab) .site-header{max-width:1100px}
/* collaborators */
.collab .hero-c{text-align:center;max-width:760px;margin:40px auto 28px}
.collab .eyebrow{color:var(--indigo);font-style:italic;font-size:.9rem;margin:0 0 10px}
.collab h1{margin:0 0 12px}
.collab .intro{color:var(--muted);font-size:.92rem;margin:0}
.collab .rule{width:88px;height:3px;margin:18px auto 0;background:var(--deep);border-radius:999px}
.c-layout{display:grid;grid-template-columns:minmax(0,1.04fr) minmax(320px,.96fr);gap:24px;align-items:start}
.c-label{color:var(--deep);font:700 13px/1 "Baskervville",Baskerville,Georgia,serif;letter-spacing:.18em;text-transform:uppercase;margin:0 0 10px}
.c-panel,.c-card{border:1px solid var(--rule);background:var(--bg);box-shadow:0 12px 28px rgba(18,52,86,.08);border-radius:6px}
.c-net{background:linear-gradient(180deg,var(--card),var(--bg));overflow:hidden}
.c-net svg{width:100%;height:auto;display:block;aspect-ratio:720/570}
.edge{stroke:var(--steel);stroke-width:1.05;stroke-dasharray:4 7;opacity:.45;transition:.18s}
.node-group{cursor:pointer;transition:opacity .18s,transform .18s;transform-box:fill-box;transform-origin:center}
.node-shell{fill:var(--bg);stroke:var(--rule);stroke-width:2}
.node-label{fill:var(--navy);font:700 14px "Baskervville",Baskerville,Georgia,serif;pointer-events:none}
.node-initials{fill:#fff;font:800 15px "Baskervville",Baskerville,Georgia,serif;pointer-events:none}
.center-name{fill:#fff;font:700 20px "Baskervville",serif}
.center-sub{fill:#cfe0f0;font:600 14px "Baskervville",Baskerville,Georgia,serif;letter-spacing:.04em}
.c-side{display:grid;gap:14px}
.c-summary{padding:20px;border-top:5px solid var(--deep)}
.c-summary h3{margin:0 0 6px;font-size:1.05rem}.c-summary p{margin:0;color:var(--muted);font-size:.85rem;line-height:1.65}
.legend{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-top:16px}
.legend>div{border:1px solid var(--rule);background:var(--card);padding:10px;border-radius:4px}
.dot{display:block;width:9px;height:9px;border-radius:99px;margin-bottom:7px}
.legend b{display:block;color:var(--navy);font:800 20px/1 "Baskervville",Baskerville,Georgia,serif}
.legend .n{display:block;margin-top:5px;color:var(--muted);font:700 13px/1.25 "Baskervville",Baskerville,Georgia,serif}
#c-search{width:100%;height:44px;border:1px solid var(--rule);background:var(--bg);color:var(--fg);padding:0 14px;font:16px "Baskervville",Baskerville,Georgia,serif;border-radius:6px}
#c-search:focus{outline:3px solid rgba(70,130,180,.35);border-color:var(--steel)}
.c-cards{display:grid;gap:11px;max-height:620px;overflow:auto;padding:2px 4px 2px 0}
.c-card{padding:14px 16px;border-left:4px solid var(--navy);transition:.18s}
.c-card:hover,.c-card.active{transform:translateY(-2px);border-left-color:var(--indigo);box-shadow:0 16px 28px rgba(18,52,86,.14)}
.c-row{display:flex;gap:13px;align-items:flex-start}
.c-order{width:38px;height:38px;background:var(--deep);color:#fff;display:grid;place-items:center;flex:none;font:800 15px "Baskervville",Baskerville,Georgia,serif;border-radius:4px}
.c-name{font-weight:700;font-size:.95rem;margin-right:8px;color:var(--fg)}
.tag{display:inline-block;padding:3px 8px;font:700 12.5px/1 "Baskervville",Baskerville,Georgia,serif;border-radius:3px;color:#fff;vertical-align:middle}
.c-role{margin-top:6px;font-size:.85rem;font-weight:700}
.c-meta{margin-top:6px;color:var(--muted);font:14.5px/1.5 "Baskervville",Baskerville,Georgia,serif}
.k-faculty{background:var(--navy)}.k-postdoc{background:var(--accent)}.k-doctoral{background:var(--steel)}.k-alumni{background:var(--indigo)}.k-research{background:#5f6a75}
.c-empty{display:none;border:1px dashed var(--steel);padding:22px;color:var(--muted);text-align:center;border-radius:6px}
.noresults .c-empty{display:block}.noresults .c-cards{display:none}
@media(max-width:920px){.c-layout{grid-template-columns:1fr}.c-cards{max-height:none}}
@media(max-width:560px){.legend{grid-template-columns:repeat(2,1fr)}}

.about-strip{display:grid;grid-template-columns:repeat(2,1fr);gap:0 48px;margin-top:8px}
.about-strip section h2{margin-top:28px}
.about-strip ul:not(.tags){padding-left:18px;margin:0;font-size:.88rem}
@media(max-width:860px){.about-strip{grid-template-columns:1fr}}

.projects{display:grid;gap:6px}
.proj{display:flex;gap:8px;align-items:center;font:14.5px/1.35 "Baskervville",Baskerville,Georgia,serif;color:var(--fg);padding:5px 8px;border-radius:4px;cursor:default}
.proj:hover{background:var(--card)}
.proj i{width:12px;height:12px;border-radius:3px;flex:none}
.proj small{color:var(--muted);margin-left:auto}
.hull{transition:opacity .18s}
.c-net svg{cursor:default}
.node-group{cursor:grab}.node-group:active{cursor:grabbing}
.node-group .halo{fill:none;stroke:var(--indigo);stroke-width:3;opacity:0;transition:opacity .18s}
.node-group.on .halo{opacity:1}
.node-label{paint-order:stroke;stroke:var(--bg);stroke-width:3px;stroke-linejoin:round}
.cl-label{font:italic 15px "Baskervville",serif;paint-order:stroke;stroke:var(--bg);stroke-width:3px;stroke-linejoin:round;pointer-events:none}
.c-work{margin-top:6px;font:italic 14px/1.4 "Baskervville",serif;color:var(--accent)}

/* header wordmark */
.brand{display:flex;flex-direction:column;line-height:1.15;font-size:1.9rem;letter-spacing:.005em}
.brand small{font:italic 400 .72rem "Baskervville",serif;color:var(--muted);letter-spacing:.04em;margin-top:3px}
.site-header{padding:16px}
@media(max-width:520px){.brand{font-size:1.35rem}}
/* filter colors */
.filters button{--c:#123456;border:2px solid var(--c);color:var(--fg);font-weight:700}
.filters button:hover{background:var(--card)}
.filters button[aria-pressed=true]{background:var(--c);border-color:var(--c);color:#fff}
.filters [data-filter=journal]{--c:#016396}.filters [data-filter=review]{--c:#4B0082}.filters [data-filter=proceedings]{--c:#4682B4}
.filters [data-filter=opinion]{--c:#a1581a}.filters [data-filter=brief]{--c:#2f7d6d}.filters [data-filter=commentary]{--c:#6b7280}
.card[data-type=journal]{border-left-color:#016396}.card[data-type=review]{border-left-color:#4B0082}.card[data-type=proceedings]{border-left-color:#4682B4}
.card[data-type=opinion]{border-left-color:#a1581a}.card[data-type=brief]{border-left-color:#2f7d6d}.card[data-type=commentary]{border-left-color:#6b7280}
/* footer */
footer.site-footer{max-width:none;margin:56px 0 0;padding:44px 16px 20px;background:#123456;color:#dbe7f3;border-top:4px solid #4682B4;font:16px/1.7 "Baskervville",serif}
.foot-in{max-width:1040px;margin:0 auto;display:grid;grid-template-columns:1fr 1.3fr;gap:40px;align-items:start}
.foot-name{font-size:1.5rem;color:#fff;margin:0 0 6px}
.foot-id p{margin:0 0 12px}
.site-footer a{color:#fff;margin:0}
.foot-h{font:700 13px "Baskervville",Baskerville,Georgia,serif;letter-spacing:.18em;text-transform:uppercase;color:#9fc3e6;margin:0 0 12px}
ul.icons{list-style:none;display:flex;flex-wrap:wrap;gap:10px;padding:0;margin:0 0 14px}
.ico{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.35);color:#fff;transition:.18s}
.ico span{width:20px;height:20px;background:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat}
.ico:hover{background:#fff;color:#123456;transform:translateY(-2px)}
.pill{display:inline-block;padding:6px 14px;border:1px solid rgba(255,255,255,.35);border-radius:999px;font:15px "Baskervville",Baskerville,Georgia,serif;text-decoration:none}
.pill:hover{background:#fff;color:#123456}
.copy{max-width:1040px;margin:32px auto 0;padding-top:16px;border-top:1px solid rgba(255,255,255,.18);font-size:14px;color:#9fc3e6}
@media(max-width:700px){.foot-in{grid-template-columns:1fr}}
