:root{color-scheme:light;--bg: #faf8f2;--bg-subtle: #f5f1e8;--surface: #f7f4ec;--surface-2: #efeade;--rule: rgba(24, 21, 15, .13);--rule-soft: rgba(24, 21, 15, .07);--rule-strong: rgba(24, 21, 15, .26);--heading: rgba(12, 14, 18, .9);--fg: #14171c;--fg-2: #262b32;--muted: #545b65;--subtle: #616a75;--accent: #2f74a6;--accent-hover: #23587f;--accent-dim: #46738f;--accent-ink: #ffffff;--accent-soft: rgba(47, 116, 166, .09);--accent-line: rgba(47, 116, 166, .3);--shadow-card: 0 8px 24px -16px rgba(24, 21, 15, .5);--grain: .45;--sans: "Inter Tight", Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, Helvetica, Arial, sans-serif;--mono: "Berkeley Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--measure: 68ch;--page: 1180px;--pad: clamp(1.1rem, 4vw, 2.5rem);--radius: 5px;--radius-lg: 10px;--dur: .14s;--ease: cubic-bezier(.2, .6, .2, 1);--nav-h: 5.5rem}:root[data-theme=dark]{color-scheme:dark;--bg: #09090b;--bg-subtle: #0c0c0e;--surface: #111113;--surface-2: #18181b;--rule: rgba(255, 255, 255, .1);--rule-soft: rgba(255, 255, 255, .05);--rule-strong: rgba(255, 255, 255, .2);--heading: rgba(255, 255, 255, .92);--fg: #fafafa;--fg-2: #e4e4e7;--muted: #bdbdc1;--subtle: #a1a1aa;--accent: #8ab6e6;--accent-hover: #a3c8f0;--accent-dim: #6e9ec6;--accent-ink: #0f0f0f;--accent-soft: rgba(138, 182, 230, .12);--accent-line: rgba(138, 182, 230, .28);--shadow-card: 0 8px 24px -14px rgba(0, 0, 0, .8);--grain: .5}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + 1rem);background:var(--bg)}body{margin:0;background:var(--bg);color:var(--fg-2);font-family:var(--sans);font-size:16.5px;line-height:1.6;letter-spacing:-.005em;-webkit-font-smoothing:antialiased}body:after{content:"";position:fixed;inset:0;pointer-events:none;z-index:9999;opacity:var(--grain);mix-blend-mode:soft-light;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}img{max-width:100%;height:auto;display:block}a{color:inherit}h1,h2,h3{margin:0;font-weight:600;line-height:1.1;letter-spacing:-.03em;color:var(--heading)}p{margin:0 0 1em}::selection{background:var(--accent);color:var(--accent-ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}main:focus{outline:none}.skip{position:fixed;top:.6rem;left:.6rem;z-index:100;padding:.6rem .95rem;border-radius:var(--radius);background:var(--accent);color:var(--accent-ink);font-size:.9rem;font-weight:600;text-decoration:none;transform:translateY(-250%);transition:transform var(--dur) var(--ease)}.skip:focus{transform:none}.wrap{width:100%;max-width:var(--page);margin:0 auto;padding-inline:var(--pad);border-inline:1px solid var(--rule-soft)}.muted{color:var(--muted)}.meta{font-family:var(--mono);font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:var(--subtle)}.nav{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg) 95%,transparent);backdrop-filter:saturate(180%) blur(16px);border-bottom:1px solid var(--rule)}@supports not (backdrop-filter: blur(1px)){.nav{background:var(--bg)}}.nav__bar{display:flex;align-items:center;gap:clamp(.15rem,1vw,.6rem);padding-block:.45rem;flex-wrap:wrap}.nav__mark{font-size:1.02rem;font-weight:600;letter-spacing:-.02em;text-decoration:none;margin-right:auto;color:var(--heading);padding:.4rem .1rem}.nav__links{display:flex;gap:clamp(.1rem,1vw,.5rem);flex-wrap:wrap}.nav__links a{position:relative;display:inline-flex;align-items:center;padding:.5rem .55rem;text-decoration:none;font-size:.9rem;color:var(--subtle);transition:color var(--dur) var(--ease)}.nav__links a:hover{color:var(--fg)}.nav__links a:after{content:"";position:absolute;left:.55rem;right:.55rem;bottom:.15rem;height:1.5px;background:currentColor;opacity:0;transform:scaleX(.35);transition:opacity var(--dur) var(--ease),transform var(--dur) var(--ease)}.nav__links a:hover:after{opacity:.35;transform:none}.nav__links a[aria-current=page]{color:var(--accent)}.nav__links a[aria-current=page]:after{opacity:1;transform:none}.nav__eyebrow{border-top:1px solid var(--rule-soft)}.nav__eyebrow .wrap{border-inline-color:var(--rule-soft)}.nav__eyebrow p{margin:0;padding-block:.45rem;color:var(--accent-dim)}@media(prefers-reduced-motion:no-preference){@supports (animation-timeline: scroll()){.nav:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--accent);opacity:.75;transform-origin:0 50%;animation:read-progress linear;animation-timeline:scroll(root block)}@keyframes read-progress{0%{transform:scaleX(0)}to{transform:scaleX(1)}}}}.theme-toggle{background:none;border:1px solid var(--rule);border-radius:var(--radius);color:var(--subtle);cursor:pointer;font:inherit;font-size:.9rem;line-height:1;padding:.35rem .5rem;min-width:2.3rem;min-height:2.3rem;display:inline-flex;align-items:center;justify-content:center;transition:border-color var(--dur) var(--ease),color var(--dur) var(--ease),background var(--dur) var(--ease)}.theme-toggle:hover{border-color:var(--rule-strong);color:var(--fg);background:var(--surface)}.theme-toggle:active{background:var(--surface-2)}.theme-toggle .moon{display:none}:root[data-theme=dark] .theme-toggle .moon{display:inline}:root[data-theme=dark] .theme-toggle .sun{display:none}@media(pointer:coarse){.nav__links a{padding-block:.65rem}.theme-toggle{min-width:2.75rem;min-height:2.75rem}}@media(max-width:660px){:root{--nav-h: 1rem}.nav{position:relative}.nav__bar{row-gap:.1rem}.nav__mark{order:1}.theme-toggle{order:2}.nav__links{order:3;flex-basis:100%;margin-inline:-.55rem}}main{padding-bottom:0}.page-head{padding:clamp(3.25rem,8vw,5.5rem) 0 2.5rem}.page-head h1{font-size:clamp(2.5rem,6.5vw,4rem)}.page-head p{max-width:var(--measure);color:var(--muted);margin-top:1rem;font-size:1.03rem}section{padding-top:clamp(2.75rem,6vw,4rem);padding-bottom:clamp(2.75rem,6vw,4rem)}section,.page-head{border-top:1px solid var(--rule-soft);margin-inline:calc(var(--pad) * -1);padding-inline:var(--pad)}.page-head:first-child,.hero{border-top:0}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1.5rem}.section-head h2{font-size:clamp(1.3rem,2.6vw,1.65rem)}.section-head a{font-size:.88rem;color:var(--accent);text-decoration:none;padding:.3rem 0;display:inline-flex;align-items:center;gap:.3rem;transition:color var(--dur) var(--ease)}.section-head a:hover{color:var(--accent-hover)}.hero{display:grid;gap:clamp(1.75rem,5vw,3.5rem);padding:clamp(3rem,8vw,6rem) 0 clamp(3rem,7vw,5rem);margin-inline:calc(var(--pad) * -1);padding-inline:var(--pad)}@media(min-width:800px){.hero{grid-template-columns:1.6fr .9fr;align-items:center}.hero--solo{grid-template-columns:1fr}}.hero h1{font-size:clamp(2.8rem,7vw,4.6rem)}.hero__sub{font-size:clamp(1.1rem,2.4vw,1.45rem);margin-top:1.1rem;color:var(--muted);letter-spacing:-.02em;max-width:30ch}.hero__intro{color:var(--subtle);max-width:var(--measure);margin-top:1rem}.hero__photo{border:1px solid var(--rule);border-radius:var(--radius-lg);width:100%;aspect-ratio:4 / 5;object-fit:cover;object-position:50% 25%}.actions{display:flex;flex-wrap:wrap;gap:.55rem;margin-top:1.9rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;text-decoration:none;font-size:.88rem;min-height:2.5rem;padding:.55rem 1.05rem;border:1px solid var(--rule);border-radius:var(--radius);background:var(--surface);color:var(--fg-2);transition:border-color var(--dur) var(--ease),color var(--dur) var(--ease),background var(--dur) var(--ease),transform var(--dur) var(--ease)}.btn:hover{border-color:var(--rule-strong);background:var(--surface-2);color:var(--fg);transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn--solid{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:600}.btn--solid:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:var(--accent-ink)}.rows{border-top:1px solid var(--rule-soft)}.row{border-bottom:1px solid var(--rule-soft);padding:1.2rem 0}.row__grid{display:grid;gap:.25rem 1.5rem;grid-template-columns:1fr}@media(min-width:720px){.row__grid{grid-template-columns:4.5rem 13.5rem 1fr;align-items:baseline}.row__grid>.meta{white-space:nowrap}.rows:has(>.row){position:relative}.rows:has(>.row):before{content:"";position:absolute;left:3.6rem;top:0;bottom:0;width:1px;background:var(--rule-soft)}.rows>.row{position:relative}.rows>.row:before{content:"";position:absolute;left:calc(3.6rem - 2.5px);top:1.62rem;width:6px;height:6px;border-radius:50%;background:var(--accent-dim);opacity:.75;transition:opacity var(--dur) var(--ease),background var(--dur) var(--ease)}.rows>.row:hover:before{opacity:1;background:var(--accent)}}.row__num{font-family:var(--mono);font-size:.72rem;color:var(--accent-dim);letter-spacing:.1em}.row__title{font-size:1.05rem;font-weight:600;letter-spacing:-.02em}.row__title a{text-decoration:none;transition:color var(--dur) var(--ease)}.row__title a:hover{color:var(--accent)}.row__desc{color:var(--muted);margin:.3rem 0 0;max-width:var(--measure);font-size:.97rem}.year{position:sticky;top:var(--nav-h);z-index:5;font-family:var(--mono);font-size:.72rem;letter-spacing:.2em;color:var(--accent-dim);background:var(--bg);padding-block:.55rem .9rem;margin-inline:calc(var(--pad) * -1);padding-inline:var(--pad)}.expand{margin-top:.7rem}.expand>summary{cursor:pointer;list-style:none;color:var(--accent);font-size:.8rem;display:inline-flex;align-items:center;gap:.35rem;border:1px solid var(--rule);border-radius:var(--radius);min-height:2.1rem;padding:.35rem .75rem;background:var(--surface);user-select:none;transition:border-color var(--dur) var(--ease),background var(--dur) var(--ease),color var(--dur) var(--ease)}.expand>summary:hover{border-color:var(--accent-line);background:var(--accent-soft);color:var(--accent-hover)}.expand>summary::-webkit-details-marker{display:none}.expand>summary:after{content:"↓";font-size:.85em;transition:transform .18s var(--ease)}.expand[open]>summary:after{transform:rotate(180deg)}.expand__body{max-width:var(--measure);color:var(--muted);font-size:.97rem;border-left:1px solid var(--accent-line);padding:1rem 0 .2rem 1rem;margin-top:.9rem}.expand__body p{margin:0 0 .9em}.expand__body p:last-child{margin-bottom:0}.expand__body img{margin:1rem 0;border:1px solid var(--rule);border-radius:var(--radius)}.expand__body a{color:var(--accent)}.grid{display:grid;gap:1.15rem;align-items:stretch;grid-template-columns:repeat(auto-fill,minmax(min(100%,290px),1fr))}.card{display:flex;flex-direction:column;background:var(--bg-subtle);border:1px solid var(--rule-soft);border-radius:var(--radius-lg);overflow:hidden;padding:1.25rem 1.3rem;text-decoration:none;transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease),transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}.card:hover{background:var(--surface);border-color:var(--rule);transform:translateY(-2px);box-shadow:var(--shadow-card)}.card:active{transform:translateY(0)}.card h3{font-size:1.02rem;margin:.4rem 0 .45rem}.card p{color:var(--muted);font-size:.93rem;margin:0}.card:not(:has(.tags)) p{margin-bottom:auto}.card__img{margin:-1.25rem -1.3rem 1rem;border-bottom:1px solid var(--rule-soft);width:calc(100% + 2.6rem);max-width:none;aspect-ratio:16 / 10;object-fit:cover}.tags{font-family:var(--mono);font-size:.68rem;letter-spacing:.08em;color:var(--accent-dim);margin-top:.9rem}.card .tags{margin-bottom:auto}.card__cta{color:var(--accent);font-size:.85rem;margin-top:.9rem;display:inline-flex;align-items:center;gap:.3rem;min-height:2rem;text-decoration:none;transition:color var(--dur) var(--ease)}.card__cta:hover{color:var(--accent-hover)}.card--link{position:relative}.card--link .card__cta:after{content:"";position:absolute;inset:0}.card--link .expand{position:relative;z-index:1}.award{display:grid;gap:.2rem 1.5rem;padding:1.2rem 1rem;border-bottom:1px solid var(--rule-soft);border-left:2px solid transparent;border-radius:0 var(--radius) var(--radius) 0;transition:background var(--dur) var(--ease)}@media(min-width:720px){.award{grid-template-columns:9rem 1fr;align-items:baseline}}.award:hover{background:var(--surface)}.award--featured{border-left-color:var(--accent);background:var(--accent-soft)}.award--featured:hover{background:color-mix(in srgb,var(--accent) 14%,transparent)}.award h3{font-size:1.02rem}.award__org{color:var(--muted);font-size:.93rem}.award__rank{display:inline-block;font-family:var(--mono);font-size:.68rem;color:var(--accent);border:1px solid var(--accent-line);border-radius:var(--radius);padding:.08rem .42rem;margin-left:.5rem;vertical-align:.12em;letter-spacing:.06em}.news{border-top:1px solid var(--rule-soft)}.news__item{border-bottom:1px solid var(--rule-soft);padding:1.6rem 0}.news__item h3{font-size:1.2rem;margin-bottom:.4rem}.news__item h3 a{text-decoration:none;transition:color var(--dur) var(--ease)}.news__item h3 a:hover{color:var(--accent)}.news__item>img{margin-top:1rem;border:1px solid var(--rule);border-radius:var(--radius);max-width:520px}.linklist{display:flex;flex-wrap:wrap;gap:.35rem 1.25rem;margin-top:.8rem;font-size:.88rem}.linklist a{color:var(--accent);display:inline-flex;align-items:center;gap:.25rem;min-height:2rem;transition:color var(--dur) var(--ease)}.linklist a:hover{color:var(--accent-hover)}.course{padding:.85rem 0;border-bottom:1px solid var(--rule-soft)}.course__head{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.course__name{font-size:1rem;font-weight:500;color:var(--heading)}.course__note{color:var(--muted);font-size:.92rem;margin-top:.2rem;max-width:var(--measure)}.course__level{font-family:var(--mono);font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-dim);white-space:nowrap;border:1px solid var(--rule);border-radius:var(--radius);padding:.12rem .45rem}.prose{max-width:var(--measure);font-size:1.03rem;color:var(--muted)}.prose h2{font-size:1.3rem;margin:2.6rem 0 .8rem}.prose h2:before{content:"";display:block;width:1.8rem;height:1px;background:var(--accent);margin-bottom:.9rem}.prose p{margin:0 0 1.15em}.prose a{color:var(--accent)}.prose ul,.prose ol{padding-left:1.2rem;margin:0 0 1.15em}.prose li{margin-bottom:.35em}.prose strong{font-weight:600;color:var(--fg)}.prose em{font-style:italic}.prose img{margin:1.8rem 0;border:1px solid var(--rule);border-radius:var(--radius)}.prose blockquote{margin:1.8rem 0;padding-left:1rem;border-left:1px solid var(--accent-line);color:var(--subtle)}.prose code{font-family:var(--mono);font-size:.87em;background:var(--surface-2);padding:.12em .38em;border-radius:3px;color:var(--accent)}.work-head{padding:clamp(3.5rem,9vw,5.5rem) 0 2rem}.work-head h1{font-size:clamp(2.1rem,5.5vw,3.2rem);margin-top:.7rem}.work-head .tagline{font-size:1.12rem;color:var(--muted);max-width:var(--measure);margin-top:1rem;letter-spacing:-.015em}.hero-img{margin:2rem 0;border:1px solid var(--rule);border-radius:var(--radius-lg)}.about{display:grid;gap:clamp(1.75rem,5vw,3.5rem)}@media(min-width:820px){.about{grid-template-columns:1.6fr 1fr;align-items:start}}.about__body{max-width:var(--measure);font-size:1.03rem;color:var(--muted)}.about__body a{color:var(--accent)}.about__side{border:1px solid var(--rule-soft);border-radius:var(--radius-lg);padding:1.3rem;background:var(--surface)}.about__side h2{font-size:1.02rem;margin-bottom:.6rem}.about__side ul{list-style:none;padding:0;margin:.7rem 0 0}.about__side li{border-top:1px solid var(--rule-soft);font-size:.93rem;padding:.15rem 0}.about__side a{color:var(--accent);text-decoration:none;display:flex;align-items:center;min-height:2.4rem;transition:color var(--dur) var(--ease)}.about__side a:hover{color:var(--accent-hover)}.about__side li.muted{padding:.55rem 0}.footer{border-top:1px solid var(--rule);padding:3rem 0 4rem;color:var(--subtle);font-size:.87rem}.footer__row{display:flex;flex-wrap:wrap;gap:1rem 1.5rem;justify-content:space-between}.footer a{color:var(--subtle);text-decoration:none;border-bottom:1px solid var(--rule);transition:color var(--dur) var(--ease),border-color var(--dur) var(--ease)}.footer a:hover{color:var(--accent);border-color:var(--accent-line)}.empty{border:1px dashed var(--rule);border-radius:var(--radius-lg);padding:1.6rem;color:var(--subtle);font-size:.93rem}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.card:hover,.btn:hover{transform:none}}
