:root{--bg: #ffffff;--surface: #f9f9f9;--ink: #0a0a0a;--ink-2: #3a3a3a;--ink-3: #6a6a6a;--ink-4: #b5b4af;--rule: #1a1a1a;--rule-soft: #e8e8e8;--accent: #cc0000;--accent-ink: #ffffff;--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--sans: "Space Grotesk", "Helvetica Neue", Arial, sans-serif;--bracket: 14px;--gutter: clamp(24px, 4vw, 56px)}[data-font=ibm]{--mono: "IBM Plex Mono", ui-monospace, monospace}[data-font=geist]{--mono: "Geist Mono", ui-monospace, monospace}[data-font=jet]{--mono: "JetBrains Mono", ui-monospace, monospace}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-feature-settings:"ss01","ss02"}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}mark{background:none;color:var(--accent);font-style:inherit}.mono,.meta,.id,.ts,.kbd{font-family:var(--mono);font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3)}.meta strong,.mono.strong{color:var(--ink);font-weight:500}.meta .sep{color:var(--ink-4);margin:0 .5ch}.topbar{position:sticky;top:0;z-index:10;background:var(--bg);border-bottom:1px solid var(--rule);padding:14px var(--gutter);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px}.topbar .brand{display:flex;align-items:center;gap:10px;font-family:var(--mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase}.topbar .brand .mark{width:14px;height:14px;background:var(--ink);position:relative}.topbar .brand .mark:after{content:"";position:absolute;inset:3px;background:var(--bg)}.topbar nav{display:flex;gap:28px;font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.topbar nav a{color:var(--ink-3);position:relative;padding:4px 0}.topbar nav a:hover{color:var(--ink)}.topbar nav a.active{color:var(--ink)}.topbar nav a.active:after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:1.5px;background:var(--accent)}.topbar .status{justify-self:end;display:flex;align-items:center;gap:10px;font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}.topbar .status .dot{width:8px;height:8px;background:var(--accent);animation:pulse 2.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}main{padding:0 var(--gutter) 120px}.masthead{display:grid;grid-template-columns:1fr auto;align-items:end;gap:40px;padding:64px 0 28px;border-bottom:1px solid var(--rule)}.masthead h1{font-family:var(--sans);font-weight:500;font-size:clamp(40px,6vw,84px);line-height:.95;letter-spacing:-.03em;margin:0}.masthead .lede{max-width:42ch;color:var(--ink-2);font-size:15px;line-height:1.55}.masthead .tally{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);text-align:right;line-height:1.8}.masthead .tally b{display:block;font-weight:500;color:var(--ink);font-size:22px;letter-spacing:0}section.panel{padding:64px var(--gutter);border-bottom:1px solid var(--rule)}.section-head{display:flex;align-items:baseline;gap:24px;margin-bottom:40px}.section-head h2{font-family:var(--sans);font-weight:500;font-size:clamp(24px,3vw,36px);letter-spacing:-.025em;margin:0}.section-head .idx{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4)}.content-body{max-width:800px;margin:0 auto;padding:48px 0 80px}.content-body h2{font-family:var(--sans);font-weight:500;font-size:24px;letter-spacing:-.01em;margin-top:2em;padding-top:1em;border-top:1px solid var(--rule-soft)}.content-body h3{font-family:var(--sans);font-weight:500;font-size:18px;letter-spacing:-.01em;margin-top:1.5em}.content-body p{font-size:16px;line-height:1.65;color:var(--ink-2);margin:0 0 1em}.content-body ul,.content-body ol{margin:0 0 1em;padding-left:24px;color:var(--ink-2)}.content-body li{margin-bottom:.5em}.content-body a{border-bottom:1px solid var(--accent)}.content-body a:hover{background:var(--accent);color:var(--accent-ink)}.content-body blockquote{margin:1.5em 0;padding:18px 24px;border-left:2px solid var(--accent);background:var(--surface);font-size:16px;line-height:1.5}.content-body code{font-family:var(--mono);font-size:.92em;padding:2px 6px;background:var(--surface);border:1px solid var(--rule-soft)}.content-body pre{background:var(--surface);border:1px solid var(--rule-soft);padding:18px 20px;overflow-x:auto}.content-body pre code{padding:0;border:0;background:none}.cv-list{list-style:none;margin:0;padding:0}.cv-item{display:grid;grid-template-columns:200px 1fr;gap:24px;padding:20px 0;border-bottom:1px solid var(--rule-soft)}.cv-item:first-child{border-top:1px solid var(--rule-soft)}.cv-item .period{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);line-height:1.6}.cv-item .details h3{font-family:var(--sans);font-weight:500;font-size:18px;letter-spacing:-.01em;margin:0 0 6px}.cv-item .details p{font-size:14px;color:var(--ink-2);line-height:1.55;margin:0}.cv-item .details .meta{font-family:var(--mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);margin-top:8px}.pub-list{list-style:none;margin:0;padding:0}.pub-item{padding:20px 0;border-bottom:1px solid var(--rule-soft)}.pub-item:first-child{border-top:1px solid var(--rule-soft)}.pub-item .title{font-family:var(--sans);font-weight:500;font-size:17px;letter-spacing:-.01em;line-height:1.35;margin:0 0 8px}.pub-item .authors{font-size:14px;color:var(--ink-2);margin:0 0 6px}.pub-item .venue{font-family:var(--mono);font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);line-height:1.6}.pub-item .venue a{border-bottom:1px solid var(--rule-soft)}.pub-item .venue a:hover{border-color:var(--accent)}.projects-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--rule-soft);border:1px solid var(--rule-soft)}.project-card{background:var(--bg);padding:28px 24px 24px;display:flex;flex-direction:column;gap:10px;transition:background .12s}.project-card:hover{background:var(--surface)}.project-card .card-period{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-4)}.project-card h3{font-family:var(--sans);font-weight:500;font-size:18px;letter-spacing:-.01em;margin:0;line-height:1.25}.project-card .desc{font-size:14px;color:var(--ink-2);line-height:1.5;flex:1;margin:0}.project-card .card-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.project-card .card-meta span{font-family:var(--mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);padding:2px 7px;border:1px solid var(--rule-soft)}.teach-list{list-style:none;margin:0;padding:0}.teach-item{display:grid;grid-template-columns:120px 1fr;gap:20px;padding:16px 0;border-bottom:1px solid var(--rule-soft)}.teach-item:first-child{border-top:1px solid var(--rule-soft)}.teach-item .code{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}.teach-item .details h4{font-family:var(--sans);font-weight:500;font-size:16px;letter-spacing:-.01em;margin:0 0 4px}.teach-item .details p{font-size:14px;color:var(--ink-2);line-height:1.5;margin:0}.supervision-table{width:100%;border-collapse:collapse;font-size:14px}.supervision-table th{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);text-align:left;padding:12px 16px;border-bottom:1px solid var(--rule)}.supervision-table td{padding:14px 16px;border-bottom:1px solid var(--rule-soft);color:var(--ink-2);vertical-align:top}.supervision-table td:first-child{font-family:var(--sans);font-weight:500;color:var(--ink)}.supervision-table tr:hover td{background:var(--surface)}.timeline-year{position:relative;margin:48px 0 32px;padding-bottom:16px;border-bottom:2px solid var(--ink)}.timeline-year h2{font-family:var(--sans);font-weight:500;font-size:clamp(28px,4vw,48px);letter-spacing:-.03em;margin:0;display:inline-block}.timeline-year .count{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin-left:16px}.timeline-year:after{content:"";position:absolute;bottom:-6px;left:0;width:12px;height:12px;background:var(--ink-3)}.pub-card{padding:24px 0;border-bottom:1px solid var(--rule-soft)}.pub-card:first-of-type{border-top:1px solid var(--rule-soft)}.pub-card h3,.content-body h3{font-family:var(--sans);font-weight:500;font-size:18px;letter-spacing:-.01em;line-height:1.35;margin:24px 0 10px;padding-top:24px;border-top:1px solid var(--rule-soft)}.content-body h3:first-of-type{border-top:0}.pub-card .meta,.content-body p strong:first-child+br+em,.content-body p:has(strong:contains("Authors:")){font-family:var(--mono);font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);line-height:1.7}.pub-card .doi,.content-body p a[href^="https://doi.org"]{margin-top:8px;font-family:var(--mono);font-size:11px}.content-body p a[href^="https://doi.org"]{color:var(--accent);border-bottom:1px solid var(--accent)}.content-body p a[href^="https://doi.org"]:hover{background:var(--accent);color:var(--accent-ink)}.section-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--rule-soft);border:1px solid var(--rule-soft);margin:32px 0 48px}.section-stats .stat{background:var(--bg);padding:20px 18px;text-align:center}.section-stats .stat b{display:block;font-family:var(--sans);font-size:28px;font-weight:500;color:var(--ink);margin-bottom:6px}.section-stats .stat span{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}footer{padding:60px var(--gutter) 40px;border-top:1px solid var(--rule);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px;font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}footer .center{display:flex;gap:18px}footer .right{text-align:right}.hero-academic{min-height:calc(100vh - 57px);display:grid;grid-template-rows:1fr auto;padding:var(--gutter);border-bottom:1px solid var(--rule)}.hero-body{display:grid;grid-template-columns:1fr 1fr;align-items:end;gap:64px;padding-bottom:64px}.hero-name{font-family:var(--sans);font-weight:500;font-size:clamp(48px,8vw,112px);line-height:.92;letter-spacing:-.04em;margin:0 0 24px}.hero-name .ln{display:block;color:var(--ink-3);font-weight:400}.hero-name .fn{display:block}.hero-role{font-family:var(--sans);font-size:clamp(16px,1.8vw,20px);font-weight:400;color:var(--ink-2);line-height:1.45;max-width:40ch;margin:0 0 28px}.hero-links{display:flex;flex-wrap:wrap;gap:10px}.hero-links a{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:8px 14px;border:1px solid var(--rule);color:var(--ink-3);transition:color .12s,border-color .12s,background .12s}.hero-links a:hover{color:var(--ink);border-color:var(--ink)}.hero-links a.primary{background:var(--ink);color:var(--bg);border-color:var(--ink)}.hero-links a.primary:hover{background:var(--accent);border-color:var(--accent)}.hero-right{align-self:end;display:flex;flex-direction:column;align-items:flex-end;gap:32px}.hero-photo{width:200px;height:200px;object-fit:cover;border:1px solid var(--rule)}.hero-contact{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);text-align:right;line-height:2}.hero-contact a{border-bottom:1px solid var(--rule-soft)}.hero-contact a:hover{border-color:var(--accent)}.hero-strip{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--rule-soft);padding-top:20px}.hero-strip .cell{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);padding:0 24px 0 0;line-height:1.9}.hero-strip .cell b{display:block;color:var(--ink);font-size:20px;letter-spacing:-.02em;font-family:var(--sans);font-weight:500}.pub-page h2{position:relative;margin:48px 0 24px;padding-bottom:12px;border-bottom:2px solid var(--ink);font-family:var(--sans);font-weight:500;font-size:clamp(28px,4vw,48px);letter-spacing:-.03em}.pub-page h2:after{content:"";position:absolute;bottom:-6px;left:0;width:12px;height:12px;background:var(--ink-3)}.pub-page h3{font-family:var(--sans);font-weight:500;font-size:18px;letter-spacing:-.01em;line-height:1.35;margin:0 0 8px;padding:24px 0 0;border-top:1px solid var(--rule-soft)}.pub-page h3:first-of-type{border-top:0}.pub-page h3+p,.pub-page h3+p+p,.pub-page h3+p+p+p{font-size:14px;line-height:1.6;color:var(--ink-2);margin:0 0 6px}.pub-page h3+p strong,.pub-page h3+p+p strong,.pub-page h3+p+p+p strong{color:var(--ink);font-weight:500}.pub-page h3+p a[href^="https://doi.org"],.pub-page h3+p+p a[href^="https://doi.org"],.pub-page h3+p+p+p a[href^="https://doi.org"]{font-family:var(--mono);font-size:11px;color:var(--accent);border-bottom:1px solid var(--accent)}.pub-page h3+p a[href^="https://doi.org"]:hover,.pub-page h3+p+p a[href^="https://doi.org"]:hover,.pub-page h3+p+p+p a[href^="https://doi.org"]:hover{background:var(--accent);color:var(--accent-ink)}.pub-page hr{border:0;margin:8px 0}@media(max-width:900px){.hero-body{grid-template-columns:1fr}.hero-right{align-items:flex-start}.hero-photo{width:160px;height:160px}.hero-contact{text-align:left}.hero-strip{grid-template-columns:repeat(2,1fr);gap:16px}.projects-grid{grid-template-columns:1fr}.cv-item{grid-template-columns:1fr;gap:8px}.teach-item{grid-template-columns:1fr;gap:4px}.supervision-table{font-size:12px}.supervision-table th,.supervision-table td{padding:8px 10px}.masthead{grid-template-columns:1fr}.masthead .tally{text-align:left}.topbar{grid-template-columns:1fr auto}.topbar .status{display:none}}
