:root{--accent:#5368d6;--ink:#223047;--muted:#677387;--bg:#f5f6f9;--line:#e2e6ef;--tint:#edf0ff;--paper:#fff}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:105px}body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.75 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button,input{font:inherit}button,a,summary{ -webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible,input:focus-visible{outline:3px solid var(--accent);outline-offset:4px}.skip{position:fixed;top:-80px;background:var(--paper);padding:10px;z-index:99}.skip:focus{top:0}.topbar{position:sticky;top:0;z-index:20;background:rgba(255,255,255,.96);border-bottom:1px solid var(--line)}.top-inner{max-width:1260px;margin:auto;min-height:76px;display:flex;align-items:center;gap:28px;padding:12px 28px}.brand{font-weight:750;color:var(--ink);letter-spacing:-.5px;white-space:nowrap}.brand span{color:var(--accent)}nav{display:flex;gap:5px;overflow-x:auto;scrollbar-width:thin;flex:1}nav a{white-space:nowrap;color:var(--muted);font-size:13px;font-weight:600;padding:7px 11px;border:1px solid transparent;border-radius:8px}nav a:hover,nav a.active{background:var(--tint);color:var(--accent);text-decoration:none;border-color:#dbe0fb}.cv-link{font-size:13px;font-weight:600;white-space:nowrap;border:1px solid var(--line);border-radius:8px;padding:7px 12px}.layout{max-width:1260px;margin:30px auto 70px;padding:0 28px;display:grid;grid-template-columns:286px minmax(0,1fr);gap:28px;align-items:start}.panel{background:var(--paper);border:1px solid var(--line);border-radius:18px;box-shadow:0 7px 24px #24324a07}.profile{position:sticky;top:106px;padding:28px 24px;text-align:center;overflow:hidden}.profile:before{content:"";position:absolute;left:0;top:0;right:0;height:5px;background:linear-gradient(90deg,#6574df,#68b8c4)}.portrait{width:192px;height:192px;border-radius:50%;object-fit:cover;object-position:center 39%;border:5px solid #fff;box-shadow:0 0 0 1px var(--line);margin:6px 0 15px}.profile h1{font-size:27px;line-height:1.25;letter-spacing:-.9px;margin:0 0 7px}.full-name{font-size:12px;color:var(--muted);margin:0 0 18px}.role{font-size:14px;line-height:1.7;margin:0}.role strong{font-weight:650}.location{font-size:12px;color:var(--muted);margin:14px 0 20px}.tags{display:flex;flex-wrap:wrap;gap:7px;justify-content:center;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.tag{font-size:11px;line-height:1.5;padding:6px 9px;border-radius:6px;background:#f0f2fa;color:#526181}.socials{display:flex;gap:7px;justify-content:center;flex-wrap:wrap;margin:20px 0 13px}.socials a{font-size:12px;padding:5px 9px;border:1px solid var(--line);border-radius:6px;color:var(--ink)}.email{font-size:12px}.profile-note{font-size:12px;color:var(--muted);margin:18px 0 0}.main{min-width:0;display:grid;gap:24px}.section{padding:29px 30px;scroll-margin-top:100px}.section-heading{display:flex;gap:12px;align-items:center;justify-content:space-between;margin-bottom:20px}.section h2{font-size:20px;letter-spacing:-.5px;line-height:1.3;margin:0;display:flex;align-items:center;gap:11px}.section h2:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 4px var(--tint)}.eyebrow{font-size:10px;letter-spacing:1.6px;font-weight:700;color:var(--muted);text-transform:uppercase}.section p{margin:0 0 15px}.section p:last-child{margin-bottom:0}.intro{font-size:17px;line-height:1.9}.intro strong{font-weight:600}.about-extra{margin-top:18px;border-top:1px solid var(--line);padding-top:15px}summary{cursor:pointer;color:var(--accent);font-size:13px;font-weight:600}details[open]>summary{margin-bottom:14px}.entry{border:1px solid var(--line);border-radius:11px;margin-top:13px;padding:20px 22px;position:relative;overflow:hidden;background:var(--paper)}.entry:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:#b6bff1}.entry:hover{border-color:#b9c2e4}.entry-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:11px;color:var(--muted);margin-bottom:9px}.badge{background:var(--tint);color:var(--accent);font-size:10px;font-weight:650;padding:3px 8px;border-radius:5px}.entry h3{font-size:16px;line-height:1.55;letter-spacing:-.2px;margin:0 0 10px;font-weight:650}.entry h3 a{color:var(--ink)}.entry p,.entry li{font-size:13px;line-height:1.8;color:#5b687d}.entry details p{margin-top:12px}.links{display:flex;gap:9px;flex-wrap:wrap;margin-top:15px}.links a{font-size:11px;font-weight:650;border:1px solid var(--line);border-radius:5px;padding:3px 10px}.entry-footer{display:flex;justify-content:space-between;gap:16px;align-items:center;margin-top:14px}.entry-footer .links{margin:0}.news-list{display:grid;gap:10px}.news{display:grid;grid-template-columns:70px 1fr;gap:16px;border:1px solid var(--line);border-radius:9px;padding:14px 16px;font-size:13px;line-height:1.7}.news time{font-size:11px;font-weight:650;color:var(--muted);padding-top:2px}.news strong{font-weight:650}.search-row{display:flex;gap:10px;align-items:center;margin-bottom:16px}.search-row input{width:100%;border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:10px 13px;font-size:12px;color:var(--ink)}.count{font-size:11px;color:var(--muted);white-space:nowrap}.empty{font-size:13px;color:var(--muted);padding:20px 0}.teaching-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.teaching-grid .entry{margin:0}.teaching-grid ul{padding-left:16px;margin:0}.gallery{display:grid;grid-template-columns:1fr 1fr;gap:12px}.gallery figure{margin:0}.gallery img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:8px}.gallery figcaption{font-size:11px;color:var(--muted)}footer{font-size:11px;color:var(--muted);text-align:center;padding:8px 0}.backtop{font-weight:650;margin-left:15px}[hidden]{display:none!important}@media(min-width:1400px){.layout{margin-top:38px}}@media(max-width:1050px){.top-inner{gap:15px;padding:12px 20px}.brand{font-size:14px}nav a{font-size:12px;padding:7px 8px}.layout{grid-template-columns:250px minmax(0,1fr);gap:20px;padding:0 20px}.section{padding:25px}.profile{padding:25px 18px}}@media(max-width:800px){.top-inner{flex-wrap:wrap;gap:8px;padding:10px 18px}.brand{flex:1}nav{order:3;flex-basis:100%}.layout{display:block;margin-top:20px;padding:0 16px}.profile{position:relative;top:auto;margin-bottom:22px;padding:25px}.portrait{width:106px;height:106px}.profile-note{display:none}.tags{max-width:450px;margin:18px auto 0}.main{gap:20px}.section{padding:24px 20px}html{scroll-padding-top:130px}.section{scroll-margin-top:130px}.teaching-grid{grid-template-columns:1fr}.eyebrow{font-size:9px}.entry{padding:18px}.news{grid-template-columns:60px 1fr;gap:10px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

/* Visitor appearance preferences and independently scrolling sections. */
:root{--surface-muted:#f0f2fa;--body-copy:#5b687d;--rail:#b6bff1;--header:rgba(255,255,255,.97);color-scheme:light}
:root[data-color="purple"]{--accent:#7844af;--tint:#f3ecfa;--rail:#ceb6e6}
:root[data-color="teal"]{--accent:#08766d;--tint:#e5f4f1;--rail:#95cec6}
:root[data-color="orange"]{--accent:#a94b10;--tint:#fff0e4;--rail:#e4b48e}
:root[data-mode="dark"]{--ink:#e4eaf5;--muted:#a7b4c9;--bg:#111620;--paper:#1b2331;--line:#354155;--surface-muted:#263246;--body-copy:#b8c5d8;--header:rgba(22,29,41,.97);--accent:#a5b3ff;--tint:#2b3554;--rail:#596da6;color-scheme:dark}
:root[data-mode="dark"][data-color="purple"]{--accent:#d0afff;--tint:#3a2c50;--rail:#82609f}
:root[data-mode="dark"][data-color="teal"]{--accent:#7bddcb;--tint:#1e3d3b;--rail:#4f9286}
:root[data-mode="dark"][data-color="orange"]{--accent:#ffb985;--tint:#483326;--rail:#a37551}
.topbar{background:var(--header)}.top-inner{gap:20px}nav a.active,nav a:hover{border-color:var(--rail)}.tag{background:var(--accent);color:var(--paper)}.entry p,.entry li{color:var(--body-copy)}.entry:before{background:var(--rail)}.entry:hover{border-color:var(--rail)}.portrait{border-color:var(--paper)}.profile:before{background:linear-gradient(90deg,var(--accent),var(--rail))}.profile h1{margin-bottom:18px}.appearance{display:flex;align-items:center;gap:8px;flex-shrink:0}.color-choice{width:28px;height:28px;border:3px solid var(--paper);background:var(--swatch);border-radius:50%;cursor:pointer;box-shadow:0 0 0 1px var(--line);position:relative}.color-choice[aria-pressed="true"]{box-shadow:0 0 0 2px var(--accent)}.color-choice[aria-pressed="true"]:after{content:"✓";position:absolute;inset:0;font-size:14px;line-height:22px;color:white;font-weight:750;text-align:center}.mode-toggle{width:34px;height:34px;margin-left:4px;border:1px solid var(--line);border-radius:9px;background:var(--paper);color:var(--ink);font-size:22px;line-height:1;cursor:pointer}.mode-toggle:hover{background:var(--tint)}.section-scroll{overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--rail) transparent;padding:2px 12px 3px 2px;max-height:360px}.section-scroll>.entry:first-child{margin-top:0}#news .section-scroll{max-height:230px}#publications .section-scroll{max-height:560px}#patents .section-scroll{max-height:260px}#experience .section-scroll{max-height:340px}#talks .section-scroll{max-height:300px}#teaching .section-scroll{max-height:370px}#blog .section-scroll{max-height:700px}.section-scroll:focus-visible{outline:2px solid var(--accent);outline-offset:5px;border-radius:4px}.search-row{position:sticky;top:-2px;z-index:2;background:var(--paper);padding:2px 0 12px;margin-bottom:0}.section-scroll::-webkit-scrollbar{width:6px}.section-scroll::-webkit-scrollbar-thumb{background:var(--rail);border-radius:8px}.section-scroll::-webkit-scrollbar-track{background:transparent}
@media(max-width:800px){.top-inner{gap:10px;justify-content:center}.appearance{order:2}nav{order:1;flex-basis:100%}.section-scroll{padding-right:9px}#publications .section-scroll{max-height: min(560px,65svh)}#experience .section-scroll,#talks .section-scroll,#teaching .section-scroll,#blog .section-scroll{max-height: min(700px,80svh)}}

.photo-journal img{display:block;max-width:100%;height:auto;border-radius:8px}.news p{margin:0}.entry h3{margin-top:0}
