@font-face{font-family:equity;font-weight:400;font-style:normal;src:url(/fonts/equity-regular.woff2)format("woff2");font-display:swap}@font-face{font-family:equity;font-weight:400;font-style:italic;src:url(/fonts/equity-italic.woff2)format("woff2");font-display:swap}@font-face{font-family:equity;font-weight:700;font-style:normal;src:url(/fonts/equity-bold.woff2)format("woff2");font-display:swap}@font-face{font-family:equity;font-weight:700;font-style:italic;src:url(/fonts/equity-bold-italic.woff2)format("woff2");font-display:swap}@font-face{font-family:equity caps;font-weight:400;font-style:normal;src:url(/fonts/equity-caps-regular.woff2)format("woff2");font-display:swap}@font-face{font-family:equity caps;font-weight:700;font-style:normal;src:url(/fonts/equity-caps-bold.woff2)format("woff2");font-display:swap}@font-face{font-family:concourse;font-weight:400;font-style:normal;src:url(/fonts/concourse-regular.woff2)format("woff2");font-display:swap}@font-face{font-family:concourse;font-weight:400;font-style:italic;src:url(/fonts/concourse-italic.woff2)format("woff2");font-display:swap}@font-face{font-family:concourse;font-weight:700;font-style:normal;src:url(/fonts/concourse-bold.woff2)format("woff2");font-display:swap}@font-face{font-family:concourse caps;font-weight:400;font-style:normal;src:url(/fonts/concourse-caps-regular.woff2)format("woff2");font-display:swap}@font-face{font-family:concourse caps;font-weight:700;font-style:normal;src:url(/fonts/concourse-caps-bold.woff2)format("woff2");font-display:swap}@font-face{font-family:inconsolata;font-weight:400;font-style:normal;src:url(/fonts/inconsolata-regular.woff2)format("woff2");font-display:swap}@font-face{font-family:inconsolata;font-weight:700;font-style:normal;src:url(/fonts/inconsolata-bold.woff2)format("woff2");font-display:swap}:root{--font-serif:"Equity", Georgia, "Times New Roman", serif;--font-caps:"Equity Caps", "Equity", Georgia, serif;--font-sans:"Concourse", system-ui, -apple-system, "Segoe UI", sans-serif;--font-sans-caps:"Concourse Caps", "Concourse", system-ui, sans-serif;--font-mono:"Inconsolata", ui-monospace, "SFMono-Regular", Menlo, monospace;--bg:#faf8f3;--bg-soft:#efe8db;--fg:#2b2622;--fg-soft:#564e45;--muted:#8c8275;--rule:#ddd3c3;--accent:#9c4221;--accent-fg:#fff;--gold:#b0822c;--gold-fg:#fff;--green:#4f7a3a;--beige:#9a7849;--purple:#7b4ea0;--selection:#e7d8bf;--border:var(--rule);--surface:var(--bg-soft);--surface-raised:#ffffff;--radius:5px;--dot-rule-color:color-mix(in srgb, var(--muted) 55%, var(--bg));--dot-rule:radial-gradient(circle, var(--dot-rule-color) 0 .5px, transparent .55px);--dot-rule-size:3px 1px;--code-bg:#201c17;--code-fg:#e9e2d6;--code-border:#38322a;--code-comment:#8d8475;--code-keyword:#7ec7bd;--code-string:#a6cf7e;--code-number:#cda0e0;--code-builtin:#8fc8e0;--code-type:#e0a45c;--code-var:#e3b9a0;--code-name:var(--code-fg);--code-op:#c0b7a8;--code-deleted:#d98a7a;--code-hl:rgba(255, 255, 255, .06);--measure:42rem;--sidebar:calc(16rem + 5px);--pad:2.5rem}@media(prefers-color-scheme:dark){:root{--bg:#181512;--bg-soft:#211d18;--fg:#e9e2d6;--fg-soft:#c0b7a8;--muted:#8d8475;--rule:#352f27;--accent:#e08a5a;--accent-fg:#1a1611;--gold:#d8b15a;--gold-fg:#1a1611;--green:#86b06a;--beige:#caa86a;--purple:#b690d8;--selection:#3a3024;--surface-raised:#252019}}*,*::before,*::after{box-sizing:border-box}html{font-size:122.5%;-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--font-serif);font-size:1.125rem;line-height:1.65;font-kerning:normal;font-feature-settings:"kern","liga","onum";text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}::selection{background:var(--selection)}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:2px}img{max-width:100%;height:auto}.icon{width:1em;height:1em;fill:currentColor;flex:none;vertical-align:-.15em}.icon-mail{width:.95em;height:.95em;margin-right:.3em;vertical-align:-.12em}.icon-pre{width:1.05em;height:1.05em}.mail-img{display:inline-block;height:1em;max-width:100%;vertical-align:-.12em;background-color:currentColor;-webkit-mask:var(--mask)left center/contain no-repeat;mask:var(--mask)left center/contain no-repeat}.mail-text{color:var(--fg)}.mail-text:hover{color:var(--accent)}.mail-text .link-text{font-family:var(--font-mono);font-size:1.18em}.icon.icon-pdf{width:.93em;height:1.05em;margin-left:.3em;vertical-align:-.2em}.icon.icon-pdf-pre{width:.93em;height:1.05em;margin-right:.35em;vertical-align:-.2em}.ext-link,.mail-link,.pdf-link,.prose a.ext-link,.prose a.mail-link,.prose a.pdf-link,.prose a.badge,.prose a.ext-link:hover,.prose a.mail-link:hover,.prose a.pdf-link:hover,.prose a.badge:hover{text-decoration:none}.ext-link .link-text,.mail-link .link-text,.pdf-link .link-text{text-decoration:none}.ext-link:hover .link-text,.mail-link:hover .link-text,.pdf-link:hover .link-text{text-decoration:underline;text-underline-offset:2px;text-decoration-color:var(--accent)}.prose a.link-verbatim,.link-verbatim .link-text{font-family:var(--font-sans)}.ext-link:not(.pdf-link)::before{content:"\2191";font-family:var(--font-serif);margin-right:.2em}.muted{color:var(--muted)}.skip-link{position:absolute;left:-999px;top:0;background:var(--accent);color:var(--accent-fg);padding:.5rem .75rem;z-index:10;font-family:var(--font-sans)}.skip-link:focus{left:.5rem;top:.5rem}.layout{display:flex;align-items:flex-start}.sidebar{--sidebar-pad-x:1.75rem;flex:0 0 var(--sidebar);position:sticky;top:0;height:100vh;padding:var(--pad)var(--sidebar-pad-x);border-right:1px solid var(--rule);background:var(--bg-soft)}.sidebar-inner{display:flex;flex-direction:column;height:100%;gap:2rem}.brand{display:flex;flex-direction:column;align-items:center;gap:.5rem}.brand-home{display:flex;color:var(--fg)}.brand>.brand-home{align-items:center;line-height:0}.brand-home,.brand-home:hover{text-decoration:none}.brand-logo{display:block;flex:none;width:calc(3.4rem + 10px);height:calc(3.4rem + 10px)}.brand-text{display:block;min-width:0;text-align:center}.brand-name{display:block;font-family:var(--font-sans-caps);font-weight:700;font-size:1.15rem;line-height:1.05;letter-spacing:.03em;text-transform:uppercase;white-space:nowrap}.brand-mail{display:flex;align-items:center;gap:.35em;width:fit-content;margin-top:.25rem;font-family:var(--font-sans);font-size:.82rem;color:var(--muted)}.brand-mail:hover{color:var(--accent)}.brand-tagline{display:block;margin-top:.25rem;font-family:var(--font-sans);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;color:var(--muted)}.nav{font-family:var(--font-sans)}.nav ul{list-style:none;margin:0;padding:0}.nav li{margin:.15rem 0}.nav a{display:flex;align-items:center;gap:.6em;position:relative;color:var(--fg-soft);padding:.3rem 0;font-size:1.02rem}.nav a .icon{font-size:1.2em;color:var(--muted)}.nav a:hover{color:var(--accent);text-decoration:none}.nav a:hover .icon{color:var(--accent)}.nav a.active{color:var(--fg);font-weight:700}.nav a.active .icon{color:var(--accent)}@media(min-width:50.001rem){.nav>ul>li:has(>a.active+:is(.subnav,.pagenav)){margin-left:calc(-1 * var(--sidebar-pad-x));margin-right:calc(-1 * var(--sidebar-pad-x));padding-left:var(--sidebar-pad-x);padding-right:var(--sidebar-pad-x);padding-bottom:calc(.15rem - 2px);background:color-mix(in srgb,var(--surface-raised) 24%,var(--bg-soft))}}.nav{--menu-marker-cx:.612rem;--menu-text-x:1.836rem}.subnav .ml,.pagenav .ml{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}.nav .subnav,.nav .pagenav{position:relative;margin:.15rem 0 .55rem;padding:0;list-style:none}.nav .subnav li,.nav .pagenav li{margin:0}.subnav a,.pagenav>li>a{position:relative;display:block;padding:.12rem 0 .12rem var(--menu-text-x);font-size:calc(.86rem + 2pt);line-height:1.25;color:var(--muted)}.subnav a::before,.pagenav>li>a::before{content:"";position:absolute;z-index:1;--marker-size:10px;left:var(--menu-marker-cx);top:calc(.12rem + .625em);width:var(--marker-size);height:var(--marker-size);margin-left:calc(var(--marker-size)/-2);margin-top:calc(var(--marker-size)/-2);border-radius:50%;background:var(--muted)}.subnav a::before{background:var(--bg-soft);border:2px solid var(--muted)}.nav>ul>li>a.active:has(+.subnav)::after,.pagenav>li>a:has(+.subnav)::after,.subnav li:not(:last-child) a::after{content:"";position:absolute;left:var(--menu-marker-cx);width:2px;margin-left:-1px;background:var(--rule)}.subnav li:not(:last-child) a::after{top:calc(.12rem + .625em);height:100%}.pagenav>li>a:has(+.subnav)::after{top:calc(.12rem + .625em);height:calc(100% + .15rem)}.nav>ul>li>a.active:has(+.subnav)::after{top:calc(50% + .62em);height:calc(50% + .27rem)}.subnav a.active,.subnav a[aria-current=location],.pagenav>li>a.active,.pagenav>li>a[aria-current=page]{color:var(--accent);font-weight:700}.pagenav>li>a.active::before,.pagenav>li>a[aria-current=page]::before{background:var(--accent)}.subnav a.active::before,.subnav a[aria-current=location]::before{border-color:var(--accent)}.sidebar-foot{margin-top:auto;font-family:var(--font-sans);font-size:.82rem;display:flex;flex-direction:column;gap:.34rem}.sidebar-foot a,.sidebar-foot p{display:inline-flex;align-items:center;gap:.45em;width:fit-content;margin:0;color:var(--muted)}.sidebar-foot a:hover{color:var(--accent)}.sidebar-foot .copyright{color:var(--muted)}.sidebar-foot .git-commit{color:var(--muted)}.sidebar-foot .git-commit strong{font-family:var(--font-mono);font-weight:700}.content{flex:auto;min-width:0;padding:var(--pad)var(--pad)4rem}.content>article{max-width:var(--measure);margin:0}.page-head{margin-bottom:2rem}.page-head h1{margin-bottom:.25rem}.entry-meta{font-family:var(--font-sans);font-size:.85rem;color:var(--muted);margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:.2rem .9rem}.page-meta{font-family:var(--font-sans);font-size:1.02rem;color:var(--fg-soft);margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:.25rem 1.1rem}.meta-subtitle{font-style:normal}.meta-item{display:inline-flex;align-items:center;gap:.35em}.prose h1{font-size:3.7rem;line-height:1.03;margin:0 0 1rem;font-weight:700}.prose.blog h1{line-height:1.2}.prose h2{font-size:2.2rem;margin:2.4rem 0 .8rem;font-weight:700}.prose h3{font-size:1.6rem;margin:1.8rem 0 .6rem;font-weight:700}.prose h2,.prose h3{letter-spacing:-.005em}.home>h1:first-child{margin-bottom:2rem}.home-portrait{float:right;width:40%;margin:.15rem 0 1.2rem 1.75rem}.home-portrait img{display:block;width:100%;border-radius:var(--radius)}.home>p:first-of-type{font-size:1.2rem;line-height:1.55}.section-heading{display:flex;align-items:center;gap:.7rem}.heading-icon{width:.85em;height:.85em;color:var(--accent)}.prose p{margin:0 0 1.1rem}.prose ul,.prose ol{--list-marker-width:1.4rem;--list-marker-gap:.6rem;margin:0 0 1.1rem;padding-left:var(--list-marker-width)}.prose li{margin:.25rem 0}.prose li::marker{color:var(--muted)}.prose :is(ul:not([class]),ol:not([class]),ul.tight,ol.tight){--list-item-gap:1.15rem}.prose :is(ul.tight,ol.tight){--list-item-gap:.3rem}.prose :is(ul:not([class]),ol:not([class]),ul.tight,ol.tight)>li{margin:var(--list-item-gap)0 0;padding-left:var(--list-marker-gap)}.prose :is(ul:not([class]),ol:not([class]),ul.tight,ol.tight)>li:first-child{margin-top:0}.prose :is(ul:not([class]),ol:not([class]),ul.tight,ol.tight)>li>:last-child{margin-bottom:0}.prose :is(ol:not([class]),ol.tight)>li::marker{font-family:var(--font-sans);color:var(--muted)}.prose :is(ul:not([class]),ul.tight){list-style:none}.prose :is(ul:not([class]),ul.tight)>li{position:relative}.prose :is(ul:not([class]),ul.tight)>li::before{content:"\2192";position:absolute;left:calc(-1 * var(--list-marker-width));width:var(--list-marker-width);text-align:right;color:var(--muted);font-family:var(--font-serif)}.prose blockquote{margin:2.1rem 0;font-size:110%;color:var(--fg-soft);font-style:italic}.prose.blog>:is(ul:not([class]),ol:not([class])),.prose.projects>:is(ul:not([class]),ol:not([class])){--framed-list-pad-y:1.15rem;margin-bottom:1.1rem;padding-top:var(--framed-list-pad-y);padding-bottom:var(--framed-list-pad-y);background-image:var(--dot-rule),var(--dot-rule);background-size:var(--dot-rule-size),var(--dot-rule-size);background-repeat:repeat-x,repeat-x;background-position:0 0,0 100%}.prose blockquote>:first-child{margin-top:0}.prose blockquote>:last-child{margin-bottom:0}.prose hr{border:0;border-top:1px solid var(--rule);margin:2.5rem 0}.prose a{text-decoration:none}.prose a:hover{text-decoration:underline;text-underline-offset:2px;text-decoration-color:var(--accent)}.uc{font-variant:all-small-caps;letter-spacing:.03em}code,kbd,samp{font-family:var(--font-mono);font-size:.92em}.prose :not(pre)>code{background:var(--surface);padding:.1em .35em;border:1px solid var(--border);border-radius:var(--radius)}.prose pre{background:var(--code-bg);color:var(--code-fg);border:1px solid var(--code-border);border-radius:var(--radius);padding:1rem 1.1rem;overflow-x:auto;font-size:.9rem;line-height:1.5}.prose pre code{background:0 0;padding:0;border:0}.highlight{position:relative}.copy-code-btn{position:absolute;top:.5rem;right:.5rem;display:inline-flex;align-items:center;justify-content:center;padding:.3rem;color:var(--code-fg);background:var(--code-bg);border:1px solid var(--code-border);border-radius:var(--radius);cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease,border-color .15s ease}.copy-code-btn .icon{width:1.05em;height:1.05em}.copy-code-btn:hover{color:#fff}.highlight:hover .copy-code-btn,.copy-code-btn:focus-visible{opacity:1}.copy-code-btn.copied{color:var(--code-string);border-color:var(--code-string);opacity:1}@media(hover:none){.copy-code-btn{opacity:1}}.highlight{margin:1.4rem 0}.prose li>.highlight,.prose li>.box{margin:.4rem 0}.highlight pre{margin:0}.chroma{color:var(--code-fg)}.chroma .err{color:var(--accent)}.chroma .hl{background:var(--code-hl)}.chroma .ln,.chroma .lnt{color:var(--code-comment)}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{color:var(--code-comment);font-style:italic}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .ow,.chroma .nt{color:var(--code-keyword)}.chroma .kc,.chroma .kt{color:var(--code-type)}.chroma .nb,.chroma .nf,.chroma .fm,.chroma .nd,.chroma .bp{color:var(--code-builtin)}.chroma .nc,.chroma .nn,.chroma .ne,.chroma .no{color:var(--code-type)}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .na{color:var(--code-var)}.chroma .nx,.chroma .nl,.chroma .ni,.chroma .py{color:var(--code-name)}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .sx,.chroma .s1,.chroma .ss{color:var(--code-string)}.chroma .se,.chroma .si{color:var(--code-number)}.chroma .sr{color:var(--code-type)}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .il{color:var(--code-number)}.chroma .o,.chroma .p,.chroma .pi{color:var(--code-op)}.chroma .gd{color:var(--code-deleted)}.chroma .gi{color:var(--code-string)}.chroma .gh,.chroma .gu{color:var(--code-builtin);font-weight:700}.chroma .gp{color:var(--code-comment)}.chroma .go{color:var(--code-fg)}.chroma .gr,.chroma .gt{color:var(--accent)}.chroma .ge{font-style:italic}.chroma .gs{font-weight:700}.prose table{border-collapse:collapse;width:100%;margin:1.4rem 0;font-size:.95rem}.prose th,.prose td{border-bottom:0;background-image:var(--dot-rule);background-size:var(--dot-rule-size);background-repeat:repeat-x;background-position:0 100%;padding:.5rem .6rem;text-align:left}.prose th{font-family:var(--font-sans);font-weight:700}.credits-table td{vertical-align:middle}.credits-table td{padding-top:1rem;padding-bottom:1rem}.credits-logo{width:5.6rem}.credits-logo img{width:4.8rem;height:4.8rem;object-fit:contain;display:block}.credits-link{white-space:nowrap;text-align:right}.imprint-address{width:fit-content;margin:0 0 1.4rem;font-family:var(--font-sans);font-style:normal;line-height:1.3;color:var(--fg-soft);padding:1.05rem 1.3rem;border:1px solid var(--border);border-radius:var(--radius)}.imprint-name{display:block;margin-bottom:.55rem}.imprint-contact-table th,.imprint-contact-table td{vertical-align:top;padding-top:.75rem;padding-bottom:.75rem}.imprint-contact-main td:first-child{font-family:var(--font-sans);font-weight:700;white-space:nowrap}.imprint-contact-table .mail-link{white-space:nowrap}.imprint-contact-main td{background-image:var(--dot-rule);background-size:var(--dot-rule-size);background-repeat:repeat-x;background-position:0 0;padding-top:1.5rem}.imprint-contact-main:first-child td{background-image:none;padding-top:.75rem}.imprint-contact-table tr:has(+tr.imprint-contact-main) td{padding-bottom:1.5rem}.imprint-contact-comment td{padding-top:.1rem;padding-bottom:.15rem;font-family:var(--font-sans);font-size:.82rem;color:var(--muted);background-image:none}.imprint-contact-fingerprint td{background-image:none;padding-top:.15rem;padding-bottom:.85rem;font-family:var(--font-sans);font-size:.78rem;color:var(--muted)}.smime-fingerprint{font-family:var(--font-mono);overflow-wrap:anywhere}figure{margin:1.6rem 0}figure img{border-radius:var(--radius)}figcaption{font-family:var(--font-sans);font-size:.82rem;color:var(--muted);margin-top:.4rem}.media{margin:1.8rem 0;background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius);padding:.5rem}.media a{display:block}.media img,.media video{display:block;width:100%;border-radius:var(--radius)}.media figcaption{margin:.5rem .15rem .1rem}.btn{display:inline-flex;align-items:center;gap:.4em;font-family:var(--font-sans);font-size:.9rem;line-height:1.2;padding:.4rem .9rem;border-radius:var(--radius);background:var(--c,var(--accent));color:var(--accent-fg);white-space:nowrap}.prose a.btn,.prose a.btn:hover{text-decoration:none}.btn:hover{color:var(--accent-fg);filter:brightness(1.08)}.box{--c:var(--muted);--box-gutter:1.8em;display:flex;align-items:flex-start;gap:.6em;margin:1.6rem 0;padding:1.1rem calc(1.1rem + var(--box-gutter))1.1rem 1.1rem;border:1px solid color-mix(in srgb,var(--c) 38%,var(--border));border-radius:var(--radius);background:color-mix(in srgb,var(--c) 8%,var(--bg))}.box-ico{flex:none;display:inline-flex;align-items:center;height:1.6rem}.box:has(.box-title) .box-ico{height:1rem}.box-icon{width:1.2em;height:1.2em;color:var(--c)}.box-main{flex:1;min-width:0;font-size:100%}.box-body{line-height:1.5}.box-body p{margin:0 0 .5rem}.box-body :is(ul,ol){margin:.25rem 0}.box-body li{margin:.1rem 0}.box-body>:first-child{margin-top:0}.box-body>:last-child{margin-bottom:0}.box .box-title{margin:0 0 .6rem;font-family:var(--font-sans);font-size:.8rem;line-height:1.25;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--c)}.box .box-author{margin:.6rem 0 0;font-family:var(--font-sans);font-size:.8rem;color:var(--muted);font-style:italic}.box-actions{margin:.7rem 0 0;display:flex;flex-wrap:wrap;gap:.5rem}.box-link .box-main,.box-download .box-main{display:flex;align-items:center;flex-wrap:wrap;gap:.6rem 1.4rem}.box-link .box-text,.box-download .box-text{flex:1 1 12rem;min-width:0}.box-link .box-actions,.box-download .box-actions{margin:0;flex:none}.box-info{--c:var(--beige)}.box-definition{--c:var(--green)}.box-theorem{--c:var(--accent)}.box-quote{--c:var(--muted)}.box-link{--c:var(--accent)}.box-download{--c:var(--purple)}.entry-list{list-style:none;margin:1.5rem 0 0;padding:0}.entry{padding:1.2rem 0 .6rem;background-image:var(--dot-rule);background-size:var(--dot-rule-size);background-repeat:repeat-x;background-position:0 0}.entry:first-child{background-image:none}.entry-summary-row{display:grid;grid-template-columns:minmax(0,1fr)8rem;gap:1.1rem;align-items:start;margin-top:.4rem}.entry-summary-row .entry-summary{margin:0}.entry-text{min-width:0}.entry-thumb{display:block;width:8rem;aspect-ratio:1;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.entry-thumb img{display:block;width:100%;height:100%;object-fit:cover}.prose .entry-title{line-height:1.15;margin:0 0 .2rem}.entry-title a{color:var(--fg)}.entry-title a:hover{color:var(--accent)}.entry-summary{margin:.4rem 0 0;color:var(--fg-soft)}.post-nav{margin-top:3rem;font-family:var(--font-sans);font-size:.9rem}.prose .pub-list{list-style:none;margin:0;padding-left:1.3rem}.prose .pub{position:relative;margin:0 0 1.6rem;line-height:1.5}.prose .pub::before{content:"\2022";position:absolute;left:-1.3rem;font-family:var(--font-sans);color:var(--muted)}.prose .pub-list-numbered{list-style:decimal;padding-left:2.2rem}.prose .pub-list-numbered>.pub{padding-left:.6rem}.prose .pub-list-numbered .pub::before{content:none}.prose .pub-list-numbered .pub::marker{font-family:var(--font-sans);color:var(--muted)}.prose .pub-title{margin:0;font-weight:700}.prose .pub-title a{color:var(--fg)}.prose .pub-title a:hover{color:var(--accent)}.prose .pub-authors{margin:0;font-size:.95rem;color:var(--fg-soft);font-style:italic}.prose .pub-venue{margin:0;font-family:var(--font-sans);font-size:.9rem;color:var(--muted);font-style:normal}.prose .pub-links{margin:.35rem 0 0;display:flex;flex-wrap:wrap;gap:.35rem}.badge{display:inline-flex;align-items:center;gap:.35em;font-family:var(--font-sans);font-size:.72rem;line-height:1.4;padding:.15rem .5rem;border:1px solid var(--border);border-radius:var(--radius);color:var(--fg-soft);background:var(--surface)}.badge-icon{width:1.05em;height:1.05em;vertical-align:0}a.badge:hover{text-decoration:none}a.badge:not(.badge-accent):not(.badge-gold):hover{background:color-mix(in srgb,var(--fg) 8%,var(--surface))}.badge-accent{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}a.badge-accent:hover{color:var(--accent-fg);filter:brightness(1.08)}.badge-gold{background:var(--gold);color:var(--gold-fg);border-color:var(--gold)}a.badge-gold:hover{color:var(--gold-fg);border-color:var(--gold);filter:brightness(1.06)}.badge-success{border-color:var(--accent);color:var(--accent)}.badge-title{font-weight:700}.badge:not(.badge-accent):not(.badge-gold) .badge-title{font-weight:400}.badge:not(.badge-accent):not(.badge-gold) .badge-value{font-weight:700}.pub-abstract{margin-top:.35rem}.pub-abstract summary{display:inline-flex;align-items:center;gap:.3em;font-family:var(--font-sans);font-size:.82rem;color:var(--muted);cursor:pointer;width:fit-content;list-style:none}.pub-abstract summary::-webkit-details-marker{display:none}.abstract-icon{width:1.15em;height:1.15em;color:var(--accent);transition:transform .15s ease}.pub-abstract[open] .abstract-icon{transform:rotate(180deg)}.pub-abstract summary:hover{color:var(--accent)}.pub-abstract p{margin:.5rem 0 0;font-size:.85rem;line-height:1.5;color:var(--fg-soft)}.pub-abstract>div{margin-top:.5rem;font-size:.85rem}.pub-abstract div>:first-child{margin-top:0}.pub-abstract div>:last-child{margin-bottom:0}.pub-list-numbered .pub-abstract>div,.thesis-list .pub-abstract:not(.related-box)>div{position:relative;padding-left:1.05rem}.pub-list-numbered .pub-abstract>div::before,.thesis-list .pub-abstract:not(.related-box)>div::before{content:"";position:absolute;left:.47rem;top:0;bottom:0;border-left:1px solid var(--rule)}.pub-section{margin-top:2.4rem}.thesis-list{padding-left:0}.thesis-list>.pub::before{content:none}.thesis-note{margin:.9rem 0 0;font-weight:700;color:var(--fg-soft)}.thesis-list .pub-abstract .pub-authors{font-size:.92em}.thesis-list .pub-abstract .pub-venue{font-size:.88em}.related-box{margin-top:.5rem}.related-box>div{margin-top:.3rem}.prose .related-list{list-style:none;margin:0;padding-left:1.05rem}.prose .related-list>li{position:relative;margin:0 0 1rem}.prose .related-list>li:last-child{margin-bottom:0}.prose .related-list>li::before{content:"\2192";position:absolute;left:calc(-.58rem - 6px);color:var(--muted);font-family:var(--font-serif)}.thesis-list .related-list>li{padding-left:.6rem}.related-talk-title{margin:0;font-weight:700}.related-talk-desc{margin:.15rem 0 0;color:var(--fg-soft)}.resource-list:not(.compact) .pub-abstract{border:1px solid var(--border);border-radius:var(--radius);padding:.5rem .8rem}.resource-list:not(.compact) .resource-item{background-image:none}.resource-list:not(.compact) .resource-item h3{margin-bottom:.55rem}.resource-list:not(.compact) .resource-item .pub-links{margin-top:.55rem}.resource-list:not(.compact) .resource-item>div{margin-top:.6rem}.resource-list:not(.compact) .resource-item .pub-abstract{margin-top:.8rem}.resource-list{list-style:none;margin:.75rem 0 0;padding:0}.resource-item{padding:.85rem 0;background-image:var(--dot-rule);background-size:var(--dot-rule-size);background-repeat:repeat-x;background-position:0 0}.resource-item:first-child{background-image:none}.resource-item>:first-child{margin-top:0}.resource-item h3{font-size:1.3rem;line-height:1.25;margin:0 0 .4rem}.resource-item h4{font-size:1.02rem;line-height:1.25;margin:0 0 .2rem}.resource-item>div>:last-child,.related>:last-child{margin-bottom:0}.related{margin-top:.8rem;color:var(--fg-soft)}.related ul,.related ol{margin-top:.35rem}.teach-group{margin-top:2rem}.teach-list{list-style:none;margin:.5rem 0 0;padding:0}.teach-list li{display:flex;justify-content:space-between;gap:1rem;padding:.45rem 0;background-image:var(--dot-rule);background-size:var(--dot-rule-size);background-repeat:repeat-x;background-position:0 100%}.teach-term{font-family:var(--font-sans);font-size:.82rem;color:var(--muted);white-space:nowrap}.report-group{margin-top:1.5rem}.report-group h3{font-size:1.35rem;margin-bottom:.35rem}.resource-list.compact .resource-item{padding:.7rem 0 .47rem}.resource-list.compact .resource-item>div{font-size:.85rem}.page-foot{margin-top:3rem;font-family:var(--font-sans);font-size:.8rem;color:var(--muted)}.page-foot p{margin:.2rem 0}.page-foot a{color:var(--muted)}.page-foot a:hover{color:var(--accent)}@media(max-width:50rem){.home-portrait{float:none;width:100%;margin:0 0 1.4rem}.layout{flex-direction:column}.sidebar{--sidebar-pad-x:var(--pad);flex:none;position:static;height:auto;width:100%;border-right:0;border-bottom:1px solid var(--rule);padding:.8rem var(--sidebar-pad-x)}.sidebar-inner{flex-direction:row;flex-wrap:wrap;align-items:center;gap:.45rem 1.25rem;height:auto}.brand{flex:1 1 100%;flex-direction:row;align-items:center;justify-content:flex-start;gap:.55rem}.brand-text{text-align:left}.brand-logo{width:calc(2.3rem + 10px);height:calc(2.3rem + 10px)}.nav ul{display:flex;flex-wrap:wrap;gap:.1rem 1rem}.nav a{padding:.05rem 0;line-height:1.3}.nav .subnav,.nav .pagenav{display:none}.nav>ul>li>a.active:has(+.subnav)::after,.pagenav>li>a:has(+.subnav)::after,.subnav li:not(:last-child) a::after{content:none}.sidebar-foot{margin-top:0;flex-direction:row;flex-wrap:wrap;gap:.5rem 1rem;font-size:.78rem}.content{padding:2rem 1.5rem 3rem}}@media(max-width:30rem){body{font-size:1.05rem}:root{--pad:1.25rem}.prose h1{font-size:2.7rem}.entry-summary-row{grid-template-columns:minmax(0,1fr)5.5rem;gap:.75rem}.entry-thumb{width:5.5rem}}