@font-face{font-family:TeX Gyre Heros;src:url(/fonts/texgyreheros-regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:TeX Gyre Heros;src:url(/fonts/texgyreheros-italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:TeX Gyre Heros;src:url(/fonts/texgyreheros-bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:TeX Gyre Heros;src:url(/fonts/texgyreheros-bolditalic.woff2)format("woff2");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:TeX Gyre Pagella;src:url(/fonts/texgyrepagella-regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:TeX Gyre Pagella;src:url(/fonts/texgyrepagella-italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:TeX Gyre Pagella;src:url(/fonts/texgyrepagella-bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:TeX Gyre Pagella;src:url(/fonts/texgyrepagella-bolditalic.woff2)format("woff2");font-weight:700;font-style:italic;font-display:swap}:root{--font-serif:"TeX Gyre Pagella", "Palatino Linotype", Palatino, serif;--font-body:"TeX Gyre Heros", "Helvetica Neue", Helvetica, Arial, sans-serif;--font-head:var(--font-body);--font-mono:var(--font-body);--measure:46rem;--prose-measure:40rem;--gutter:1rem;--bg:#fff;--surface:#f4f4f4;--ink:#1a1a1a;--muted:#666;--rule:#ddd;--link:#0645ad;--link-hover:#0b0080;--accent:var(--link);--ap-bg:var(--bg);--ap-substrate:#c9c9c9;--ap-link:#111;--ap-catalyst:var(--accent)}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);text-rendering:optimizelegibility;margin:0;font-size:1.0625rem;line-height:1.6}img,iframe,canvas,video{max-width:100%;display:block}a{color:var(--link);text-underline-offset:.18em;text-decoration-thickness:1px}a:hover{color:var(--link-hover)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}h1,h2,h3,h4{font-family:var(--font-head);text-wrap:balance;margin:2.2em 0 .6em;line-height:1.2}h1{letter-spacing:-.02em;margin-top:0;font-size:2rem}h2{text-transform:uppercase;letter-spacing:.08em;font-size:1.0625rem;font-weight:700}h3{font-size:1rem;font-weight:700}.shell{flex-direction:column;min-height:100vh;display:flex}.content{width:100%;max-width:calc(var(--measure) + 2 * var(--gutter));padding:2.5rem var(--gutter) 4rem;flex:1;margin:0 auto}.masthead{position:relative}.masthead-inner{max-width:calc(var(--measure) + 2 * var(--gutter));padding:0 var(--gutter);margin:0 auto}.sim-wrap{position:relative}.sim{touch-action:manipulation;width:100%;height:100%;display:block}.sim-caption{color:var(--muted);margin:0;font-size:.75rem;line-height:1.4}.sim-caption .key{vertical-align:middle;margin:0 .15rem 0 .5rem;display:inline-block}.key-s{background:var(--ap-substrate);border-radius:50%;width:5px;height:5px}.key-l{background:var(--ap-link);width:7px;height:7px}.key-k{background:var(--ap-catalyst);border-radius:50%;width:9px;height:9px}.site-name{color:inherit;font-family:var(--font-head);text-decoration:none}.tagline{color:var(--muted);margin:0}.site-nav ul{flex-wrap:wrap;gap:.25rem 1.25rem;margin:0;padding:0;list-style:none;display:flex}.site-nav a{text-decoration:none}.site-nav a[aria-current=page]{color:var(--ink)}.site-footer{color:var(--muted);font-size:.875rem}.footer-inner{max-width:calc(var(--measure) + 2 * var(--gutter));padding:2rem var(--gutter);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.75rem 2rem;margin:0 auto;display:flex}.footer-inner ul{flex-wrap:wrap;gap:.25rem 1.25rem;margin:0;padding:0;list-style:none;display:flex}.footer-inner p{margin:0}.site-footer a{color:inherit}.footer-inner ul a{text-transform:uppercase;letter-spacing:.1em;font-size:.6875rem;font-weight:700;text-decoration:none}.footer-inner ul a:hover{color:var(--ink)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.prose{max-width:var(--prose-measure)}.prose>:first-child{margin-top:0}.prose p,.prose li,.prose blockquote{font-family:var(--font-serif);font-size:1.125rem;line-height:1.6}.prose p,.prose ul,.prose ol{margin:0 0 1em}.prose li+li{margin-top:.35em}.prose figure{margin:2rem 0}.prose figure img{margin:0 auto}.prose figcaption{color:var(--muted);margin-top:.6rem;font-size:.875rem;line-height:1.5}.prose figcaption strong{color:var(--ink);font-weight:600}.prose iframe{aspect-ratio:16/9;border:0;width:100%}.prose.with-figures{max-width:none}.prose.with-figures:after{content:"";clear:both;display:block}@media (width>=48rem){.prose.with-figures figure{float:right;clear:right;width:42%;margin:.35rem 0 1.5rem 2rem}}.lede{color:var(--muted);margin:-.25rem 0 2rem;font-size:1.15rem}.eyebrow{letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin:0 0 .5rem;font-size:.75rem;font-weight:700}.intro{grid-template-columns:auto 1fr;align-items:start;gap:1.75rem;margin-bottom:2.5rem;display:grid}.home-photo{width:var(--photo-size,9rem);height:var(--photo-size,9rem);object-fit:cover;--cut:2px;clip-path:polygon(var(--cut) 0, calc(100% - var(--cut)) 0, 100% var(--cut), 100% calc(100% - var(--cut)), calc(100% - var(--cut)) 100%, var(--cut) 100%, 0 calc(100% - var(--cut)), 0 var(--cut))}.roles{margin:0;padding:0;font-size:.9375rem;line-height:1.5;list-style:none}.roles li+li{margin-top:.2rem}.roles a{color:var(--muted);text-decoration:none}.roles a:hover{color:var(--link-hover);text-decoration:underline}.contact{margin-top:2rem}.recent .pub-list{margin-top:1rem}.more{text-transform:uppercase;letter-spacing:.08em;margin-top:1.25rem;font-size:.875rem;font-weight:700}.more a{text-decoration:none}@media (width<=34rem){.intro{grid-template-columns:1fr;gap:1rem}.home-photo{width:7rem;height:7rem}}.jump{flex-wrap:wrap;gap:.5rem;margin:0 0 2.5rem;padding:0;list-style:none;display:flex}.jump a{border:1px solid var(--rule);color:var(--ink);padding:.3rem .75rem;font-size:.875rem;text-decoration:none;display:inline-block}.jump a:hover{border-color:var(--accent);color:var(--accent)}.jump .count{color:var(--muted);font-variant-numeric:tabular-nums}.year-group,.recent{max-width:var(--prose-measure)}.year-group{grid-template-columns:4.5rem 1fr;gap:0 1.5rem;padding:1rem 0;display:grid}.year-label{font-variant-numeric:tabular-nums;color:var(--muted);padding-top:.15rem;font-size:.875rem;font-weight:700}.pub-list{margin:0;padding:0;list-style:none}.pub+.pub{margin-top:1.1rem}.pub-title{font-weight:700;line-height:1.4}.pub-title a{color:var(--ink);text-decoration-color:var(--rule)}.pub-title a:hover{color:var(--link-hover);text-decoration-color:currentColor}.pub-authors,.pub-venue{color:var(--muted);font-size:.9375rem;line-height:1.5}.pub-authors .me{color:var(--ink);font-weight:700}.pub-extra{margin-left:.4rem;font-size:.75rem;font-weight:700}.badge{letter-spacing:.08em;text-transform:uppercase;background:var(--surface);color:var(--muted);vertical-align:.1em;padding:.1rem .45rem;font-size:.625rem;font-weight:700;display:inline-block}@media (width<=34rem){.year-group{grid-template-columns:1fr}.year-label{margin-bottom:.5rem}}.cards{grid-template-columns:repeat(auto-fill,minmax(13rem,1fr));gap:1.25rem;margin:1.5rem 0 2.5rem;padding:0;list-style:none;display:grid}.card a{height:100%;color:var(--ink);border:1px solid var(--rule);background:var(--bg);text-decoration:none;transition:border-color .15s,transform .15s;display:block;overflow:hidden}.card a:hover{border-color:var(--accent);transform:translateY(-2px)}.card img{aspect-ratio:4/3;object-fit:cover;background:var(--surface);filter:grayscale()contrast(1.05);width:100%;transition:filter .25s}.card a:hover img,.card a:focus-visible img{filter:none}.card span{font-family:var(--font-head);padding:.75rem .9rem .9rem;font-weight:700;line-height:1.3;display:block}.courses{margin:0 0 1rem;padding:0;list-style:none}.courses li{grid-template-columns:8.5rem 1fr auto;align-items:baseline;gap:1rem;padding:.4rem 0;display:grid}.courses .code{color:var(--accent);font-variant-numeric:tabular-nums;font-size:.875rem;font-weight:700}.courses .meta{color:var(--muted);white-space:nowrap;font-size:.875rem}@media (width<=34rem){.courses li{grid-template-columns:1fr auto;gap:0 1rem}.courses .code{grid-column:1/-1}}.people{margin:0;padding:0;list-style:none}.person{padding:.75rem 0}.person-head{flex-wrap:wrap;align-items:baseline;gap:.25rem .6rem;display:flex}.person-name{font-size:.9375rem;font-weight:700}.person-dates{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;font-size:.8125rem}.person-title{margin-top:.15rem;font-style:italic}.person-note{color:var(--muted);font-size:.875rem}.people.compact .person{padding:.55rem 0}.degree-group{grid-template-columns:1.6rem 1fr;gap:0 1.1rem;margin:0 0 1.25rem;display:grid}.degree-label{background:var(--bar,var(--accent));color:#fff;justify-content:center;align-items:center;display:flex}[data-programme=phd]{--bar:#111}[data-programme=msc-mai]{--bar:#1f3a5f}[data-programme=honours]{--bar:#2f5d3a}[data-programme=other]{--bar:#8a6a1f}.degree-group .badge{background:color-mix(in srgb, var(--bar,var(--accent)) 12%, transparent);color:var(--bar,var(--accent))}.degree-label span{writing-mode:vertical-rl;white-space:nowrap;letter-spacing:.14em;text-transform:uppercase;padding:.75rem 0;font-size:.6875rem;font-weight:700;transform:rotate(180deg)}.people.compact .person-title{font-size:.9375rem}:root{--measure:46rem;--bg:#fff;--surface:#f2f2f4;--ink:#111;--muted:#5f6068;--rule:#e4e4e8;--link:#8c1c2c;--link-hover:#5a0f1a;--accent:#8c1c2c;--ap-bg:#f6f6f8;--ap-substrate:#c4c5cc;--ap-link:#1b1b1f;--ap-catalyst:#8c1c2c}.masthead{background:var(--ap-bg);overflow:hidden}.sim-wrap{position:absolute;inset:0}.sim-caption{z-index:2;text-align:right;background:#f6f6f8d9;max-width:calc(50vw - 14.5rem);padding:.2rem .4rem;font-size:.6875rem;line-height:1.45;position:absolute;bottom:.5rem;right:1rem}@media (width>=53.01rem) and (width<=64rem){.sim-caption{max-width:22rem;top:.6rem;bottom:auto}}.masthead:after{content:"";pointer-events:none;background:linear-gradient(90deg,#f6f6f8f7 0%,#f6f6f8d9 38%,#f6f6f800 62%);position:absolute;inset:0}.masthead-inner{z-index:1;pointer-events:none;padding-top:3.25rem;padding-bottom:.6rem;position:relative}.masthead-inner a{pointer-events:auto}.site-name{text-transform:uppercase;letter-spacing:.02em;font-size:clamp(1.5rem,4.5vw,2.1rem);font-weight:700;line-height:1}.tagline{color:var(--muted);margin-top:.6rem}.name-row{display:inline-block;position:relative}.nz{z-index:-1;fill:#cfd0d6;width:auto;height:6.75rem;margin-left:.9rem;position:absolute;top:-.9rem;left:100%}.site-nav{flex-wrap:wrap;gap:.6rem 3.5rem;margin-top:4.4rem;display:flex}.site-nav ul{gap:.6rem 2.25rem}.site-nav a{text-transform:uppercase;letter-spacing:.1em;color:var(--muted);background:#f6f6f8cc;font-size:.75rem;font-weight:700}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--ink)}.site-nav a[aria-current=page]{box-shadow:inset 0 -2px 0 var(--accent)}.site-nav .highlight{color:var(--accent)}@media (width<=53rem){.masthead{flex-direction:column;display:flex}.masthead:after{display:none}.masthead-inner{padding-top:2rem;padding-bottom:1.25rem}.nz{height:5rem;margin-left:.6rem;top:-.6rem}.sim-wrap{border-top:1px solid var(--rule);order:2;position:static}.sim{height:9rem}.sim-caption{white-space:normal;padding:.5rem var(--gutter) .75rem;background:0 0;position:static}.site-nav a{background:0 0}.site-nav,.site-nav ul{gap:.6rem 1.25rem}}h1{letter-spacing:-.03em;font-size:2.25rem;font-weight:700}h2{color:var(--ink);margin-top:3rem}.year-label{color:var(--accent)}.card a{background:var(--surface);border-color:#0000}.card a:hover{border-color:var(--accent)}.site-footer{background:var(--ap-bg);margin-top:2rem}.badge{background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--accent)}
