@font-face{font-family:Space Grotesk;src:url(/fonts/space-grotesk.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/fonts/ibm-plex-mono-400.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/fonts/ibm-plex-mono-500.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:"Source Serif 4";src:url(/fonts/source-serif-4.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:"Source Serif 4";src:url(/fonts/source-serif-4-italic.woff2) format("woff2");font-weight:100 900;font-style:italic;font-display:swap}:root{--paper: #efeee9;--panel: #f6f5f1;--ink: #1b1b18;--ink-soft: #51514a;--ink-faint: #8a8a7f;--rule: #d3d2ca;--rule-strong: #bcbbb1;--ochre: #a45d28;--ochre-deep: #7f4719;--maxw: 1240px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:Space Grotesk,system-ui,sans-serif;font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:inherit}.mono{font-family:IBM Plex Mono,ui-monospace,monospace}.wrap{max-width:var(--maxw);margin:0 auto;padding:0 40px}.meta-label{font-family:IBM Plex Mono,monospace;font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}.skip-link{position:absolute;top:-100%;left:16px;padding:8px 14px;background:var(--ink);color:var(--paper);font-family:IBM Plex Mono,monospace;font-size:12px;text-decoration:none;z-index:100;transition:top .16s}.skip-link:focus{top:8px}:focus-visible{outline:2px solid var(--ochre);outline-offset:2px}:focus:not(:focus-visible){outline:none}header.bar{position:sticky;top:0;z-index:30;background:var(--paper);border-bottom:1px solid var(--rule-strong)}.bar-inner{max-width:var(--maxw);margin:0 auto;padding:0 40px;display:flex;align-items:stretch;justify-content:space-between}.bar-brand{display:flex;align-items:center;gap:14px;padding:14px 0;font-weight:600;letter-spacing:-.01em;text-decoration:none;color:inherit}.dot{width:8px;height:8px;background:var(--ochre);border-radius:50%;flex-shrink:0}nav.idx{display:flex}nav.idx a{display:flex;align-items:center;gap:8px;padding:0 18px;text-decoration:none;font-family:IBM Plex Mono,monospace;font-size:12px;letter-spacing:.04em;color:var(--ink-soft);border-left:1px solid var(--rule);transition:background .18s,color .18s}nav.idx a:hover{background:var(--panel);color:var(--ochre)}nav.idx a.active{color:var(--ochre);background:var(--panel)}nav.idx a .n{color:var(--ink-faint);font-size:10px}.nav-toggle{display:none;flex-direction:column;justify-content:center;gap:5px;padding:10px 8px;background:none;border:none;cursor:pointer;margin-left:auto}.nav-toggle span{display:block;width:22px;height:2px;background:var(--ink);border-radius:1px;transition:transform .22s,opacity .18s}.nav-toggle[aria-expanded=true] span:nth-child(1){transform:translateY(7px) rotate(45deg)}.nav-toggle[aria-expanded=true] span:nth-child(2){opacity:0;transform:scaleX(0)}.nav-toggle[aria-expanded=true] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.mobile-nav{display:none;position:sticky;top:49px;z-index:29;background:var(--paper);border-bottom:2px solid var(--rule-strong);max-width:100%}.mobile-nav.open{display:block}.mobile-nav a{display:flex;align-items:center;gap:10px;padding:15px 24px;text-decoration:none;font-family:IBM Plex Mono,monospace;font-size:13px;letter-spacing:.04em;color:var(--ink-soft);border-bottom:1px solid var(--rule);transition:background .16s,color .16s}.mobile-nav a:hover{background:var(--panel);color:var(--ochre)}.mobile-nav a.active{color:var(--ochre);background:var(--panel)}.mobile-nav a .n{color:var(--ink-faint);font-size:10px}.hero{border-bottom:1px solid var(--rule-strong)}.hero-inner{max-width:var(--maxw);margin:0 auto;display:grid;grid-template-columns:1fr 360px}.hero-main{padding:64px 40px 52px;border-right:1px solid var(--rule)}.hero-side{padding:28px 40px;display:flex;flex-direction:column;gap:0}.filemark{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--ink-faint);letter-spacing:.04em;display:flex;gap:18px;margin-bottom:38px}.filemark b{color:var(--ochre);font-weight:500}h1.name{font-size:clamp(44px,7vw,84px);line-height:.96;font-weight:600;letter-spacing:-.03em;margin:0 0 18px}.role{font-size:17px;color:var(--ink-soft);margin:0 0 36px;font-family:IBM Plex Mono,monospace;letter-spacing:-.01em}.focus{font-family:"Source Serif 4",Georgia,serif;font-size:clamp(21px,2.8vw,28px);line-height:1.38;max-width:28ch;font-weight:400}.focus b{font-weight:500;color:var(--ochre-deep)}.hero-side .row{padding:14px 0;border-top:1px solid var(--rule)}.hero-side .row:first-child{border-top:none;padding-top:0}.hero-side .k{display:block;font-family:IBM Plex Mono,monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:5px}.hero-side .vv{font-size:15px;color:var(--ink-soft)}.portrait-mini{margin-top:20px;aspect-ratio:1/1;border:1px solid var(--rule);background:repeating-linear-gradient(135deg,#e2e1d8 0 2px,transparent 2px 10px),var(--panel);display:flex;align-items:flex-end;padding:12px;overflow:hidden;position:relative}.portrait-mini span{font-family:IBM Plex Mono,monospace;font-size:10px;color:var(--ink-faint)}.portrait-mini img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0;object-position:50% 12%}.masthead{border-bottom:1px solid var(--rule-strong)}.masthead-inner{max-width:var(--maxw);margin:0 auto;padding:56px 40px 40px;display:grid;grid-template-columns:1fr 360px;gap:40px;align-items:end}.masthead .crumb{font-family:IBM Plex Mono,monospace;font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:20px;display:flex;gap:10px;align-items:center}.masthead .crumb a{text-decoration:none;color:var(--ink-faint);transition:color .16s}.masthead .crumb a:hover{color:var(--ochre)}.masthead .crumb .sep{color:var(--rule-strong)}.masthead h1{font-size:clamp(38px,6vw,68px);line-height:.98;font-weight:600;letter-spacing:-.03em;margin:0 0 18px}.masthead .lede{font-family:"Source Serif 4",Georgia,serif;font-size:19px;line-height:1.55;color:var(--ink-soft);max-width:52ch;margin:0}.masthead .lede b{font-weight:500;color:var(--ochre-deep)}.masthead .stat-side{border-left:1px solid var(--rule);padding-left:32px;align-self:stretch;display:flex;flex-direction:column;justify-content:flex-end}.masthead .stat-side .srow{padding:12px 0;border-top:1px solid var(--rule);display:flex;justify-content:space-between;gap:16px;align-items:baseline}.masthead .stat-side .srow:first-child{border-top:none}.masthead .stat-side .sk{font-family:IBM Plex Mono,monospace;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}.masthead .stat-side .sv{font-size:15px;color:var(--ink-soft);text-align:right}.filterbar{position:sticky;top:51px;z-index:20;background:color-mix(in oklab,var(--paper) 92%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--rule)}.filterbar-inner{max-width:var(--maxw);margin:0 auto;padding:14px 40px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.filterbar .flabel{font-family:IBM Plex Mono,monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);margin-right:6px}.chip{font-family:IBM Plex Mono,monospace;font-size:12px;letter-spacing:.02em;color:var(--ink-soft);background:transparent;border:1px solid var(--rule-strong);border-radius:100px;padding:6px 14px;cursor:pointer;transition:all .16s;display:inline-flex;align-items:center;gap:8px}.chip .ct{font-size:10px;color:var(--ink-faint)}.chip:hover{border-color:var(--ochre);color:var(--ochre)}.chip.active{background:var(--ink);color:var(--paper);border-color:var(--ink)}.chip.active .ct{color:color-mix(in oklab,var(--paper) 65%,transparent)}.page{max-width:var(--maxw);margin:0 auto;padding:8px 40px 80px}.group{padding:64px 0 8px}.group-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:4px;padding-bottom:14px;border-bottom:1px solid var(--rule-strong)}.group-head h2{font-size:24px;font-weight:600;letter-spacing:-.02em;margin:0;display:flex;align-items:baseline;gap:12px}.group-head h2 .gn{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--ochre);font-weight:500}.group-head .gcount{font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-faint);letter-spacing:.04em}.irow{display:grid;grid-template-columns:56px 1fr 150px;gap:20px;align-items:baseline;padding:20px 0;border-bottom:1px solid var(--rule);text-decoration:none;position:relative;transition:background .16s,padding-left .2s;color:var(--ink)}.irow:before{content:"";position:absolute;left:-40px;top:0;bottom:-1px;width:3px;background:var(--ochre);transform:scaleY(0);transform-origin:top;transition:transform .2s}.irow:hover{background:var(--panel)}.irow:hover:before{transform:scaleY(1)}.irow .yr{font-family:IBM Plex Mono,monospace;font-size:13px;color:var(--ink-faint)}.irow .ti{font-size:17px;line-height:1.34;font-weight:500;letter-spacing:-.01em;display:block}.irow:hover .ti{color:var(--ochre-deep)}.irow .vn{font-family:"Source Serif 4",serif;font-style:italic;color:var(--ink-soft);font-size:14.5px;display:block;margin-top:7px}.irow .vn .doi{font-style:normal;font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-faint);margin-left:12px;word-break:break-all}.irow .tag{justify-self:end;font-family:IBM Plex Mono,monospace;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);border:1px solid var(--rule-strong);padding:3px 8px;border-radius:2px;white-space:nowrap;align-self:start;margin-top:4px}.irow.hidden,.group.empty{display:none}.ext-arrow{font-size:11px;color:var(--ochre);margin-left:5px;vertical-align:super;line-height:1}.more{display:inline-flex;align-items:center;gap:10px;margin-top:26px;text-decoration:none;font-family:IBM Plex Mono,monospace;font-size:13px;color:var(--ochre);letter-spacing:.02em}.more:hover{color:var(--ochre-deep)}.more .b{border-bottom:1px solid currentColor;padding-bottom:1px}.more .arr{transition:transform .2s}.more:hover .arr{transform:translate(4px)}section.block{border-bottom:1px solid var(--rule)}.strip{display:grid;grid-template-columns:360px 1fr}.strip>.head{padding:40px;border-right:1px solid var(--rule);position:sticky;top:53px;align-self:start;background:var(--paper)}.strip>.body{padding:40px;min-width:0}.head .idxn{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--ochre);margin-bottom:14px}.head h2{font-size:24px;font-weight:600;letter-spacing:-.02em;margin:0 0 14px}.head p{font-size:15px;color:var(--ink-soft);margin:0;max-width:30ch;font-family:"Source Serif 4",serif;line-height:1.5}.strip .index{border-top:1px solid var(--rule)}.about-body{font-family:"Source Serif 4",Georgia,serif;font-size:19px;line-height:1.64;max-width:60ch;color:#2a2a24}.about-body p{margin:0 0 20px}.feature{display:grid;grid-template-columns:360px 1fr;gap:32px;align-items:start;padding-bottom:36px;margin-bottom:8px;border-bottom:1px solid var(--rule-strong)}.feature.compact{grid-template-columns:300px 1fr}.facade{aspect-ratio:16/10;border:1px solid var(--rule-strong);background:repeating-linear-gradient(135deg,#e2e1d8 0 2px,transparent 2px 10px),var(--panel);position:relative;display:grid;place-items:center;cursor:pointer;overflow:hidden}.facade .play{width:58px;height:58px;border-radius:50%;border:1px solid var(--ochre);background:color-mix(in oklab,var(--paper) 78%,transparent);display:grid;place-items:center;transition:transform .2s,background .2s}.facade:hover .play,.facade:focus .play{transform:scale(1.07);background:var(--ochre)}.facade .play:after{content:"";border-left:14px solid var(--ochre);border-top:9px solid transparent;border-bottom:9px solid transparent;margin-left:3px;transition:border-left-color .2s}.facade:hover .play:after,.facade:focus .play:after{border-left-color:var(--paper)}.facade .badge{position:absolute;left:12px;top:12px;font-family:IBM Plex Mono,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft);background:color-mix(in oklab,var(--paper) 86%,transparent);border:1px solid var(--rule);padding:4px 9px;border-radius:3px}.facade .dur{position:absolute;right:12px;bottom:12px;font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--ink-soft);background:color-mix(in oklab,var(--paper) 86%,transparent);border:1px solid var(--rule);padding:3px 8px;border-radius:3px}.facade.playing{cursor:default}.facade.playing .play,.facade.playing .dur,.facade.playing .badge{display:none}.facade iframe{position:absolute;inset:0;width:100%;height:100%;border:0}.feature h3{font-size:24px;font-weight:600;letter-spacing:-.02em;margin:12px 0;line-height:1.18}.feature.compact h3{font-size:22px}.feature p{color:var(--ink-soft);font-family:"Source Serif 4",serif;font-size:16.5px;margin:0 0 16px;max-width:52ch;line-height:1.55}.feature .metabits{display:flex;gap:16px;font-family:IBM Plex Mono,monospace;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint)}.grow{display:grid;grid-template-columns:1fr 120px;gap:24px;padding:22px 0;border-bottom:1px solid var(--rule);align-items:start}.grow h3{font-size:18px;font-weight:600;letter-spacing:-.01em;margin:0 0 8px}.grow .gmeta{font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-faint);letter-spacing:.04em;margin-bottom:10px;display:block}.grow p{margin:0;color:var(--ink-soft);font-family:"Source Serif 4",serif;font-size:15.5px;line-height:1.55}.grow .term{font-family:IBM Plex Mono,monospace;font-size:12.5px;color:var(--ink-faint);justify-self:end;white-space:nowrap}.grow .gamount{color:var(--ink-soft)}.award{display:inline-block;font-family:IBM Plex Mono,monospace;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ochre);border:1px solid var(--ochre);padding:2px 7px;border-radius:2px;margin-bottom:9px}.review-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0 40px;border-top:1px solid var(--rule);margin-top:4px}.jrow{display:flex;justify-content:space-between;gap:16px;padding:13px 0;border-bottom:1px solid var(--rule);align-items:baseline}.jrow .jn{font-size:15.5px;font-family:"Source Serif 4",serif;font-style:italic;color:var(--ink)}.jrow .jc{font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--ink-faint);white-space:nowrap}.tcourses{border-top:1px solid var(--rule);padding-top:28px;margin-top:8px}.tsupervision{border-top:1px solid var(--rule);padding-top:24px;margin-top:32px}.tphil{font-family:"Source Serif 4",serif;font-size:18px;line-height:1.6;max-width:58ch;color:#2a2a24}.tphil p{margin:0 0 16px}.tcol h4,.tcourses h4,.tsupervision h4{font-family:IBM Plex Mono,monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 14px}.tcourse{display:flex;justify-content:space-between;gap:16px;padding:12px 0;border-top:1px solid var(--rule)}.tcourse:first-of-type{border-top:none}.tcourse .cn{font-size:19px;font-weight:500}.tcourse .cc{font-family:IBM Plex Mono,monospace;font-size:11px;color:var(--ink-faint)}.tcourse .cc.past-courses{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:right;max-width:60%}.past-teaching-h4{margin-top:28px!important}.fhea-stripe{display:flex;align-items:baseline;gap:24px;padding:20px 0 0;border-top:1px solid var(--rule-strong);margin-top:32px}.fhea-acronym{font-family:IBM Plex Mono,monospace;font-size:20px;letter-spacing:.1em;color:var(--ochre);flex-shrink:0;line-height:1}.fhea-name{font-size:17px;color:var(--ink);flex:1;line-height:1.3}.fhea-year{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--ink-faint);white-space:nowrap}.tcol p,.tsupervision p{color:var(--ink-soft);font-family:"Source Serif 4",serif;font-size:16px;line-height:1.55;margin:0 0 14px}.tcol p:last-child,.tsupervision p:last-child{margin-bottom:0}.contact{display:grid;grid-template-columns:360px 1fr}.contact .l{padding:56px 40px;border-right:1px solid var(--rule)}.contact .l h2{font-size:30px;font-weight:600;letter-spacing:-.02em;margin:0 0 12px}.contact .l p{color:var(--ink-soft);font-family:"Source Serif 4",serif;max-width:28ch;margin:0;line-height:1.55}.contact .r{padding:30px 40px}.profile-links{margin-top:30px;border-top:1px solid var(--rule);display:flex;flex-direction:column}.profile-link{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--rule);text-decoration:none;color:var(--ink);transition:color .16s}.profile-link:hover{color:var(--ochre)}.profile-link .pl-label{font-size:16px}.profile-link .pl-meta{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--ink-faint);transition:color .16s}.profile-link:hover .pl-meta{color:var(--ochre)}.cform{display:grid;gap:18px;max-width:520px}.crow2{display:grid;grid-template-columns:1fr 1fr;gap:18px}.cfield{display:grid;gap:7px}.cfield label{font-family:IBM Plex Mono,monospace;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}.cfield input,.cfield textarea{font-family:inherit;font-size:16px;color:var(--ink);background:var(--panel);border:1px solid var(--rule-strong);border-radius:3px;padding:12px 14px;width:100%;transition:border-color .18s,background .18s}.cfield input:focus,.cfield textarea:focus{outline:none;border-color:var(--ochre);background:#fff}.cfield textarea{resize:vertical;min-height:120px;line-height:1.5}.cform .submit{justify-self:start;font-family:IBM Plex Mono,monospace;font-size:13px;letter-spacing:.04em;color:var(--paper);background:var(--ink);border:none;border-radius:3px;padding:14px 28px;cursor:pointer;transition:background .18s;display:inline-flex;align-items:center;gap:10px}.cform .submit:hover{background:var(--ochre)}.cform .submit:disabled{opacity:.6;cursor:not-allowed}.cform .note{font-family:"Source Serif 4",serif;font-style:italic;font-size:14px;color:var(--ink-faint);margin:2px 0 0}.cform .sent{font-family:"Source Serif 4",serif;font-size:17px;color:var(--ochre-deep);margin:0;padding:18px 0}.form-status{font-family:"Source Serif 4",serif;font-size:15px;padding:12px 0}.form-status.success{color:var(--ochre-deep)}.form-status.error{color:#c0392b}footer{padding:22px 40px;display:flex;justify-content:space-between;font-family:IBM Plex Mono,monospace;font-size:11.5px;color:var(--ink-faint);border-top:1px solid var(--rule-strong);max-width:var(--maxw);margin:0 auto}@media(max-width:900px){.hero-inner,.strip,.contact,.masthead-inner{grid-template-columns:1fr}.hero-main,.strip>.head,.contact .l{border-right:none}.strip>.head{position:static;border-bottom:1px solid var(--rule)}.feature,.feature.compact,.review-grid{grid-template-columns:1fr}.masthead .stat-side{border-left:none;padding-left:0;border-top:1px solid var(--rule);padding-top:16px}nav.idx{display:none}.nav-toggle{display:flex}.crow2{grid-template-columns:1fr}.bar-inner,.wrap{padding:0 24px}.page{padding:8px 24px 60px}.filterbar-inner{padding:14px 24px}.masthead-inner{padding:40px 24px 32px}.hero-main{padding:40px 24px 36px}.hero-side{padding:24px}.strip>.head{padding:28px 24px}.strip>.body{padding:28px 24px}.contact .l{padding:36px 24px}.contact .r{padding:24px}footer{padding:20px 24px;flex-direction:column;gap:6px}.irow{grid-template-columns:40px 1fr;gap:6px 12px}.irow .yr{align-self:start;padding-top:2px}.irow .tag{justify-self:start;align-self:start;margin-top:0}.irow:before{left:-24px}.irow .ti{font-size:15px}.irow .vn{font-size:13.5px;margin-top:5px}.tcourse{flex-direction:column;gap:3px}.tcourse .cn{font-size:16px}.tcourse .cc.past-courses{max-width:100%;text-align:left;white-space:normal;overflow:visible;text-overflow:clip}}@media(min-width:901px)and (max-width:1100px){.hero-inner{grid-template-columns:1fr 300px}.strip,.contact{grid-template-columns:280px 1fr}.masthead-inner{grid-template-columns:1fr 280px}}
