:root{--ink:#16191d;--ink-soft:#4a5058;--ink-faint:#767d86;--rule:#e0e3e8;--rule-soft:#eef0f3;--bg:#ffffff;--bg-soft:#f7f8fa;--accent:#14406b;--accent-lit:#1d5b96;--accent-bg:#eaf1f8;--serif:"Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono:ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", monospace;--measure:68ch;--wide:1120px}@media(prefers-color-scheme:dark){:root{--ink:#e8eaed;--ink-soft:#b0b6be;--ink-faint:#858c95;--rule:#2c3138;--rule-soft:#23272d;--bg:#14171a;--bg-soft:#1b1f23;--accent:#7fb2e5;--accent-lit:#a3c8ef;--accent-bg:#1d2833}}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:17px;line-height:1.65;-webkit-font-smoothing:antialiased}.wrap{width:min(100% - 2.5rem,var(--wide));margin-inline:auto}.prose{max-width:var(--measure)}main{padding-block:3rem 5rem}h1,h2,h3,h4{font-family:var(--serif);font-weight:600;line-height:1.2;color:var(--ink)}h1{font-size:clamp(2rem,1.4rem + 2.2vw,2.9rem);letter-spacing:-.015em;margin:0 0 .4rem}h2{font-size:clamp(1.35rem,1.1rem + 1vw,1.7rem);margin:3rem 0 1rem}h3{font-size:1.15rem;margin:2rem 0 .5rem}p{margin:0 0 1.1rem}a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}a:hover{color:var(--accent-lit)}.lede{font-size:1.12rem;color:var(--ink-soft)}.muted{color:var(--ink-faint)}.small{font-size:.875rem}.site-header{border-bottom:1px solid var(--rule);background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:saturate(180%)blur(12px);position:sticky;top:0;z-index:50}.site-header .wrap{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;min-height:4rem;flex-wrap:wrap}.brand{font-family:var(--serif);font-size:1.05rem;font-weight:600;color:var(--ink);text-decoration:none;white-space:nowrap}.brand:hover{color:var(--accent)}.nav{display:flex;gap:1.25rem;flex-wrap:wrap}.nav a{color:var(--ink-soft);text-decoration:none;font-size:.92rem;padding-block:.35rem;border-bottom:2px solid transparent}.nav a:hover{color:var(--ink)}.nav a[aria-current=page]{color:var(--ink);border-bottom-color:var(--accent)}.hero{display:grid;grid-template-columns:200px 1fr;gap:2.5rem;align-items:start}@media(max-width:720px){.hero{grid-template-columns:1fr;gap:1.5rem}}.hero img{width:100%;max-width:200px;height:auto;border-radius:4px;border:1px solid var(--rule)}.hero .role{font-size:1.05rem;color:var(--ink-soft);margin:0 0 .25rem}.hero .affil{font-size:.95rem;color:var(--ink-faint);margin:0}.links{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.25rem;padding:0;list-style:none}.links a{display:inline-block;font-size:.85rem;text-decoration:none;padding:.3rem .7rem;border:1px solid var(--rule);border-radius:999px;color:var(--ink-soft);background:var(--bg-soft)}.links a:hover{border-color:var(--accent);color:var(--accent)}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:1px;background:var(--rule);border:1px solid var(--rule);border-radius:6px;overflow:hidden;margin:3rem 0}.stats div{background:var(--bg);padding:1.1rem 1.25rem}.stats dt{font-size:.78rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);margin:0 0 .2rem}.stats dd{font-family:var(--serif);font-size:1.75rem;margin:0;color:var(--ink)}.pub-controls{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;margin:1.5rem 0 2rem;padding:1rem;background:var(--bg-soft);border:1px solid var(--rule);border-radius:6px}.pub-controls input[type=search]{flex:1 1 16rem;min-width:0;padding:.5rem .75rem;font:inherit;font-size:.95rem;border:1px solid var(--rule);border-radius:4px;background:var(--bg);color:var(--ink)}.pub-controls input:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.chips{display:flex;flex-wrap:wrap;gap:.4rem}.chip{font:inherit;font-size:.82rem;cursor:pointer;padding:.28rem .7rem;border-radius:999px;border:1px solid var(--rule);background:var(--bg);color:var(--ink-soft)}.chip:hover{border-color:var(--accent);color:var(--accent)}.chip[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff}@media(prefers-color-scheme:dark){.chip[aria-pressed=true]{color:#10161c}}.pub-year{font-family:var(--serif);font-size:1.3rem;margin:2.5rem 0 .75rem;padding-bottom:.3rem;border-bottom:1px solid var(--rule)}.pub-list{list-style:none;margin:0;padding:0}.pub{padding:.9rem 0;border-bottom:1px solid var(--rule-soft);display:grid;grid-template-columns:2.5rem 1fr;gap:.75rem}.pub .num{color:var(--ink-faint);font-variant-numeric:tabular-nums;font-size:.85rem;padding-top:.2rem}.pub .t{font-weight:600}.pub .t a{color:var(--ink);text-decoration:none}.pub .t a:hover{color:var(--accent);text-decoration:underline}.pub .a{font-size:.9rem;color:var(--ink-soft)}.pub .v{font-size:.88rem;color:var(--ink-faint);font-style:italic}.pub .meta{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.35rem}.pub .meta a,.pub .badge{font-size:.74rem;text-decoration:none;padding:.12rem .5rem;border-radius:3px;border:1px solid var(--rule);color:var(--ink-faint)}.pub .meta a:hover{border-color:var(--accent);color:var(--accent)}.badge-featured{background:var(--accent-bg);border-color:transparent;color:var(--accent)}.pub[hidden]{display:none}.pub .cite{color:var(--ink-soft);font-size:.94rem}.pub .cite::first-line{color:var(--ink)}.chips.types{margin:1.5rem 0 0}.chips.types .chip{font-size:.88rem;padding:.4rem .85rem}.pubtype[hidden]{display:none}.pub-list>li[hidden]{display:none}.cat{border:1px solid var(--rule);border-radius:6px;margin:.6rem 0;background:var(--bg)}.cat>summary{cursor:pointer;padding:.85rem 1.1rem;font-weight:600;display:flex;justify-content:space-between;gap:1rem;align-items:baseline;list-style:none;font-family:var(--serif);font-size:1.05rem}.cat>summary::-webkit-details-marker{display:none}.cat>summary::before{content:"▸";color:var(--ink-faint);font-family:var(--sans);margin-right:.6rem;transition:transform .15s ease;display:inline-block}.cat[open]>summary::before{transform:rotate(90deg)}.cat>summary:hover{color:var(--accent)}.cat>summary>span:first-of-type{flex:1}.proj-list{list-style:none;margin:0;padding:0 1.1rem 1rem 2.4rem}.proj-list li{display:grid;grid-template-columns:5.5rem 1fr;gap:.75rem;padding:.45rem 0;border-top:1px solid var(--rule-soft);font-size:.93rem}.proj-year{color:var(--ink-faint);font-variant-numeric:tabular-nums;font-size:.85rem}.people{list-style:none;margin:0 0 2rem;padding:0}.people li{display:grid;grid-template-columns:14rem 8rem 1fr;gap:1rem;padding:.7rem 0;border-bottom:1px solid var(--rule-soft);align-items:baseline}.people .who{font-weight:600}.people .deg{font-size:.85rem;color:var(--ink-faint);font-variant-numeric:tabular-nums}.people .what{color:var(--ink-soft);font-size:.93rem}@media(max-width:700px){.people li{grid-template-columns:1fr;gap:.15rem}}.courses{list-style:none;margin:0 0 2rem;padding:0}.courses li{display:grid;grid-template-columns:6rem 1fr auto;gap:1rem;padding:.6rem 0;border-bottom:1px solid var(--rule-soft);align-items:baseline}.courses .code{font-family:var(--mono);font-size:.88rem;color:var(--accent)}.courses .cname{font-weight:500}.themes{display:grid;grid-template-columns:repeat(auto-fit,minmax(17rem,1fr));gap:1.25rem;margin:2rem 0}.theme{border:1px solid var(--rule);border-radius:6px;padding:1.25rem;background:var(--bg-soft)}.theme h2{margin:0 0 .5rem;font-size:1.1rem}.theme p{font-size:.93rem;color:var(--ink-soft);margin-bottom:.6rem}.plain{list-style:none;margin:0 0 2rem;padding:0}.plain>li{padding:.5rem 0;border-bottom:1px solid var(--rule-soft);font-size:.95rem}.plain>li:last-child{border-bottom:0}address{font-style:normal}.site-footer{border-top:1px solid var(--rule);padding-block:2rem 3rem;font-size:.88rem;color:var(--ink-faint)}.site-footer a{color:var(--ink-soft)}hr{border:0;border-top:1px solid var(--rule);margin:2.5rem 0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}.skip{position:absolute;left:-9999px;top:0;background:var(--accent);color:#fff;padding:.6rem 1rem;z-index:100}.skip:focus{left:.5rem;top:.5rem}@media print{.site-header,.site-footer,.pub-controls{display:none}body{font-size:11pt}}